#1 07-01-2011 06:58

Den_spb
From: Ленинград
Registered: 23-11-2008
Posts: 941
Website

Универсальные поворотники [CLEO4/SA/REL]

Скрипт даёт возможность использования указателей поворота на автомобилях и мотоциклах.
Источники света создаются рядом с передними и задними фарами, координаты которых скрипт определяет автоматически. Поэтому скрипт можно использовать с любыми моделями транспорта - при этом не требуется устанавливать никакие дополнительные файлы или прописывать настройки. Если у автомобиля имеется прицеп, то поворотники будут действовать и на нём. При движении на большой скорости источники света не будут дёргаться или отставать от машины.
В версии 1.1 поворотники продолжают мигать, если игрок вышел из машины - но до тех пор,
пока он не сядет в другую машину.
В версии 2.0 поворотники работают не только на автомобиле игрока, но и на машинах, управляемых ботами.
В версии 2.1 устранены недоработки предыдущих версий:
- исправлена уязвимость, из-за которой в определённых случаях была вероятность вылета игры со скриптом версии 2.0;
- теперь поворотники не работают на пустых машинах (исключение - машина, которую вёл игрок), а также на "приаттаченных" к чему-либо машинах;
- уменьшена "проникающая способность" короны (теперь корона не просвечивает сквозь водителя мотоцикла или сквозь весь корпус машины);
- уменьшена инертность короны (последовательные вспышки не сливаются в одну, что иногда могло наблюдаться раньше);
- теперь скрипт работает во время миссий.
В версии 2.2 боты включают поворотники не только при поворотах на перекрестках, но и при перестроениях на шоссе.

Управление:
Z - левые поворотники, C - правые поворотники, X - аварийная сигнализация.
Повторное нажатие этих клавиш выключает выбранные режимы (в v.2. отключение кнопкой Shift).

Установка:
1.Скачать и установить библиотеку КЛЕО 4 с сайта cleo.sannybuilder.com
2.Поместить файл turn_indicators.cs (имеется в архиве, присоединённом к сообщению) в папку cleo.

Скрины:
4d5b62d48c21t.jpg e8c01d21b853t.jpg

Last edited by Den_spb (20-03-2016 12:56)

Offline

#2 07-01-2011 07:30

Gyr
From: Серпухов
Registered: 03-02-2009
Posts: 246
Website

Re: Универсальные поворотники [CLEO4/SA/REL]

Не работает. Вылетает при посадке в авто. (Оригинальный SA; stripped MAIN; не SAMP)

Last edited by Gyr (07-01-2011 07:36)


Специально для тех, кто не умеет читать по английски. Мой ник читается как "ГИР"!!!
Народная мудрость:
Прежде чем задавать вопросы,ПОЧИТАЙ СПРАВКУ!!!!

Offline

#3 07-01-2011 07:39

Den_spb
From: Ленинград
Registered: 23-11-2008
Posts: 941
Website

Re: Универсальные поворотники [CLEO4/SA/REL]

Проверь версию игры. Она должна быть 1.0 us. Установи самую свежую версию КЛЕО4 - 4.1.1.30. Если эти пункты выполнены, то не знаю что ещё посоветовать - у меня пока вылетов не было.
П.С. В scmlog ещё можно заглянуть.

Last edited by Den_spb (07-01-2011 07:41)

Offline

#4 07-01-2011 07:47

Gyr
From: Серпухов
Registered: 03-02-2009
Posts: 246
Website

Re: Универсальные поворотники [CLEO4/SA/REL]

Ты скорее всего прав. У меня v1.01. Ставить 1.0 не буду, монитор не позволяет.
P.S.: Постарайся оптимизировать этот скрипт под 1.01.


Специально для тех, кто не умеет читать по английски. Мой ник читается как "ГИР"!!!
Народная мудрость:
Прежде чем задавать вопросы,ПОЧИТАЙ СПРАВКУ!!!!

Offline

#5 07-01-2011 07:53

Den_spb
From: Ленинград
Registered: 23-11-2008
Posts: 941
Website

