Перейти к содержанию

Обсуждение и публикация Cleo-скриптов


Рекомендуемые сообщения

Но это пока тоже не решение. Так как в трансфендере мы не сможем оформить эти покраски.

Зачем их ставить именно в трансфендере? Без переписывания кода в main этого не сделать. При изменении main надо будет начинать новую игру, старые сохранения не будут подгружаться. Кому это надо? 

Ссылка на комментарий
Поделиться на другие сайты

Ну это тоже самое, что добавлять новые авто без замены старых. Старые сохранения будут работать, а вот сохранения уже с увеличенным лимитом на базовой сане не загрузятся. А трансфендер нужен для сохранения игровой атмосферы, т.е. не нарушая порядок. Надо затюнить едешь в гараж. Как PimpMyCar от Джуниора например. Правда въезда в гараж как такового нет. Но сделано с умом, а не так, что тыкнули кнопку у нас что то добавилось или как в нашем случае машина взяла и чудодейственным методом перекрасилась по среди улицы.

Ссылка на комментарий
Поделиться на другие сайты

Приветствую! Подскажи, пожалуйста, как в скрипте "Прицепы v3" можно убрать всплывающую информацию об авторстве при входе в игру? И ещё, авто с прицепом не реагирует на красный свет. Останавливается только если перед ним стоят другие машины.  

 

 

Ссылка на комментарий
Поделиться на другие сайты

Возможно ли сделать так, чтобы колесо помимо своей оси еще и поворачивалось вместе с деталью? На скрине повернуто и колесо и деталь, но каждое по своей оси.

 47209334861_3ef7305019.jpg

Ссылка на комментарий
Поделиться на другие сайты

есть скрипт который увеличивает грузоподъёмность вертолетов? А то трудно что-то поднять...

     А может просто поправить handling.cfg и увеличить мощность двигателя вертушки?

Ссылка на комментарий
Поделиться на другие сайты

ART Tour, цитирую справку SB

 

 

Базовый пример создания CLEO-скрипта. Смысл его заключается в выводе сообщения при запуске игры. Для этого используется доп. скрипт ShowTextBox, который показывает текстбокс на экране. Данный пример может служит основой для вывода тестовых сообщений в любом моде.

 

Скрипт срабатывает однократно при запуске игры. После сохранения-загрузки сообщение появляться не будет (благодаря опкоду 0A95). 

 

[spoiler=исходник]

{$CLEO}

// this opcodes is used to make this thread to be executed once
0A95: enable_thread_saving

// calculates absolute address of the text (opcode 0900) in game memory
0A9F: 0@ = current_thread_pointer
0@ += 0x10
0A8D: 0@ = read_memory 0@ size 4 virtual_protect 0
0@ -= @TEXT_PTR  // as all offsets are local (with negative values)

// skips 0900 and datatype bytes, 0@ points directly to the text
0@ += 4

// call ShowTextBox script
0A92: "ShowTextBox.s" 0@
0A93: end_custom_thread      

// custom text
:TEXT_PTR
0900: "if you see this message, CLEO 3 works normally!"

// just a null-terminator
0000: NOP 

 

 

Ссылка на комментарий
Поделиться на другие сайты

Подскажи, пожалуйста, как в скрипте "Прицепы v3" можно убрать всплывающую информацию об авторстве при входе в игру?

Что сильно мешает? 

Надо учить скриптинг.  :troll:

 

Закомментируй эти строчки:

0AF4: 1@v = read_string_from_ini_file "CLEO\PRIZEP1.INI" section "0" key "SCRIPT" 
0ACA: show_text_box 1@v

и компилируй скрипт.

Ссылка на комментарий
Поделиться на другие сайты

не работает.

скинь вертушку и скрипт на магнит. поглядим

     И ни кто не подскажет где искать исходник кода на работу стандартного комбайна? Интересуют именно детали misc а и b, и координата точки, откуда мясо вываливается, в том случае, когда давим людей.

Изменено пользователем Constantines
Ссылка на комментарий
Поделиться на другие сайты

Что сильно мешает? 

Надо учить скриптинг.  :troll:

 

Закомментируй эти строчки:

0AF4: 1@v = read_string_from_ini_file "CLEO\PRIZEP1.INI" section "0" key "SCRIPT" 
0ACA: show_text_box 1@v

и компилируй скрипт.

Спасибо за ответ! Если честно, да. Я очень уважаю твой труд, просто когда заходишь в игру такие сообщения немного мешают атмосфере. Появляется "пунктик", что игра состоит из модов. А хочется ощущать, якобы так было задумано изначально, как само собой разумеющееся) 

 

