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

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


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

Опубликовано

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

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

  • RESPECT + 1
Опубликовано

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

Опубликовано

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

 

 

Опубликовано

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

 

 

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

 

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

 

исходник

{$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 

 

 

  • RESPECT + 1
Опубликовано

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

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

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

 

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

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

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

  • RESPECT + 1
Опубликовано (изменено)

не работает.

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

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

Изменено пользователем Constantines
  • RESPECT + 1
Опубликовано

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

Надо учить скриптинг.  :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)
  • RESPECT + 1
Опубликовано (изменено)

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

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

Изменено пользователем Constantines
  • RESPECT + 1
Опубликовано (изменено)

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

 

Поменял массу на 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: )

  • RESPECT + 1
Опубликовано

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

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

Опубликовано (изменено)

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

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

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

Скрины 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 машины,  а уже потом получать структуру авто и адрес и менять параметры. Но пока у меня только вылеты.

Код

{$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:

Код

{$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
  • RESPECT + 1
Опубликовано (изменено)

Готово. Проверяй. Только 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" 

 

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  

 

 

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

 

Изменено пользователем Constantines
  • RESPECT + 2
Опубликовано (изменено)

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

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

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

 3074 http://www.imageup.ru/img12/thumb/gallery163306091.jpghttp://www.imageup.ru/img12/thumb/obekt3306092.jpg

 

Изменено пользователем Constantines

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйте новый аккаунт в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
×
×
  • Создать...