Re: Универсальные поворотники [CLEO4/SA/REL]

Оптимизировать можно, но необходимы соответствующие адреса из 1.01

Offline

#6 07-01-2011 11:03

Gyr
From: Серпухов
Registered: 03-02-2009
Posts: 246
Website

Re: Универсальные поворотники [CLEO4/SA/REL]

@Den_spb - Нет, я тебя не заставляю, просто было-бы прикольно и для 1.01 сделать.


Специально для тех, кто не умеет читать по английски. Мой ник читается как "ГИР"!!!
Народная мудрость:
Прежде чем задавать вопросы,ПОЧИТАЙ СПРАВКУ!!!!

Offline

#7 07-01-2011 12:21

~AquaZ~
Registered: 01-03-2010
Posts: 726

Re: Универсальные поворотники [CLEO4/SA/REL]

Дэн, ты реально крут! smile Супер![---]Эээ... Всё классно, но для мотоциклов лучше пока отключить. Как сделать ненавязчивую надпись? Это достаёт...

0ACD: show_text_highpriority "Use Z to switch left turn indicators, C - right, X - emergency indicators." time 3000

Last edited by ~AquaZ~ (07-01-2011 13:00)

Offline

#8 07-01-2011 15:37

Seemann
Registered: 07-08-2006
Posts: 2,154

Re: Универсальные поворотники [CLEO4/SA/REL]

Отлично clap

Offline

#9 07-01-2011 16:27

Sergey81
Registered: 19-12-2008
Posts: 654

Re: Универсальные поворотники [CLEO4/SA/REL]

+1:D
Заменил cleo4 опкоды аналогичными конструкциями в клео3, не вылетает, но и не работает тоже.
Попробовал с New Opcode Project, который с папкой CLEO_TEXT кстати не запускает игру вобще, там вылет на 0AA5: call 22@ num_params 0 pop 0
Опкоды ессесно подставлял правильные(ну, вроде как:D).
Вобще можно было бы вместо клео 4 ставить нужный опкод отдельным плагином, глядишь и глюков было бы меньше, и совместимость была бы лучше.

Offline

#10 07-01-2011 17:53

Den_spb
From: Ленинград
Registered: 23-11-2008
Posts: 941
Website

Re: Универсальные поворотники [CLEO4/SA/REL]

Спасибо за отзывы. В свою очередь благодарю listener-а и Alien-а за информацию по вычислению координат думмисов. Мне оставалось только подумать, как прицепить корону к машине, и собрать всё в единый код.

Эээ... Всё классно, но для мотоциклов лучше пока отключить.

Просто надо заменить:

if and
    31@ <> 0 // автомобиль или самолёт (самолёты отсечены в начале кода проверкой 84C8)
    31@ <> 9 // мотоцикл
then
    continue
end

на

if
    31@ <> 0 // автомобиль или самолёт (самолёты отсечены в начале кода проверкой 84C8)
then
    continue
end

там вылет на 0AA5: call 22@ num_params 0 pop 0

Надо проверить правильность замены опкодов 0AC6 и 0AC7.

Вобще можно было бы вместо клео 4 ставить нужный опкод отдельным плагином, глядишь и глюков было бы меньше, и совместимость была бы лучше.

У меня КЛЕО4 работает отлично (чего я не мог сказать о New Opcode Project). Советую всем переходить на КЛЕО4, а не пытаться переделывать новые скрипты под КЛЕО3.

Last edited by Den_spb (07-01-2011 17:54)

Offline

#11 07-01-2011 18:40

Sergey81
Registered: 19-12-2008
Posts: 654

Re: Универсальные поворотники [CLEO4/SA/REL]

@Den_spb - у меня игра с cleo4 запускается, если не использовать этот скрипт:

{$CLEO .cs}
0000: NOP 
0A95: enable_thread_saving
0AA2: 0@ = load_library "radio.dll" // IF and SET 
0AA2: 1@ = load_library "StreamMemFix.dll" // IF and SET
wait 1000 
0AA3: free_library 0@
0AA3: free_library 1@
0A93: end_custom_thread