Я просто удалил строчку "script=prizep3/kenking" из "prizep1.ini". 

Ссылка на комментарий
Поделиться на другие сайты

И ни кто не подскажет где искать исходник кода на работу стандартного комбайна? Интересуют именно детали misc а и b, и координата точки, откуда мясо вываливается, в том случае, когда давим людей.

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

.text:006A9680 ; void __thiscall CAutomobile::ProcessHarvester(CAutomobile *this)
Ссылка на комментарий
Поделиться на другие сайты

     По поводу вертушки. В общем покопался в хандлинге и попробовал увеличить ускорение через скрипт, но безрезультатно. А сам код, который в архиве, всего лишь добавляет магнит на вертолет. Но, думаю, возможно написать скрипт, который будет уменьшать вес автомобиля, который в данный момент прицеплен к вертолету, т.е. временное изменение handling.cfg. 

     Кстати доделал каток. Не пришлось изобретать велосипед) Как оказалось самый простой вариант адаптировать под АПП v.3.2. Правда туториалов на такую тему не встретил, но методом тыка и экспериментов все получилось как надо. 

Изменено пользователем Constantines
Ссылка на комментарий
Поделиться на другие сайты

Я кстати думал про изменение массы. В принципе ничего сложного. У меня есть нужный кусок скрипта, который меняет параметр подвески. Нужно будет только вставить адрес массы авто. Сложнее с условием для проверки примагничевания. Есть ли стандартная проверка?

 

Поменял массу на 100 кг - пофиг, ничего не меняется.

Изменено пользователем Dimoman_93
Ссылка на комментарий
Поделиться на другие сайты

Я кстати думал про изменение массы. В принципе ничего сложного. У меня есть нужный кусок скрипта, который меняет параметр подвески. Нужно будет только вставить адрес массы авто. Сложнее с условием для проверки примагничевания. Есть ли стандартная проверка?

 

Поменял массу на 100 кг - пофиг, ничего не меняется.

     Я на firetruck'e проверял. Пока масса у него стандартная - я не мог его от земли оторвать. Как поменял на значения какого-то байка - поднял с легкостью. И еще менял не один параметр, а два: fMass и fTurnMass. Скрин удалил походу. 

     И еще можно попробовать опкод: 07BB: set_heli 1@ horizontal_thrust_power 10 (подобие нитро для вертолетов), но думаю тоже не поднимет, мои эксперименты с ускорением ни к чему ни привели. 

0685: object 1@ attached - Объект прикреплен?;

01F3: Car 1@ airborne - Машина 1@ в воздухе;

09CB: vehicle 1@ colliding_with_vehicle 2@ - Машина 1@ прикасается к машине 2@

0686: car 1@ attached - Машина 1@ присоединена к чему-то (думаю самый подходящий, т.к. магнит это что-то :smile: )

Ссылка на комментарий
Поделиться на другие сайты

     Я на firetruck'e проверял. Пока масса у него стандартная - я не мог его от земли оторвать. Как поменял на значения какого-то байка - поднял с легкостью. И еще менял не один параметр, а два: fMass и fTurnMass. Скрин удалил походу. 

Тоже ничего не меняется, странно.

Ссылка на комментарий
Поделиться на другие сайты

Массу той машины меняешь, которую поднять хочешь?

Поменял в настройках FIRETRUK первые 2 параметра (fMass и fTurnMass), выставил 500 и 2000. 

А с изменением хандлинга в реальном времени пока какие-то проблемы. Как пытаюсь выставить настройки из файла по нажатию кнопки получаю вылет игры. Но без проблем записывает в файл текущие настройки fMass и fTurnMass.

[spoiler=Скрины]http://www.imageup.ru/img264/3303984/gallery3.jpg

http://www.imageup.ru/img264/3303985/gallery4.jpg

http://www.imageup.ru/img264/3303986/gallery5.jpg

 

Изменено пользователем Constantines
Ссылка на комментарий
Поделиться на другие сайты

Массу той машины меняешь, которую поднять хочешь?

Поменял в настройках FIRETRUK первые 2 параметра (fMass и fTurnMass), выставил 500 и 2000. 

А с изменением хандлинга в реальном времени пока какие-то проблемы. Как пытаюсь выставить настройки из файла по нажатию кнопки получаю вылет игры. Но без проблем записывает в файл текущие настройки fMass и fTurnMass.

Я сделал изменения на клавишу для любой машины. Скрипт записывал начальные значения, и значения после изменения скриптом. Все работает. Но в итоге фигня...

//-------------MAIN---------------
0000: NOP 

:NONAME_2
wait 100 
if 
   Player.Defined($PLAYER_CHAR)
else_jump @NONAME_2
jump @NONAME_3

:NONAME_3
wait 100 
if and
Player.Defined($PLAYER_CHAR) 
Actor.Driving($PLAYER_ACTOR)
else_jump @NONAME_2 
jump @NONAME_4

:NONAME_4
wait 50
if and
0AB0: key_pressed 36
Actor.Driving($PLAYER_ACTOR)
then 
8@ = Actor.CurrentCar($PLAYER_ACTOR)
0A97: 20@ = car 8@ struct
0A97: 30@ = car 8@ struct
20@ += 0x384
30@ += 0x384
0A8D: 20@ = read_memory 20@ size 4 virtual_protect 0
0A8D: 30@ = read_memory 30@ size 4 virtual_protect 0
20@ += 0x4
30@ += 0xC
0A8D: 21@ = read_memory 20@ size 4 virtual_protect 0
0A8D: 31@ = read_memory 30@ size 4 virtual_protect 0
0AF3: write_float 21@ to_ini_file "modloader\Add transport\Helicopters\skylift\test.ini" section "test" key "car_mass"
0AF3: write_float 31@ to_ini_file "modloader\Add transport\Helicopters\skylift\test.ini" section "test" key "car_turn_mass"
22@ = 20
32@ = 40
wait 50
0A8C: write_memory 20@ size 4 value 22@ virtual_protect 0
0A8C: write_memory 30@ size 4 value 32@ virtual_protect 0
0A8D: 25@ = read_memory 20@ size 4 virtual_protect 0
0A8D: 33@ = read_memory 30@ size 4 virtual_protect 0
0AF1: write_int 25@ to_ini_file "modloader\Add transport\Helicopters\skylift\test.ini" section "test" key "new_car_mass"
0AF1: write_int 33@ to_ini_file "modloader\Add transport\Helicopters\skylift\test.ini" section "test" key "new_turn_car_mass"
end
jump @NONAME_2
Изменено пользователем Dimoman_93
Ссылка на комментарий
Поделиться на другие сайты

Интересно, а можно делать многоуровневый аттач? Типа машинку к контейнеру, а контейнер с машинкой уже к вертолёту.

Было бы очень прикольно.

Ссылка на комментарий
Поделиться на другие сайты

В данном случае изменения будут касаться той машины, в которой находится игрок - 8@ = Actor.CurrentCar($PLAYER_ACTOR). А тебе надо, чтобы менялась масса у той машины которая примагничена. Да и вообще по логике тут ничего не меняется. Ты жмешь кнопку, скрипт записывает инфу (если игрок за рулем авто) и оттуда же считывает инфу, т.е. ничего не происходит. И еще. Зачем две проверки Player.Defined($PLAYER_CHAR)? И вначале не нужна строка {$CLEO .cs}?

Поправка не заметил, то что меняются переменные 22 и 32, но все равно все как-то странно выглядит для меня)

 

 

 

Интересно, а можно делать многоуровневый аттач? Типа машинку к контейнеру, а контейнер с машинкой уже к вертолёту. 
Было бы очень прикольно. 

 Можно. Есть же скрипты где прицеп, а на прицепе еще авто и прицеп цепляется еще.

Изменено пользователем Constantines
Ссылка на комментарий
Поделиться на другие сайты

В данном случае изменения будут касаться той машины, в которой находится игрок - 8@ = Actor.CurrentCar($PLAYER_ACTOR). А тебе надо, чтобы менялась масса у той машины которая примагничена. Да и вообще по логике тут ничего не меняется. Ты жмешь кнопку, скрипт записывает инфу (если игрок за рулем авто) и оттуда же считывает инфу, т.е. ничего не происходит. И еще. Зачем две проверки Player.Defined($PLAYER_CHAR)?

 

 Можно. Есть же скрипты где прицеп, а на прицепе еще авто и прицеп цепляется еще.

Это я написал чисто для проверки. Сажусь в нужную машину, меняю её настройки, а потом уже примагничиваю к вертолету. Настройки меняются, это сразу видно по управлению.

Ссылка на комментарий
Поделиться на другие сайты

Ну да настройки меняются. Тоже потестил(код ниже). Тебе надо привязку к id авто сделать, т.е. пока игрок в вертолете тогда вес нужных нам моделей меняется на указанное значение. Это без проверки на то что авто прицеплено куда то. 

0441: 1@ = car 2@ model - записать в переменую id машины,  а уже потом получать структуру авто и адрес и менять параметры. Но пока у меня только вылеты.