а если использовать - краш. Реалтайм карта так и не починена, а без мыши пользы от неё никакой. Missiles не работают.
Выкидывать часть скриптов чтоб использовать новые как-то не очень хочется, как и ломать то, что работает. + неизвестно какие глюки/вылеты ещё в процессе проявятся. А так с удовольствием бы перешёл smile

Вместо опкодов я использую:

0A9F: 22@ = current_thread_pointer
22@ += 0x10
0A8D: 22@ = read_memory 22@ size 4 virtual_protect 0
22@ -= @Attach_corona_to_car

и

0A9F: RwV3D = current_thread_pointer
RwV3D += n

n - смещение до 7@ и 13@. Максимум чего удалось добиться - мигающей короны в центре машины.
Я подозреваю что здесь где то и есть ошибка, по моим подсчётам прибавлять надо 0x1C0 и 0x340, но так не работает.

Offline

#12 07-01-2011 19:30

Den_spb
From: Ленинград
Registered: 23-11-2008
Posts: 941
Website

Re: Универсальные поворотники [CLEO4/SA/REL]

ломать то, что работает. + неизвестно какие глюки/вылеты ещё в процессе проявятся. А так с удовольствием бы перешёл

Переделать старые скрипты под КЛЕО4 нужно один раз, а новые скрипты под КЛЕО3 придётся переделывать постоянно (некоторые новые скрипты конвертировать будет очень сложно, плагин SANO - плохой вариант, т.к. глючный)

Максимум чего удалось добиться - мигающей короны в центре машины.

Тут 2 варианта: либо неправильно передаются указатели на переменные 7@ и 13@, либо в переменных 7@-12@ на самом деле нулевые значения (чего тоже не должно быть). Надо проверить значения переменных 7@-12@ (вывести на экран) и из этого делать выводы.

Last edited by Den_spb (07-01-2011 19:32)

Offline

#13 07-01-2011 19:58

Sergey81
Registered: 19-12-2008
Posts: 654

Re: Универсальные поворотники [CLEO4/SA/REL]

@Den_spb - это то понятно, но в клео 4 не работает 0AA5: call 0x7469A0 num_params 0 pop 0  //mouse(а это значит опять нужно использовать режим совместимости с win98),
как это переписать можно я не представляю. Также не представляю как загрузить radio.dll и сделать missile.cs работающим.
SANO не использую, ибо он крашит игру из за папки cleo_text, там просто для теста он был.

********************************************
 thread turn_in
 Local variables dump:
 1281 0 226689928 0 1 226689928 0 1059716484 1075894591 -1117015093 1058067641 -1072171403 1035799665 0 0 0
 0 0 0 194230292 0 0 194250541 0 0 0 226690092 0 0 2 0 1
********************************************

Корона в центре создаётся если написать

0A9F: RwV3D = current_thread_pointer
RwV3D += 0x10
RwV3D += 0x1C0

и

0A9F: RwV3D = current_thread_pointer
RwV3D += 0x10
RwV3D += 0x340

0b2e48257cc83c207d822b8418bec7fc.jpeg 
Так дамп получается такой:

********************************************
 thread turn_in
 Local variables dump:
 1 0 226349328 0 3 226349328 0 1059716484 1075894591 -1117015093 1058067641 -1072171403 1035799665 0 0 0
 0 0 0 193902692 0 2 193922812 0 0 193902212 226349496 1 2 2 0 1
********************************************

UPD.
4927f4de31ad0ba16069cfd1daa59d2f.jpeg 
Получилось вроде, через 0AB1: call_scm_func @__VarToOffset 1 varnumber 7[13] result RwV3D
Вот cleo3-совместимый код, если надо кому - http://pastebin.com/R9PJ2iEJ
-------------------------
Кстати, ещё реквест, сделать(как опцию например) включение-отключение в стиле mafia, т.е. зажимаешь на пару секунд клавишу влево - вкл. левые повортники, отпускаешь - выключаются и т.п.

Last edited by Sergey81 (07-01-2011 22:05)

Offline

#14 07-01-2011 23:52

Den_spb
From: Ленинград
Registered: 23-11-2008
Posts: 941
Website

Re: Универсальные поворотники [CLEO4/SA/REL]

Немного переделал скрипт - теперь можно переключать поворотники на другой режим, не отключая предыдущий режим. Архив в первом сообщении обновлён.

Offline

#15 08-01-2011 00:42

Sergey81
Registered: 19-12-2008
Posts: 654

Re: Универсальные поворотники [CLEO4/SA/REL]

@Den_spb - А как кстати сделать задержку небольшую? Я прописал так:

if and
0AB0:  key_pressed 65 // A
8AB0: not key_pressed 68 // D
then 
   MODE = LEFT           
end 

if and
0AB0:  key_pressed 68 // D
8AB0: not key_pressed 65 // A
then  
   MODE = RIGHT           
end

if and
0AB0:  key_pressed 68 // D
0AB0:  key_pressed 65 // A
then 
   MODE = TOGETHER           
end

if and
   MODE <> 0
8AB0: not key_pressed 65 // A
8AB0: not key_pressed 68 // D
then  
   MODE = 0          
end

работает, но куда ни пытаюсь вставить wait, поворотники перестают отображаться.

Offline

#16 08-01-2011 01:10

Den_spb
From: Ленинград
Registered: 23-11-2008
Posts: 941
Website

Re: Универсальные поворотники [CLEO4/SA/REL]

Корона должна создаваться через небольшие промежутки времени, иначе она будет невидна. Поэтому второй wait в цикл вставлять нельзя, а нужно использовать таймер (33@).

Offline

#17 08-01-2011 07:30

Alien
Registered: 12-10-2008
Posts: 564

Re: Универсальные поворотники [CLEO4/SA/REL]

@Den_spb - как всегда на высоте.:^

Den_spb wrote:

В свою очередь благодарю listener-а и Alien-а за информацию по вычислению координат думмисов.

Меня-то в каком месте?:crazy:

Sergey81 wrote:

@Den_spb - у меня игра с cleo4 запускается, если не использовать этот скрипт:

{$CLEO .cs}
0000: NOP 
0A95: enable_thread_saving
0AA2: 0@ = load_library "radio.dll" // IF and SET 
0AA2: 1@ = load_library "StreamMemFix.dll" // IF and SET
wait 1000 
0AA3: free_library 0@
0AA3: free_library 1@
0A93: end_custom_thread

0A95 использован не по назначению. По хорошему radio.dll и StreamMemFix.dll надо переименовать в cleo или asi. Тогда они будут загружаться когда надо.

Offline

#18 08-01-2011 12:44

Sergey81
Registered: 19-12-2008
Posts: 654

Re: Универсальные поворотники [CLEO4/SA/REL]

@Alien - но в клео 3 то работает. А в .asi и .cleo изначально всё и было, с ними у меня игра также не запускается, краш при старте(см. например аналогичную проблему тут). Поэтому и загружаю через клео. Я проверил, фикс работает(в том смысле, если убрать загрузку radio.dll из скрипта), radio.cleo сейчас тоже получилось запустить, что странно, ибо оно не работало когда я его только установил. Ну, м.б. одной проблемой меньше, а остальные пока никуда не делись smile
Так то багов не так уж и много, немного улучшить совместимость со старыми скриптами, причём какими бы они не были, и будет замечательно.
PS. А 0A95 используется чтоб не грузить длл-ки по нескольку раз. Если его убрать, они будут грузиться при загрузке каждого сейва, насколько я понимаю. Или нет?

Last edited by Sergey81 (08-01-2011 13:17)

Offline

#19 08-01-2011 14:26

Den_spb
From: Ленинград
Registered: 23-11-2008
Posts: 941
Website

Re: Универсальные поворотники [CLEO4/SA/REL]

Alien wrote:

Меня-то в каком месте?

За этот  примерчик: http://sannybuilder.com/forums/viewtopi … 6933#p6933

Offline

#20 08-01-2011 18:38

Sergey81
Registered: 19-12-2008
Posts: 654

Re: Универсальные поворотники [CLEO4/SA/REL]