[spoiler=Код]

{$CLEO .cs}
0000: NOP 

:TEST_1
wait 100 
if and
Player.Defined($PLAYER_CHAR) 
Actor.Driving($PLAYER_ACTOR)
jf @TEST_1 

:TEST_2
wait 50
0@ = Actor.CurrentCar($PLAYER_ACTOR)
if
0AB0: key_pressed 48 // 0
then 
0A97: 1@ = car 0@ struct
1@ += 0x384
0A8D: 2@ = read_memory 1@ size 4 virtual_protect 0
0A8D: 3@ = read_memory 1@ size 4 virtual_protect 0
0A8D: 9@ = read_memory 1@ size 4 virtual_protect 0
2@ += 0x4
3@ += 0xC
9@ += 0x28
0A8D: 4@ = read_memory 2@ size 4 virtual_protect 0
0A8D: 5@ = read_memory 3@ size 4 virtual_protect 0
0A8D: 8@ = read_memory 9@ size 4 virtual_protect 0
0AF3: write_int 4@ to_ini_file "cleo\test.ini" section "test" key "car_mass"
0AF3: write_int 5@ to_ini_file "cleo\test.ini" section "test" key "car_turn_mass"
0AF3: write_int 8@ to_ini_file "cleo\test.ini" section "test" key "car_Traction_Multiplier"
end

if
0AB0: key_pressed 49 // 1
then
0A97: 1@ = car 0@ struct
1@ += 0x384
0A8D: 2@ = read_memory 1@ size 4 virtual_protect 0
0A8D: 3@ = read_memory 1@ size 4 virtual_protect 0
0A8D: 9@ = read_memory 1@ size 4 virtual_protect 0
2@ += 0x4
3@ += 0xC
9@ += 0x28
0A8D: 4@ = read_memory 2@ size 4 virtual_protect 0
0A8D: 5@ = read_memory 3@ size 4 virtual_protect 0
0A8D: 8@ = read_memory 9@ size 4 virtual_protect 0 
4@ = 13000.0
5@ = 39000.0
8@ = 0.25
0A8C: write_memory 2@ size 4 value 4@ virtual_protect 0
0A8C: write_memory 3@ size 4 value 5@ virtual_protect 0
0A8C: write_memory 9@ size 4 value 8@ virtual_protect 0
end
jump @TEST_1 

 

 

 А вот при таком порядке считывает данные у авто конкретной модели, в моем случае Elegy:

[spoiler=Код]

{$CLEO .cs}
0000:

:CARSTRUCT
wait 0
1@ = 562
if
0AB0: key_pressed 57 // ïðîâåðêà íà íàæàòèå êíîïêè "9"
then
0AA7: call_function 0x00403DA0{_getModelPtr} num_params 1 pop 1 iId 1@ pclInfo 12@
    12@ += 0x4A
    0A8D: 11@ = read_memory 12@ size 2 virtual_protect 0    

//       0085: 11@ = 10@
//       
//       
    11@ *= 0xE0
    11@ += 0xC2B9DC 
    
    0A8E: 13@ = 11@ + 0x4 // int
    0A8D: 14@ = read_memory 13@ size 4 virtual_protect 0
    0AF3: write_int 14@ = get_int_from_ini_file "cleo\test.ini" section "MAIN" key "Mass"

    0A8E: 15@ = 11@ + 0xC // int
    0A8D: 16@ = read_memory 15@ size 4 virtual_protect 0
    0AF3: write_int 16@ to_ini_file "cleo\test.ini" section "MAIN" key "TurnMass"
    
    0A8E: 17@ = 11@ + 0xB8 // int
    0A8D: 18@ = read_memory 17@ size 4 virtual_protect 0
    0AF3: write_int 18@ to_ini_file "cleo\test.ini" section "MAIN" key "UpperLimit"

    0A8E: 19@ = 11@ + 0xBC // int
    0A8D: 20@ = read_memory 19@ size 4 virtual_protect 0
    0AF3: write_int 20@ to_ini_file "cleo\test.ini" section "MAIN" key "LowerLimit" 
       
end
jump @CARSTRUCT 

 

 

Поэкспериментирую с изменением характеристик. Значит для изменения после последнего end дописываем это:

if
0AB0: key_pressed 48 // 0
then
    14@ = 100.0 
    0A8C: write_memory 13@ size 4 value 14@ virtual_protect 0
end 

 Меняется маса транспортного средства на 100.0. Позже попробую сунуть эту конструкцию в скрипт с вертолетом, и засунуть в цикл, мол пока СЖ летит в вертолете (у меня ID 548), вес указанного транспортного средства будет 100.0. Ну и TurnMass допишу. 