Den_spb wrote:

Корона должна создаваться через небольшие промежутки времени, иначе она будет невидна. Поэтому второй wait в цикл вставлять нельзя, а нужно использовать таймер (33@).

А где именно, при проверке клавиши или ещё как? Может запостишь примерчик, а то не выходит у меня.

Offline

#21 08-01-2011 21:43

Den_spb
From: Ленинград
Registered: 23-11-2008
Posts: 941
Website

Re: Универсальные поворотники [CLEO4/SA/REL]

Я не понял, зачем понадобилась задержка. А с таймером работать просто:

33@ = 0
while true
    wait 0
    if
        33@ > 1000
    then
        // какие-либо команды (начнут выполняться через 1 секунду)
    end
end

Offline

#22 08-01-2011 22:26

Sergey81
Registered: 19-12-2008
Posts: 654

Re: Универсальные поворотники [CLEO4/SA/REL]

@Den_spb - ну я выше писал, что поставил включение поворотников на клавиши A и D. Мне надо, чтоб когда A нажата - прошла например секунда, а потом поворотники начинали работать. Т.е. как то так, но чтоб работало:D

if and
0AB0:  key_pressed 65 // A
8AB0: not key_pressed 68 // D
then 
*здесь задержка*
           MODE = LEFT // тут поворотники включаются
end

Offline

#23 09-01-2011 15:21

Den_spb
From: Ленинград
Registered: 23-11-2008
Posts: 941
Website

Re: Универсальные поворотники [CLEO4/SA/REL]

if and
   0AB0:  key_pressed 65 // A
   8AB0: not key_pressed 68 // D
then
   33@ = -2000
end
if and
   33@ > -1000
   33@ < 0
then
   MODE = LEFT
   33@ = 0
end

Last edited by Den_spb (09-01-2011 15:24)

Offline

#24 09-01-2011 17:29

Sergey81
Registered: 19-12-2008
Posts: 654

Re: Универсальные поворотники [CLEO4/SA/REL]

@Den_spb - Спасибо, всё получилось.

if and
33@ >= 0
   0AB0:  key_pressed 65 // A
   8AB0: not key_pressed 68 // D
then
   33@ = -2000
end
if and
   33@ > -1500
   33@ < 0
then
   MODE = LEFT
   33@ = 0
end
             
if and
33@ >= -2000
0AB0:  key_pressed 68 // D
8AB0: not key_pressed 65 // A
then
   33@ = -4000
end
if and
   33@ > -3500
   33@ < -2000
then
   MODE = RIGHT
   33@ = 0
end

if and
   MODE <> 0
8AB0: not key_pressed 65 // A
8AB0: not key_pressed 68 // D
then  
   MODE = 0         
end   

if and
MODE == LEFT
8AB0: not key_pressed 65 // A
   0AB0:  key_pressed 68 // D
then  
   MODE = 0     
end

if and
MODE == RIGHT
   0AB0:  key_pressed 65 // A
   8AB0: not key_pressed 68 // D
then  
   MODE = 0    
end   

if and
0AB0:  key_pressed 68 // D
0AB0:  key_pressed 65 // A
then 
   MODE = TOGETHER           
end

http://pastebin.com/pBaFLTMU - полный код для клео 3.
Поротники работают как в мафии, по зажатию клавиши.

Offline

#25 12-01-2011 00:10

Den_spb
From: Ленинград
Registered: 23-11-2008
Posts: 941
Website

Re: Универсальные поворотники [CLEO4/SA/REL]

Скрипт обновлён до версии 1.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 RwV3D intensity 255 blue 0 green 128 red 255 to_vehicle_struct 20@ unical_number 26@

RwV3D - указатель на вектор, показывающий положение короны в системе координат машины;
20@ - адрес структуры машины;
26@ - уникальный номер. Если 2 короны имеют одинаковый номер, то та корона, которая была создана раньше, будет удалена. Поэтому все короны в игре должны иметь разные номера. Смысл остальных параметров думаю ясен (неподписанные параметры можно не менять).

Offline

Board footer

Powered by FluxBB