Изменено пользователем Constantines
Ссылка на комментарий
Поделиться на другие сайты

Готово. Проверяй. Только ID вертолета поменяй на свое. Если еще подумать, то можно написать так, чтобы у любого транспорта вес менялся на 100.0, когда игрок в вертолете. 

   Для проверки работы (меняются ли параметры авто?) можешь после записи параметров в память добавить строчки:

0AF3: write_int 14@ = get_int_from_ini_file "cleo\test.ini" section "MAIN" key "Mass"

0AF3: write_int 16@ to_ini_file "cleo\test.ini" section "MAIN" key "TurnMass" 

 

[spoiler=Skylift magnet]

{$CLEO .cs}
0000: NOP 

:NONAME_2
wait 0
if 
   not Actor.Driving($PLAYER_ACTOR)
else_jump @NONAME_2 
0AB5: store_actor $PLAYER_ACTOR closest_vehicle_to 5@ closest_ped_to 7@ 
if 
   not Car.Wrecked(5@)
else_jump @NONAME_2 
00D6: if
   Car.Model(5@) == 548     
004D: jump_if_false @NONAME_2 
else_jump @NONAME_2 
if or
0206: actor $PLAYER_ACTOR near_car 5@ radius 500.0 500.0 500.0 sphere 0 on_foot
0207: actor $PLAYER_ACTOR near_car 5@ radius 500.0 500.0 500.0 sphere 0 in_car 
else_jump @NONAME_2
wait 0 
0788: enable_heli 5@ magnet 1  
Actor.RemoveReferences(7@)
    if
        00DD: actor $PLAYER_ACTOR driving_car_with_model 548
    then
        30@ = 1
    end
    
while 30@ = 1
wait 0
        0AA7: call_function 0x00403DA0{_getModelPtr} num_params 1 pop 1 iId 544 pclInfo 12@ // 544 Id транспорта, у которого надо изменить параметры
        12@ += 0x4A
        0A8D: 11@ = read_memory 12@ size 2 virtual_protect 0    
      
        11@ *= 0xE0
        11@ += 0xC2B9DC 
    
        0A8E: 13@ = 11@ + 0x4 // int
        0A8D: 14@ = read_memory 13@ size 4 virtual_protect 0 // Mass       
        14@ = 100.0 
        0A8C: write_memory 13@ size 4 value 14@ virtual_protect 0

        0A8E: 15@ = 11@ + 0xC // int
        0A8D: 16@ = read_memory 15@ size 4 virtual_protect 0 // TurnMass 
        16@ = 200.0
        0A8C: write_memory 15@ size 4 value 16@ virtual_protect 0       
end
jump @NONAME_2  

 

 

[spoiler=Скрин]http://www.imageup.ru/img264/thumb/gallery73304907.jpg

 

Изменено пользователем Constantines
Ссылка на комментарий
Поделиться на другие сайты

      Всем привет, решил сделать продолжение скриптов про иконки. С подковами проблем не возникло, а вот с фотографиями есть вопрос. Как сделать проверку на то, что объект сфотографирован? pickup.Picked_up($2967) и 0833:   object $2967 photographed не проходят. Иконка с карты не удаляется. Даже когда в опкоде 0833 вместо переменной прописываю ID объекта.  Есть вариант написать проверку, мол когда игрок пешком в указанной точке в указанном радиусе сделал снимок, тогда удаляем маркер. Но так как то замудренно. Есть ли варианты попроще?

      Второй вариант. При условии, что существует пикап, будет создаваться объект рядом с пикапом, и тогда, думаю, будет работать опкод 0833. Но это будет хорошо выглядеть лишь с прозрачным объектом, который не будет виден глазу игрока и не будет мешать игровому процессу. Например объект с ID 3074, именуемый как "d9_runway", он прозрачный (что даже не знаю зачем он вообще в игре) и не имеет коллизии. Жду еще варианты. 

    Как оказалось не совсем он и прозрачный. Но проверка в таком случае работает, иконка удаляется и объект тоже. И как работает опкод 04C5: actor $PLAYER_ACTOR photographed // как проверка "актер фотографирует?" не прошло, значит скорее всего проверяет сфотографирован ли игрок? (но кто его фотографирует?).

 [spoiler=3074]http://www.imageup.ru/img12/thumb/gallery163306091.jpghttp://www.imageup.ru/img12/thumb/obekt3306092.jpg

 

Изменено пользователем Constantines
Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
×
×
  • Создать...