GTA Builder Форум

GTA Vice City => Общие вопросы => Тема начата: SpitFire от Февраль 21, 2016, 05:45:14 pm

Название: Помощь с CLEO
Отправлено: SpitFire от Февраль 21, 2016, 05:45:14 pm
Я делаю мод стрельбы с пассажирского сидения для gta3 и vice city и мне нужно изменить Assembler code через CLEO.
Адрес и Assembler code выглядят так:
gta-vc.exe+1005CE mov [ebx+00000244],00000032
gta-vce.exe+10C6D6 mov [ebx+00000244],00000032

и нужно это заменить на:
gta-vc.exe+1005CE mov [ebx+00000244],00000001
gta-vce.exe+10C6D6 mov [ebx+00000244],00000001
Название: Re: Помощь с CLEO
Отправлено: Sektor от Февраль 21, 2016, 06:40:25 pm
Скиньте точные адреса памяти, в которые вы хотели бы сделать запись. Лучше все скопировать даже с IDA и сюда запостить.
Название: Re: Помощь с CLEO
Отправлено: mfisto от Февраль 21, 2016, 10:04:26 pm
Тебе просто надо записать следующее:

0A8C: write_memory 0x005005D4 size 1 value 1 virtual_protect 1
0A8C: write_memory 0x0050C6DC size 1 value 1 virtual_protect 1
Название: Re: Помощь с CLEO
Отправлено: SpitFire от Февраль 22, 2016, 09:58:40 am
Тебе просто надо записать следующее:

0A8C: write_memory 0x005005D4 size 1 value 1 virtual_protect 1
0A8C: write_memory 0x0050C6DC size 1 value 1 virtual_protect 1

Спасибо! Очень помогли!
Название: Re: Помощь с CLEO
Отправлено: egor230 от Июль 02, 2017, 08:34:43 pm
Здравствуйте, уважаемые господа.
Читая Ваш форум, сильно поражен глубиной Ваших знаний!
Подскажите, пожалуйста, где ошибиться в этом скрипте?
Первый скрипт лифт в небоскрёбе.

{$CLEO .cs}

//-------------MAIN---------------
0000: NOP
:elevator_1
wait 0
if and
0102:   actor $PLAYER_ACTOR stopped_near_point_on_foot -559.85 782.59 22.88 radius 1.0 1.0 1.0 sphere
005EE:   key_pressed 70
jf @elevator_2
wait 100
fade 1 1000
wait 1000
0055: put_player $PLAYER_CHAR at  -555.26 787.57 97.51     
jump @elevator_2
               
:elevator_2
wait 0
if and
0102:   actor $PLAYER_ACTOR stopped_near_point_on_foot -555.26 787.57 97.51  radius 1.0 1.0 1.0 sphere
005EE:   key_pressed 70
jf @elevator_1
wait 100
fade 1 1000
wait 1000
0055: put_player $PLAYER_CHAR at -559.85 782.59 22.88         
jump @elevator_1
Название: Re: Помощь с CLEO
Отправлено: GeniusZ от Июль 03, 2017, 07:18:30 am
Вы неправильно затемняете экран и не ставите задержки, чтобы игрока не телепортировало бесконечно:

...
fade 0 1000
wait 1000
0055: put_player $PLAYER_CHAR at  -555.26 787.57 97.51   
fade 1 1000
wait 1000
...
fade 0 1000
wait 1000
0055: put_player $PLAYER_CHAR at -559.85 782.59 22.88       
fade 1 1000
wait 1000
...
Название: Re: Помощь с CLEO
Отправлено: egor230 от Июль 03, 2017, 09:57:33 am
 
Спасибо большое за Вашу ценную подсказку, признаю свою неопытность, первый раз пишу скрипт. Нужно еще долго учиться и набираться опыта.
В миссии "Прожектор" от киностудия, открывались двери лифта, мы попадали на другой этаж небоскреба… потом туда "обычный" путём весьма сложно попасть. 
К сожалению не знаю каким опкодом открыть двери лифта и как это сделать через скрипт.
В данный момент только начинаю изучать CLEO, чтобы делать скрипты для vice city, мне она очень нравится своей атмосферой.
Сейчас попробую, потом обязательно опишусь об результатах.
Название: Re: Помощь с CLEO
Отправлено: egor230 от Июль 09, 2017, 09:27:56 am
Здравствуйте, всем.
Очень надеюсь на Ваш совет.
Пытаюсь сделать первый скрипт.
Чтобы игрок находясь в лифте банка и при нажатие F, перемещайся в хранилище.
Вылетает при нажатии F.
Помогайте пожалуйста.
{$CLEO .cs}

//-------------MAIN---------------
0000: NOP
wait 0
:elevator_1
wait 0
if
05EE:   key_pressed 70 //VK_...
else_jump @elevator_1
jump @elevator_2

:elevator_2
if
0102:  actor $PLAYER_CHAR stopped_near_point_on_foot -938.11 -351.20 17.80 radius 1.0 1.0 1.0 sphere 0
else_jump @elevator_1
jump @elevator_3

:elevator_3
fade 0 1000
wait 100
0055: put_player $PLAYER_CHAR at -938.91 -351.93 7.23
fade 1 1000
wait 100
jump @elevator_1

Решил сделать так.
При нажатии на f ничего не проходит
 

{$CLEO}
wait 0
while true
    wait 0
    if
      0256:   player $PLAYER_CHAR defined
      then
        continue
     end
    if
     0102:  actor $PLAYER_CHAR stopped_near_point_on_foot -938.11 -351.20 17.80 radius 1.0 1.0 1.0 sphere 0
    then
        continue
    end
    if
        05EE:   key_pressed 70 //VK_...
    then
         0055: put_player $PLAYER_CHAR at -938.91 -351.93 7.23
     end
     end
   
Название: Re: Помощь с CLEO
Отправлено: Shagg_E от Июль 09, 2017, 11:06:37 am
Вылетает при нажатии F.
Помогайте пожалуйста.
Дело в том, что команда
Код: Text
  1. fade 0 1000
затемняет экран в течении 1000ms(т.е. 1 секунда)
а команда
Код: Text
  1. fade 1 1000
- убирает затемнение в течении 1000ms. Игра так сделана, что вы не можете убирать затемнение, пока экран полностью не затемнится.
Что происходит в вашем коде:
Код: Text
  1. fade 0 1000 // затемняется экран в течении 1000ms(1 секунда)
  2. wait 100 // проходит 100 ms(т.е. 0.1 секунды)
  3. 0055: put_player $PLAYER_CHAR at -938.91 -351.93 7.23 // телепорт игрока(т.е. экран еще не успеет затемниться, а вы уже телепортируете игрока)
  4. fade 1 1000 // прошло всего 0.1 секунды, а вы уже убираете затемнение, что приводит к вылету
  5. wait 100 // этот код уже не выполняется, т.к. игра вылетела

Я бы переделал этот код в такой:

Код: Text
  1. {$CLEO .cs}
  2.  
  3. //-------------MAIN---------------
  4. 0000: NOP
  5.  
  6. :elevator_1
  7. wait 0
  8. if and
  9. 05EE:   key_pressed 70 //VK_...
  10. 0102:  actor $PLAYER_CHAR stopped_near_point_on_foot -938.11 -351.20 17.80 radius 1.0 1.0 1.0 sphere 0
  11. else_jump @elevator_1
  12. fade 0 1000
  13. wait 1000
  14. 0055: put_player $PLAYER_CHAR at -938.91 -351.93 7.23
  15. fade 1 1000
  16. wait 1000
  17. jump @elevator_1

А вот этот вариант кода включает в себя предыдущий и, помимо этого, позволит также перемещаться из хранилища обратно: также - при нажатии F(в игре не проверял, полагаюсь на то, что вы правильно указали координаты):
Код: Text
  1. {$CLEO .cs}
  2.  
  3. //-------------MAIN---------------
  4. 0000: NOP
  5.  
  6. :elevator_1
  7. wait 0
  8. if and
  9. 05EE:   key_pressed 70 //VK_...
  10. 0102:  actor $PLAYER_CHAR stopped_near_point_on_foot -938.11 -351.20 17.80 radius 1.0 1.0 1.0 sphere 0
  11. else_jump @elevator_2
  12. fade 0 1000
  13. wait 1000
  14. 0055: put_player $PLAYER_CHAR at -938.91 -351.93 7.23
  15. fade 1 1000
  16. wait 1000
  17.  
  18. :elevator_2
  19. if and
  20. 05EE:   key_pressed 70 //VK_...
  21. 0102:  actor $PLAYER_CHAR stopped_near_point_on_foot -938.91 -351.93 7.23 radius 1.0 1.0 1.0 sphere 0
  22. else_jump @elevator_1
  23. fade 0 1000
  24. wait 1000
  25. 0055: put_player $PLAYER_CHAR at -938.11 -351.20 17.80
  26. fade 1 1000
  27. wait 1000
  28. jump @elevator_1
Название: Re: Помощь с CLEO
Отправлено: egor230 от Июль 09, 2017, 03:58:49 pm
Огромное Вам спасибо за столь полный ответ на банальный вопрос.
Примите искреннюю благодарность за Ваше подробное и доходчивое объяснение.
Исключительная редкость получить ответ от человека имеющего такие глубокие познания в cleo.

Имею огромное желание писать пока скрипты для vice city, очень рад что встретился Ваш форум, где можно развиваться в этом  направлении.
К большому сожалению, игра вылетает на этапе загрузки…. 
Конечно, можно сделать легко телепорт без нажатие клавиши F, но хочется понять, где моя ошибка.
Название: Re: Помощь с CLEO
Отправлено: egor230 от Июль 10, 2017, 07:27:16 am
Здравствуйте.
Наконец-то скрипт работает.
Лифты в банке и небоскрёбе спускают и поднимают при нажатии клавиши F.
Скриншоты
http://pixs.ru/showimage/1jpg_8992674_26821624.jpg (http://pixs.ru/showimage/1jpg_8992674_26821624.jpg)
http://pixs.ru/showimage/2jpg_5330334_26821626.jpg (http://pixs.ru/showimage/2jpg_5330334_26821626.jpg)
http://pixs.ru/showimage/3jpg_1961155_26821627.jpg (http://pixs.ru/showimage/3jpg_1961155_26821627.jpg)
http://pixs.ru/showimage/4jpg_8258854_26821628.jpg (http://pixs.ru/showimage/4jpg_8258854_26821628.jpg)

Очень хочется узнать как через cleo отрывать и закрывать двери лифта.
Подскажите, пожалуйста, как сделать чтобы не как-то будто спрыгивает после телепортации?   
Вот он
{$CLEO .cs}

//-------------MAIN---------------
0000: NOP
0001: wait 0

:Elevator_1
0001: wait 2 ms
00D6: if
0102: actor $PLAYER_ACTOR stopped_near_point_on_foot -938.11 -351.20 17.80 radius 2.0 2.0 2.0 sphere 0
004D: jump_if_false @Elevator_5
jump @Elevator_3

:Elevator_3
00D6: if
05EE: key_pressed 70 //VK_...
004D: jump_if_false @Elevator_1
jump @Elevator_4

:Elevator_4
fade 0 1000
wait 1000
0055: put_player $PLAYER_CHAR at -939.95 -351.86 7.23  offset 0.0 0.0 2.0
fade 1 1000
wait 1000
jump @Elevator_5

:Elevator_5
0001: wait 2 ms
00D6: if
0102: actor $PLAYER_ACTOR stopped_near_point_on_foot -939.95 -351.86 7.23 radius 2.0 2.0 2.0 sphere 0
004D: jump_if_false @Elevator_8       
jump @Elevator_6

:Elevator_6
00D6: if
05EE: key_pressed 70 //VK_...
004D: jump_if_false @Elevator_5
jump @Elevator_7

:Elevator_7
fade 0 1000
wait 1000
0055: put_player $PLAYER_CHAR at -938.11 -351.20 17.80  offset 0.0 0.0 2.0
fade 1 1000
wait 1000
jump @Elevator_8

:Elevator_8
jump @Elevator_9

:Elevator_9
0001: wait 2 ms
00D6: if
0102: actor $PLAYER_ACTOR stopped_near_point_on_foot -559.85 782.59 22.88 radius 2.0 2.0 2.0 sphere 0
004D: jump_if_false @Elevator_12
jump @Elevator_10

:Elevator_10
00D6: if
05EE: key_pressed 70 //VK_...
004D: jump_if_false @Elevator_9
jump @Elevator_11

:Elevator_11
fade 0 1000
wait 1000
0055: put_player $PLAYER_CHAR at -554.26 788.57 97.51  offset 0.0 0.0 2.0
fade 1 1000
wait 1000
jump @Elevator_12

:Elevator_12
0001: wait 2 ms
00D6: if
0102: actor $PLAYER_ACTOR stopped_near_point_on_foot -554.26 788.57 97.51 radius 2.0 2.0 2.0 sphere 0
004D: jump_if_false @Elevator_15
jump @Elevator_13

:Elevator_13
00D6: if
05EE: key_pressed 70 //VK_...
004D: jump_if_false @Elevator_12
jump @Elevator_14

:Elevator_14
fade 0 1000
wait 1000
0055: put_player $PLAYER_CHAR at  -559.85 782.59 22.88  offset 0.0 0.0 2.0
fade 1 1000
wait 1000
jump @Elevator_15

:Elevator_15
0002: jump @Elevator_1


Название: Re: Помощь с CLEO
Отправлено: egor230 от Июль 14, 2017, 07:17:11 am
Здравствуйте, всем.
Снова возникала проблема со скрипитом сплавна авто в заданных координатах.
Пожалуйста, скажите, модели редких авто. Как это сделать?
Вот скрипт, с обычными моделями работает.
{$CLEO}     
004F: create_thread @MyCar
:MyCar
Wait 0
Model.Load(#Bloodring Racer)
If Model.Available(#Bloodring Racer)
JF @MyCar
Car.Create(1@, #Bloodring Racer, 108.39, -807.28, 10.46)
End_thread @MyCar
Помогите, пожалуйста.

вот как решил
{$CLEO}
//-------------MAIN---------------\\
0000: NOP
thread 'CAMFSTF'
wait 1000
:MyCar
Wait 0
014B: $Car = init_parked_car_generator #BLOODRB 8 8 0 alarm 50 door_lock 0 0 40000 at 106.39 -807.28 10.46 angle 180.0
014C: set_parked_car_generator $Car cars_to_generate_to 101
004E: end_thread
         
Но с некоторыми не работает, например, PANLANT
Название: Re: Помощь с CLEO
Отправлено: egor230 от Июль 15, 2017, 01:39:36 pm
Здравствуйте.
Подскажите, пожалуйста, хочу создать пачку денег на точке, а игра вылетает.
Помогите, пожалуйста, разобраться, где ошибка.
{$CLEO .cs}

//-------------MAIN---------------
004F: create_thread @Noname_12

:Noname_12
wait 0
00D6: if
0256: player $PLAYER_CHAR defined
04A6: 3@ = create_asset_money_pickup_at 109.39 -808.28 10.46  money 1 1
:2
wait 0
if
0214: pickup 3@ picked_up
004D: jump_if_false @2
0215: destroy_pickup 3@
0109: player $PLAYER_CHAR money 1+= 4@
       
jump @Noname_12
004E: end_thread
Название: Re: Помощь с CLEO
Отправлено: Shagg_E от Июль 15, 2017, 04:29:26 pm
Здравствуйте, всем.
Снова возникала проблема со скрипитом сплавна авто в заданных координатах.

1)В CLEO-скриптах НЕ используй глобальные переменные(те, что со знаком "$"), кроме $PLAYER_CHAR, $PLAYER_ACTOR.
Если вкратце, то есть единый массив глобальных переменных для всех скриптов, включая main.scm, поэтому, когда ты используешь любую глобальную переменную - где-то в main.scm перестает нормально работать какой-то скрипт, потому что ты записал в глобальную переменную значение, которое конфликтует с этим скриптом. Самое печальное, что значения, сохраненные в глобальных переменных, сохраняются в сохранениях. То есть из-за твоего скрипта у людей могут в дальнейшем возникнуть вылеты игры на пустом месте. Даже если они удалят твой скрипт - у них уже "запорятся" сохранения, которые они делали с твоим скриптом.

Выход есть - используй только локальные переменные(те, что со знаком "@"). Их всего 16(от 0@ до 15@), плюс 2 таймера(16@ и 17@).
Но если с умом подходить к скриптингу, то их хватает за глаза. Разумеется, если у тебя чересчур масштабные разработки - лучше делать их в main.scm.

2) "jump" можно не писать, если необходимая метка идет сразу после места, где ты хотел написать "jump".

3)Не стоит через CLEO-скрипт создавать парковки, пикапы, значки на карте и прочее. Всё это дело сохраняется в файлах сохранения! Это значит, что если человек хотя бы раз сохранится с твоим скриптом - у него твоя парковка не исчезнет никогда - даже если он удалит твой скрипт. Самое страшное, что при каждом заходе в игру будет создаваться новая парковка, т.е. если человек сделал операцию "загрузил сохранение/сохранился/вышел из игры" 10 раз - у него на одиннадцатый заход в игру будет 11 парковок в одном месте! Не факт, что игра будет спавнить все эти авто, но всё равно это лишняя нагрузка и вообще неправильный подход к скриптингу.

Лучше напиши скрипт, который будет спавнить машину при определенных условиях, например - если игрок подошел к нужному месту на расстоянии 30 метров:
Код: Text
  1. {$CLEO}    
  2. thread 'CAMFSTF'
  3.  
  4. :MyCar
  5. wait 0
  6. if
  7. 00F5:   player $player_char in_sphere 0 near_point 106.39 -807.28 10.46 radius 30.0 30.0 30.0   // проверяется нахождение игрока в радиусе 30 метров
  8. jf @MyCar
  9. model.Load(#BLOODRB) // загружаем модель, точнее ставим её в очередь на загрузку
  10. 038B: load_requested_models // принудительная загрузка всех моделей, стоящих в очереди на загрузку
  11.  
  12. :MyCar2
  13. wait 0
  14. if
  15.  Model.Available(#BLOODRB) // на всякий пожарный проверяем, загрузилась ли модель
  16. jf @MyCar2
  17. Car.Create(0@, #BLOODRB, 106.39, -807.28, 10.46)  // спавним авто
  18. 0249: release_model #BLOODRB // обязательно выгружаем модель из памяти игры, ведь авто мы уже заспавнили, и модель нам не нужна
  19. 0175: set_car 0@ z_angle_to 180.0 // поворот авто
  20. 01C3: remove_references_to_car 0@ // выгружаем авто из памяти игры, чтобы оно автоматически исчезло "за спиной", если игрок куда-нибудь уйдет
  21.  
  22. :MyCar3
  23. wait 0
  24. if
  25. 00F5:   player $player_char in_sphere 0 near_point 106.39 -807.28 10.46 radius 30.0 30.0 30.0   // проверяется нахождение игрока в радиусе 30 метров
  26. jf @MyCar // Как только игрок отошел от этого места снова на 30 метров - скрипт перезапускается(а авто само удалится благодаря опкоду 01C3)
  27. jump @MyCar3

Конечно, сразу будет бросаться в глаза, что авто появляется "перед носом"(больший радиус не советую делать, пока ты не получил достаточно опыта в скриптинге), поэтому лучше "спрятать" это авто куда-нибудь в "укромный уголок", где его появление не будет столь заметно.
         
Но с некоторыми не работает, например, PANLANT

Это что вообще за машина такая? Её не существует в оригинальной игре.

Здравствуйте.
Подскажите, пожалуйста, хочу создать пачку денег на точке, а игра вылетает.

Во-первых:
004F: create_thread @Noname_12

Так нельзя делать! Каждый CLEO-скрипт - это уже отдельный тред, а ты создаешь еще один тред(система CLEO устроена так, что всё это дело конфликтует с main.scm!)!

Во-вторых:
Код: Text
  1. 00D6: if  // ЕСЛИ
  2. 0256: player $PLAYER_CHAR defined  // ИГРОК СУЩЕСТВУЕТ
  3. 04A6: 3@ = create_asset_money_pickup_at 109.39 -808.28 10.46  money 1 1  // ТО СОЗДАЕМ ПИКАП
А если игрок не существует(во время загрузки, например)? В каждом условии должен быть переход куда-нибудь на случай, если проверка не сработает!
Иначе говоря, эта часть кода должна быть такой:
Код: Text
  1. 00D6: if  // ЕСЛИ
  2. 0256: player $PLAYER_CHAR defined  // ИГРОК СУЩЕСТВУЕТ
  3. 004D: jump_if_false @OLOLO // ЕСЛИ НЕТ - ПРЫГАЕМ НА МЕТКУ OLOLO
  4. 04A6: 3@ = create_asset_money_pickup_at 109.39 -808.28 10.46  money 1 1  // А ЕСЛИ ВСЁ ЖЕ СУЩЕСТВУЕТ - ТО СОЗДАЕМ ПИКАП
Но вообще - проверять, существует ли игрок - необязательно, если ты в скрипте не проводишь никаких операций непосредственно с ним.

В-третьих, пикап пачки денег создается по-другому

В-четвертых - ты пишешь:
Код: Text
  1. 0109: player $PLAYER_CHAR money 1+= 4@
Т.е. даешь игроку кол-во денег, которое записано в переменную 4@. Но ты ничего не записал в переменную 4@! Конечно, это не вызовет вылета игры(не буду описывать здесь, почему), но это явная ошибка!

В-пятых - читай, что я писал выше в пункте 3 про создание парковок, пикапов, значки на карте и т.д.
Опять же - лучше написать скрипт, который будет создавать пикап, когда игрок в определенном радиусе от нужной точки:
Код: Text
  1. {$CLEO}
  2. 0000:
  3. thread 'PICKU01'
  4.  
  5. :PICKU01_01
  6. wait 0
  7. if
  8. 00F5:   player $player_char in_sphere 0 near_point 109.39 -808.28 10.46 radius 30.0 30.0 30.0   // проверяется нахождение игрока в радиусе 30 метров
  9. jf @PICKU01_01
  10. model.Load(337) // ставим в очередь на загрузку модель денег под номером 337(см. в Vice City\data\maps\generic.ide)
  11. 038B: load_requested_models // принудительная загрузка всех моделей, стоящих в очереди на загрузку
  12.  
  13. :PICKU01_02
  14. wait 0
  15. if
  16.  Model.Available(337) // на всякий пожарный проверяем, загрузилась ли модель
  17. jf @PICKU01_02
  18. 0@ = Pickup.Create(337,8,109.39, -808.28, 10.46) // создаем пикап денег, автоматически исчезающий через 30 секунд
  19. 0249: release_model 337 // обязательно выгружаем модель из памяти игры, ведь пикап мы уже создали, и модель нам не нужна
  20.  
  21. :PICKU01_03
  22. wait 0
  23. if
  24. 00F5:   player $player_char in_sphere 0 near_point 109.39 -808.28 10.46 radius 30.0 30.0 30.0   // проверяется нахождение игрока в радиусе 30 метров
  25. jf @PICKU01_04 // если игрок покинул этот радиус - переход на метку "3", где удаляется пикап
  26. if
  27. pickup.Picked_up(0@) // если пикап был подобран
  28. jf @PICKU01_03
  29. 0109: player $player_char money += 10000 // даем игроку 10000 долларов
  30. jump @PICKU01_03
  31.  
  32. :PICKU01_04
  33. 0215: destroy_pickup 0@
  34. jump @PICKU01_01

ВНИМАНИЕ! Нельзя, чтобы при этом в этом радиусе была точка сохранения/спавна. Иначе будет опять проблема с файлами сохранений(сохранение пикапа в файле сохранения).
Опять же, чтобы не было заметно, что пикап появляется "перед носом" - лучше "спрятать" этот пикап куда-нибудь в "укромный уголок"(см. пример с машиной выше).

Ну и последнее:
У тебя очень много косяков в скриптах. Это не проблема, если приложить усилия. Пожалуйста, прочитай в справке SannyBuilder основы скриптинга(Статьи/введение в скриптинг). Конечно, там инфа в основном для SA, но тебе нужно изучать хотя бы самое-самое важное: узнать всё про переменные, метки(label), циклы и т.д.
Однако там инфа про скриптинг в main.scm, а в CLEO-скриптинге иногда действуют другие правила.
Поэтому скачай последнюю библиотеку CLEO для Vice City (http://cleo.li/), затем скачай актуальные VCSCM.INI и opcodes.txt (http://newrockstar.do.am/Other_Files/VCOPCODES2017.rar) для SannyBuilder(кинь эти файлы в Sanny Builder 3\data\vc\) и смотри эти уроки по скриптингу на youtube (https://www.youtube.com/watch?v=uHcq3n1c0og). Конечно, они опять для SA, но первые несколько уроков подходят и для Vice City. Они хотя бы дадут общее понимание скриптинга.
Название: Re: Помощь с CLEO
Отправлено: egor230 от Июль 16, 2017, 03:50:07 pm
Спасибо огромное за Ваш подробный ответ, с доскональный объяснением. Безгранично Вам за него благодарен.
Теперь стало абсолютно понятно, к каким ужасным приводит использования глобальных переменных в скрипте.
Буду учиться работать с локальными переменными. Пока только начал, практика повысит уровень навыка. У меня очень скромные планы.
Спасибо за совет об jump, будем стараться.
 Мудрый совет о спавне машин, действительная лишняя нагрузка не к чему. Согласен, лучше спавить на определительных условиях, чтобы лишний раз не засорят память игры, иначе рано или поздно может быть вылет.
Спав авто на определенном расстоянии- идеальный выход, все гениальное просто. Обязательно так сделаю, как Вы сказали.
Модель PANLANT перепутал в файле handling.cfg с SEAPLANE, Прошу прощение, что сбил Вас  с толка.
Еще одна моя ошибка с тредом.
С проверками мне нужно учится работать.
Значит, если операции над игроком не проводятся, проверку существует игрок, можно не писать.
Опять еще одна моя ошибка.
Пикапы  лучше делать при радиусе, так правильнее.
Точка пикапа должна быть в радиусе.
На ошибках учатся, главное, что на свете есть такие люди высокого ума, которые просвещают темный народ.
Хорошо еще раз перечитаю, справку по основам скриптинг.
Почти все уроки почти для SA мало для VC.
Но желание есть.
Важно понять основу.
Спасибо за полезные ссылки, они помогут в изучении скриптинга.
Ваш ответ, много научил меня еще спасибо.

Вопрос чем разница между ими?.
0214: pickup 3@ picked_up
И
pickup.Picked_up

также думаю, может быть этот опкод на коробку передач.
0428: set_car $4226 avoid_level_transitions 1
Написал скрипт добавление новой недвижимости  со сохранением. Конечно, много ошибок.
{$CLEO .cs}

0000:
//-------------MAIN---------------
5@= 10
0518: 4@ = create_available_asset_pickup 'PROP_3' at 292.91 759.83 12.76 price 5@ // $X $Y $Z координаты, 1@ цена
:Noname_1
wait 0
if
0214: pickup 4@ picked_up
jf @Noname_1
02A3: toggle_widescreen 1
016A: fade 0 time 2000
wait 2000
0215: destroy_pickup 4@
wait 2000
0394: play_music 1
02A3: toggle_widescreen 0
016A: fade 1 time 2000

:savegame
0001: wait 0 ms
1@=301.13 // с запада на восток
2@=753.58 // с севера на юг
3@=12.76 // высота
model.load(1277) 
Model.Available(1277)
0213: 10@ = create_pickup #PICKUPSAVE type 3 at 1@ 2@ 3@
038B: load_requested_models
0002: jump @savegame_70

:savegame_70
0001: wait 0 ms
00D6: if
0256: player $PLAYER_CHAR defined
004D: jump_if_false @savegame_288
00D6: if
0038: $ONMISSION == 0
004D: jump_if_false @savegame_288
00D6: if
0214: pickup 10@ picked_up
004D: jump_if_false @savegame_70
0001: wait 200 ms 
0215: destroy_pickup 10@
03D8: show_save_screen
00A1: put_actor $PLAYER_ACTOR at 292.91 759.83 12.76
0173: set_actor $PLAYER_ACTOR Z_angle_to 87.2991 // юг=180 запад=90 св=0 в=270 градусов
0001: wait 200 ms

:savegame_209
0002: jump @savegame

:savegame_288
0001: wait 0 ms
0215: destroy_pickup 10@
00D6: if
0038: $ONMISSION == 0
004D: jump_if_false @savegame_288
0002: jump @savegame
Название: Re: Помощь с CLEO
Отправлено: GeniusZ от Июль 17, 2017, 06:59:31 am
Вопрос чем разница между ими?.
0214: pickup 3@ picked_up
И
pickup.Picked_up
В санни билдере есть такие полезные штуки как кейворды и классы. Они дают возможность не запоминать номера опкодов, а использовать ключевые слова. Например, вместо 0001: wait 0 ms можно написать wait 0, pickup.Picked_up вместо 0214: pickup 3@ picked_up. Классы содержат кейворды объединенные одним объектом (Actor, Car, Object, Model, Camera, Pickup).     
Название: Re: Помощь с CLEO
Отправлено: DK от Июль 17, 2017, 08:43:02 am
Сразу читай справку SannyBuilder, раздел Кодинг.
Особенно статьи Условия и Циклы.
Название: Re: Помощь с CLEO
Отправлено: Shagg_E от Июль 20, 2017, 03:30:13 pm
также думаю, может быть этот опкод на коробку передач.
0428: set_car $4226 avoid_level_transitions 1
Нет, этот опкод запрещает тачке кататься по всей карте, заставляя её колесить по одному району(не точно, но как-то так)

Написал скрипт добавление новой недвижимости  со сохранением. Конечно, много ошибок.
Опять создание пикапа без проверок нахождения игрока в определенном радиусе. Этот пикап сохранится в файле сохранения и его потом оттуда не выковыришь.

Далее есть проверка
Код: Text
  1. Model.Available(1277)
Но опять нет jump_if_false на случай, если модель не доступна. Тем более - выше не написано
Код: Text
  1. 038B: load_requested_models
, чтобы загрузить модели(читай мой предыдущий пост с примерами и комментами к опкодам).


В остальном согласен с GeniusZ и DK
Название: Re: Помощь с CLEO
Отправлено: egor230 от Июль 20, 2017, 05:24:26 pm
Спасибо всем за Ваши ответы, очень приятно.
Прошу прощение, что не сразу Вам ответил, дела- работа, кредиты, семья.
GeniusZ, кейворды очень удобная и полезная вещь при написания скрипта.
DK, читаю, изучаю. Так интересно, жаль всегда есть свободного время. Более широкие возможности дает работа с памятью.
Shagg_E спасибо за Ваш ответ, к сожалению не все опкоды имеют понятно описания.
Прошу прощения за мою оплошность, его создал до прочтения Вашего мудрого совет.
Скажите, пожалуйста, как создать пикап, только на один раз? Взял и больше не появляется.
Сегодня написал скрипт блокировка дверей авто. Если зайти двери блокируются, выйдешь они разблокируется сами,
в машине также это можно сделать нажатием клавишей F. Конечно, есть ошибки. Вам виднее сделать его лучше.
Код: Javascript
  1. {$CLEO .cs}
  2. //-------------MAIN---------------
  3. 0000: NOP
  4. :BLOCK_1                          
  5. 0001: wait 0 ms
  6. 00D6: if
  7. 0256: player $PLAYER_CHAR defined
  8. 004D: jump_if_false @BLOCK_1
  9. 00D6: if
  10. 00E0: player $PLAYER_CHAR driving
  11. 004D: jump_if_false @BLOCK_1
  12. :1
  13. 03C1: 10@ = player $PLAYER_CHAR car
  14. 020A: set_car 10@ door_status_to 2
  15. :3
  16. wait 1
  17. 00D6: if  
  18. 05EE: key_pressed 66 //VK_...
  19. 004D: jump_if_false @2
  20. :4
  21. wait 1
  22. 00D6: if  
  23. 85EE: not key_pressed 66 //VK_...
  24. 004D: jump_if_false @3
  25. :5
  26. 020A: set_car 10@ door_status_to 1
  27. 01E5: text_1number_highpriority 'NUMBER' 1 flag 1000 time 1  // ~1~
  28. wait 500
  29. 00BE: text_clear_all
  30. :6
  31. wait 1
  32. 00D6: if  
  33. 05EE: key_pressed 66 //VK_...
  34. 004D: jump_if_false @6
  35. :7
  36. wait 1
  37. 00D6: if  
  38. 85EE: not key_pressed 66 //VK_...
  39. 004D: jump_if_false @6
  40. :8
  41. 020A: set_car 10@ door_status_to 2
  42. 01E5: text_1number_highpriority 'NUMBER' 2 flag 1000 time 1  // ~1~
  43. wait 500
  44. 00BE: text_clear_all
  45. :2
  46. 00D6: if
  47. 8443: NOT player $PLAYER_CHAR in_a_car
  48. 004D: jump_if_false @BLOCK_1
  49. 020A: set_car 10@ door_status_to 1
  50. 01E5: text_1number_highpriority 'NUMBER' 1 flag 1000 time 1  // ~1~
  51. jump @BLOCK_1
  52.  
Название: Re: Помощь с CLEO
Отправлено: Shagg_E от Июль 20, 2017, 07:40:22 pm
Скажите, пожалуйста, как создать пикап, только на один раз? Взял и больше не появляется.

Абсолютно точно также, как в примере из этого поста (http://forum.gtabuilder.ru/index.php?topic=325.msg2893#msg2893), только заменить
Код: Text
  1. jump @PICKU01_03
на
Код: Text
  1. 0215: destroy_pickup 0@
  2. 0A93: end_custom_thread

Т.е. финальный вариант будет выглядеть так:
Код: Text
  1. {$CLEO}
  2. 0000:
  3. thread 'PICKU01'
  4.  
  5. :PICKU01_01
  6. wait 0
  7. if
  8. 00F5:   player $player_char in_sphere 0 near_point 109.39 -808.28 10.46 radius 30.0 30.0 30.0   // проверяется нахождение игрока в радиусе 30 метров
  9. jf @PICKU01_01
  10. model.Load(337) // ставим в очередь на загрузку модель денег под номером 337(см. в Vice City\data\maps\generic.ide)
  11. 038B: load_requested_models // принудительная загрузка всех моделей, стоящих в очереди на загрузку
  12.  
  13. :PICKU01_02
  14. wait 0
  15. if
  16. Model.Available(337) // на всякий пожарный проверяем, загрузилась ли модель
  17. jf @PICKU01_02
  18. 0@ = Pickup.Create(337,8,109.39, -808.28, 10.46) // создаем пикап денег, автоматически исчезающий через 30 секунд
  19. 0249: release_model 337 // обязательно выгружаем модель из памяти игры, ведь пикап мы уже создали, и модель нам не нужна
  20.  
  21. :PICKU01_03
  22. wait 0
  23. if
  24. 00F5:   player $player_char in_sphere 0 near_point 109.39 -808.28 10.46 radius 30.0 30.0 30.0   // проверяется нахождение игрока в радиусе 30 метров
  25. jf @PICKU01_04 // если игрок покинул этот радиус - переход на метку "3", где удаляется пикап
  26. if
  27. pickup.Picked_up(0@) // если пикап был подобран
  28. jf @PICKU01_03
  29. 0109: player $player_char money += 10000 // даем игроку 10000 долларов
  30. 0215: destroy_pickup 0@
  31. 0A93: end_custom_thread
  32. //jump @PICKU01_03
  33.  
  34. :PICKU01_04
  35. 0215: destroy_pickup 0@
  36. jump @PICKU01_01



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


Код: Text
  1. {$CLEO .cs}
  2. //-------------MAIN---------------
  3. 0000: NOP
  4.  
  5. :BLOCK_1 // первый цикл                          
  6. wait 0
  7. if
  8. 0256: player $PLAYER_CHAR defined  // если игрок существует
  9. jf @BLOCK_1
  10. if
  11. 00E0: player $PLAYER_CHAR driving  // если игрок водит авто
  12. jf @BLOCK_1
  13. 03C1: 0@ = player $PLAYER_CHAR car  // записываем хэндл авто в переменную 0@
  14. 020A: set_car 0@ door_status_to 2   // блокируем двери
  15.  
  16. :BLOCK_2  // далее начинает работать второй цикл
  17. wait 0
  18. if
  19. 8443: NOT player $PLAYER_CHAR in_a_car  // если игрок покинул авто
  20. jf @BLOCK_2
  21. if
  22. 8039:   NOT 0@ == -1 // если авто существует(хэндл этого авто не равен -1)
  23. jf @BLOCK_1
  24. 020A: set_car 0@ door_status_to 1  // разблокируем двери
  25. jump @BLOCK_1
Название: Re: Помощь с CLEO
Отправлено: egor230 от Июль 22, 2017, 09:04:31 pm
 Shagg_E
Благодарю за Ваш ответ. По Вашим советам, учусь скриптингу, конечно, не все всегда получается. Опираясь на ответы в теме, написал скрипт.
Огромное Вам спасибо за ответ по блокировке дверей, теперь скрипт благодаря совету эксперту стал лучше!!!!!!!!!
Заезжайте на маркер, сигналите, за деньги получайте непробиваемые шины.
Единственная проблема, значок маркер с радара не пропадает, когда покидаешь радиус. Подскажите, пожалуйста, где ошибка?
Ищу также опкод или адрес памяти, который отвечает за включения\отк фар авто. Ну люблю vice city?, хоть и 28 лет, скоро отцом стану.
Код: Javascript
  1. {$CLEO .cs}
  2.  
  3. //-------------MAIN---------------
  4. 0000: NOP
  5.  
  6. :car_tuning_1
  7. 00D6: if
  8. 0256:   player $PLAYER_CHAR defined
  9. 004D: jump_if_false @car_tuning_1
  10.  
  11. :car_tuning_2
  12. 0001: wait 0 ms
  13. 00D6: if
  14. 00E0:   player $PLAYER_CHAR driving
  15. 004D: jump_if_false @car_tuning_2
  16. 00D6: if
  17. 00F5:   player $player_char in_sphere 0 near_point -1107.25 -517.35 11.20 radius 30.0 30.0 30.0
  18. 004D: jump_if_false @car_tuning_2
  19. 02A7: 13@ = create_icon_marker_and_sphere 31 at -1107.25 -517.35 11.20
  20. 0103:   actor $PLAYER_ACTOR stopped_near_point_in_car -1107.25 -517.35 11.20 radius 3.0 3.0 3.0 sphere 0 // never used in VC
  21. 004D: jump_if_false @car_tuning_2
  22. if
  23. 0122:   player $PLAYER_CHAR pressing_horn
  24. 004D: jump_if_false @car_tuning_2
  25. if
  26. 010A:   player $PLAYER_CHAR money > 10000
  27. 004D: jump_if_false @car_tuning_2
  28. 0109: player $PLAYER_CHAR money += -10000
  29. 016A: fade 0 1000 ms
  30. 0001: wait 1500 ms  
  31. 03C0: $PLAYER_CAR = actor $PLAYER_ACTOR car
  32. 053F: set_car $PLAYER_CAR tires_vulnerable 0
  33. 016A: fade 1 1000 ms
  34. 0001: wait 1500 ms
  35. 0394: play_music 1
  36. 00D6: if
  37. 00F5:  player $player_char in_sphere 0 near_point -1107.25 -517.35 11.20 radius 30.0 30.0 30.0
  38. jf @car_tuning_3
  39. :car_tuning_3
  40. 0164: disable_marker 13@
  41. 0002: jump @car_tuning_1
  42.  
Название: Re: Помощь с CLEO
Отправлено: GeniusZ от Июль 23, 2017, 08:24:20 am
Судя по коду, Вы декомпилируете свой же скрипт. Это делать не стоит, когда у вас есть исходники. Просто открываете .txt файл с кодом и продолжаете работать, иначе при декомпиляции вы теряете часть информации и получаете плохочитабельный код.

Что касается маркера на карте, то используйте вместо опкода:
02A7: 13@ = create_icon_marker_and_sphere 31 at -1107.25 -517.35 11.20вот эти:
0570: 13@ = create_asset_radar_marker_with_icon 31 at -1107.25 -517.35 11.20
03BC: 14@ = create_sphere -1107.25 -517.35 11.20

Только потом не забудьте выключить сферу:
...
:car_tuning_3
0164: disable_marker 13@
03BD: destroy_sphere 14@

Что касается условий: зачем проверять каждое условие отдельно, если можно проверить все разом?
{$CLEO}

0570: 13@ = create_asset_radar_marker_with_icon 31 at -1107.25 -517.35 11.20
03BC: 14@ = create_sphere -1107.25 -517.35 11.20 2.0

:car_tuning_1
wait 0
if and
  0256:   player $PLAYER_CHAR defined
  00E0:   player $PLAYER_CHAR driving
  00F5:   player $player_char in_sphere 0 near_point -1107.25 -517.35 11.20 radius 30.0 30.0 30.0
  0103:   actor $PLAYER_ACTOR stopped_near_point_in_car -1107.25 -517.35 11.20 radius 3.0 3.0 3.0 sphere 0 // never used in VC
  0122:   player $PLAYER_CHAR pressing_horn
  010A:   player $PLAYER_CHAR money > 10000
jf @car_tuning_1
0109: player $PLAYER_CHAR money += -10000
016A: fade 0 1000 ms
0001: wait 1500 ms 
03C0: 0@ = actor $PLAYER_ACTOR car
053F: set_car 0@ tires_vulnerable 0
016A: fade 1 1000 ms
0001: wait 1500 ms
0394: play_music 1
0164: disable_marker 13@
03BD: destroy_sphere 14@
05DC: end_custom_thread

Вообще я мог бы рекомендовать вам сайт ru-script.3dn.ru. Правда там уроки скриптинга по SA, но он мало чем отличается от скриптинга в VC.
Название: Re: Помощь с CLEO
Отправлено: egor230 от Июль 24, 2017, 01:58:32 pm
Очень Рад вашему ответу, большое спасибо за уделенное мне время.
Да часто что-то меняю в скриптах, учту на будущее.
Благодарю Вас за ясный и понятный ответ по маркера, очень помог мне.
Вы абсолютно Вы, лучше проверить все условия сразу. Теперь благодаря Вам, скрипт работает идеально.
Спасибо за ссылку на сайт, будет полезный. Буду изучать.
Естественно sa очень хорошо изученная, по ней много уроков. Я ее прошел в 2005, но стиль 80 ближе, чем негров из 90.
Жаль по vice нету списка адресов памяти с подробным объяснением каждого значения.
Вот нашел ломанный скрипт, который должен по нажатию клавиши, взрывать все авто, кроме того, в которым находится игрок.
Пока моих знаний не хватает понять его, буду рад любым подсказкам.
{$CLEO .cs}

//-------------MAIN---------------
0000: NOP
0002: jump @BIGBANG№ _33
03A4: name_thread 'BIGBANG№ '
0004: '¤ BLOWALL' = 'L' // integer values
hex
 85 68
end
0400: create_coordinate 280580 $64 'Їяяя№ Я  Ї…h' from_object 282372 offset 'Я  ­…h' 282884 'Я  ®…h'
hex
 01 AF 85 68
end
0400: create_coordinate 'Њяяя№ Я  ±…h' 6849969 1 from_object 284676 offset 'Я  °…h' 285700 $64
hex
 04 67
end
0004: 'Я  І…h' = 279812 // integer values
0002: jump @BIGBANG№ _151
04B9: unknown_stuff -704642048
0004: 'а' = 'iяяяБ   ' // integer values
0300: text_3numbers_highpriority // never used in VC or GTA 3
0200:   player // never used in VC
hex
 01 44 FF FF FF B9 04 D6
end
0400: create_coordinate 'Њяяя№ Я  ±…h' 6849969 1 from_object
00E0:   player $PLAYER_CHAR driving
004D: jump_if_false @BIGBANG№ _269
0001: wait 0 ms
00D6: if
05EE:   key_pressed 76 //VK_...
004D: jump_if_false @BIGBANG№ _188
0002: jump @BIGBANG№ _232
04B9: unknown_stuff 'х  '
0801:
hex
 FF FF FF B9
end
0104:   actor
8805:   not
hex
 13 F5
end
0303: text_4numbers_highpriority // never used in VC or GTA 3
0400: create_coordinate 'Њяяя№ Я  ±…h' 6849969 1 from_object 1140916226 offset 'яяя№ Г  '
0200:   player // never used in VC
hex
 01 69 FF FF
end
02FF: show_text_3numbers GXT
hex
 01   
Название: Re: Помощь с CLEO
Отправлено: Shagg_E от Июль 26, 2017, 03:55:23 am
Вот нашел ломанный скрипт, который должен по нажатию клавиши, взрывать все авто, кроме того, в которым находится игрок.
Пока моих знаний не хватает понять его, буду рад любым подсказкам.
Просто автор этого скрипта поставил на него защиту, из-за которой скрипт неправильно декомпилируется.
К счастью, защита была не сложной, поэтому вот код этого скрипта:
Код: Text
  1. {$CLEO .cs}
  2.  
  3. //-------------MAIN---------------
  4. 05DF: write_memory 6849964 size 1 value 79 virtual_protect 0
  5. 05DF: write_memory 6849965 size 1 value 81 virtual_protect 0
  6. 05DF: write_memory 6849966 size 1 value 72 virtual_protect 0
  7. 05DF: write_memory 6849967 size 1 value 88 virtual_protect 0
  8. 05DF: write_memory 6849968 size 1 value 92 virtual_protect 0
  9. 05DF: write_memory 6849969 size 1 value 103 virtual_protect 0
  10. 05DF: write_memory 6849970 size 1 value 69 virtual_protect 0
  11.  
  12. :Noname_151
  13. wait 0
  14. if
  15. 00E0:   player $player_char driving
  16. jf @Noname_151
  17. 03C1: 0@ = player $player_char car_no_save
  18.  
  19. :Noname_188
  20. if
  21. 00E0:   player $player_char driving
  22. jf @Noname_269
  23. wait 0
  24. if
  25. 05EE:   key_pressed 76 //VK_...
  26. jf @Noname_188
  27. 03F5: set_vehicle 0@ apply_damage_rules 0
  28. wait 5000
  29. 03F5: set_vehicle 0@ apply_damage_rules 1
  30. jump @Noname_188
  31.  
  32. :Noname_269
  33. Car.RemoveReferences(0@)
  34. jump @Noname_151

В первых 6 строках(где идет работа с памятью) происходит замена чит-кода "BIGBANG" на "BLOWALL", а далее - думаю, всё очевидно.
Название: Re: Помощь с CLEO
Отправлено: egor230 от Июль 29, 2017, 06:39:35 pm
Спасибо Shagg_E за Ваш ответ. О Вас много хорошего пишут, что Вы сильно помогайте людям с модами.
Не знал, что защита бывает на скрипте. Жаль, он не работает.
Нашел адреса памяти, отвечающие за свет фар.

0x2B0   byte   light status
•   bit 0/1 = front left lights
•   bit 2/3 = front right lights
•   bit 4/5 = rear left lights
•   bit 6/7 = rear right lights
Решил, написать скрипт, который выкл\вкл фар.
{$CLEO .cs}

//-------------MAIN---------------
0000: NOP
0001: wait 0 ms

:NONAME_6
0001: wait 0 ms
00D6: if and
00E0:   player $PLAYER_CHAR driving
05EE:   key_pressed 70 //VK_...
004D: jump_if_false @NONAME_6
03C1: 1@ = player $player_char car_no_save
05E7: 2@ = car 1@ struct
0A8D: 3@ = read_memory 0x2B0 size 1 virtual_protect 1
0A8C: write_memory 3@ size 1 value 0 virtual_protect 1
0002: jump @NONAME_6 
В итоге вылет. Да я нуб, признаю это. Знаний маловато. Помогите, пожалуйста, буду благодарен за совет.
Название: Re: Помощь с CLEO
Отправлено: GeniusZ от Июль 30, 2017, 05:50:17 am
В данном случае 0x2B0 означает смещение от структуры машины. То есть, чтобы получить адрес состояния фар определенной машины, нужно получить ее структуру и прибавить к ней это смещение.
Цитировать
0x2B0   byte   light status
•   bit 0/1 = front left lights
•   bit 2/3 = front right lights
•   bit 4/5 = rear left lights
•   bit 6/7 = rear right lights
Судя по этому описанию, это поле структуры в 1 байт, и оно является флагом фар. Я имею в виду, что каждый бит этого байта отвечает за свет каждой фары транспортного средства.
Код: Text
  1. {$CLEO}
  2. 0000:
  3.  
  4. while true //начало бесконечного цикла
  5.     wait 0 //задержка, чтобы игра обработала кадр
  6.    
  7.     if and //если игрок за рулем и нажал клавишу "H"
  8.         Actor.Driving($PLAYER_ACTOR)
  9.         05EE: key_pressed 0x48 // key "H"
  10.     then //тогда
  11.         03C0: 0@ = actor $PLAYER_ACTOR car //находим машину, в которой сидит игрок
  12.         05E7: 0@ = car 0@ struct //получаем структуру этой машины
  13.         0@ += 0x2B0 //прибавляем смещение
  14.         05E0: 1@ = read_memory 0@ size 1 virtual_protect 0 //считыванием состоянием флагов
  15.        
  16.         if //если фары выключены
  17.             1@ == 0
  18.         then //тогда устанавливаем все флаги
  19.             1@ = 0xFF //в двоичном представление это число выглядит так: 11111111
  20.         else //иначе сбрасываем все флаги
  21.             1@ = 0 //в двоичном представление это число выглядит так: 00000000
  22.         end //конец проверки
  23.        
  24.         05DF: write_memory 0@ size 1 value 1@ virtual_protect 0 //записываем получившиеся значение обратно
  25.         wait 250 //маленькая задержка, чтобы фары не переключались мгновенно
  26.     end  //конец первой проверки
  27.    
  28. end //конец бесконечного цикла
Название: Re: Помощь с CLEO
Отправлено: egor230 от Июль 31, 2017, 07:17:32 pm
GeniusZ, спасибо Вам огромное, Вам скрипт работает идеально, чувствует  большой опыт в работе с памятью. Здесь полный ноль.
Благодарю Вам за понятного объяснение.
Можно, с Вашего позволения вопрос, почему мы пишем virtual_protect 0, не virtual_protect 1, чтобы снять защиту с памяти.
Скажите, пожалуйста, есть такой опкод, который записывает  ближайшую машину в переменную.
Хочу провести такой эксперимент, в миссии "водитель" остановить машину хилари, и выкинуть его, что будет?
Название: Re: Помощь с CLEO
Отправлено: GeniusZ от Июль 31, 2017, 08:39:31 pm
Вся память программы состоит из кода и данных, и, чтобы программа случайно не натворила что-нибудь с кодом, на него устанавливается защита. Чтобы ее снять, надо писать virtual_protect 1(когда мы, конечно, модифицируем код и знаем что делаем).

Скажите, пожалуйста, есть такой опкод, который записывает  ближайшую машину в переменную.
053E: $Car = get_random_car_with_actors -1 in_area $2556 $2658 $445 $446
Название: Re: Помощь с CLEO
Отправлено: egor230 от Август 02, 2017, 08:56:47 am
 GeniusZ, спасибо Вам огромное, что просвещает своей мудрости меня в этой области. Если бы не было Вашего замечательного форум, люди вроде меня не развивались.
Значит мы пишем 1 только когда модифицируем код памяти.
Благодарю Вас за нужный опкод.
Пытаюсь написать скрипт, чтобы машина рядом заглохла, но получаю лишь вылет. Если у Вас есть время, подскажите, пожалуйста, где мои ошибки?
{$CLEO .cs}

//-------------MAIN---------------
0000: NOP
:1   
wait 0   
if   
 05EE: key_pressed 71
jf @1     
:2           
 wait 30   
if   
 85EE: not key_pressed 71
jf @2
04C4: store_coords_to 1@ 2@ 3@ from_actor $PLAYER_ACTOR with_offset 60.0 60.0 0.0
04C4: store_coords_to 4@ 5@ 6@ from_actor $PLAYER_ACTOR with_offset -60.0 -60.0 0.0
053E: 10@ = get_random_car_with_actors -1 in_area 1@ 2@ 4@ 5@
jf @1//
02D4: car 10@ turn_off_engine 0     
jump @1 
Название: Re: Помощь с CLEO
Отправлено: GeniusZ от Август 02, 2017, 01:48:45 pm
Код: Text
  1. {$CLEO .cs}
  2.  
  3. //-------------MAIN---------------
  4. 0000: NOP
  5. :1    
  6. wait 0    
  7. if    
  8.  05EE: key_pressed 71
  9. jf @1      
  10. :2          
  11.  wait 30    
  12. if    
  13.  85EE: not key_pressed 71
  14. jf @2
  15. 04C4: store_coords_to 1@ 2@ 3@ from_actor $PLAYER_ACTOR with_offset 60.0 60.0 0.0
  16. 04C4: store_coords_to 4@ 5@ 6@ from_actor $PLAYER_ACTOR with_offset -60.0 -60.0 0.0
  17. 053E: 10@ = get_random_car_with_actors -1 in_area 1@ 2@ 4@ 5@
  18. //jf @1 - не правильно закомментировали
  19. 02D4: car 10@ turn_off_engine 0    
  20. jump @1  
Название: Re: Помощь с CLEO
Отправлено: egor230 от Август 02, 2017, 08:49:57 pm
 GeniusZ, спасибо Вам большое исправления.
Сегодня, написал скрипт, что машина по нажатию клавиши G, ехала к Вам, работает очень криво. Думаю, как сделать чтобы машина подъезжала быстро и аккуратно. Помогите, пожалуйста, в этом.
{$CLEO .cs}

//-------------MAIN---------------
0000: NOP
:1   
wait 0
01EB: set_traffic_density_multiplier_to 0.0
if   
 05EE: key_pressed 70
jf @1   
actor.storepos($PLAYER_ACTOR, 1@ 2@ 3@)//
if
0AE2: 0@ = random_vehicle_near_point 1@ 2@ 3@ in_radius 20.0 find_next 0 pass_wrecked 1 //IF and SET
jf @1     
0186: 4@ = create_marker_above_car 0@
020A: set_car 0@ door_status_to 1
:3
wait 10
if   
 05EE: key_pressed 71
jf @3     
04C4: create_coordinate 5@ 6@ 7@ from_actor $PLAYER_ACTOR offset 0.0 0.0 0.0

:4
00A8: set_car 0@ to_psycho_driver
04BA: set_car 0@ speed_instantly 70.0
:5
02C2: car 0@ drive_to_point 5@ 6@ 7@
wait 100
01AF: car 0@ 0 5@ 6@ 7@  radius 1.0 1.0 1.0
01C1: car 0@ stopped
0164: disable_marker 4@
jump @1

сделать чуть лучше, но машина едет слишком медленно.
{$CLEO .cs}

//-------------MAIN---------------
0000: NOP
:1   
wait 0
01EB: set_traffic_density_multiplier_to 0.0
if   
 05EE: key_pressed 70
jf @1   
actor.storepos($PLAYER_ACTOR, 1@ 2@ 3@)//
if
0AE2: 0@ = random_vehicle_near_point 1@ 2@ 3@ in_radius 20.0 find_next 0 pass_wrecked 1 //IF and SET
jf @1     
0186: 4@ = create_marker_above_car 0@
020A: set_car 0@ door_status_to 1
:3
wait 10
if   
 05EE: key_pressed 71
jf @3     
04C4: create_coordinate 5@ 6@ 7@ from_actor $PLAYER_ACTOR offset 0.0 0.0 0.0
:4
wait 100
00AE: set_vehicle 0@ traffic_behavior_to 3

:5
02C2: car 0@ drive_to_point 5@ 6@ 7@
wait 100
if
01AF: car 0@ 0 5@ 6@ 7@  radius 1.0 1.0 1.0
jf @5     
01C1: car 0@ stopped
0164: disable_marker 4@
wait 100
02D4: car 0@ turn_off_engine 1
jump @1

наконец-то, доработал скрипт, машина подъезжает к томми быстро, только застраивает часто.
{$CLEO .cs}

//-------------MAIN---------------
0000: NOP
:1   
wait 0
if   
 05EE: key_pressed 70
jf @1   
actor.storepos($PLAYER_ACTOR, 1@ 2@ 3@)//
0AE2: 0@ = random_vehicle_near_point 1@ 2@ 3@ in_radius 20.0 find_next 0 pass_wrecked 1 //IF and SET
jf @1     
0186: 4@ = create_marker_above_car 0@
020A: set_car 0@ door_status_to 1
:3
wait 10
if   
 05EE: key_pressed 71
jf @3     
04C4: create_coordinate 5@ 6@ 7@ from_actor $PLAYER_ACTOR offset 0.0 0.0 0.0
02C1: set 8@ 9@ 10@ to_car_path_coords_closest_to 5@ 6@ 7@
wait 100
00AE: set_vehicle 0@ traffic_behavior_to 5.0
Car.SetMaxSpeed(0@, 60.0)
:5
02C2: car 0@ drive_to_point 8@ 9@ 10@
00AE: unknown_set_car 0@ to_ignore_traffic_lights 2 
wait 100
if or
0495: car 0@ burning
02BF: car 0@ sunk
0119: car 0@ wrecked
01F4: car 0@ flipped
0203: actor $PLAYER_ACTOR near_car 0@ radius 5.0 5.0 5.0
jf @5
0164: disable_marker 4@
:2
if
 0203: actor $PLAYER_ACTOR near_car 0@ radius 5.0 5.0 5.0
jf @5     
02D4: car 0@ turn_off_engine 0
wait 100
jump @1


 Здравствуйте, всем.
Прошу прощения, что Вас отвлекают от дел.
Всю игру прошел с автоприцелом, но на mp4, прицел от первого лица.
С помощью этого скрипта, можно стрелять с автоприцелом.
{$CLEO .CS}
thread 'AUTOAIM'

:START
wait 0
Player.Defined($PLAYER_CHAR)
jf @START
jump @DATHING

:DATHING
wait 0
05DF: write_memory 0x5349DB size 2 value 0x9090 virtual_protect 1 //M4
05DF: write_memory 0x5349E0 size 2 value 0x9090 virtual_protect 1 //Ruger
05DF: write_memory 0x5349E5 size 2 value 0x9090 virtual_protect 1 //M60
05DF: write_memory 0x5349D1 size 2 value 0x9090 virtual_protect 1 //sniper rifle (29)
05DF: write_memory 0x5349D6 size 2 value 0x9090 virtual_protect 1 //sniper rifle (28)
05DF: write_memory 0x5349C8 size 2 value 0x9090 virtual_protect 1 //rocket launcher
jf @DATHING
jump @START
но с ним снайперки и базуки не стрелять вообще. Скажите, пожалуйста, какие адреса разблокируют стрельбу без прицела от первого лица?.
Теперь машина подъезжает быстро к томми.
{$CLEO .cs}     

//-------------MAIN---------------
0000: NOP
:1   
wait 0
if   
 05EE: key_pressed 70
jf @1   
actor.storepos($PLAYER_ACTOR, 1@ 2@ 3@)//
0AE2: 12@ = random_vehicle_near_point 1@ 2@ 3@ in_radius 20.0 find_next 0 pass_wrecked 1 //IF and SET
jf @1     
0186: 0@ = create_marker_above_car 12@
:GUL_102
0001: wait 200 ms
if   
 05EE: key_pressed 71
jf @GUL_102   
0208: 1@ = random_float 70.0 120.0
0208: 2@ = random_float 70.0 120.0
04C4: create_coordinate 3@ 4@ 5@ from_actor $PLAYER_ACTOR offset 1@ 2@ 100.0
02C1: set 9@ 10@ 11@ to_car_path_coords_closest_to 3@ 4@ 5@
:2
0001: wait 10 ms
00AB: put_car 12@ at 9@ 10@ 11@
if
01B0: car 12@ stopped 1 9@ 10@ 11@ radius 5.0 5.0 5.0
jf @2
00AE: set_vehicle 12@ traffic_behavior_to 5.5
0423: set_car 12@ improved_handling_to 1.5
00AE: unknown_set_car 12@ to_ignore_traffic_lights 2 
04C4: create_coordinate 6@ 7@ 8@ from_actor $PLAYER_ACTOR offset 5.0 5.0 0.0
02AC: set_car 12@ immunities 1 1 1 1 1
01EC: make_car 12@ very_heavy 1
03AB: set_car 12@ strong 1
00A7: car 12@ drive_to 6@ 7@ 8@
00AD: set_car 12@ max_speed_to 120.0
04BA: set_car 12@ speed_instantly 70.0
:GUL_516 
0001: wait 10 ms
00D6: if or
03CE: car 12@ stuck
01F4: car 12@ flipped
020D: car 12@ flipped
02BF: car 12@ sunk
jf @2
0001: wait 10 ms
00D6: if
0202: actor $PLAYER_ACTOR near_car 12@ radius 5.0 5.0 sphere 0
004D: jump_if_false @GUL_516
0164: disable_marker 0@
0001: wait 200 ms
02D4: car 12@ turn_off_engine 1
02AC: set_car 12@ immunities  0 0 0 0 0
01EC: make_car 12@ very_heavy 0
03AB: set_car 12@ strong 0
0001: wait 40 ms   
0002: jump @1
Название: Re: Помощь с CLEO
Отправлено: egor230 от Август 25, 2017, 06:47:58 pm

Подскажите, пожалуйста, почему машина и маркер, никак не удаляются после открытия передней двери авто, которая подъехала к нам? Куда их поставить, чтобы удалились?
{$CLEO .cs}
{$NOSOURCE}
0000:
:1
wait 0
if
05EE: key_pressed 69
jf @1
actor.storepos($PLAYER_ACTOR, 1@ 2@ 3@)//
wait 500
0AE2: 10@ = random_vehicle_near_point 1@ 2@ 3@ in_radius 30.0 find_next 0 pass_wrecked 1 //IF and SET
if
gosub @4
004D: jf @1
wait 200
0186: 0@ = create_marker_above_car 10@
046C: 4@ = car 10@ driver
if
not 4@ == -1
jf @3
03E2: actor 4@ exit_car
:3
0001: wait 200 ms
01C2: remove_references_to_actor 4@
0001: wait 10 ms
00D6: if
0202: actor $PLAYER_ACTOR near_car 10@ radius 5.0 5.0 sphere 0
004D: jump_if_false @3
0001: wait 40 ms
if
gosub @5
then
0@ = 15
1@ = 2
gosub @left_front_door
end
:4
if and
8137: not car 10@ id = 166
8137: not car 10@ id = 178
8137: not car 10@ id = 191
8137: not car 10@ id = 192
8137: not car 10@ id = 193
8137: not car 10@ id = 198
004D: jf @1
return
:5
if and
6@ = 0x59D1D0
7@ = 0x5A9810
8@ = 0x59C890
9@ = 0x59CF50
return
:left_front_door
05E7: 10@ = car 10@ struct
0085: 11@ = 10@
05E4: call_function_method 6@ struct 11@ num_params 1 pop 0 0@ {1..19} 2@ // IsComponentPresent
if
2@ == 1
then
0085: 3@ = 10@
3@ += 0x2A0 // CDamageManager
05E4: call_function_method 7@ struct 3@ num_params 1 pop 0 1@ {0..5} 4@ // GetComponnetStatus
if
4@ <> 3
then
for 12@ = 0.0 TO 1.0 step 0.1
05E3: call_function_method 9@ struct 10@ num_params 3 pop 0 12@ 1@ 0@ {1..19} // CAutomobile__OpenDoor ???
wait 0
end
05E3: call_function_method 9@ struct 10@ num_params 3 pop 0 12@ 1@ 0@ {1..19} // CAutomobile__OpenDoor ???
end
end
return
01C3: remove_references_to_car 10@
0164: disable_marker 0@
jump @1

Название: Re: Помощь с CLEO
Отправлено: Shagg_E от Август 27, 2017, 12:32:19 am
1) Зачем директива "{$NOSOURCE}"?
Ты же сам на предыдущей странице сталкивался с тем, какие проблемы возникают, когда автор какого-нибудь скрипта блокирует доступ к исходникам своего скрипта. Всё это стопорит моддинг, без взаимопомощи и открытых исходников мы бы до сих пор умели только скины в игре менять(и то - лишь те, что в папке skins)... И это касается не только моддинга.

2) Мне кажется, ты до сих пор не понимаешь даже свой собственный код(возможно - потому что копируешь его откуда-то не глядя). То у тебя в коде "jf @1", то "004D: jf @1", то вообще "004D: jump_if_false @3"(то же самое с "wait" и "if"); то у тебя низкоуровневый, то высокоуровневый код - что за непостоянство?

3) Почему у тебя какой-то код после "return"?
Ты понимаешь, что командой "return" ты делаешь возврат на точку, из которой был вызван gosub, и код после "return" уже не читается? Именно поэтому маркер не исчезает.

4) Зачем всюду невпопад распиханы ненужные задержки wait то по 200, то по 40, или даже 10 миллисекунд?

5) Код представляет собой непонятный венегрет, плюс я не использовал никогда условный gosub, поэтому понятия не имею, сработают ли мои правки, но вот:
Код: Text
  1. {$CLEO .cs}
  2. 0000:
  3.  
  4. :1
  5. wait 0
  6. if
  7. 05EE: key_pressed 69
  8. jf @1
  9. actor.storepos($PLAYER_ACTOR, 1@ 2@ 3@)//
  10. if
  11. 0AE2: 10@ = random_vehicle_near_point 1@ 2@ 3@ in_radius 30.0 find_next 0 pass_wrecked 1 //IF and SET
  12. jf @1
  13. if
  14. gosub @4
  15. jf @1
  16. 0186: 0@ = create_marker_above_car 10@
  17. 046C: 4@ = car 10@ driver
  18. if
  19. not 4@ == -1
  20. jf @3
  21. 03E2: actor 4@ exit_car
  22.  
  23. :3
  24. 01C2: remove_references_to_actor 4@
  25. if
  26. 0202: actor $PLAYER_ACTOR near_car 10@ radius 5.0 5.0 sphere 0
  27. jf @3
  28. if
  29. gosub @5
  30. then
  31. 0@ = 15
  32. 1@ = 2
  33. gosub @left_front_door
  34. end
  35. 01C3: remove_references_to_car 10@
  36. 0164: disable_marker 0@
  37. jump @1
  38.  
  39. :4
  40. if and
  41. 8137: not car 10@ id = 166
  42. 8137: not car 10@ id = 178
  43. 8137: not car 10@ id = 191
  44. 8137: not car 10@ id = 192
  45. 8137: not car 10@ id = 193
  46. 8137: not car 10@ id = 198
  47. 004D: jf @1
  48. return
  49.  
  50. :5
  51. if and
  52. 6@ = 0x59D1D0
  53. 7@ = 0x5A9810
  54. 8@ = 0x59C890
  55. 9@ = 0x59CF50
  56. return
  57.  
  58. :left_front_door
  59. 05E7: 10@ = car 10@ struct
  60. 0085: 11@ = 10@
  61. 05E4: call_function_method 6@ struct 11@ num_params 1 pop 0 0@ {1..19} 2@ // IsComponentPresent
  62. if
  63. 2@ == 1
  64. then
  65. 0085: 3@ = 10@
  66. 3@ += 0x2A0 // CDamageManager
  67. 05E4: call_function_method 7@ struct 3@ num_params 1 pop 0 1@ {0..5} 4@ // GetComponnetStatus
  68. if
  69. 4@ <> 3
  70. then
  71. for 12@ = 0.0 TO 1.0 step 0.1
  72. 05E3: call_function_method 9@ struct 10@ num_params 3 pop 0 12@ 1@ 0@ {1..19} // CAutomobile__OpenDoor ???
  73. wait 0
  74. end
  75. 05E3: call_function_method 9@ struct 10@ num_params 3 pop 0 12@ 1@ 0@ {1..19} // CAutomobile__OpenDoor ???
  76. end
  77. end
  78. return


P.S. И пожалуйста. ПОЖАЛУЙСТА. Прочитай справку Sanny Builder полностью, чтобы понимать, что ты кодишь. Или хотя бы интересуйся значением каждой команды, которую используешь в своих скриптах, а не бездумно копируй. Лично с моей стороны пропадает всякое желание и силы помогать, когда с твоей стороны не видно желание учиться.
Название: Re: Помощь с CLEO
Отправлено: egor230 от Сентябрь 05, 2017, 05:15:13 pm
Здравствуйте, уважаемый  Shagg_E
Огромное спасибо за Ваш ответ.
Директиву  "{$NOSOURCE}" использует Vital https://www.youtube.com/watch?v=t626LNNH2qY&list=PLFAE331B20083DBCC (https://www.youtube.com/watch?v=t626LNNH2qY&list=PLFAE331B20083DBCC)
Чтобы легко вносить изменения, не было проблем с декомпиляции с скрипта.
Вы совершенно правы, еще нахожусь между низкоуровневый и высокоуровневый скриптнигом,  высокоуровневый более продвинутый, привыкаю к нему, хотя низкоуровневый более легкий.

Благодарю за Ваш совет о "return" теперь где ошибка.
Да задержек много лишних, но если не поставить после 3 лейба задержку то будет вылет.
А почему Вы используйте условный gosub?
Читаю, изучаю, набиваю шишки, но больше понимаю.
Очень ценю Ваше терпение, что так подробно объясняйте. Здорово, что есть форум с умными людьми, от которых много чему научиться.
Вот написал пару скриптов, они работают, но Вам лучше знать, как можно красивее и короче их писать.
взорвать 2 машины около томми
{$CLEO .cs}
0000:
:0
wait 0
if
0256: player $PLAYER_CHAR defined
then
01C3: remove_references_to_car 4@
01C3: remove_references_to_car 5@
if
0ADC: test_cheat "g"
then
wait 10
actor.StorePos($player_actor 0@ 1@ 2@)
if
0AE2: 4@ = random_vehicle_near_point 0@ 1@ 2@ in_radius 30.0 find_next 0 pass_wrecked 1 //IF and SET
then
020B: explode_car 4@
if
0AE2: 5@ = random_vehicle_near_point 0@ 1@ 2@ in_radius 30.0 find_next 4@ pass_wrecked 1 //IF and SET
then
020B: explode_car 5@
end
end
end
end
jump @0

и

Теперь катана, топор и мачете, отрубает голову с первого удара.
{$CLEO .cs}
wait 0
while true
if
0256: player $PLAYER_CHAR defined
then
01C2: remove_references_to_actor 0@
end
wait 0
if
00E1: player 0 pressed_button 17
then
if or
02D8: actor $PLAYER_ACTOR current_weapon == 8
02D8: actor $PLAYER_ACTOR current_weapon == 9
02D8: actor $PLAYER_ACTOR current_weapon == 10
then
wait 10
04C4: create_coordinate 1@ 2@ 3@ from_actor $PLAYER_ACTOR offset 0.0 1.2 0.0
0AE1: 0@ = random_actor_near_point 1@ 2@ 3@ in_radius 1.2 find_next 0 pass_deads 1
if
not 0@ == -1
then
wait 500
0321: kill_actor 0@
end
end
end
end
Название: Re: Помощь с CLEO
Отправлено: Shagg_E от Сентябрь 09, 2017, 12:35:45 am
Директива "{$NOSOURCE}" наоборот мешает тому, чтобы было "легко вносить изменения". При декомпиляции скрипта последняя версия Sanny Builder (https://sannybuilder.com/index.html) дает выбор - открыть исходный код, включенный в скрипт, или же декомпилировать скрипт. Именно при первом варианте как раз-таки "легко вносить изменения"(очевидно же), однако если в скрипт была внесена директива "{$NOSOURCE}" - исходного кода в скрипте не окажется, и редактор сможет лишь декомпилировать скрипт, т.е. потеряется его есходный вид и всякие комментарии.

Цитировать
А почему Вы используйте условный gosub?

Я же написал, что просто отредактировал тот скрипт "на глазок", убрав самые явные ошибки, но я понятия не имею, получился ли в итоге рабочий код, т.к. нет времени на тесты этого винегрета.

Цитировать
взорвать 2 машины около томми

Опкод 01C3 применяется, чтобы удалить автомобиль из списка неудаляемых объектов(т.е. чтобы машина снова могла исчезнуть за спиной и не портила сохранения). Однако он не требуется при использовании опкода 0AE2, т.к. последний не вносит найденную машину в этот список.
Кроме того, даже если бы опкод 01C3 требовался - он стоит не на своем месте.

Так же не стоит использовать опкод 0ADC с одной буквой - он для чит-кодов. Если хочешь сделать "клавишу активации" - используй
Код: Text
  1. 0AB0: key_pressed 0x47

Вот итоговый код(взрывает 2 машины около игрока при наборе чит-кода "blow2"):
Код: Text
  1. {$CLEO .cs}
  2. 0000:
  3.  
  4. :0  // начало цикла
  5. wait 0  // если не ставить хоть какую-нибудь задержку - цикл будет бесконечно "быстро" выполняться, не давая игре работать(т.е. она повиснет)
  6. if and  //(1 ветка) если И(and обозначает, что дальнейшие условия должны выполнться только вместе)...
  7.     0256: player $PLAYER_CHAR defined  // ...игрок существует...
  8.     0ADC: test_cheat "blow2"  // ...И введен чит "blow2"
  9. then  // тогда
  10.     actor.StorePos($player_actor, 0@, 1@, 2@)  // записываем координаты позиции игрока в переменные  0@ 1@ 2@
  11.     if  //(2 ветка) если...
  12.         0AE2: 3@ = random_vehicle_near_point 0@ 1@ 2@ in_radius 30.0 find_next 0 pass_wrecked 1  // ...найдена НЕ ВЗОРВАННАЯ(pass_wrecked 1 - пропуск взорванных) машина в радиусе 30.0 юнитов(игровых метров) от точки со координатами 0@ 1@ 2@ (find_next 0 обозначает, что мы НАЧИНАЕМ "сканировать" местность на наличие машин)
  13.     then  // тогда
  14.         020B: explode_car 3@  // взрываем найденную машину
  15.         if  //(3 ветка) если...
  16.             0AE2: 3@ = random_vehicle_near_point 0@ 1@ 2@ in_radius 30.0 find_next 1 pass_wrecked 1  // ...найдена НЕ ВЗОРВАННАЯ(pass_wrecked 1 - пропуск взорванных) машина в радиусе 30.0 юнитов(игровых метров) от точки со координатами 0@ 1@ 2@ (find_next 1 обозначает, что мы ПРОДОЛЖАЕМ "сканировать" местность на наличие машин)
  17.         then  // тогда
  18.             020B: explode_car 3@  // взрываем найденную машину
  19.         end  // закрытие 3 ветки
  20.     end  // закрытие 2 ветки
  21. end  // закрытие 1 ветки
  22. jump @0  // цикл начинается заного с метки "0"

Цитировать
Теперь катана, топор и мачете, отрубает голову с первого удара.

Опять то же замечание по поводу опкода 01C2. Он не нужен при использовании 0AE1. И опять-таки - даже если бы опкод 01C2 требовался - он стоит не на своем месте.

Итоговый код такой:
Код: Text
  1. {$CLEO .cs}
  2. 0000:
  3.  
  4. while true  // начало главного бесконечного цикла(1) (можно использовать вместо способа из первого скрипта)
  5.     wait 0  // если не ставить хоть какую-нибудь задержку - цикл будет бесконечно "быстро" выполняться, не давая игре работать(т.е. она повиснет)
  6.     if  //(1 ветка) если...
  7.         0256: player $PLAYER_CHAR defined  // ...игрок существует...
  8.     then  // тогда
  9.         if  //(2 ветка) если...
  10.         00E1: player 0 pressed_button 17  // ...И нажата клавиша "огонь"(ЛКМ по-умолчанию)
  11.         then  // тогда
  12.             if or  //(3 ветка) если ИЛИ...
  13.                 02D8: actor $PLAYER_ACTOR current_weapon == 8  // ...оружие в руках игрока - мясницкий нож...
  14.                 02D8: actor $PLAYER_ACTOR current_weapon == 9  // ...ИЛИ оружие в руках игрока - мачете...
  15.                 02D8: actor $PLAYER_ACTOR current_weapon == 10  // ...ИЛИ оружие в руках игрока - катана...
  16.             then  // тогда
  17.                 04C4: create_coordinate 1@ 2@ 3@ from_actor $PLAYER_ACTOR offset 0.0 1.2 0.0  // записываем координаты позиции игрока с оффсетом 0.0 1.2 0.0 (вперед на 1.2 юнита, т.е. метра) в переменные  1@ 2@ 3@
  18.                 if  //(4 ветка) если...
  19.                     0AE1: 0@ = random_actor_near_point 1@ 2@ 3@ in_radius 1.2 find_next 0 pass_deads 1  // ...найден НЕ МЕРТВЫЙ(pass_deads 1 - пропуск мертвых) актер в радиусе 1.2 юнита(игровых метра) от точки со координатами 1@ 2@ 3@ (find_next 0 обозначает, что мы НАЧИНАЕМ "сканировать" местность на наличие актеров)
  20.                 then  // тогда
  21.                     0321: kill_actor 0@  // убить актера
  22.                     while 0AE1: 0@ = random_actor_near_point 1@ 2@ 3@ in_radius 1.2 find_next 1 pass_deads 1  // следующий бесконечный цикл(2) выполняется, пока выполняется условие: ЕСЛИ ...найден НЕ МЕРТВЫЙ(pass_deads 1 - пропуск мертвых) актер в радиусе 1.2 юнита(игровых метра) от точки со координатами 1@ 2@ 3@ (find_next 1 обозначает, что мы ПРОДОЛЖАЕМ "сканировать" местность на наличие актеров)
  23.                         0321: kill_actor 0@  // убить актера
  24.                     end  // закрытие бесконечного цикла(2)
  25.                 end  // закрытие 4 ветки
  26.             end  // закрытие 3 ветки
  27.         end  // закрытие 2 ветки
  28.     end  // закрытие 1 ветки
  29. end  // закрытие главного бесконечного цикла(1)

Но, как ты сможешь заметить при тестах - такая реализация работает не так, как задумывалось: головы "отрубаются" не после удара, а сразу как только игрок нажмет кнопку "огонь".
Можно было бы конечно запилить кучу проверок с таймерами и прочим, но зачем, если отрубание голов с первого раза уже сделали:
http://www.gtagarage.com/mods/show.php?id=28361 (http://www.gtagarage.com/mods/show.php?id=28361)
тема на форумсах с исходным кодом:
http://gtaforums.com/topic/881281-lethal-slices/ (http://gtaforums.com/topic/881281-lethal-slices/)
Название: Re: Помощь с CLEO
Отправлено: egor230 от Сентябрь 10, 2017, 09:46:35 pm
Уважаемый Shagg_E
Теперь понятно, директива "{$ NOSOURCE}", мешает вносит изменения, теряются комментарии. Благодарю за подробное разъяснение, Вы очень много время на меня потратили. Думаю, наша переписка поможет другим людям.
Gosub многие используют, чтоб выглядел скрипт более компактным.
Опкод 01C3 не нужен, являться лишним. Это очень ценный совет. Действительно зачем лишний опкод в скрипте.
Насчет опкода  0ADC очень дельный совет, теперь использовать его.
Опять моя ошибка в "отрубание" с опкодом 01с3.
Нужно дорабатывать, добавить таймер, проверку уменьшилось здоровье актера.
Cleo, чем он нравится один и тот же скрипт, написать разными способами.
Вот написал так.
Код: Javascript
  1. {$CLEO .cs}
  2. 0000:
  3. while true
  4. wait 0
  5. if // (1 ветка)
  6. 0256:  player $PLAYER_CHAR defined
  7. then
  8. if // (2 ветка)
  9. 00E1: player 0 press_button 17
  10. then
  11. if or // (3 ветка)
  12. 02D8: actor $PLAYER_ACTOR current_weapon == 8
  13. 02D8: actor $PLAYER_ACTOR current_weapon == 9
  14. 02D8: actor $PLAYER_ACTOR current_weapon == 10
  15. then  
  16. 04C4: create_coordinate 1@ 2@ 3@ from_actor $PLAYER_ACTOR offset 0.0 1.2 0.0  
  17. if   // (4 ветка)
  18. 0AE1: 0@ = random_actor_near_point 1@ 2@ 3@ in_radius 1.2 find_next 0 pass_deads 1
  19. then
  20. 5@ = 0
  21. 6@ = 16                                                                                                      
  22. repeat
  23. wait 0
  24. 5@ += 1
  25. until 003B: 5@ == 6@
  26. if  // (5 ветка)
  27. 8039: not 0@ == -1
  28. then  
  29. 0321: kill_actor 0@
  30. end
  31. end
  32. end  
  33. end
  34. end
  35. end
  36.  

в бесконечных циклах нельзя использовать wait 0, так это приводит к вылету. Использовал цикл repeat until. Пока не умею пользоваться таймерами в циклах, но буду учиться.   
Название: Re: Помощь с CLEO
Отправлено: Shagg_E от Сентябрь 10, 2017, 11:35:00 pm
Цитировать
Gosub многие используют, чтоб выглядел скрипт более компактным.
Да, я и сам его использую по этой же причине(как и scm-функции). Но вот условный gosub не использовал(не было нужды), поэтому и не могу помочь с ним.

Цитировать
Опкод 01C3 не нужен, являться лишним
Он был лишним конкретно в том случае. Иногда он необходим(когда сам создаешь актера, например, и необходимо, чтобы он исчезал за спиной или вдалеке).

Цитировать
Насчет опкода  0ADC очень дельный совет, теперь использовать его.
Да, он удобен для создания чит-кодов. А для опкода 0AB0 номера клавиш можно найти в справке SannyBuilder в разделе CLEO 3 Code Library/Список значений кнопок для 0AB0

Цитировать
Вот написал так.
Проверка
Код: Text
  1. 8039: not 0@ == -1
в данном случае не нужна, поскольку опкод 0AE1 здесь уже используется, как условие. Т.е. актер уже точно найден.

Цитировать
Пока не умею пользоваться таймерами в циклах, но буду учиться.
Таймерами являются переменные 16@ и 17@. Они начинают свой отсчет сразу при старте скрипта, даже если ты их не используешь.
Пользоваться легко - достаточно сбросить их значение на ноль, а потом в нужное время проверять их значение.
Отсчет идет в миллисекундах. 1000 миллисекунд=1 секунде.

Вот вариант кода с таймером:
Код: Text
  1. {$CLEO .cs}
  2. 0000:
  3. while true
  4.     wait 0
  5.     if // (1 ветка)
  6.         0256:  player $PLAYER_CHAR defined
  7.     then
  8.         if // (2 ветка)
  9.             00E1: player 0 press_button 17
  10.         then
  11.             if or // (3 ветка)
  12.                 02D8: actor $PLAYER_ACTOR current_weapon == 8
  13.                 02D8: actor $PLAYER_ACTOR current_weapon == 9
  14.                 02D8: actor $PLAYER_ACTOR current_weapon == 10
  15.             then
  16.                 04C4: create_coordinate 1@ 2@ 3@ from_actor $PLAYER_ACTOR offset 0.0 1.2 0.0
  17.                 if   // (4 ветка)
  18.                     0AE1: 0@ = random_actor_near_point 1@ 2@ 3@ in_radius 1.2 find_next 0 pass_deads 1
  19.                 then
  20.                     16@ = 0 // таймер сброшен
  21.                     repeat
  22.                         wait 0
  23.                     until 0019:   16@ > 1000  // проверка, прошло ли 500 миллисекунд(0.5 секунды)
  24.                     0321: kill_actor 0@
  25.                 end
  26.             end
  27.         end
  28.     end
  29. end

В данном случае можно также просто обойтись простым wait:
Код: Text
  1. {$CLEO .cs}
  2. 0000:
  3. while true
  4.     wait 0
  5.     if // (1 ветка)
  6.         0256:  player $PLAYER_CHAR defined
  7.     then
  8.         if // (2 ветка)
  9.             00E1: player 0 press_button 17
  10.         then
  11.             if or // (3 ветка)
  12.                 02D8: actor $PLAYER_ACTOR current_weapon == 8
  13.                 02D8: actor $PLAYER_ACTOR current_weapon == 9
  14.                 02D8: actor $PLAYER_ACTOR current_weapon == 10
  15.             then
  16.                 04C4: create_coordinate 1@ 2@ 3@ from_actor $PLAYER_ACTOR offset 0.0 1.2 0.0
  17.                 if   // (4 ветка)
  18.                     0AE1: 0@ = random_actor_near_point 1@ 2@ 3@ in_radius 1.2 find_next 0 pass_deads 1
  19.                 then
  20.                     wait 500
  21.                     0321: kill_actor 0@
  22.                 end
  23.             end
  24.         end
  25.     end
  26. end

...и с проверкой здоровья:
Код: Text
  1. {$CLEO .cs}
  2. 0000:
  3. while true
  4.     wait 0
  5.     if // (1 ветка)
  6.         0256:  player $PLAYER_CHAR defined
  7.     then
  8.         if // (2 ветка)
  9.             00E1: player 0 press_button 17
  10.         then
  11.             if or // (3 ветка)
  12.                 02D8: actor $PLAYER_ACTOR current_weapon == 8
  13.                 02D8: actor $PLAYER_ACTOR current_weapon == 9
  14.                 02D8: actor $PLAYER_ACTOR current_weapon == 10
  15.             then
  16.                 04C4: create_coordinate 1@ 2@ 3@ from_actor $PLAYER_ACTOR offset 0.0 1.2 0.0
  17.                 if   // (4 ветка)
  18.                     0AE1: 0@ = random_actor_near_point 1@ 2@ 3@ in_radius 1.2 find_next 0 pass_deads 1
  19.                 then
  20.                     0226: 1@ = actor 0@ health // записываем первоначальное здоровье актера
  21.                     wait 500
  22.                     0226: 2@ = actor 0@ health // записываем здоровье актера спустя 500 миллисекунд
  23.                     if
  24.                         001D:   1@ > 2@  // если здоровье уменьшилось
  25.                     then
  26.                         0321: kill_actor 0@
  27.                     end
  28.                 end
  29.             end
  30.         end
  31.     end
  32. end


И наконец - самый корректный вариант: проверяем здоровье актера во время работы таймера(пока не прошло 1000 миллисекунд).
Если здоровье потратилось - актер, а затем и весь цикл проверки таймера - "убиваются":
Код: Text
  1. {$CLEO .cs}
  2. 0000:
  3. while true
  4.     wait 0
  5.     if // (1 ветка)
  6.         0256:  player $PLAYER_CHAR defined
  7.     then
  8.         if // (2 ветка)
  9.             00E1: player 0 press_button 17
  10.         then
  11.             if or // (3 ветка)
  12.                 02D8: actor $PLAYER_ACTOR current_weapon == 8
  13.                 02D8: actor $PLAYER_ACTOR current_weapon == 9
  14.                 02D8: actor $PLAYER_ACTOR current_weapon == 10
  15.             then
  16.                 04C4: create_coordinate 1@ 2@ 3@ from_actor $PLAYER_ACTOR offset 0.0 1.2 0.0
  17.                 if   // (4 ветка)
  18.                     0AE1: 0@ = random_actor_near_point 1@ 2@ 3@ in_radius 1.2 find_next 0 pass_deads 1
  19.                 then
  20.                     0226: 1@ = actor 0@ health // записываем первоначальное здоровье актера
  21.                     16@ = 0 // таймер сброшен
  22.                     repeat
  23.                         wait 0
  24.                         0226: 2@ = actor 0@ health
  25.                         if
  26.                             001D:   1@ > 2@  // если здоровье уменьшилось
  27.                         then
  28.                             0321: kill_actor 0@
  29.                             break // "убиваем" цикл repeat, поскольку мы сделали, что хотели с актером
  30.                         end
  31.                     until 0019:   16@ > 1000 // проверка, прошло ли 1000 миллисекунд(1.0 секунды)
  32.                 end
  33.             end
  34.         end
  35.     end
  36. end


В игре не проверял, так что мог что-нибудь упустить...
Название: Re: Помощь с CLEO
Отправлено: egor230 от Сентябрь 11, 2017, 11:06:40 pm
Уважаемый  Shagg_E спасибо Вам огромное за Ваш ответ, Ваши скрипты работают идеально, так многому научился общаясь с умным человеком.
Сначала пишу низкоуровневый код, потом Gosub делают не таким громоздким.
Опкод 01C3 нужен при создании актеров, чтобы не засорят память.
Опкод 0ADC очень полезно использовать во высокоуровневым коде, он там удобнее
8039: not 0 @ == -1 опять моя ошибка- лишняя проверка.
Теперь можно вместо wait использовать таймеры.
Думал, в бесконечных циклах нежелательно использовать wait.
Вы очень гениально использует оператор break, он в моих скриптах приводит к вылетам.
Все работает как часы.
В vc выбор оружия неудобный, нельзя нажать 6 и взять снайперку, как в других играх.
Решил исправить,  для удобства использую SCM функцию, но она не работает.
Не пойму в чем причина? Подскажите, пожалуйста.
Вот сделать часть для холодного оружия.
{$CLEO .cs}
0000:
:1
 wait 0
 if   
05EE:   key_pressed 49  // VK_...
jf @1
0006: 0@ = #cleaver // integer values
0006: 1@ = 8 // integer values
0AB1: call_scm_func @5 2 0@ 1@ var_ret 0
wait 900                       
:2
if and
05EE:   key_pressed 49  // VK_...           
02D8: actor $PLAYER_ACTOR current_weapon == 8     
jf @2
0006: 0@ = #machete // integer values
0006: 1@ = 9 // integer values
0AB1: call_scm_func @5 2 0@ 1@ var_ret 0
wait 900                       
:3
if and
05EE:   key_pressed 49  // VK_...           
02D8: actor $PLAYER_ACTOR current_weapon == 9   
jf @3
0006: 0@ = #katana // integer values
0006: 1@ = 10 // integer values
0AB1: call_scm_func @5 2 0@ 1@ var_ret 0
wait 900                         
:4
if and
05EE:   key_pressed 49  // VK_...           
02D8: actor $PLAYER_ACTOR current_weapon == 10   
jf @4
0006: 0@ = #bat // integer values
0006: 1@ = 6 // integer values
0AB1: call_scm_func @5 2 0@ 1@ var_ret 0
jump @1 
:5
 repeat
 wait 0
 Model.Load(0@)
 until Model.Available(0@)
 01B2: give_actor $PLAYER_ACTOR weapon 1@ ammo 0
 Model.Destroy(0@)
0AB2: ret 0   
Название: Re: Помощь с CLEO
Отправлено: Shagg_E от Сентябрь 11, 2017, 11:43:46 pm
Я не понял - тебе нужно выдавать новое оружие или выбирать то, что находится в слоте холодного оружия?
Если второе - то вот код:
Код: Text
  1. {$CLEO .cs}
  2. 0000:
  3.  
  4. :1
  5. wait 0
  6. if and
  7.    Player.Defined($PLAYER_CHAR)  
  8. 05EE:   key_pressed 49  // 1
  9. jf @1
  10. 04B8: get_weapon_data_from_player $player_actor slot 2 weapon 0@ ammo 1@ model 2@ // записываем оружие игрока в слоте 2(ручное оружие): номер оружия - в 0@, патроны - в 1@, модель - в 2@
  11. 01B8: set_player $player_char armed_weapon_to 0@ // задаем игроку текущее оружие, которое у него есть в слоте 2
  12. jump @1
Название: Re: Помощь с CLEO
Отправлено: egor230 от Сентябрь 11, 2017, 11:55:51 pm
Shagg_E, спасибо большое за столь быстрый ответ. оружие выдается новое scm функция передает через переменные номер оружия, которое выдается игроку, нажал 1 получил топор, нажал 1 - мечете.
Конечно, можно и так.
wait 0
if   
05EE:   key_pressed 49  // VK_...
jf @1
 repeat
 wait 0
 Model.Load(#cleaver)
 until Model.Available(#cleaver)
 01B2: give_actor $PLAYER_ACTOR weapon 8 ammo 0
 Model.Destroy(#cleaver)
тогда слишком громоздкий код получится
Название: Re: Помощь с CLEO
Отправлено: Shagg_E от Сентябрь 12, 2017, 02:10:49 am
Тогда нужно так:
Код: Text
  1. {$CLEO .cs}
  2. 0006: 1@ = 6
  3.  
  4. :1
  5. wait 0
  6. if and
  7.    Player.Defined($PLAYER_CHAR)  
  8. 05EE:   key_pressed 49  // проверка, что нажата клавиша 1
  9. jf @1
  10.  
  11. :1a
  12. wait 0
  13. if
  14.    Player.Defined($PLAYER_CHAR)
  15. jf @1
  16. if      
  17. 85EE:   NOT key_pressed 49  // проверка, что отпущена клавиша 1
  18. jf @1a
  19. if
  20. 0039:   1@ == 6
  21. jf @2
  22. 0006: 0@ = #cleaver // integer values
  23. 0006: 1@ = 8 // integer values
  24. 0AB1: call_scm_func @5 2 0@ 1@ var_ret 0
  25. jump @1                      
  26.  
  27. :2
  28. if
  29. 0039:   1@ == 8
  30. jf @3
  31. 0006: 0@ = #machete // integer values
  32. 0006: 1@ = 9 // integer values
  33. 0AB1: call_scm_func @5 2 0@ 1@ var_ret 0
  34. jump @1                      
  35.  
  36. :3
  37. if
  38. 0039:   1@ == 9
  39. jf @4
  40. 0006: 0@ = #katana // integer values
  41. 0006: 1@ = 10 // integer values
  42. 0AB1: call_scm_func @5 2 0@ 1@ var_ret 0
  43. jump @1                        
  44.  
  45. :4
  46. if
  47. 0039:   1@ == 10
  48. jf @1
  49. 0006: 0@ = #bat // integer values
  50. 0006: 1@ = 6 // integer values
  51. 0AB1: call_scm_func @5 2 0@ 1@ var_ret 0
  52. jump @1
  53.  
  54. :5
  55. repeat
  56. wait 0
  57. Model.Load(0@)
  58. until Model.Available(0@)
  59. 01B2: give_actor $PLAYER_ACTOR weapon 1@ ammo 0
  60. Model.Destroy(0@)
  61. 0AB2: ret 0

P.S. Кстати.
Если при копировании моего кода в SB весь код сдвигается вправо(предполагаю, что это неудобно) - выдели его(ctrl+a например) и нажми Shift+Tab.
Этим действием ты сдвинешь все выделенные строки на 1 табуляцию влево.
Название: Re: Помощь с CLEO
Отправлено: egor230 от Сентябрь 12, 2017, 07:30:53 am
Спасибо огромное уважаемый Shagg_E
Все работает идеальное!
Я в неописуемым восторге от Вашего мастерства! Как здорово, что Вы мне нашли время ответить. Полдня ломал голову почему SCM функция не работает. Вы в 2 счета сумею заставить ее работать!!!! Восхищаюсь Вами.   
Название: Re: Помощь с CLEO
Отправлено: egor230 от Сентябрь 12, 2017, 09:55:07 am
Подскажите, пожалуйста, уважаемый Shagg_E
Как правильно пользоваться scm функции с возвратом параметров? Ее использую, что сделать более компактным.
{$CLEO .cs}
0006: 1@ = 7
:1
wait 0
if     
0AB0: key_pressed 0x31
jf @1
if
0039:   1@ == 7
jf @2
0AB1: call_scm_func @fun1 3 #cleaver 8 0 var_ret 3 0@ 1@ 2@ 
gosub @sab
jump @1

:fun1
0006: 0@ = 0@ // integer values
0006: 1@ = 1@ // integer values
0006: 2@ = 2@ // integer values
0AB2: ret 3 0@ 1@ 2@       

весь скрипт
{$CLEO .cs}
0006: 1@ = 7
:1
wait 0
if     
0AB0: key_pressed 0x31
jf @1
if
0039:   1@ == 7
jf @2
0AB1: call_scm_func @fun1 3 #cleaver 8 0 var_ret 3 0@ 1@ 2@ 
gosub @sab
jump @1
                 
:2
if
0039:   1@ == 8
jf @3
0006: 0@ = #machete // integer values
0006: 1@ = 9 // integer values 
0006: 2@ = 0 // integer values
gosub @sab
jump @1                       
:3
if
0039:   1@ == 9
jf @4
0006: 0@ = #katana // integer values
0006: 1@ = 10 // integer values
0006: 2@ = 0 // integer values
gosub @sab
jump @1                         
:4
if
0039:   1@ == 10
jf @5
0006: 0@ = #bat // integer values
0006: 1@ = 6 // integer values
0006: 2@ = 0 // integer values
gosub @sab
jump @1                 
:5
if
0039:   1@ == 6
jf @6
0006: 0@ = #chnsaw // integer values
0006: 1@ = 11 // integer values
0006: 2@ = 0 // integer values
gosub @sab       
jump @1                 
:6
if
0039:   1@ == 11
jf @7
0006: 0@ = #brassknuckle // integer values
0006: 1@ = 1 // integer values
0006: 2@ = 0 // integer values
gosub @sab
jump @1                 
:7
if
0039:   1@ == 1
jf @8
0006: 0@ = #screwdriver // integer values
0006: 1@ = 2 // integer values
0006: 2@ = 0 // integer values
gosub @sab
jump @1                 
:8
if
0039:   1@ == 2
jf @9
0006: 0@ = #golfclub // integer values
0006: 1@ = 3 // integer values
0006: 2@ = 0 // integer values
gosub @sab
jump @1                     
:9
if
0039:   1@ == 3
jf @10
0006: 0@ = #nitestick // integer values
0006: 1@ = 4 // integer values
0006: 2@ = 0 // integer values
gosub @sab
jump @1                 
:10
if
0039:   1@ == 4
jf @11
0006: 0@ = #knifecur// integer values
0006: 1@ = 5 // integer values
0006: 2@ = 0 // integer values
gosub @sab
jump @1                 
:11
if
0039:   1@ == 5
jf @1
0006: 0@ = #hammer// integer values
0006: 1@ = 7 // integer values
0006: 2@ = 0 // integer values
gosub @sab
jump @1
:sab
0AB1: call_scm_func @fun 3 0@ 1@ 2@ var_ret 0   
wait 900
return
:fun
repeat
wait 0
Model.Load(0@)
until Model.Available(0@)
01B2: give_actor $PLAYER_ACTOR weapon 1@ ammo 2@
Model.Destroy(0@)
0AB2: ret 0

:fun1
0006: 0@ = 0@ // integer values
0006: 1@ = 1@ // integer values
0006: 2@ = 2@ // integer values
0AB2: ret 3 0@ 1@ 2@       



попробовал так вылет

{$CLEO .cs}
0006: 1@ = 7
:1
wait 0
if     
0AB0: key_pressed 0x31
jf @1
if
0039:   1@ == 7
jf @2
0AB1: call_scm_func @fun 3 #cleaver 8 0 var_ret 1 1@ 
wait 900
jump @1
:2
if
0039:   1@ == 8
jf @3
0AB1: call_scm_func @fun 3 #machete 9 0 var_ret 1 1@ 
wait 900
jump @1                   
:fun
repeat
wait 0
Model.Load(0@)
until Model.Available(0@)
01B2: give_actor $PLAYER_ACTOR weapon 1@ ammo 2@
Model.Destroy(0@)
0AB2: ret 1 1@             


так тоже вылет голову уже сломал
{$CLEO .cs}
0006: 1@ = 7
:1
wait 0
if     
0AB0: key_pressed 0x31
jf @1
if
0039:   1@ == 7
jf @2
0AB1: call_scm_func @fun 3 #cleaver 8 0 var_ret 3 0@ 1@ 3@
wait 900
jump @1
:2
if
0039:   1@ == 8
jf @3
0AB1: call_scm_func @fun 3 #machete 9 0 var_ret 3 0@ 1@ 3@
wait 900
jump @1                   
:fun
repeat
wait 0
Model.Load(0@)
until Model.Available(0@)
01B2: give_actor $PLAYER_ACTOR weapon 1@ ammo 2@
Model.Destroy(0@)
0AB2: ret 3 0@ 1@ 3@                   
Название: Re: Помощь с CLEO
Отправлено: Shagg_E от Сентябрь 12, 2017, 04:51:22 pm
Про scm-функции я подробно писал тут (http://forum.gtabuilder.ru/index.php?topic=271.msg1689#msg1689).

К сожалению, времени на примеры у меня больше не осталось, так что я надеюсь, что ты разберешься с написанным в том посте.
Название: Re: Помощь с CLEO
Отправлено: egor230 от Сентябрь 12, 2017, 09:49:38 pm
Спасибо уважаемый Shagg_E больше!
Очень полезная информация, немного не понял вот, что.
Мы передаем в call_scm_func @fun params_count 3 параметра модель оружия, тип, кол-во патронов,
Чтобы они записались в переменные 0@ 1@ 2@ и в дальнейшим их использовать в другой функции, где создается и выдается оружия игроку. Но я получаю вылет.
Помогите мне, пожалуйста. 
{$CLEO .cs}
0006: 1@ = 7
:1
wait 0
if     
0AB0: key_pressed 0x31
jf @1
if
0039:   1@ == 7
jf @2
05F6: call_scm_func @fun params_count 3 #cleaver 8 0 0@ 1@ 2@
gosub @sab
jump @1
:fun
0006: 0@ = 0@ // integer values
0006: 1@ = 1@ // integer values
0006: 2@ = 2@ // integer values
0AB2: ret 3 0@ 1@ 2@       
:sab
0AB1: call_scm_func @fun1 3 0@ 1@ 2@ var_ret 0 
wait 900
return
:fun1
repeat
wait 0
Model.Load(0@)
until Model.Available(0@)
01B2: give_actor $PLAYER_ACTOR weapon 1@ ammo 2@
Model.Destroy(0@)
0AB2: ret 0             
:2
if
0039:   1@ == 8
jf @1
05F6: call_scm_func @fun params_count 3 #machete 9 0 0@ 1@ 2@
gosub @sab
jump @1 
                     
Название: Re: Помощь с CLEO
Отправлено: Shagg_E от Сентябрь 12, 2017, 10:21:35 pm
0AB1: call_scm_func @fun1 3 0@ 1@ 2@ var_ret 0не нужно писать "var_ret 0". Просто сразу пишешь получаемые параметры. А поскольку тут их нет - ничего вообще писать не нужно:
0AB1: call_scm_func @fun1 3 0@ 1@ 2@и всё.
Посмотри внимательно в том посте, ссылку на который я скинул. Там про всё это написано
Название: Re: Помощь с CLEO
Отправлено: egor230 от Сентябрь 15, 2017, 07:37:41 am
Спасибо за Ваш ответ уважаемый  Shagg_E
Вы мне очень помогли Вашим советом.
Решил проблему, сделав скрипт путем увеличения порядкового номера модели ход. оружия (они расположены последовательно начиная 258 и закачивая 269). Старался сделать скрипт компактным высокоуровневым кодом. Все работает! По нажатию клавиши 1 идет переключения оружия ближнего боя. Хотел, чтобы по нажатию клавиши 2 переключались пистолеты (colt45 и python), но почему-то не работает. Никак не могу понять причину! Если у Вас будет свободное время, подскажите, пожалуйста, очень Вашего ответа.
{$CLEO .cs}
0000:           
0006: 0@ = 258 // начало диапазона ход. оружия
0006: 1@ = 0 //  начало диапазона типа ход. оружия
0006: 3@ = 273 // начало диапазона пистолета
0006: 4@ = 16 //  начало диапазона типа пистолета
:1
while true
wait 0
if // (1 ветка)
0256:   player $PLAYER_CHAR defined // игрок жив
then
if // (2 ветка)     
0AB0: key_pressed 0x31 // клавиши 1 нажата
then
gosub @sab // сдвиг модели ход. оружия на 1 перед
if // (3 ветка) 
8039: not 0@ == 270 //проверка это конец диапазона ход. оружия
then
gosub @sab1 // функция загр. модели ход. оружия
else
gosub @sab2 // возврат начала диапазона ход. оружия 
if // (4 ветка)     
0AB0: key_pressed 0x32 // клавиши 1 нажата
then
gosub @sab11 // сдвиг модели пистолетов на 1 перед
if // (4 ветка) 
8039: not 3@ == 276  // проверка это конец диапазона ход. оружия
then                                                                           
gosub @sab22 // функция загр. пистолетов
else
gosub @sab33 // возврат начала диапазона пистолетов
end
end
end
end
end
end
jump @1   
:sab11
000A: 3@ += 1 
000A: 4@ += 1 
0006: 5@ = 200
return   
:sab22 // функция загр. пистолетов
0AB1: call_scm_func @fun 3 3@ 4@ 5@ var_ret 0 
wait 900 // задержка между переключениями оружия 
return
:sab33
0006: 3@ = 273
0006: 4@ = 16       
return               
:sab                                   
000A: 0@ += 1 
000A: 1@ += 1 
0006: 2@ = 0
return
:sab1 // функция загр. модели ход. оружия
0AB1: call_scm_func @fun 3 0@ 1@ 2@ var_ret 0 
wait 900 // задержка между переключениями оружия 
return
:fun
repeat
wait 0
Model.Load(0@)
until Model.Available(0@)
01B2: give_actor $PLAYER_ACTOR weapon 1@ ammo 2@
Model.Destroy(0@)
0AB2: ret 0
:sab2
0006: 0@ = 258
0006: 1@ = 0
return       
Название: Re: Помощь с CLEO
Отправлено: egor230 от Сентябрь 16, 2017, 12:43:06 pm
Здравствуйте все. Нашёл очень интересный скрипт на просторах интернета, который позволяет перезагружать другие скрипты не выходя из игры для нее перезапуска. Это позволяет редактировать скрипт что называется на "ходу". Очень экономя своё время. Конечно, этот скрипт можно улучшать, но он имеет один недостаток. Нужно написать имя каждого потока и скрипта который мы хотим перезапустить. Что не очень удобно. Можно сделать так, чтобы он автоматически находил их сам? Например, из файла cleo. Может asi плагин? Прикрепляю исходник.

{$CLEO}
0000: NOP     
thread "REBOOT"     
 
:REBOOTC     
wait 0
if and     
0ab0: key_pressed 15 //заменяем на свою
0ab0: key_pressed 16 //заменяем на свою
Player.Defined(0)     
jf @REBOOTC     
0ABA: end_custom_thread_named 'rbt'
while true
wait 50
if and
0ab0: key_pressed 15 //заменяем на свою
0ab0: key_pressed 16 //заменяем на свою
then break
end
end     
0A92: create_custom_thread "rebootc.cs"  //тут указываем название скрипта перезагрузки .” у меня это rebootc
wait 1000
thread 'rbt'     
0ABA: end_custom_thread_named 'ffaa' //название перезагружаемого потока
wait 50     
0A92: create_custom_thread "asdf.cs" //название перезагружаемого скрипта, с вышеуказанным потоком
0acd: show_text_high_priority "Script was reloaded" time 1000     
wait 1000     
jump @REBOOTC
[code=php]
Название: Re: Помощь с CLEO
Отправлено: Shagg_E от Сентябрь 17, 2017, 01:46:30 am
Цитировать
Хотел, чтобы по нажатию клавиши 2 переключались пистолеты (colt45 и python), но почему-то не работает.
Достаточно использовать табуляцию(сдвиг строк на 4 пробела при нажатии клавижи TAB), чтобы увидеть, что проверка второй клавиши находится где-то не там:
:1
while true
    wait 0
    if // (1 ветка)
        0256:   player $PLAYER_CHAR defined // игрок жив
    then
        if // (2 ветка)     
            0AB0: key_pressed 0x31 // клавиши 1 нажата
        then
            gosub @sab // сдвиг модели ход. оружия на 1 перед
            if // (3 ветка)
                8039: not 0@ == 270 //проверка это конец диапазона ход. оружия
            then
                gosub @sab1 // функция загр. модели ход. оружия
            else
                gosub @sab2 // возврат начала диапазона ход. оружия
                if // (4 ветка)     
                    0AB0: key_pressed 0x32 // клавиши 1 нажата
                then
                    gosub @sab11 // сдвиг модели пистолетов на 1 перед
                    if // (4 ветка)
                        8039: not 3@ == 276  // проверка это конец диапазона ход. оружия
                    then                                                                           
                        gosub @sab22 // функция загр. пистолетов
                    else
                        gosub @sab33 // возврат начала диапазона пистолетов
                    end
                end
            end
        end
    end
end
jump @1


Цитировать
Нужно написать имя каждого потока и скрипта который мы хотим перезапустить. Что не очень удобно. Можно сделать так, чтобы он автоматически находил их сам? Например, из файла cleo.
А как игра узнает, какой именно скрипт нужно перезагрузить? Тогда уж перезагружать сразу все. Но ведь многие скрипты по-просто не расчитаны на перезагрузку. Да и к тому же: представленный код перезагрузки вполне удобно юзать, когда работаешь над каким-нибудь одним скриптом. Ты же не работаешь над несколькими одновременно, поэтому не вижу проблемы 1 раз изменить код перезагрузки, заменив название перезагружаемого скрипта, чтобы потом спокойно тестировать и работать над своим скриптом...
Название: Re: Помощь с CLEO
Отправлено: egor230 от Сентябрь 17, 2017, 05:50:53 pm
Спасибо большое ответ, уважаемый Shagg_E. Вы очень мудрый человек, учусь от Вас))))))))
Благодарю Вас за совет по табуляции, люблю когда код скрипта идет ровно.
Исправил, переключается все оружия, 1 ход оружия 2 пистолеты 3 дробовики.
Вместо wait использовать таймер, иначе оружия не загружалось, Томми стрелять пустыми руками)))
Нагрузка большая для движка 2002 года.
Скрипт перезагрузки скрипта можно улучшить, создав ini файл.
Cleo имеет сильные ограничения, писать на нем мисси ад!
Можно ли как- улучшить Sanny Builder 3? Например, сразу выдался определенный шаблон, как {$CLEO .cs}, 0000, 1:, jump @.
Там есть интересный пункт добавить. Только сменил тему, сделав похожим на редактор atom.
Очень хочу освоить lua vice, жаль нету уроков, хотя бы один скрипт написать.
Этот скрипт, только гранаты не меняет, буду проверять на отдельном скрипте.

{$CLEO .cs}
0000:           
0006: 0@ = 258 // начало диапазона ход. оружия
0006: 1@ = 0 //  начало диапазона типа ход. оружия
0006: 3@ = 273 // начало диапазона пистолета
0006: 4@ = 16 //  начало диапазона типа пистолетов
0006: 5@ = 275 // начало диапазона дробовиков
0006: 6@ = 18 //  начало диапазона типа дробовика
0006: 7@ = 280 // начало диапазона автоматов
0006: 8@ = 21 //  начало диапазона типа автоматов
0006: 9@ = 286 // начало диапазона тяжелого оружия
0006: 10@ = 29 //  начало диапазона типа тяжелого оружия 
0006: 11@ = 269 // начало диапазона гранат
0006: 12@ = 11 //  начало диапазона типа гранат
:1                                   
while true
wait 0
if // (1 ветка)
0256:   player $PLAYER_CHAR defined // игрок жив             
then     
if // (2 ветка)     
0AB0: key_pressed 0x31 // клавиши 1 нажата
jf @2
gosub @sab // сдвиг модели ход. оружия на 1 перед
if // (3 ветка) 
0039:  0@ == 270 //проверка это конец диапазона ход. оружия
then
gosub @sab1 // возврат начала диапазона ход. оружия   
else
gosub @sab2 // функция загр. модели ход. оружия
jump @1     
:2
if // (5 ветка)     
0AB0: key_pressed 0x32 // клавиши 2 нажата
jf @3                                           
gosub @sab11 // сдвиг модели пистолетов на 1 перед
if // (6 ветка) 
0039:  3@ == 276  // проверка это конец диапазона пистолетов
then                                                                           
gosub @sab22 // возврат начала диапазона пистолетов
else
gosub @sab33 // функция загр. пистолетов
jump @1     
:3
if // (7 ветка)     
0AB0: key_pressed 0x33 // клавиши 3 нажата
jf @4                                           
gosub @sab1d // сдвиг модели дробовиков на 1 перед
if // (8 ветка) 
0039: 5@ == 279  // проверка это конец диапазона дробовиков
then                                                                           
gosub @sab2d // возврат начала диапазона дробовиков
else
gosub @sab3d // функция загр. дробовиков
jump @1 
:4
if // (9 ветка)     
0AB0: key_pressed 0x34 // клавиши 4 нажата
jf @5                                           
gosub @sab1a // сдвиг модели автоматов на 1 перед
if // (10 ветка) 
0039: 7@ == 285  // проверка это конец диапазона автоматов
then                                                                           
gosub @sab2a // возврат начала диапазона автоматов
else
gosub @sab3a // функция загр. автоматов
jump @1
:5
if // (11 ветка)     
0AB0: key_pressed 0x35 // клавиши 5 нажата
jf @6       
if
0039: 1@ == 27
then                                                         
gosub @sabm4 // функция загр. m4   
else
gosub @sabkr  // функция загр. крюгер m4
jump @1   
:6
if // (12 ветка)     
0AB0: key_pressed 0x36 // клавиши 6 нажата
jf @7
if
0039: 1@ == 29
then                                                         
gosub @sabls // лазерная загр. винтовки 
else
gosub @sabsp // обычной загр. винтовки
jump @1
:7
if // (13 ветка)     
0AB0: key_pressed 0x37 // клавиши 7 нажата
jf @8                                               
gosub @sabhard // сдвиг модели тяжелого оружия на 1 вперед
if // (4 ветка) 
0039: 9@ == 291  // проверка это конец диапазона тяжелого оружия
then                                                                           
gosub @sabhard1 // возврат начала диапазона тяжелого оружия 
else
gosub @sabhard2 // функция загр. тяжелого оружия
jump @1
:8
if // (4 ветка)     
0AB0: key_pressed 0x38 // клавиши 8 нажата
jf @1                                     
gosub @grena // сдвиг модели гранат на 1 вперед
if // (4 ветка) 
0039: 11@ == 273  // проверка это конец диапазона гранат
then                                                                           
gosub @grena1 // возврат начала диапазона гранат 
else
gosub @grena2 // функция загр. гранат
end
end
end
end
end
end
end
end
end
end
jump @1
:sabsp // функция загр. пистолетов
0006: 0@ = 285
0006: 1@ = 28 
0006: 2@ = 200
0AB1: call_scm_func @fun 3 0@ 1@ 2@
gosub @delay // задержка между переключениями оружия 
return
:sabls // функция загр. пистолетов
0006: 0@ = 286
0006: 1@ = 29 
0006: 2@ = 200
0AB1: call_scm_func @fun 3 0@ 1@ 2@
gosub @delay // задержка между переключениями оружия
return
:sabm4 // функция загр. mp4
0006: 0@ = 280
0006: 1@ = 26 
0006: 2@ = 200
0AB1: call_scm_func @fun 3 0@ 1@ 2@
gosub @delay // задержка между переключениями оружия
0006: 1@ = 26
return
:grena
000A: 11@ += 1 
000A: 12@ += 1 
0006: 2@ = 200
return   
:grena1
0006: 11@ = 269
0006: 12@ = 11       
return       
:grena2 // функция загр. пистолетов 
0AB1: call_scm_func @fun 3 11@ 12@ 2@
gosub @delay // задержка между переключениями оружия 
return 
:sab1
0006: 0@ = 258
0006: 1@ = 0
return             
:sab                                   
000A: 0@ += 1 
000A: 1@ += 1 
0006: 2@ = 0
return     
:sab2 // функция загр. модели ход. оружия
0AB1: call_scm_func @fun 3 0@ 1@ 2@
gosub @delay // задержка между переключениями оружия
return
:sab11 // сдвиг модели пистолетов на 1 перед
000A: 3@ += 1 
000A: 4@ += 1 
0006: 2@ = 200
return   
:sab22  // возврат начала диапазона пистолетов
0006: 3@ = 273
0006: 4@ = 16       
return       
:sab33 // функция загр. пистолетов 
0AB1: call_scm_func @fun 3 3@ 4@ 2@
gosub @delay // задержка между переключениями оружия
return   
:sab1d // возврат начала диапазона дробовиков
000A: 5@ += 1 
000A: 6@ += 1 
0006: 2@ = 200
return   
:sab2d // возврат начала диапазона дробовиков
0006: 5@ = 275
0006: 6@ = 18       
return       
:sab3d // функция загр. дробовиков 
0AB1: call_scm_func @fun 3 5@ 6@ 2@
gosub @delay // задержка между переключениями оружия
return   
:sabm // функция загр. пистолетов 
0AB1: call_scm_func @fun 3 7@ 8@ 2@
gosub @delay // задержка между переключениями оружия
return                       
:sab1a
000A: 7@ += 1 
000A: 8@ += 1 
0006: 2@ = 200
return
:sab2a
0006: 7@ = 280
0006: 8@ = 21       
return       
:sab3a // функция загр. автоматов 
0AB1: call_scm_func @fun 3 7@ 8@ 2@
gosub @delay // задержка между переключениями оружия
return       
:sabhard
000A: 9@ += 1 
000A: 10@ += 1 
0006: 2@ = 200
return   
:sabhard1
0006: 9@ = 286
0006: 10@ = 29       
return       
:sabhard2 // функция загр. пистолетов 
0AB1: call_scm_func @fun 3 9@ 10@ 2@
gosub @delay // задержка между переключениями оружия
return   
:sabkr // функция загр. крюгер
0006: 0@ = 276
0006: 1@ = 27 
0006: 2@ = 200
0AB1: call_scm_func @fun 3 0@ 1@ 2@
gosub @delay // задержка между переключениями оружия 
0006: 1@ = 27
return
:fun
repeat
wait 0
Model.Load(0@)
until Model.Available(0@)
038B: load_requested_models
gosub @delay
01B2: give_actor $PLAYER_ACTOR weapon 1@ ammo 2@
Model.Destroy(0@)
0AB2: ret 0
:delay
16@ = 0
repeat
wait 0                 
until 0029: 16@ >= 300 // задержка между переключениями оружия
return
[code=html5]
Название: Re: Помощь с CLEO
Отправлено: egor230 от Сентябрь 26, 2017, 11:58:58 am
Здравствуйте, всем.
Подскажите, пожалуйста, умные люди. Я написал скрипт, чтобы по нажатию клавиши 1, приезжала полиция. По нажатию клавиши 2 приезжала скорая помощь. Конечно в будущем переделаю на 01,02,03. Но, понимаете полиция приезжает без проблем, а вот при вызове скорой идёт зависание, игра вылетает. Считаю что причина в типе педа. Хотя действовал по справке. Написал код скрипта как можно в более удобном виде для внесения изменений. Подскажите мне пожалуйста где я ошибся?. 
Код: Javascript
  1. {$CLEO .cs}
  2. 0000:
  3. 03A4: name_thread 'U'  
  4. :call
  5. wait 0
  6. if
  7. not Actor.Driving($PLAYER_ACTOR)
  8. jf @call
  9. 0AC8: 14@ = allocate_memory_size 260
  10. if
  11. 0AB0: key_pressed 0x61 // вызов полиции
  12. jf @call_2
  13. gosub @cop1  
  14. jump @call  
  15. :call_2
  16. if
  17. 0AB0: key_pressed 0x62 // вызов скорой помощи
  18. jf @call_3
  19. gosub @med1  
  20. jump @call  
  21. :call_3
  22. if
  23. 0AB0: key_pressed 0x63// вызов пожарных
  24. jf @call  
  25. gosub @fire1
  26. jump @call                    
  27. 0AC9: free_allocated_memory 14@                    
  28. 0ABA: end_custom_thread_named 'U'      
  29. :cop                            
  30. wait 100
  31. 0006: 0@ = #cop // Модель педа
  32. 0006: 1@ = #CELLPHONE
  33. 0006: 2@ = #nitestick
  34. 0006: 3@ = #colt45 // Модель оружие
  35. 0006: 4@ = #POLICE // Модель машины
  36. 0006: 15@ = 6 // Тип модели      
  37. return        
  38. :med
  39. wait 100
  40. 0006: 0@ = #MEDIC // Модель педа
  41. 0006: 1@ = #CELLPHONE
  42. 0006: 2@ = #nitestick
  43. 0006: 3@ = #colt45 // Модель оружие
  44. 0006: 4@ = #AMBULAN // Модель машины
  45. 0006: 15@ = 16 // Тип модели
  46. return            
  47. :fire
  48. wait 100
  49. 0006: 0@ = #FIREMAN // Модель педа
  50. 0006: 1@ = #CELLPHONE
  51. 0006: 2@ = #nitestick
  52. 0006: 3@ = #colt45 // Модель оружие
  53. 0006: 4@ = #FIRETRUK // Модель машины
  54. 0006: 15@ = 17 // Тип модели
  55. return                  
  56.                          
  57. :cop1  
  58. gosub @2 // Очистить переменные
  59. 0AD3: 14@ = format "~r~The police left for you, wait"
  60. gosub @cop
  61. gosub @5
  62. return                                                                                  
  63. :med1  
  64. gosub @2 // Очистить переменные        
  65. 0AD3: 14@ = format "~r~The ambulance goes to you"
  66. gosub @med
  67. gosub @5
  68. return  
  69. :fire1  
  70. gosub @2                                            
  71. 0AD3: 14@ = format "~r~The fire truck went to You"
  72. gosub @fire
  73. gosub @5
  74. return          
  75. :2
  76. wait 50  
  77. Model.Destroy(0@)
  78. Model.Destroy(2@)
  79. Model.Destroy(3@)
  80. Model.Destroy(4@)
  81. Actor.RemoveReferences(13@)
  82. Actor.RemoveReferences(14@)
  83. Car.RemoveReferences(12@)
  84. return
  85. :3
  86. wait 50
  87. Model.Load(0@)
  88. Model.Load(1@)
  89. Model.Load(2@)
  90. Model.Load(3@)
  91. Model.Load(4@)
  92. 038B: load_requested_models
  93. return
  94. :4
  95. wait 10
  96. if and
  97. 0248: model 0@ available
  98. 0248: model 1@ available
  99. 0248: model 2@ available
  100. 0248: model 3@ available
  101. 0248: model 4@ available
  102. jf @4
  103. 0AB2: ret 0
  104. :5
  105. 009A: 13@ = create_actor_pedtype 15@ model 0@ at 0.0 0.0 0.0
  106. gosub @3
  107. 0AB1: call_scm_func @4 4 0@ 1@ 2@ 4@ var_ret 0
  108. wait 10
  109. 052B: actor $PLAYER_ACTOR hold_cellphone 1
  110. wait 3500
  111. 052B: actor $PLAYER_ACTOR hold_cellphone 0
  112. wait 300
  113. Model.Destroy(1@) // выгрузить модель телефона из памяти
  114. wait 100
  115. 0208: 5@ = random_float 70.0 120.0
  116. 0208: 6@ = random_float 70.0 120.0
  117. 04C4: create_coordinate 7@ 8@ 9@ from_actor $PLAYER_ACTOR offset 5@ 6@ 100.0
  118. 02C1: set 9@ 10@ 11@ to_car_path_coords_closest_to 7@ 8@ 9@
  119. 12@ = Car.Create(4@, 9@, 10@, 11@)
  120. 00AE: set_vehicle 12@ traffic_behavior_to 2
  121. 0129: 13@ = create_actor 15@ 0@ in_car 12@ driverseat
  122. 04C4: create_coordinate 6@ 7@ 8@ from_actor $PLAYER_ACTOR offset 5.0 5.0 0.0
  123. 01EC: make_car 12@ very_heavy 1
  124. 03AB: set_car 12@ strong 1
  125. 0423: set_car 12@ improved_handling_to 1.5
  126. 00AE: unknown_set_car 12@ to_ignore_traffic_lights 2
  127. Car.DriveTo(12@, 6@, 7@, 8@)
  128. Car.SetMaxSpeed(12@, 30.0)
  129. 04BA: set_car 12@ speed_instantly 20.0
  130. 01B2: give_actor 13@ weapon 4 ammo 0
  131. 01B2: give_actor 13@ weapon 17 ammo 9999                                          
  132. 0AD1: show_formatted_text_highpriority 14@ time 3000
  133. :6
  134. wait 100              
  135. if
  136. 0202: actor $PLAYER_ACTOR near_car 12@ radius 10.0 10.0 sphere 0
  137. jf @6
  138. 01EC: make_car 12@ very_heavy 0
  139. 03E2: actor 13@ exit_car
  140. wait 3000
  141. gosub @2
  142. wait 600
  143. return      
  144.  
Название: Re: Помощь с CLEO
Отправлено: Shagg_E от Сентябрь 26, 2017, 02:24:41 pm
Глянул мельком... зачем ты создаешь актера 2 раза?
Тут:
Код: Text
  1. 009A: 13@ = create_actor_pedtype 15@ model 0@ at 0.0 0.0 0.0
и тут:
Код: Text
  1. 0129: 13@ = create_actor 15@ 0@ in_car 12@ driverseat
Затем еще удаляешь несуществующего актера:
Код: Text
  1. Actor.RemoveReferences(14@)

Насчет типа педа: попробуй поменять на civmale(номер 4).
Если после всех этих манипуляций вылеты не прекратятся - будем думать дальше...
Название: Re: Помощь с CLEO
Отправлено: mfisto от Сентябрь 26, 2017, 06:34:05 pm
Зачем в цикле использовать постояное выделение памяти?
0AC8: 14@ = allocate_memory_size 260
Название: Re: Помощь с CLEO
Отправлено: egor230 от Сентябрь 27, 2017, 11:56:39 am
Огромное спасибо уважаемый  Shagg_E, что заметили мою грубую ошибку. Благодаря Вашей наблюдательности, скрипт заработать. Да, действительно создал лишних.
Сейчас улучил скрипт, как мог, конечно, мне нереально далеко до Вас. Пытаюсь расти.
Уважаемый  mfisto выделил память для вывода на экран текста, потом освобождаю ее.
 Конечно, у меня не "прямые руки", но учусь. Моя мечта освоить vice lua, чтобы самому писать миссии.
Код: HTML5
  1. {$CLEO .cs}
  2. 0000:
  3. 03A4: name_thread 'service'  
  4. :call                              
  5. while true
  6. wait 0
  7. if // (1 ветка)
  8. 0256:   player $PLAYER_CHAR defined // игрок жив            
  9. then    
  10. if // (2 ветка)    
  11. not Actor.Driving($PLAYER_ACTOR)
  12. jf @call                                        
  13. 0AC8: 14@ = allocate_memory_size 260
  14. if // (3 ветка)  
  15. 0ADC: test_cheat "02" // вызов полиции        
  16. jf @call_2
  17. gosub @cop1          
  18. jump @call  
  19. :call_2
  20. if // (4 ветка)
  21. 0ADC: test_cheat "03" // вызов скорой помощи
  22. jf @call_3
  23. gosub @med1        
  24. jump @call  
  25. :call_3
  26. if // (5 ветка)  
  27. 0ADC: test_cheat "01" // вызов пожарных
  28. jf @call  
  29. gosub @fire1          
  30. 0AC9: free_allocated_memory 14@    
  31. jump @call            
  32. end
  33. end                                
  34. :cop                            
  35. wait 100
  36. 0006: 0@ = #cop // Модель педа
  37. 0006: 1@ = #CELLPHONE
  38. 0006: 2@ = #nitestick
  39. 0006: 3@ = #colt45 // Модель оружие
  40. 0006: 4@ = #POLICE // Модель машины
  41. 0006: 13@ = 6 // Тип модели      
  42. return        
  43. :med
  44. wait 100
  45. 0006: 0@ = #MEDIC // Модель педа
  46. 0006: 1@ = #CELLPHONE
  47. 0006: 2@ = #nitestick
  48. 0006: 3@ = #colt45 // Модель оружие
  49. 0006: 4@ = #AMBULAN // Модель машины
  50. 0006: 13@ = 16 // Тип модели
  51. return            
  52. :fire
  53. wait 100
  54. 0006: 0@ = #FIREMAN // Модель педа
  55. 0006: 1@ = #CELLPHONE
  56. 0006: 2@ = #nitestick
  57. 0006: 3@ = #colt45 // Модель оружие
  58. 0006: 4@ = #FIRETRUK // Модель машины
  59. 0006: 13@ = 17 // Тип модели
  60. return                                                      
  61. :cop1  
  62. gosub @2 // Очистить переменные
  63. 0AD3: 14@ = format "~r~The police left for you, wait"
  64. gosub @cop
  65. gosub @5
  66. return                                                                                  
  67. :med1  
  68. gosub @2 // Очистить переменные        
  69. 0AD3: 14@ = format "~r~The ambulance goes to you"
  70. gosub @med
  71. gosub @5
  72. return  
  73. :fire1  
  74. gosub @2                                            
  75. 0AD3: 14@ = format "~r~The fire truck went to You"
  76. gosub @fire
  77. gosub @5
  78. return          
  79. :2
  80. wait 50  
  81. Model.Destroy(0@) // удалить модель педа
  82. Model.Destroy(2@) // удалить модель первого оружие
  83. Model.Destroy(3@)  // удалить модель второго оружие
  84. Model.Destroy(4@)  // удалить модель машины            
  85. Actor.RemoveReferences(11@)        
  86. Actor.RemoveReferences(12@)
  87. Car.RemoveReferences(10@)
  88. return
  89. :3
  90. wait 50
  91. Model.Load(0@)
  92. Model.Load(1@)
  93. Model.Load(2@)
  94. Model.Load(3@)
  95. Model.Load(4@)
  96. 038B: load_requested_models
  97. return
  98. :4
  99. wait 10
  100. if and
  101. 0248: model 0@ available
  102. 0248: model 1@ available
  103. 0248: model 2@ available
  104. 0248: model 3@ available
  105. 0248: model 4@ available
  106. jf @4
  107. 0AB2: ret 0
  108. :5
  109. gosub @3
  110. 0AB1: call_scm_func @4 4 0@ 1@ 2@ 4@ var_ret 0
  111. wait 10
  112. 052B: actor $PLAYER_ACTOR hold_cellphone 1
  113. wait 3500
  114. 052B: actor $PLAYER_ACTOR hold_cellphone 0
  115. wait 300
  116. Model.Destroy(1@) // выгрузить модель телефона из памяти
  117. wait 100
  118. 0208: 5@ = random_float 70.0 120.0
  119. 0208: 6@ = random_float 70.0 120.0
  120. 04C4: create_coordinate 7@ 8@ 9@ from_actor $PLAYER_ACTOR offset 5@ 6@ 100.0
  121. 02C1: set 7@ 8@ 9@ to_car_path_coords_closest_to 7@ 8@ 9@
  122. 10@ = Car.Create(4@, 7@, 8@, 9@)
  123. 00AE: set_vehicle 10@ traffic_behavior_to 2
  124. 0129: 11@ = create_actor 13@ 0@ in_car 10@ driverseat
  125. 01C8: 12@ = create_actor_pedtype 13@ model 0@ in_car 10@ passenger_seat 0
  126. 04C4: create_coordinate 6@ 7@ 8@ from_actor $PLAYER_ACTOR offset 5.0 5.0 0.0
  127. 0397: enable_car 10@ siren 1
  128. 01EC: make_car 10@ very_heavy 1
  129. 03AB: set_car 10@ strong 1
  130. 0423: set_car 10@ improved_handling_to 1.5
  131. 00AE: unknown_set_car 10@ to_ignore_traffic_lights 2
  132. Car.DriveTo(10@, 6@, 7@, 8@)
  133. Car.SetMaxSpeed(10@, 30.0)
  134. 04BA: set_car 10@ speed_instantly 20.0
  135. 01B2: give_actor 11@ weapon 4 ammo 0
  136. 01B2: give_actor 11@ weapon 17 ammo 9999      
  137. 01B2: give_actor 12@ weapon 4 ammo 0
  138. 01B2: give_actor 12@ weapon 17 ammo 9999                                            
  139. 0AD1: show_formatted_text_highpriority 14@ time 3000
  140. :6
  141. wait 100              
  142. if
  143. 0202: actor $PLAYER_ACTOR near_car 10@ radius 10.0 10.0 sphere 0
  144. jf @6
  145. 0397: enable_car 1@ siren 0
  146. 01EC: make_car 10@ very_heavy 0            
  147. 03E2: actor 11@ exit_car
  148. 03E2: actor 12@ exit_car
  149. wait 3000
  150. gosub @2
  151. wait 600
  152. return      
  153.  
Название: Re: Помощь с CLEO
Отправлено: egor230 от Октябрь 02, 2017, 02:10:35 pm
Здравствуйте, всем.
Уважаемые очень умные люди, ценители классики.
Подскажите мне, пожалуйста.
Пытаюсь написать cleo миссии  для vc, она никак не запускается.
Голову можно сломать.
Помогите, пожалуйста. Буду очень Вам признателен.
Код: HTML5
  1. {$CLEO}
  2. 0000:  
  3. :STARTER
  4. thread 'STARTER'
  5. wait 0      
  6. if
  7. 0256: player $PLAYER_CHAR defined
  8. jf @STARTER
  9. if
  10. $ONMISSION == 0
  11. jf @STARTER
  12. 02A7: 0@ = create_icon_marker_and_sphere 34 at  77.3075 -879.1083 10.4481
  13. :STARTER_1
  14. wait 0
  15. if
  16. $ONMISSION == 1
  17. then
  18. marker.Disable(0@)
  19. jump @STARTER
  20. end
  21. if
  22. not actor.Driving($PLAYER_ACTOR)
  23. then
  24.  if
  25.  0102: actor $PLAYER_ACTOR in_sphere  77.3075 -879.1083 10.4481 radius 2.0 2.0 2.0 sphere 0 stopped_on_foot
  26.  then
  27.  jump @STARTER_2
  28.  end
  29. end
  30. jump @STARTER_1  
  31. :STARTER_2
  32. Marker.Disable(0@)  
  33. 00BE: text_clear_all
  34. 03E6: remove_text_box
  35. 00BA: show_text_styled GXT 'MISS_01' time 1000 style 2
  36. 0A94: start_custom_mission "MISSION"
  37. jump @STARTER

Код: Javascript
  1. {$CLEO .cm}
  2. :MISSION
  3. thread 'MISSION'
  4. gosub @MISSION_START // Старт миссии
  5. if
  6. wasted_or_busted // Игрок арестован или мертв
  7. jf @MISSION_COMPLETED // Миссия выполнена
  8. gosub @MISSION_FAILED // Провал миссии
  9. :MISSION_COMPLETED // Миссия выполнена
  10. $ONMISSION = 0 // Чтобы работали другие миссии
  11. mission_cleanup // Очистка после миссии
  12. end_thread
  13. :MISSION_START // Старт миссии
  14. increment_mission_attempts // команда, для того чтобы в статистике к попытке миссий прибавилось 1
  15. $ONMISSION = 1
  16. gosub @load // Загрузить актера
  17. 0@ = actor.Create(16, #MEDIC, 77.3075, -879.1083, 10.4481)
  18. actor.Angle(0@) = 199.2093 // Задать угол актеру
  19. fade 0 600 // Затемение экрана
  20. wait 600 // Задержка  
  21. fade 1 600 // Убрать затемение экрана
  22. 01CA: actor 0@ kill_player $player_char // Актер хочет убить игрока
  23. 1@ = marker.CreateAboveActor(0@) // Создать маркер над актером
  24. :MISSION_1      
  25. wait 0
  26. if actor.Dead(0@)
  27. then
  28. marker.Disable(1@)
  29. jump gosub @MISSION_2
  30. end
  31. jump @MISSION_1
  32. :load
  33. repeat
  34. wait 0
  35. model.Load(#MEDIC)
  36. 038B: load_requested_models
  37. until model.Available(#MEDIC)
  38. return
  39. :MISSION_2
  40. gosub @MISSION_END
  41. 01E3: show_text_1number_styled GXT 'M_PASS' number 1000 time 5000 style 1    
  42. 0394: play_music 1 // мелодия выполнение миссии
  43. Player.Money($PLAYER_CHAR) += 1000
  44. return
  45. :MISSION_FAILED // Провал миссии
  46. gosub @MISSION_END // Завершение миссии
  47. 00BA: show_text_styled GXT 'M_FAIL' time 5000 style 1 // MISSION FAILED
  48. 0394: play_music 2 // мелодия провала миссии
  49. return
  50. :MISSION_END // Завершение миссии
  51. actor.RemoveReferences(0@)
  52. marker.Disable(1@)
  53.  
Название: Re: Помощь с CLEO
Отправлено: Shagg_E от Октябрь 02, 2017, 03:34:14 pm
Так нельзя делать. Поскольку CLEO для Вайса не поддерживает CLEO-миссии - нужно писать миссию и её стартер в виде одного скрипта.
Также повторю то, что писал когда-то в начале темы: нельзя создавать маркеры в cleo-скриптах таким путем, поскольку это портит сохранения.

Добавил в аттаче пример миссии(SimpleMission.txt), которая запускается с помощью чит-кода "SMISSION".
Код миссии прокомментирован практически построчно.
Помимо самой миссии, в скрипте продемонстрировано выделение памяти под новые переменные(поскольку для большой миссии в дальнейшем могут понадобиться больше переменных, чем 16 стандартных локальных).
К сожалению, у меня нет времени на более подробные объяснения, так что надеюсь, что принцип будет понятен.

Также добавил еще один пример миссии(Mission.txt), который активируется с чит-кода "MISSIONSTART". Этот пример уже не мой, но написан по тому же принципу.
Название: Re: Помощь с CLEO
Отправлено: egor230 от Октябрь 03, 2017, 11:20:57 am
Спасибо огромное уважаемый Shagg_E.
Вы очень много сделал для доброго и хорошего.
Благодаря Вам, научился основам скриптинга!!!!!!!!
Очень жаль, что CLEO для vice city не поддерживает CLEO-миссии, может это можно исправить, путем изменение самой библиотеки.
Прекрасно понимаю, что создать маркеры в потоках. Они портят сохранения.
Вы прислали великолепный аттач, с очень подробными, пояснительными комментариями, к сожалению, он не компилируется.
Конечно, буду изучать, вникать, позволю выразить свое мнение- писать миссии на Cleo для vice сложно, поэтому их очень мало
На vice lua писать миссии легко, жаль недоработан.
Вот пример миссии, убить солдата.
Код: Javascript
  1. local pickup = -1;
  2. local actor_handle = -1;
  3. local handle_blip   = -1;
  4. local function mission_end()
  5.  ON_MISSION = 0
  6.  ClearBlip(handle_blip)
  7.  DestroyPickup(pickup)
  8.  CleanUpThisPed(actor_handle)
  9.  ReleaseModel(4) -- RELEASE ARMY
  10. end
  11. local function mission_failed()
  12.  GXT_AddBigMessageWithNumber("M_FAIL", 5000, 0)  
  13.  ICON_MISSION_1 = CreateBlip(4, 77.3075, -879.1083, 10.4481, 2, 3)
  14.  SetBlipSprite(ICON_MISSION_1, 5)
  15.  mission_end()
  16. end
  17. local function mission_complete()
  18.  GXT_AddBigMessageWithNumber("M_PASS", 5000, 0, 100)  
  19.  PlayMusic(1)
  20.  SetPlayerMoney(PLAYER_CHAR, GetPlayerMoney(PLAYER_CHAR) + 100)
  21.  MISSION_COMPLETE = 1
  22.  ICON_MISSION_1 = nil
  23.  ICON_MISSION_2 = CreateBlip(4, 77.3075, -879.1083, 10.4481, 2, 3)
  24.  SetBlipSprite(ICON_MISSION_2, 6)
  25.  mission_end()
  26. end
  27. function MISSION_1()
  28.   ON_MISSION = 1
  29.   MakePlayerSafe(PLAYER_CHAR, true)
  30.   CameraFade(3000, true)
  31.   Wait(3000)
  32.   CameraFade(3000, false)
  33.   CameraSetPositionAndRotation(61.6968, -853.02, 14.4633, 0, 0, 0)
  34.   CameraSetTargetPoint(77.3075, -879.1083, 10.4481, 2)           
  35.   Wait(3000)             
  36.   CameraRestore()      
  37.   MakePlayerSafe(PLAYER_CHAR, false)  
  38.   pickup = CreatePickup(5, 3, 25.3015, -873.775, 10.4633)
  39.   handle_blip = SetBlipTieToPickup(pickup, 6, 3);
  40.   ChangeBlipScale(handle_blip, 3)
  41.   ChangeBlipColour(handle_blip, 0xFFFFFF55)
  42.  while true do
  43.  if IsPickupPickedUp(pickup) then
  44.       ClearBlip(handle_blip)
  45.        break;
  46.      end
  47.           -- Если плеер был убит, то миссия провалена!  
  48.   if IsDeadActor(PLAYER_ACTOR) then
  49.        mission_failed()
  50.           return
  51.     end
  52.    Wait(0)
  53.  end
  54.  RequestModel(4); -- Army
  55.  LoadRequestedModels();
  56. -- Создание актера
  57.   actor_handle = CreateActor(20, 4, 15.1169, -884.6266, 10.7958);
  58.   SetActorObjectiveTarget(actor_handle, PLAYER_CHAR, 9, 0)
  59. -- Цикл миссии
  60. while true do
  61.   if IsDeadActor(actor_handle) then
  62.       Wait(2000)
  63.       mission_complete()
  64.           return
  65.     end
  66.   if IsDeadActor(PLAYER_ACTOR) then
  67.       mission_failed()
  68.           return
  69.     end
  70.   Wait(0)
  71. end
  72. end
  73.  
Название: Re: Помощь с CLEO
Отправлено: Shagg_E от Октябрь 03, 2017, 02:21:44 pm
Цитировать
к сожалению, он не компилируется.


Странно: у меня и другого чела(автора второй миссии) всё компилируется отлично.
Поставь последний Sanny Builder v3.2.2 (https://sannybuilder.com/index.html), а затем поставь актуальные VCSCM.INI и opcodes.txt (http://newrockstar.do.am/Other_Files/VCOPCODES2017.rar) для SannyBuilder(кинь эти файлы в Sanny Builder 3\data\vc\)
Название: Re: Помощь с CLEO
Отправлено: egor230 от Октябрь 03, 2017, 04:18:51 pm
Уважаемый  Shagg_E, рад Вашему ответ.
Несмотря на Вашу занятность, Вы помогайте, отвечая на банальные вопросы.
Все сделал как Вы сказали, все же выдает ошибку при компиляция
Привожу скрин ошибки, может быть у меня что-то не так.
http://pixs.ru/showimage/netJPG_9279626_27746496.jpg (http://pixs.ru/showimage/netJPG_9279626_27746496.jpg)

Работают над скриптом по изменению цвета авто, думал за 5 мин напишу, а она вылетает.
Не знаю почему
Код: Javascript
  1. {$CLEO .cs}
  2. 0000:  
  3. 03A4: name_thread 'U'      
  4. :1
  5. wait 0
  6. if
  7. actor.Driving($player_char)
  8. jf @1
  9. 00DA: 0@ = player $player_char car // хенлд машины игрока
  10. 03F3: get_car 0@ color 1@ 2@  // записать цвета авто
  11. if  
  12. 0AB0: key_pressed 0x45 // клавиша e  
  13. jf @2
  14. 000A: 1@ += 1  // сдвиг цвета на 1 вперед
  15. if
  16. 0019: 1@ > 9 // integer values    
  17. jf @3
  18. 0006: 1@ = 0 // integer values
  19. jump @3
  20. :2
  21. if  
  22. 0AB0: key_pressed 0x51 // клавиша q  
  23. jf @1
  24. 000A: 2@ += 1  // integer values
  25. if
  26. 0019: 2@ > 9 // integer values    
  27. jf @3
  28. 0006: 2@ = 0 // integer values
  29. :3
  30. wait 1000
  31. 0229: set_car 0@ color_to 1@ 2@ // установить цвета авто
  32. jump @1
  33. 0ABA: end_custom_thread_named 'U'
  34.  
 
Название: Re: Помощь с CLEO
Отправлено: Shagg_E от Октябрь 03, 2017, 08:37:21 pm
Цитировать
Все сделал как Вы сказали, все же выдает ошибку при компиляция
Очень странно - кейворды(а именно их отсутствие и вызвало эту ошибку, судя по скрину) должны устанавливаться вместе с Sanny Builder.
Попробуй поставить мои(в аттаче) - кидать также в Sanny Builder 3\data\vc\.

Цитировать
Работают над скриптом по изменению цвета авто, думал за 5 мин напишу, а она вылетает.
Не знаю почему
Опкод 00DA используется только в миссиях, так что замени его на 03C1:
Код: Text
  1. 03C1: 0@ = player $player_char car_no_save

И последняя строчка
Код: Text
  1. 0ABA: end_custom_thread_named 'U'
- лишняя(во-первых, выше уже есть jump, а во-вторых - поток не может закрыть сам себя таким способом!)
Название: Re: Помощь с CLEO
Отправлено: mfisto от Октябрь 04, 2017, 11:47:18 am
Здесь не верно:
actor.Driving($player_char)Должно быть:
actor.Driving($player_actor)
Название: Re: Помощь с CLEO
Отправлено: egor230 от Октябрь 05, 2017, 12:00:41 pm
Спасибо Вам огромное уважаемый Shagg_E с Вашими кейвордами все заработало.
Благодаря Вашему мудрому совету машины меняют свой цвет без проблем.
Ценное замечание насчет поток. Признаюсь искреннее, не совсем понимают, зачем нужен поток в скрипте?
mfisto, спасибо большое за ценное замечание.
В cleo для vc, сейчас мне интересно поработать с памятью, она расширяет возможности.
Название: Re: Помощь с CLEO
Отправлено: egor230 от Октябрь 07, 2017, 08:27:46 am
Здравствуйте, всем.
Вот написал шаблонную миссию, работает стабильно.   
Создавал маркер перед потоком, чтобы избежать вреда сохранениям.
Старался привести код в удобный, читаемым вид.
Возникли вопросы.
При провале, миссия не запускается вновь.
Скажите, пожалуйста, как записать в константы имя модели- медик или $player_char как ch.
У меня не выходит, это нужно для краткости.
Если 1@ = actor.Create(16, #MEDIC, 77.3075, -879.1083, 10.4481) поместить в цикле for, допустим 3, тогда создается 3 актер,
Как цикл For использовать в качестве условие, что актер 1@ убить 3 раза?
Надеюсь, на Ваши мудрые советы.
 
Код: Javascript
  1. {$CLEO .cs}                                      
  2. const
  3. ONM = $ONMISSION
  4. x =  79.8094 // Координаты
  5. y = -880.79  // Координаты
  6. z =  10.445  // Координаты
  7. end          
  8. 0000:
  9. :MISSION_1
  10. while true        
  11. wait 0
  12. if 0256: player $player_char defined
  13. then gosub @MISSION_END      
  14. if ONM == 0
  15. then 02A7: 0@ = create_icon_marker_and_sphere 34 at x y z
  16. if 00F8: player $player_char stopped 0 x y z radius 1.0 1.0 1.5
  17. then      
  18. gosub @MISSION_START // Старт миссии
  19. jump @MISSION_1 // Чтобы можно пройти заново      
  20. end
  21. end
  22. end
  23. end
  24. :MISSION_BEGIN // Тело миссии                    
  25. fade 0 300 // Затемение экрана
  26. gosub @load // Загрузить актера
  27. 1@ = actor.Create(16, #MEDIC, 77.3075, -879.1083, 10.4481)
  28. actor.Angle(1@) = 199.2093 // Задать угол актеру    
  29. gosub @delay // Задержка                                                
  30. 2@ = marker.CreateAboveActor(1@) // Создать маркер над актером  
  31. fade 1 300 // Убрать затемение экрана      
  32. 01CA: actor 1@ kill_player $player_char // Актер хочет убить игрока
  33. gosub @actor
  34. return
  35. :MISSION_START // Старт миссии
  36. gosub @MISSION_END // Завершение миссии
  37. 03A4: name_thread 'MISS'      
  38. 0317: increment_mission_attempts // команда, для того чтобы в статистике к попытке миссий прибавилось 1
  39. ONM == 1 // миссия запущена  
  40. gosub @MISSION_BEGIN // Сама миссия                    
  41. :MISSION_COMPLETED // Миссия выполнена
  42. 01E3: show_text_1number_styled GXT 'M_PASS' number 1000 time 5000 style 1    
  43. 0394: play_music 1 // мелодия выполнение миссии
  44. Player.Money($PLAYER_CHAR) += 1000  
  45. gosub @MISSION_END
  46. :MISSION_FAILED // Провал миссии              
  47. 00BA: show_text_styled GXT 'M_FAIL' time 5000 style 1 // MISSION FAILED
  48. gosub @MISSION_END          
  49. :MISSION_END          
  50. ONM == 0      
  51. 0249: release_model #MEDIC // Выгрузить из памяти    
  52. actor.RemoveReferences(1@)  
  53. 0164: disable_marker 0@  // Удалить маркер    
  54. 0164: disable_marker 2@                
  55. 0ABA: end_custom_thread_named 'MISS'  
  56. return                                    
  57. :load
  58. repeat
  59. wait 0
  60. model.Load(#MEDIC)
  61. 038B: load_requested_models
  62. gosub @delay
  63. until model.Available(#MEDIC)
  64. return
  65. :delay
  66. 16@ = 0
  67. repeat
  68. wait 0                
  69. until 0029: 16@ >= 1100 // задержка
  70. return    
  71. :actor // Условие выполнение миссии    
  72. wait 0
  73. if actor.Dead(1@)
  74. then jump @MISSION_COMPLETED // Миссия выполнена
  75. else jump @player
  76. end
  77. return                  
  78. :player // Условие провала миссии
  79. wait 0
  80. if 8256: not player $player_char defined
  81. then jump @MISSION_FAILED // Провал миссии    
  82. else jump @actor
  83. end                    
  84.  
Все сделал, работает как надо, почти весь день потратил.
Ее можно использовать как шаблон для создания миссии.

Код: Javascript
  1. {$CLEO}
  2. const
  3. ONM = $ONMISSION
  4. x = 79.8094 // Координаты
  5. y = -880.79 // Координаты
  6. z = 10.445 // Координаты
  7. end
  8. 0000:
  9. :MISSION_1
  10. while true
  11. wait 0
  12. if 0256: player $player_char defined
  13. then gosub @MISSION_END
  14. if ONM == 0
  15. then 02A7: 0@ = create_icon_marker_and_sphere 34 at x y z
  16. if 00F8: player $player_char stopped 0 x y z radius 1.0 1.0 1.5
  17. then
  18. gosub @MISSION_START // Старт миссии
  19. jump @MISSION_1 // Чтобы можно пройти заново
  20. end
  21. end
  22. end
  23. end
  24. :MISSION_BEGIN // Тело миссии
  25. fade 0 300 // Затемнение экрана    
  26. gosub @load // Загрузить актера                    
  27. 1@ = actor.Create(16, #MEDIC, 77.3075, -879.1083, 10.4481)    
  28. 0164: disable_marker 0@ // Удалить маркер    
  29. actor.Angle(1@) = 199.2093 // Задать угол актеру
  30. gosub @delay // Задержка
  31. 2@ = marker.CreateAboveActor(1@) // Создать маркер над актером
  32. fade 1 300 // Убрать затемнение экрана
  33. 01CA: actor 1@ kill_player $player_char // Актер хочет убить игрока
  34. gosub @actor
  35. return    
  36. :actor // Условие выполнение миссии
  37. wait 0
  38. if actor.Dead(1@)
  39. then jump @MISSION_COMPLETED // Миссия выполнена
  40. else jump @player
  41. end
  42. return
  43. :MISSION_START // Старт миссии          
  44. 0317: increment_mission_attempts // команда, для того чтобы в статистике к попытке миссий прибавилось 1
  45. ONM == 1 // миссия запущена
  46. gosub @MISSION_BEGIN // Сама миссия
  47. return
  48. :MISSION_COMPLETED // Миссия выполнена
  49. 01E3: show_text_1number_styled GXT 'M_PASS' number 1000 time 5000 style 1
  50. 0394: play_music 1 // мелодия выполнение миссии
  51. Player.Money($PLAYER_CHAR) += 1000                          
  52. mission_cleanup // Очистка после миссии
  53. gosub @MISSION_END                          
  54. return        
  55. :MISSION_FAILED // Провал миссии
  56. 00BA: show_text_styled GXT 'M_FAIL' time 5000 style 1 // MISSION FAILED
  57. gosub @MISSION_END
  58. :MISSION_END          
  59. ONM == 0
  60. 0249: release_model #MEDIC // Выгрузить из памяти
  61. actor.RemoveReferences(1@)
  62. 0164: disable_marker 0@ // Удалить маркер
  63. 0164: disable_marker 2@
  64. return
  65. :load
  66. repeat
  67. wait 0
  68. model.Load(#MEDIC)
  69. 038B: load_requested_models
  70. gosub @delay
  71. until model.Available(#MEDIC)
  72. return
  73. :delay
  74. 16@ = 0
  75. repeat
  76. wait 0
  77. until 0029: 16@ >= 1100 // задержка
  78. return
  79. :player // Условие провала миссии
  80. wait 0
  81. if 8256: not player $player_char defined
  82. then jump @MISSION_FAILED // Провал миссии
  83. else jump @actor
  84. end
  85.  
Название: Re: Помощь с CLEO
Отправлено: egor230 от Октябрь 09, 2017, 07:41:15 am
Здравствуйте, всем.
Написал вторую тестовую миссию, столкнулся с интересными нюансами.
Если создать в качестве медика и дать оружие, он стрелять по нам из него не будет.
Заменил на таксиста.
Циклом for создаем нужно их количество, так как в vc нет массива.
При установки здоровье 150, вылетать
При подъеме денег с убитых врагов идет вылет, что странно.

Как правильно загружать несколько моделей? Через request_model или model.Load()?
Буду благодарен за Ваши ответы.
Код: Javascript
  1. {$CLEO .cs}
  2. const
  3. ONM = $ONMISSION
  4. x = 567.389 // Координаты
  5. y = 531.035 // Координаты
  6. z = 12.0494 // Координаты  
  7. a = 598.08 // Координаты пикапа
  8. b = 860.784 // Координаты пикапа
  9. c = 22.029  // Координаты  пикапа  
  10. d = 569.892 // Координаты педа
  11. e = 801.703 // Координаты педа
  12. f = 11.6737  // Координаты  педа    
  13. end
  14. 0000:
  15. :MISSION_1        
  16. while player.Defined($PLAYER_ACTOR)
  17. wait 0      
  18. gosub @MISSION_END
  19. if ONM == 0
  20. then 02A7: 0@ = create_icon_marker_and_sphere 35 at x y z
  21. if 00F8: player $player_char stopped 0 x y z radius 1.0 1.0 1.5
  22. then                            
  23. gosub @MISSION_START // Старт миссии
  24. jump @MISSION_1 // Чтобы можно пройти заново
  25. end
  26. end
  27. end
  28. :MISSION_BEGIN // Тело миссии
  29. for 4@ = 1 to 5                
  30. 3@ = actor.Create(4, #HMOCA, d, e, f)  
  31. 03FE: set actor 3@ money 1000                      
  32. 01B2: give_actor 3@ weapon 33 ammo 9999    
  33. 02E2: set_actor 3@ weapon_accuracy_to 100 // Установка точности стрельбы для актера
  34. 01CA: actor 3@ kill_player $player_char // Актер хочет убить игрока    
  35. end                                    
  36. 0213: 1@ = create_pickup 335 type 1 at a b c  
  37. 0164: disable_marker 0@ // Удалить маркер    
  38. actor.Angle(3@) = 169.2093 // Задать угол актеру
  39. 03DC: 2@ = create_marker_above_pickup 1@ // Создать маркер над актером
  40. gosub @actor
  41. return        
  42. :actor // Условие выполнение миссии
  43. wait 0
  44. if pickup.Picked_up(1@)
  45. then jump @MISSION_COMPLETED // Миссия выполнена
  46. else jump @player
  47. end
  48. return
  49. :MISSION_START // Старт миссии    
  50. gosub @load // Загрузить актера      
  51. 0317: increment_mission_attempts // команда, для того чтобы в статистике к попытке миссий прибавилось 1
  52. ONM == 1 // мисия запущена
  53. gosub @MISSION_BEGIN // Сама миссия
  54. return
  55. :MISSION_COMPLETED // Миссия выполнена
  56. 01E3: show_text_1number_styled GXT 'M_PASS' number 1000 time 5000 style 1
  57. 0394: play_music 1 // мелодия выполнение миссии
  58. Player.Money($PLAYER_CHAR) += 1000              
  59. gosub @MISSION_END                          
  60. return        
  61. :MISSION_FAILED // Провал миссии
  62. 00BA: show_text_styled GXT 'M_FAIL' time 5000 style 1 // MISSION FAILED
  63. gosub @MISSION_END
  64. :MISSION_END          
  65. ONM == 0                                
  66. actor.RemoveReferences(3@)
  67. 0AC9: free_allocated_memory 3@  
  68. 0249: release_model 335 // Выгрузить из памяти  
  69. 0249: release_model #HMOCA // Выгрузить из памяти  
  70. 0249: release_model #MINIGUN // Выгрузить из памяти
  71. 0164: disable_marker 0@ // Удалить маркер
  72. 0164: disable_marker 2@                  
  73. mission_cleanup // Очистка после миссии
  74. return
  75. :load    
  76. fade 0 300 // Затемение экрана      
  77. 0247: request_model #HMOCA  
  78. 0247: request_model #MINIGUN
  79. 038B: load_requested_models
  80. 0AC8: 3@ = allocate_memory_size 128
  81. gosub @delay // Задержка      
  82. fade 1 300 // Убрать затемение экрана
  83. return  
  84. repeat
  85. wait 0
  86. model.Load(335)
  87. 038B: load_requested_models
  88. gosub @delay
  89. until model.Available(335)
  90. return
  91. :delay
  92. 16@ = 0
  93. repeat
  94. wait 0
  95. until 0029: 16@ >= 1100 // задержка
  96. return
  97. :player // Условие провала миссии
  98. wait 0
  99. if 8256: not player $player_char defined
  100. then jump @MISSION_FAILED // Провал миссии
  101. else jump @actor
  102. end
  103.  
Написал так, только при провале актеры не удаляются, при взятие денег и повторном прохождении зависание. Не знаю, что делать?
Код: Javascript
  1. {$CLEO .cs}
  2. const
  3. ONM = $ONMISSION
  4. x = 567.389 // Координаты значка миссии
  5. y = 531.035 // Координаты значка миссии
  6. z = 12.0494 // Координаты значка миссии
  7. a = 598.08 // Координаты пикапа
  8. b = 860.784 // Координаты пикапа
  9. c = 22.029  // Координаты пикапа  
  10. d = 569.892 // Координаты педа
  11. e = 801.703 // Координаты педа
  12. f = 11.6737 // Координаты педа
  13. end
  14. 0000:
  15. :MISSION_1        
  16. while player.Defined($PLAYER_ACTOR)
  17. wait 0      
  18. gosub @MISSION_END
  19. if ONM == 0
  20. then 02A7: 0@ = create_icon_marker_and_sphere 35 at x y z
  21. if 00F8: player $player_char stopped 0 x y z radius 1.0 1.0 1.5
  22. then                            
  23. gosub @MISSION_START // Старт миссии
  24. jump @MISSION_1 // Чтобы можно пройти заново
  25. end
  26. end
  27. end
  28. :MISSION_BEGIN // Тело миссии
  29. gosub @foe1 // Враги
  30. 0164: disable_marker 0@ // Удалить маркер    
  31. 03DC: 2@ = create_marker_above_pickup 1@ // Создать маркер над актером
  32. gosub @actor
  33. return        
  34. :actor // Условие выполнение миссии
  35. wait 0
  36. if pickup.Picked_up(1@)
  37. then jump @MISSION_COMPLETED // Миссия выполнена
  38. else jump @player
  39. end
  40. return
  41. :MISSION_START // Старт миссии
  42. 0AC8: 3@ = allocate_memory_size 8000    
  43. gosub @load // Загрузить актера      
  44. 0317: increment_mission_attempts // команда, для того чтобы в статистике к попытке миссий прибавилось 1
  45. ONM == 1 // мисия запущена
  46. gosub @MISSION_BEGIN // Сама миссия
  47. return
  48. :MISSION_COMPLETED // Миссия выполнена
  49. 01E3: show_text_1number_styled GXT 'M_PASS' number 1000 time 5000 style 1
  50. 0394: play_music 1 // мелодия выполнение миссии
  51. Player.Money($PLAYER_CHAR) += 1000              
  52. gosub @MISSION_END                          
  53. return        
  54. :MISSION_FAILED // Провал миссии
  55. 00BA: show_text_styled GXT 'M_FAIL' time 5000 style 1 // MISSION FAILED
  56. gosub @MISSION_END
  57. :MISSION_END          
  58. ONM == 0
  59. gosub @del1 // Удалить врагов
  60. 0249: release_model 335 // Выгрузить из памяти  
  61. 0249: release_model #HMOCA // Выгрузить из памяти  
  62. 0249: release_model #MINIGUN // Выгрузить из памяти
  63. 0164: disable_marker 0@ // Удалить маркер
  64. 0164: disable_marker 2@
  65. 0AC9: free_allocated_memory 3@                
  66. return
  67. :foe    
  68. 3@ = actor.Create(4, #HMOCA, d, e, f)      
  69. 01B2: give_actor 3@ weapon 33 ammo 9999    
  70. 02E2: set_actor 3@ weapon_accuracy_to 100 // Установка точности стрельбы для актера      
  71. //03FE: set actor 3@ money 1000 // Кол-во денег педа  
  72. actor.Health(3@) = 200            
  73. actor.Angle(3@) = 169.2093 // Задать угол актеру
  74. 01CA: actor 3@ kill_player $player_char // Актер хочет убить игрока                
  75. 0213: 1@ = create_pickup 335 type 1 at a b c  
  76. return
  77. :load    
  78. fade 0 300 // Затемение экрана      
  79. 0247: request_model #HMOCA  
  80. 0247: request_model #MINIGUN
  81. 038B: load_requested_models
  82. gosub @delay // Задержка      
  83. fade 1 300 // Убрать затемение экрана
  84. return  
  85. repeat
  86. wait 0
  87. model.Load(335)
  88. 038B: load_requested_models
  89. gosub @delay
  90. until model.Available(335)
  91. return
  92. :delay
  93. 16@ = 0
  94. repeat
  95. wait 0
  96. until 0029: 16@ >= 1100 // задержка
  97. return
  98. :player // Условие провала миссии
  99. wait 0
  100. if 8256: not player $player_char defined
  101. then jump @MISSION_FAILED // Провал миссии
  102. else jump @actor
  103. end          
  104. :del                                                
  105. actor.DestroyInstantly(3@)    
  106. actor.RemoveReferences(3@)
  107. return        
  108. :foe1
  109. gosub @foe // 1 враг
  110. gosub @foe // 2 враг
  111. gosub @foe // 3 враг
  112. gosub @foe // 4 враг
  113. gosub @foe // 5 враг
  114. gosub @foe // 6 враг
  115. return      
  116. :del1    
  117. gosub @del // удалить враг 1      
  118. gosub @del // удалить враг 2      
  119. gosub @del // удалить враг 3      
  120. gosub @del // удалить враг 4      
  121. gosub @del // удалить враг 5      
  122. gosub @del // удалить враг 6    
  123. return      
  124.  

Название: Re: Помощь с CLEO
Отправлено: Shagg_E от Октябрь 09, 2017, 02:25:33 pm
Цитировать
зачем нужен поток в скрипте?
Каждый скрипт это и есть поток. А вот задание имени потока действительно необязательно. Оно действительно нужно лишь в том случае, если ты потом захочешь где-нибудь удаленно закрыть этот поток, и это можно сделать лишь по его имени(если оно у него есть).


Цитировать
Создавал маркер перед потоком, чтобы избежать вреда сохранениям.
Так какая разница, если игрок может пойти и сохраниться в тот период, когда маркер уже создан, а миссия еще не начата и этот маркер в итоге сохранится в файле сохранения(навредит ему)? Не советую вообще создавать какие-либо маркеры вне миссии, лучше сделай так, чтобы миссия активировалась чит-кодом или еще каким действием. Ведь CLEO-миссии - это лишь баловство(тут и чит-код сойдет). Если хочешь написать полноценную красивую сюжетную линию с кучей миссий и маркерами, как в оригинале, то и делать это стоит как в оригинале - в main.scm. Там уже можно и маркеры, и пикапы, и парковки и прочее создавать и юзать глобальные переменные.


Цитировать
Скажите, пожалуйста, как записать в константы $player_char как ch.
Странный вопрос, ведь ты уже записал $ONMISSION в ONM


Цитировать
Скажите, пожалуйста, как записать в константы имя модели- медик
"имена моделей" - это лишь упрощение SannyBuilder, на самом деле при компиляции они заменяются на соответствующие ID из IDE файлов.
То есть #MEDIC - это номер 5 в default.ide, т.е. вместо
Цитировать
1@ = actor.Create(16, #MEDIC, 77.3075, -879.1083, 10.4481
можно писать
Цитировать
1@ = actor.Create(16, 5, 77.3075, -879.1083, 10.4481
Соответственно, в константы тоже следует записывать номер, а можно и также имя модели:
Цитировать
MEDICMODEL = #MEDIC


Цитировать
Как цикл For использовать в качестве условие, что актер 1@ убить 3 раза?
Я не практикую высокоуровневый скриптинг для подобных запутанных вещей, и тебе того же советую. Высокоуровневый код хорош только для несложных скриптов и то - чисто для эстетики. И чем сложнее миссии ты будешь писать, тем запутаннее будут эти твои циклы for, while и until. Конечно, Рокстары вроде как писали подобным типом кода, но это их дело. Я скинул примеры моего способа написания миссий, а ты уже смотри, как тебе будет удобно.


Цитировать
Циклом for создаем нужно их количество, так как в vc нет массива.
При установки здоровье 150, вылетать
При подъеме денег с убитых врагов идет вылет, что странно.
Я показал на примере тех двух миссий, как работать с массивами - всё там работает отлично. У тебя же все 5 актеров записываются в одну и ту же переменную 3@, соответственно работать в дальнейшем ты сможешь только с последним созданным, а других даже удалить не сможешь.
Попробуй взять за основы те миссии и хорошенько их "распотрошить", чтобы было удобнее понять, как работать с массивами в Вайсе "на практике".


Цитировать
Как правильно загружать несколько моделей? Через request_model или model.Load()?

Это одно и то же.
Есть опкод:
Цитировать
0247: request_model #ARMY
Для него есть кейворд:
Цитировать
request_model #ARMY
А также - команда класса:
Цитировать
model.Load(#ARMY)
- все три способа абсолютно легитимны. Просто юзай тот, который тебе кажется наиболее удобным. При компиляции будет один результат.
Название: Re: Помощь с CLEO
Отправлено: egor230 от Октябрь 10, 2017, 12:04:49 pm
Спасибо громадное уважаемый Shagg_E за Ваш подробный ответ, он много меня научил.
Скрипт и поток равнозначны, благодарю за доходчивое объяснение.
Благодаря Вашему умному совету, поступил следующим образом- введен чит код, ставим $ONMISSION == 1,  миссия активировалась- создаем маркер, делаем проверки стоим на маркере, удаляем его и так далее.
Странно флаг  $ONMISSION == 1 в скрипте не отключает возможность прохождения других миссии, хотя по идеи должен.
Уже понять, что писать миссии в cleo очень сложно, движок на это не рассчитан, в sa можно легко через стартер. Даже у меня криворукого получилось с горем пополам))))))))))
Можно ли для создания миссии написать, что вроде dyom под vc?
В main.scm создавать свои миссии не дорос до ее, там работать сложно.
Почему-то константа ch, что является $player_char  не работает.
Спасибо за разъяснение в const номера моделей, затем закомментировать их, чтобы не запутаться.   
 как ch.

Цитировать
MEDICMODEL = #MEDIC
Теперь стало понятно, как можно записывать имя модели.

Благодарю за совет, много говорят, что писать скрипты нужно высокоуровневый кодом, хотя низкоуровневый удобнее, его легче понять.
Буду изучать Ваш уникальный способ написание более внимательный образом.
Что ж буду учится это полезно для мозга, копаться и разбирать с Ваших гениальных примерах.

Спасибо, за разъяснение как модели  request_model или model.Load() идентичны.
 Изменил свою миссию все работает, только при 6 прохождении вылетает.
Код: Javascript
  1. {$CLEO}
  2. const
  3. x = 567.389 // Координаты значка миссии
  4. y = 531.035 // Координаты значка миссии
  5. z = 12.0494 // Координаты значка миссии
  6. a = 598.08 // Координаты пикапа
  7. b = 860.784 // Координаты пикапа
  8. c = 22.029  // Координаты пикапа  
  9. d = 569.892 // Координаты педа
  10. e = 801.703 // Координаты педа
  11. f = 11.6737 // Координаты педа
  12. end
  13. 0000:
  14. :MISSION_1        
  15. wait 0            
  16. if            
  17. $ONMISSION == 0  // Друга миcсия не запущена
  18. jf @MISSION_1  
  19. if
  20. 0ADC: test_cheat "BL" // включить миссию  
  21. jf @MISSION_1    
  22. $ONMISSION == 1 // мисия запущена
  23. 02A7: 0@ = create_icon_marker_and_sphere 35 at x y z
  24. :2        
  25. wait 0  
  26. if or
  27. 8256: not player $player_char defined // Игрок умер
  28. 0ADC: test_cheat "BL" // выключить миссию    
  29. jf @1      
  30. gosub @MISSION_END
  31. jump @MISSION_1 // Чтобы можно пройти заново
  32. :1  
  33. wait 0  
  34. if
  35. 00F8: player $player_char stopped 0 x y z radius 1.0 1.0 1.5
  36. jf @2            
  37. wait 200
  38. gosub @MISSION_START // Старт миссии    
  39. jump @MISSION_1 // Чтобы можно пройти заново  
  40. :MISSION_START // Старт миссии        
  41. gosub @load // Загрузить актера    
  42. 0164: disable_marker 0@ // Удалить маркер      
  43. 0317: increment_mission_attempts // команда, для того чтобы в статистике к попытке миссий прибавилось 1
  44. gosub @MISSION_BEGIN // Сама миссия
  45. return            
  46. :MISSION_END          
  47. $ONMISSION == 0            
  48. gosub @del // Удалить врагов  
  49. return
  50. :MISSION_BEGIN // Тело миссии
  51. gosub @foe // Враги
  52. 03DC: 2@ = create_marker_above_pickup 1@ // Создать маркер над кейсом
  53. gosub @actor
  54. return        
  55. :actor // Условие выполнение миссии
  56. wait 0
  57. if pickup.Picked_up(1@)
  58. then jump @MISSION_COMPLETED // Миссия выполнена
  59. else jump @player
  60. end
  61. return        
  62. :player // Условие провала миссии
  63. wait 0
  64. if 8256: not player $player_char defined
  65. then jump @MISSION_FAILED // Провал миссии
  66. else jump @actor
  67. end          
  68. :MISSION_COMPLETED // Миссия выполнена
  69. 01E3: show_text_1number_styled GXT 'M_PASS' number 1000 time 5000 style 1
  70. 0394: play_music 1 // мелодия выполнение миссии
  71. Player.Money($PLAYER_CHAR) += 1000              
  72. gosub @MISSION_END      
  73. gosub @reb // Перезагрузка скрипта                    
  74. return        
  75. :MISSION_FAILED // Провал миссии
  76. 00BA: show_text_styled GXT 'M_FAIL' time 5000 style 1 // MISSION FAILED
  77. gosub @MISSION_END  
  78. gosub @reb // Перезагрузка скрипта  
  79. :foe // Создать врагов    
  80. 3@ = actor.Create(4, #HMOCA, d, e, f)      
  81. 01B2: give_actor 3@ weapon 33 ammo 9999    
  82. 02E2: set_actor 3@ weapon_accuracy_to 100 // Установка точности стрельбы для актера      
  83. actor.Angle(3@) = 169.2093 // Задать угол актеру
  84. 01CA: actor 3@ kill_player $player_char // Актер хочет убить игрока    
  85. 4@ = actor.Create(4, #HMOCA, d, e, f)      
  86. 01B2: give_actor 4@ weapon 33 ammo 9999    
  87. 02E2: set_actor 4@ weapon_accuracy_to 100 // Установка точности стрельбы для актера    
  88. actor.Angle(4@) = 169.2093 // Задать угол актеру
  89. 01CA: actor 4@ kill_player $player_char // Актер хочет убить игрока                
  90. 0213: 1@ = create_pickup 335 type 1 at a b c // Создать пикап кейса  
  91. 03DC: 2@ = create_marker_above_pickup 1@ // Создать маркер над пикапом кейса  
  92. return      
  93. :del                                          
  94. 0164: disable_marker 2@  // Удалить маркер
  95. 0215: destroy_pickup 1@ // Удалить пикап кейса          
  96. 0249: release_model 335 // Выгрузить из памяти  
  97. 0249: release_model #MINIGUN // Выгрузить из памяти
  98. 0249: release_model #HMOCA // Выгрузить из памяти                
  99. actor.RemoveReferences(3@) // Удалить врага          
  100. actor.RemoveReferences(4@) // Удалить врага
  101. return      
  102. :load // загрузка моделей для миссии    
  103. fade 0 300 // Затемение экрана      
  104. 0247: request_model #HMOCA  
  105. 0247: request_model #MINIGUN
  106. 038B: load_requested_models
  107. gosub @delay // Задержка      
  108. fade 1 300 // Убрать затемение экрана
  109. return  
  110. repeat
  111. wait 0
  112. model.Load(335)
  113. 038B: load_requested_models
  114. gosub @delay
  115. until model.Available(335)
  116. return
  117. :delay
  118. 16@ = 0
  119. repeat
  120. wait 0
  121. until 0029: 16@ >= 1100 // задержка
  122. return
  123. :reb              
  124. wait 50      
  125. 0ABA: end_custom_thread_named 'Test'
  126. wait 1000
  127. 0A92: create_custom_thread "Test.cs"  //название перезагружаемого потока
  128. wait 50    
  129. return
  130.  
Решил при провале и прохождении миссии сделать перегрузку потока скритпа, по моему сделал неправильно, перестала деактивация миссии.
Помоги, пожалуйста, нубу.
Код: Javascript
  1.  
  2. :reb              
  3. wait 50      
  4. 0ABA: end_custom_thread_named 'Test'
  5. wait 1000
  6. 0A92: create_custom_thread "Test.cs"  //название перезагружаемого потока
  7. wait 50    
  8. return
  9.  
Название: Re: Помощь с CLEO
Отправлено: kenking от Октябрь 10, 2017, 04:42:41 pm
... ставим $ONMISSION == 1,  миссия активировалась- создаем маркер, делаем проверки стоим на маркере, удаляем его и так далее.
Странно флаг  $ONMISSION == 1 в скрипте не отключает возможность прохождения других миссии, хотя по идеи должен.
...
Ты же не установил флаг, а опять его проверяешь. Двойное равенство - это проверка равна ли левая часть выражения правому? Надо
$ONMISSION = 1
После прохождения миссии опять вернуть в прежнее состояние
$ONMISSION = 0
Название: Re: Помощь с CLEO
Отправлено: egor230 от Октябрь 15, 2017, 12:48:23 pm
Спасибо большое уважаемый kenking за Ваш точный совет! Теперь флаг миссии работает.
Теперь бьюсь с новой проблемой, уже несколько дней провале миссия зависает или маркеры не удаляются.
Помоги, пожалуйста, прошу.
Код: Javascript
  1. {$CLEO}
  2. const
  3. x = 567.389 // Координаты значка миссии
  4. y = 531.035 // Координаты значка миссии
  5. z = 12.0494 // Координаты значка миссии
  6. a = 598.08 // Координаты пикапа
  7. b = 860.784 // Координаты пикапа
  8. c = 22.029  // Координаты пикапа  
  9. d = 569.892 // Координаты педа
  10. e = 801.703 // Координаты педа
  11. f = 11.6737 // Координаты педа
  12. m = 1000 // Кол-во денег педа  
  13. end
  14. 0000:
  15. :MISSION_1    
  16. while 0256: player $PLAYER_CHAR defined
  17. wait 0            
  18. if            
  19. $ONMISSION == 0  // Друга миcсия не запущена
  20. then
  21. if
  22. 0ADC: test_cheat "BL" // включить миссию  
  23. then                          
  24. gosub @MISSION_START // Старт миссии    
  25. jump @MISSION_1 // Чтобы можно пройти заново
  26. end
  27. end
  28. end  
  29. :MISSION_START // Старт миссии        
  30. gosub @load // Загрузить актера                                  
  31. $ONMISSION = 1 // мисия запущена    
  32. 0317: increment_mission_attempts // команда, для того чтобы в статистике к попытке миссий прибавилось 1
  33. gosub @MISSION_BEGIN // Сама миссия
  34. return                                  
  35. :MISSION_END                                        
  36. $ONMISSION = 0        
  37. gosub @del // Удалить врагов                                
  38. return
  39. :MISSION_BEGIN // Тело миссии  
  40. gosub @foe // Враги
  41. 0055: put_player $player_char at x y z  
  42. 0171: set_player $player_char z_angle_to 89.2093 // Задать угол актеру
  43. fade 1 300 // Убрать затемение экрана
  44. gosub @actor
  45. return        
  46. :actor // Условие выполнение миссии
  47. wait 0
  48. if pickup.Picked_up(1@)
  49. then jump @MISSION_COMPLETED // Миссия выполнена
  50. else jump @player
  51. end
  52. return        
  53. :player // Условие провала миссии
  54. wait 0
  55. if 8256: not player $player_char defined
  56. then jump gosub @MISSION_FAILED // Провал миссии
  57. else jump @actor
  58. end          
  59. :MISSION_COMPLETED // Миссия выполнена
  60. 01E3: show_text_1number_styled GXT 'M_PASS' number 1000 time 5000 style 1
  61. 0394: play_music 1 // мелодия выполнение миссии
  62. Player.Money($PLAYER_CHAR) += 1000              
  63. gosub @MISSION_END                
  64. return        
  65. :MISSION_FAILED // Провал миссии
  66. 00BA: show_text_styled GXT 'M_FAIL' time 5000 style 1 // MISSION FAILED
  67. gosub @MISSION_END
  68. return  
  69. :foe // Создать врагов    
  70. 3@ = actor.Create(4, #HMOCA, d, e, f)      
  71. 01B2: give_actor 3@ weapon 33 ammo 9999    
  72. 02E2: set_actor 3@ weapon_accuracy_to 100 // Установка точности стрельбы для актера      
  73. actor.Angle(3@) = 169.2093 // Задать угол актеру          
  74. 03FE: set actor 3@ money m // Кол-во денег педа  
  75. 01CA: actor 3@ kill_player $player_char // Актер хочет убить игрока    
  76. 4@ = actor.Create(4, #HMOCA, d, e, f)      
  77. 01B2: give_actor 4@ weapon 33 ammo 9999    
  78. 02E2: set_actor 4@ weapon_accuracy_to 100 // Установка точности стрельбы для актера    
  79. actor.Angle(4@) = 169.2093 // Задать угол актеру
  80. 01CA: actor 4@ kill_player $player_char // Актер хочет убить игрока                
  81. 0213: 1@ = create_pickup 335 type 1 at a b c // Создать пикап кейса  
  82. 03DC: 2@ = create_marker_above_pickup 1@ // Создать маркер над пикапом кейса  
  83. return      
  84. :del                                          
  85. 0164: disable_marker 2@  // Удалить маркер
  86. 0215: destroy_pickup 1@ // Удалить пикап кейса          
  87. 0249: release_model 335 // Выгрузить из памяти  
  88. 0249: release_model #MINIGUN // Выгрузить из памяти
  89. 0249: release_model #HMOCA // Выгрузить из памяти                
  90. actor.RemoveReferences(3@) // Удалить врага          
  91. actor.RemoveReferences(4@) // Удалить врага
  92. return      
  93. :load // загрузка моделей для миссии    
  94. fade 0 300 // Затемение экрана      
  95. 0247: request_model #HMOCA  
  96. 0247: request_model #MINIGUN
  97. 038B: load_requested_models
  98. gosub @delay // Задержка      
  99. return  
  100. repeat
  101. wait 0
  102. model.Load(335)
  103. 038B: load_requested_models
  104. gosub @delay
  105. until model.Available(335)
  106. return
  107. :delay
  108. 16@ = 0
  109. repeat
  110. wait 0
  111. until 0029: 16@ >= 1100 // задержка
  112. return
  113.  

Все исправил, все работает как надо, за основу взял найденную cleo миссию для vc.
Вот, что получилось.
Код: Javascript
  1. {$CLEO}
  2. 0000:        
  3. const
  4. x = 567.389 // Координаты значка миссии
  5. y = 531.035 // Координаты значка миссии
  6. z = 12.0494 // Координаты значка миссии
  7. a = 598.08 // Координаты пикапа
  8. b = 860.784 // Координаты пикапа
  9. c = 22.029  // Координаты пикапа  
  10. d = 569.892 // Координаты педа
  11. e = 801.703 // Координаты педа
  12. f = 11.6737 // Координаты педа
  13. m = 1000 // Кол-во денег педа  
  14. end
  15. :MISSION_1    
  16. wait 0                                    
  17. if
  18. 0256: player $player_char defined
  19. jf @MISSION_1        
  20. if
  21. 0038: $onmission == 0 // integer values
  22. jf @MISSION_1  
  23. if 0ADC: test_cheat "BL" // включить миссию  
  24. jf @MISSION_1  
  25. jump @MISSION_START // Старт миссии    
  26. jump @MISSION_1  // Чтобы можно пройти заново    
  27. return
  28. :MISSION_START // Старт миссии                        
  29. 0317: increment_mission_attempts // команда, для того чтобы в статистике к попытке миссий прибавилось 1  
  30. 03A4: name_thread 'TEST'
  31. 0004: $onmission = 1 // мисия запущена        
  32. wait 0            
  33. 0247: request_model #HMOCA // Запрос модели таксиста  
  34. 038B: load_requested_models        
  35. 011C: actor $player_actor clear_objective
  36. fade 0 1500 ms  
  37. 01BD: $current_time_in_ms = current_time_in_ms
  38. //0055: put_player $player_char at x y z
  39. 1@ = actor.Create(4, #HMOCA, d, e, f)      
  40. 016A: fade 1 1000 ms                    
  41. :player    
  42. wait 0
  43. if 8256: not player $player_char defined
  44. jf @actor
  45. gosub @MISSION_FAILED // Провал миссии    
  46. gosub @MISSION_END // Завершение миссии
  47. jump @MISSION_1  // Чтобы можно пройти заново    
  48. :actor
  49. if 0118: actor 1@ dead
  50. jf @player
  51. gosub @MISSION_COMPLETED // Миссия выполнена
  52. gosub @MISSION_END // Завершение миссии
  53. jump @MISSION_1  // Чтобы можно пройти заново    
  54. :MISSION_COMPLETED // Миссия выполнена
  55. 01E3: text_1number_styled 'M_PASS' number 15000 time 3000 style 1  // ˜© ?po¦?? ?ty m?cc?«! $~1~    
  56. 0394: play_music 1                        
  57. Player.Money($PLAYER_CHAR) += 1500        
  58. 0318: set_latest_mission_passed 'VSHELI'  
  59. return  
  60. :MISSION_FAILED // Провал миссии
  61. 00BA: text_styled 'M_FAIL' 3000 ms 1  // m?cc?¬ ?po˜a?eha!  
  62. return  
  63. :MISSION_END // Завершение миссии      
  64. 0249: release_model #HMOCA
  65. 01C2: remove_references_to_actor 1@
  66. 0004: $onmission = 0 // integer values
  67. 01BD: $current_time_in_ms = current_time_in_ms
  68. 00D8: mission_cleanup
  69. return  
  70.  
Название: Re: Помощь с CLEO
Отправлено: Shagg_E от Октябрь 18, 2017, 02:25:34 pm
Пробуй ставить задержки в несколько секунд по очереди с начала скрипта до его конца и тестируй. Т.е. сначала после первого опкода и тестируй, потом после второго и т.д. Я так часто ищу участки скриптов, вызывающие ошибку.
Название: Re: Помощь с CLEO
Отправлено: egor230 от Октябрь 19, 2017, 03:33:15 pm
Спасибо уважаемый Shagg_E за Ваш совет.
Расстановка может помочь найти ошибку в скрипте, сам еще использую 0acd: show_text_high_priority "ok" time 1000, чтобы где застрял скрипт.
Вы очень много меня научили, дорогой Shagg_E.
В принципе cleo миссия работает, ее можно использовать как шаблон для написание миссии, путем внесения изменений.
Написания даже самым простых миссии очень мутное дело, при этом в cleo нет возможности все сделать компактнее, вместо 10 опкодов писать одну функцию. Это все упростить.
Вы как один из лучших модеров по гта, прекрасно знакомы с языком lua.
Пытаюсь его освоить путем изменение скриптов moonloader, настроил с горем пополам редактор atom, чтобы выводил подсказки при наборе команды, но как это сделать в notepad++ чтобы подсвечивались новые команды, а только стандартные.

Название: Re: Помощь с CLEO
Отправлено: Shagg_E от Октябрь 19, 2017, 10:08:34 pm
Цитировать
В принципе cleo миссия работает, ее можно использовать как шаблон для написание миссии, путем внесения изменений.
Если просто "работает" - это еще не значит, что всё сделано правильно, будь пожалуйста внимательнее к коду, чтобы не было таких моментов:
Код: Text
  1. jump @MISSION_START // Старт миссии    
  2. jump @MISSION_1  // Чтобы можно пройти заново
  3. return
После первого jump второй jump и return не выполнятся!
Jump - это не gosub. Jump - это безоговорочный прыжок, и код после него не выполняется!

Цитировать
Вы как один из лучших модеров по гта, прекрасно знакомы с языком lua.
Я "середнячок" в моддинге(просто относительно эрудирован), а Lua я не знаю совершенно...
Название: Re: Помощь с CLEO
Отправлено: egor230 от Октябрь 21, 2017, 02:59:50 pm
Огромное спасибо уважаемый Shagg_E за возможность общаться с умным человеком.
Да, совершено правы, невнимательность, ведет к совершению ошибок.
Раньше придерживался девиз "Главное, чтоб работало", сейчас с опытом, хочется переписать все скрипты, начиная с первого, теперь вижу все свои недочеты и серьезные огрехи, которые тогда не замечал.
 Вы "середнячок"  ультра класса!
Уверен Ваш светлый ум разобрался с ним в "два счета"
Там нет лимит переменных, есть другие классные фишки, они облегчаю программирование.
Например, написал lua скрипт, При нажатии на клавиши 1 cj дать миниган и 100 патронов.
Представлю, что Вы могли на писать на нем, если с лимитом в 16 переменных, творите настоящую фантастику.
Код: Javascript
  1. script_author("egor")
  2. script_name("weapon")
  3. require "lib.moonloader"
  4.  
  5. function main() -- объявление функции
  6.  while true do -- бесконечный цикл
  7.  local a = 362 -- модель оружие
  8.  local b = 38 -- id оружие или его номер
  9.  local c = 100 -- количество патронов у оружия
  10. wait(0) -- задержка в 0 мс
  11. if isPlayerPlaying (PLAYER_HANDLE) then  -- если игрок найден
  12. if isKeyDown(VK_1)  then -- если клавиша 1 нажата
  13.     requestModel(a) -- запрос модели минигана
  14. if hasModelLoaded(a) then  -- ждём, пока модель не загрузится  
  15.  while isKeyDown(VK_1) do wait(100) end -- и ждём, пока клавиша не будет отпущена
  16.   printString ("GiveWeapon", 1000) -- надпись дано оружие, второй параметр время надписи
  17.  giveWeaponToChar(PLAYER_PED, b, c) -- дать миниган, первый параметр id, количество патронов
  18.  markModelAsNoLongerNeeded (a, b) -- удалить модель и id из памяти
  19.  end
  20.  end
  21.  end
  22.  end
  23.  end
  24.  
  25.  
Название: Re: Помощь с CLEO
Отправлено: Shagg_E от Октябрь 23, 2017, 01:05:04 pm
Цитировать
Раньше придерживался девиз "Главное, чтоб работало", сейчас с опытом, хочется переписать все скрипты, начиная с первого, теперь вижу все свои недочеты и серьезные огрехи, которые тогда не замечал.
Твой прогресс меня радует - немногие так быстро углубляются в скриптинг, да еще и прислушиваются к советам. Если продолжишь в том же темпе - скоро я тебе уже буду бесполезен ;)
Повторюсь - я практически во всех аспектах моддинга Вайса нахожусь примерно на среднем уровне, моё отличие от многих других лишь в том, что я в своё время наделал миллиарды ошибок и порой годами доходил до решения той или иной проблемы, зачастую не додумываясь(или просто упираясь) банально спросить совета более опытного человека. А бывало, что и спросить было не у кого...
Именно по этой причине я сейчас стараюсь помогать людям, у которых вижу желание изучать что-то новое: просто не хочу, чтобы они тратили на решения отдельных проблем столько же времени, сколько когда-то угробил на это я. А не потому что я супер-мега эксперт.
Уже сталкивался несколько раз, когда некоторые модмейкеры, которым я когда-то помогал осваивать новые трюки в какой-либо области моддинга, публикуют что-то в этой самой области, до чего я бы и не додумался. Что-то, что вдохновляет других, включая и меня самого.
Поэтому я надеюсь, что когда-нибудь и ты будешь также помогать другим.
Название: Re: Помощь с CLEO
Отправлено: egor230 от Октябрь 24, 2017, 09:02:30 am
Здравствуйте, уважаемый Shagg.
Спасибо Вам за добрые слова, Вы всегда меня поддерживали мудрым советом.
Свой прогрессом недоволен, хочется все и сразу, думал, что на следующий день достигну это уровня, а не через 3 с половиной месяца.
Gta vc, любимая игра, все хотел ее улучшить. Но в жизни много проблем, которые нужно решить. Нельзя бросить работу, все остальное, уйти в программирования с головой.
Годами находить решения, редкий человек, обладает таким терпением.
Вы мне очень помогли, Вам очень благодарен. Без Вас не достиг этого уровня. Как хорошо, что Вы помогайте и вдохновляйте других.
Помогаю в личке в вконтакте одному школьнику, иногда в шоке от его банальных косяков.
Хотел у Вас спросит можно открыт тему по lua скриптам. Это неплохая альтернатива cleo, может привлечь новых людей.
Моя cleo миссия для vc (убить таксиста, взять кейс) работает. Сделал координаты поближе, при 6 прохождении начала вылетать с этой ошибкой странно
http://pixs.ru/uploaded/netJPG_1964327_28025231.jpg/28025231_7909674/ (http://pixs.ru/uploaded/netJPG_1964327_28025231.jpg/28025231_7909674/)
Есть вопрос в чем отличия между этими опкодами 0AB1: call_scm_func @GetSQR 1 10 $result и 05F5: call_scm_func @func params_count 0?  они по своему действию очень схожи.
У Вас форуме есть тема Vice City Plugin SDK. Это круто! Но что это такое? Как пользоваться? Что может? не понятно. Боюсь писать туда, бан получу за тупость еще.
Написал скрипт, который по нажатию клавиши f записывает координаты игрока в ini файл. Может быть полезен. А как записать координаты в одну строчку? Чтобы удобнее копировать их.
Код: Javascript
  1. {$CLEO}
  2. 0000:                    
  3. while player.Defined($PLAYER_ACTOR)
  4. wait 0      
  5. if 80E0: not player $player_char driving
  6. then      
  7. if 0AB0: key_pressed 0x46 // f
  8. then                  
  9. 0AAB: file_exists "cleo\coordinate.ini"
  10. 0054: store_player $PLAYER_CHAR position_to 0@ 1@ 2@
  11. 0AF3: write_float 0@ to_ini_file "cleo\coordinate.ini" section "SectionName" key " x "
  12. 0AF3: write_float 1@ to_ini_file "cleo\coordinate.ini" section "SectionName" key " y "
  13. 0AF3: write_float 2@ to_ini_file "cleo\coordinate.ini" section "SectionName" key " z "
  14. 0acd: show_text_high_priority "~r~coordinates recorded" time 1000    
  15. end
  16. end
  17. end
  18.  
Название: Re: Помощь с CLEO
Отправлено: Shagg_E от Октябрь 27, 2017, 03:43:10 pm
По lua скриптам - есть спец. раздел (http://forum.gtabuilder.ru/index.php?board=28.0).

Цитировать
при 6 прохождении начала вылетать с этой ошибкой странно
Ну тут точно проблема в коде, судя по скрину. Но не факт, что в коде миссии - пробуй перепроходить, удалив все сторонние скрипты. Вообще, тестирование - это очень времязатратный процесс, поэтому тут уж вряд ли тебе кто-то поможет. Тратить большую часть времени на тесты -  это бремя скриптера/программиста.

Цитировать
Есть вопрос в чем отличия между этими опкодами
Ни в чем, это одинаковые опкоды. Просто изначально сделали второй, а первый добавили для упрощения переноса скриптов из SA.

Цитировать
Plugin SDK. Это круто! Но что это такое? Как пользоваться? Что может? не понятно. Боюсь писать туда, бан получу за тупость еще.
Если вкратце, то с помощью этого упрощается написание плагинов для III/VC/SA на языке C++. Всё остальное написано тут (http://forum.gtabuilder.ru/index.php?topic=337.0).

Цитировать
Написал скрипт
А теперь скомпилируй и декомпилируй его. И увидишь, что в конце скрипт "обрублен", что вызовет краш игры, если игрок не существует.
Всегда проверяй декомпиляцией, чтобы отсечь такие элементарные ошибки.
1) Если хочешь командой while создать бесконечный цикл в начале - делай это с помощью while true.
Далее.
2) player.Defined работает ТОЛЬКО с $PLAYER_CHAR, а не $PLAYER_ACTOR!
3) Проверяй, что клавиша не только нажата, но и отпущена! Иначе, если игрок не отпустит клавишу - скрипт будет выполняться множество раз подряд зря.
4) Опкод 0AAB - это проверка существования файла. А ты написал её как обычную команду.


Цитировать
А как записать координаты в одну строчку? Чтобы удобнее копировать их.


Короче, с учетом вышесказанного, вот готовый код:
Код: Text
  1. {$CLEO}
  2. 0000:                    
  3. while true
  4.     wait 0
  5.     if  player.Defined($PLAYER_CHAR)
  6.     then
  7.         if  80E0: not player $PLAYER_CHAR driving
  8.         then      
  9.             if  0AB0: key_pressed 0x46 // f
  10.             then
  11.                 while 0AB0: key_pressed 0x46 // f
  12.                     wait 0
  13.                 end                  
  14.                 if  0A9A: 0@ = openfile "CLEO/coordinate.ini" mode 0x77  // IF and SET
  15.                 then
  16.                     0054: store_player $PLAYER_CHAR position_to 1@ 2@ 3@
  17.                     0AD9: write_formatted_text "XYZ: %f %f %f" in_file 0@ 1@ 2@ 3@
  18.                     0A9B: closefile 0@
  19.                     0ACD: show_text_high_priority "~r~coordinates recorded" time 1000  
  20.                 end  
  21.             end
  22.         end
  23.     end
  24. end
Название: Re: Помощь с CLEO
Отправлено: egor230 от Октябрь 30, 2017, 09:23:04 pm
Уважаемый Shagg благодарю за Вашу отзывчивость и терпение. Всегда хотел стать программистом. Вы столько много мне помогайте.
Есть Вы не против, буду выкладывать свои поделки по lua.
С опытом приходит перфекционизм в деле написании скриптов, стремление сделать код кратким, понятным и легко изменяемым.
На помощь приходят scm-функций, например, 0AB1: call_scm_func @fun 3 #HMOCA 4 #MINIGUN 1@ . передаем модель, а ее id функция находит сама- очень удобно.
Вы правы, большую часть времени уходит на тестирования, скрипт перезагрузки скрипта сильно. Всегда убираю построение скрипты, чтобы не мешались.         
благодарю Вас за объяснение об этих двух опкодах.
Очень интересна разница между опкодами создающими и завершающими поток.
Нюансы их применение.
Код: Javascript
  1. 0A92: create_custom_thread "ShowTextBox.s"
  2. 00D7: create_thread @HJ without_parameters
  3. 05DE: create_custom_thread 'ct.s'
  4. 03A4: name_thread 'MAIN'
  5.  
  6. 004E: end_thread
  7. 0A93: end_custom_thread
  8. 0459: end_thread_named 'mythread'
  9. 0ABA: end_custom_thread_named 'BENZIN'
  10.  

Хотел бы научиться писать плагины на C++, жаль пока нет инструкции в видео формате…..
Декомпиляцией поможет отсечь элементарные ошибки в коде.

С бесконечными циклами, пока работаю хуже, чем с метками.
Увидел у Vital на канале, что он использовал.
Код: Javascript
  1. 0000:                    
  2. while player.Defined($PLAYER_CHAR)
  3. вместо
  4.  
  5. 0000:                    
  6. while true
  7.     wait 0
  8.     if  player.Defined($PLAYER_CHAR)
  9.  
так короче на один end.
Думал, опкод 0AB0 позволяет избавить от проверки отпущена клавиша.
Опкод 0AAB нужно записывать как условия.
Спасибо Вам огромное за скрипт.
Есть вопросы.
Вот опкод 0A9A нашел описание к нему, может новичкам поможет.
Код: Javascript
  1.  0A9A: 0@ = openfile "CLEO/coordinate.ini" mode 0x77  // IF and SET
  2.  
  3. Открывает файл для чтения и записи. Этот код операции может использоваться как условие: если файл не был открыт, он возвращает False, иначе True.
  4.  
  5. Параметры:
  6. 1 = переменная для хранения дескриптора файла
  7. 2 = имя файла. Если путь относительный, файл открыт в соответствии с текущим каталогом (код операции 0A99).
  8. 3 = режим открытия файла:
  9. 0x6272 - открывает двоичный файл для чтения
  10. 0x72 - открывает текстовый файл для чтения
  11. 0x6277 - открывает двоичный файл для записи
  12. 0x77 - открывает текстовый файл для записи
  13.  
Насчет опкода 0AD9: write_formatted_text "XYZ: %f %f %f" in_file 0@ 1@ 2@ 3@
Почему пишется %f %f %f? Что это дает и почему именно так?
Вот переписал миссию, она работает, проверил десятки раз.
Помогло избавиться от вылетов при подбирание денег 004E: end_thread // Завершение потока, но при провале или выполнении миссии, приходится перезагружать сэйв. Думаю решить эту проблему перезагрузкой из другого файла, методом  0A9A.
Также интересное наблюдение, если создать более двух врагов, игра вылетает с ошибкой http://pixs.ru/showimage/net1JPG_8268775_28118726.jpg (http://pixs.ru/showimage/net1JPG_8268775_28118726.jpg) поэтому их закомментировал. 
 
Код: Javascript
  1. {$CLEO}
  2. 0000:        
  3. const
  4. x = -1150.94 // Координаты значка миссии
  5. y = -1418.94 // Координаты значка миссии
  6. z = 11.5395 // Координаты значка миссии
  7. a = -1101.47 // Координаты пикапа
  8. b = -1330.97 // Координаты пикапа
  9. c = 11.3695 // Координаты пикапа  
  10. d = -1064.83 // Координаты педа
  11. e = -1445.94 // Координаты педа
  12. f = 11.7444 // Координаты педа
  13. m = 1000 // Кол-во денег педа  
  14. h = 200 // Количество жизни актера  
  15. g = 169.2093 // Задать угол актеру  
  16. end
  17. :MISSION_1    
  18. wait 0                                    
  19. if 0256: player $player_char defined
  20. jf @MISSION_1                                                    
  21. Thread 'TEST'  
  22. if and
  23. 0038: $onmission == 0 // integer values
  24. 0ADC: test_cheat "BLK" // включить миссию  
  25. jf @MISSION_1    
  26. :MISSION_START // Старт миссии          
  27. 03CB: load_scene d e f // быстрая прогрузка местности, чтобы не видеть мерзкие LODы
  28. fade 0 300 // Затемнение экрана      
  29. gosub @begin // Начало      
  30. gosub @pickup // Запрос модели кейса                  
  31. 0AB1: call_scm_func @fun 3 #HMOCA 4 #MINIGUN 1@      
  32. 0AB1: call_scm_func @fun 3 #VICE4 4 #M60 2@          
  33. //0AB1: call_scm_func @fun 3 #VICE3 4 #M60 3@
  34. //0AB1: call_scm_func @fun 3 #VICE2 4 #M60 4@        
  35. 0213: 14@ = create_pickup 335 type 1 at a b c // Создать пикап кейса  
  36. 03DC: 15@ = create_marker_above_pickup 14@ // Создать маркер над пикапом кейса  
  37. 0055: put_player $player_char at x y z // Поставить игрока на точку    
  38. gosub @delay // Задержка        
  39. fade 1 300 // Убрать затемение экрана          
  40. :player  // Условия провал миссии  
  41. wait 0
  42. if 8256: not player $player_char defined
  43. jf @actor
  44. gosub @MISSION_FAILED // Провал миссии    
  45. :actor // Условия прохождение миссии
  46. if and        
  47. 0118: actor 1@ dead      
  48. 0118: actor 2@ dead
  49. //0118: actor 3@ dead
  50. //0118: actor 4@ dead
  51. pickup.Picked_up(14@)    
  52. jf @player  
  53. gosub @MISSION_COMPLETED // Миссия выполнена  
  54. :MISSION_COMPLETED // Миссия выполнена
  55. 01E3: text_1number_styled 'M_PASS' number 1000 time 3000 style 1  // ˜© ?po¦?? ?ty m?cc?«! $~1~    
  56. 0394: play_music 1                        
  57. Player.Money($PLAYER_CHAR) += 1000            
  58. gosub @MISSION_END // Завершение миссии  
  59. return  
  60. :MISSION_FAILED // Провал миссии
  61. 00BA: text_styled 'M_FAIL' 3000 ms 1 // Надпись провал миссии    
  62. gosub @MISSION_END // Завершение миссии
  63. return  
  64. :MISSION_END // Завершение миссии                
  65. 0164: disable_marker 15@                
  66. 0215: destroy_pickup 14@        
  67. 0249: release_model 355      
  68. 0249: release_model #HMOCA          
  69. 0249: release_model #VICE4        
  70. //0249: release_model #VICE3          
  71. //0249: release_model #VICE2            
  72. 01C2: remove_references_to_actor 1@    
  73. 01C2: remove_references_to_actor 2@  
  74. //01C2: remove_references_to_actor 3@    
  75. //01C2: remove_references_to_actor 4@                
  76. 0004: $onmission = 0 // integer values
  77. 00D8: mission_cleanup    
  78. 004E: end_thread // Завершение потока  
  79. jump @MISSION_1 // Чтобы можно пройти заново    
  80. return            
  81. :begin              
  82. 0317: increment_mission_attempts // команда, для того чтобы в статистике к попытке миссий прибавилось 1  
  83. 0004: $onmission = 1 // мисия запущена                                                        
  84. wait 0
  85. return                                        
  86. :fun
  87. repeat
  88. wait 0
  89. 0247: request_model 0@ // Запрос модели таксиста
  90. 0247: request_model 2@ // Запрос модели минигана    
  91. 038B: load_requested_models          
  92. gosub @delay              
  93. until gosub @load
  94. 5@ = actor.Create(1@, 0@, 0, 0, 0)    
  95. 000E: 2@ -= 257 // Установить номер оружие
  96. 01B2: give_actor 5@ weapon 2@ ammo 9999    
  97. 02E2: set_actor 5@ weapon_accuracy_to 100 // Установка точности стрельбы для актера
  98. 000A: 2@ += 257 // Установить модель оружие
  99. actor.Angle(5@) = g // Задать угол актеру  
  100. actor.Health(5@) = h // Установить кол-во здоровье педа                
  101. 03FE: set actor 5@ money m // Кол-во денег педа  
  102. 01CA: actor 5@ kill_player $player_char // Актер хочет убить игрока    
  103. Model.Destroy(0@)      
  104. Model.Destroy(2@)      
  105. actor.PutAt(5@, d, e, f) // Поставить врага на точку      
  106. 0AB2: ret  1 5@
  107. :delay
  108. 16@ = 0
  109. repeat
  110. wait 0                
  111. until 0029: 16@ >= 900 // задержка  
  112. return
  113. :load
  114. if and
  115. Model.Available(0@)
  116. Model.Available(2@)
  117. jf @load
  118. return
  119. :pickup
  120. wait 0
  121. 0247: request_model 335  
  122. 038B: load_requested_models          
  123. if 0248: model 335 available
  124. jf @pickup
  125. return
  126.  
Название: Re: Помощь с CLEO
Отправлено: Shagg_E от Ноябрь 11, 2017, 01:48:10 am
Цитировать
Есть Вы не против, буду выкладывать свои поделки по lua.
Да я не против) Главное - чтобы в соответствующем разделе ;)

Цитировать
Очень интересна разница между опкодами создающими и завершающими поток.
Код: Text
  1. 0A92: create_custom_thread "ShowTextBox.s"
этот опкод запускает .s скрипт. Это обычный CLEO-скрипт, но с расширением ".s". Разница в том, что .s скрипты не запускаются автоматически при старте игры(в отличии от .cs скриптов). Т.е. данный способ используется, чтобы запустить какой-то скрипт ровно тогда, когда тебе нужно. Просто смени расширение нужного скрипта на ".s" и используй данный опкод запуска в другом скрипте.

Код: Text
  1. 00D7: create_thread @HJ without_parameters
Обычный create_thread(опкод 004F) в main.scm может вызываться с параметрами, точно так же, как как scm функция, а этот опкод - нет. Зато в потоках, которые создаются этим опкодом, в отличии от 004F, может вызываться опкод
Код: Text
  1. 00D8: mission_cleanup
, который "подчищает" некоторые действия, созданные другими опкодами(так же, как в миссиях). Подробнее тут (https://www.gtamodding.com/wiki/00D8).

Код: Text
  1. 05DE: create_custom_thread 'ct.s'
То же самое, что и опкод 0A92.

Код: Text
  1. 03A4: name_thread 'MAIN'
Задает имя потоку/CLEO-скрипту.
 
Код: Text
  1. 004E: end_thread
Завершает текущий поток в main.scm.

Код: Text
  1. 0A93: end_custom_thread
Завершает текущий CLEO-скрипт.

Код: Text
  1. 0459: end_thread_named 'mythread'
Завершает в main.scm поток с именем "mythread"(именно для этого и нужно объявлять имена потокам опкодом 03A4).

Код: Text
  1. 0ABA: end_custom_thread_named 'BENZIN'
Завершает CLEO-скрипт с именем "BENZIN"(если у того есть имя, заданное опкодом 03A4).

Цитировать
Хотел бы научиться писать плагины на C++, жаль пока нет инструкции в видео формате…..
Это не ко мне(я сам пока с этим профан). Но по C++ есть достаточно материала в интернете(да и на этом сайте, кстати).

Цитировать
Увидел у Vital на канале, что он использовал.
Я знаю одно - при декомпиляции это превращается в белиберду, значит тут что-то не так. Проверь сам и увидишь. Я уже писал, что с высокоуровневым кодингом в scm-скриптинге могут быть большие проблемы, поэтому сам им не пользуюсь, и помочь с этим не могу.

Цитировать
Насчет опкода 0AD9: write_formatted_text "XYZ: %f %f %f" in_file 0@ 1@ 2@ 3@
Почему пишется %f %f %f? Что это дает и почему именно так?
%f означает, что вместо этого символа будет вставлено float число(дробное), которое записано далее(переменная 1@).
Т.е. если это написано 3 раза - это означает, что будут вставлены 3 float числа, и они там передаются в переменные 1@ 2@ 3@.
Т.е. запись
Код: Text
  1. 1@ = 1.2
  2. 2@ = 4.5
  3. 3@ = 3.7
  4. 0AD9: write_formatted_text "XYZ: %f %f %f" in_file 0@ 1@ 2@ 3@
означает, что в файл 0@ запишется текст:
XYZ: 1.2 4.5 3.7Также можно вставлять не только float, но и integer. Для этого вместо %f нужно писать %d
В некоторых случаях также можно добавлять целые слова или строки: %s

Цитировать
Помогло избавиться от вылетов при подбирание денег 004E: end_thread // Завершение потока, но при провале или выполнении миссии, приходится перезагружать сэйв. Думаю решить эту проблему перезагрузкой из другого файла, методом  0A9A.
Зачем, если можно вместо завершения(end_thread) скрипта сделать "прыжок"(jump) на его начало?

По поводу миссии - сожалею, но тут я не могу помочь. Я уже писал об этом когда-то: что придет время, когда этот час настанет(тавтология). Твой код слишком объемный, так что я буду слишком долго в него вникать. Ты сам видел - я заходил на форум несколько раз с момента написания тобой этого сообщения, но отвечаю лишь сейчас.
У меня патологическая нехватка времени.
Помимо объёмности, твой код написан совершенно не так, как писал бы его я. Не в смысле "хуже" или "лучше", а в смысле в другом стиле. У каждого скриптера свой стиль, каждый пишет так, как удобно ему, а не другим. Нет единого стандарта и это мешает взаимопониманию.
Мне кажется, я рассказал тебе практически всё, что знал сам, а дальше дело уже за тобой. Ну и ребятами с sannybuilder (https://sannybuilder.com/forums/index.php).
Могу только посредством беглого анализа сказать, что в записи
Код: Text
  1. 004E: end_thread // Завершение потока  
  2. jump @MISSION_1 // Чтобы можно пройти заново    
  3. return
последние 2 строчки не выполняются, поскольку первая строчка завершает весь скрипт. Также в CLEO-скриптах вместо опкода 004E юзается 0A93(о котором я написал в начале этого сообщения).
Даже если ты удалишь первую строчку, то опять же - последняя никогда не выполнится, поскольку jump - это безоговорочный "прыжок", без выполнения кода, написанного ниже.
Т.е., чтобы выполнился return - тебе нужно удалить 2 верхние строчки.
Название: Re: Помощь с CLEO
Отправлено: egor230 от Ноябрь 21, 2017, 07:50:32 am
Спасибо огромное уважаемый Shagg_E за Ваш информативный ответ, очень рад нашему общению на форуме в таком формате.
Прошу прощение за долгий ответ, дел куча, а времени мало.
Хорошо, буду выкладывать, жаль по lua не так много уроков как по c++.
Скрипты  с расширением ".s", толкнули к интересной мысли. Их можно использовать как вспомогательные инструменты для обхода ограничений в 16.
Врагов создаю в BOMB.s, если враги убиты в ini файл пишет 1. А в основном поток идет проверка записан в ini файл 1. 
Не совсем понятно про 00D7 это поток можно вызвать опкодом.
Спасибо огромное за подробное объяснение про потоки.
C++ пока это для меня темным лес. Пока по cleo еще много вопросов.
Высокоуровневый скриптинг, можно использовать, если работает идеально на низкоуровневом.
Благодарю Вас за понятного объяснение про запись в ini файл, теперь лимит в перемен можно обойти.
cleo миссии имеют ряд особенности, мы не можем писать cm миссии как для sa.
Почему опкод 004E: end_thread помогает избежать вылетов, тут надо еще разбираться. Благодарю за верное замечание, переместил его.
Да, нехватка времени эта главная проблема нашего времени.
Прекрасно понимаю, что мой код миссии кривой, его можно улучшать, по мере накопление опыта.
Из-за свободы в написание скриптов, трудно разобраться в чужом скрипте, хорошо в этом помогают комментарии.
Спасибо за подсказку насчет опкода 0A93.
Есть еще один вопрос.
Существуют опкоды.
0297: clear_rampage_kills очистить все убийства
0298: 0@ = rampage_kills 83 получить сколько игрок убил педов.
Пытался сделать счетчик убийств.
Код: Javascript
  1. {$CLEO}
  2. 0000:
  3. :k_1
  4. wait 0
  5. if 05EE: key_pressed 72
  6. jf @k_1
  7. 0297: clear_rampage_kills
  8. 0298: 0@ = rampage_kills 83          
  9. :k_2          
  10. wait 0
  11. if 0039: 0@ == 1 // integer values
  12. jf @k_2
  13. 0acd: show_text_high_priority "da" time 1000 // убил одного вывел сообщение "da"
  14. jump @k_1
  15.  
думал использовать в миссиях.
Вот миссия.
 
Код: Javascript
  1. {$CLEO}
  2. 0000:        
  3. const
  4. x = -1150.94 // Координаты значка миссии
  5. y = -1418.94 // Координаты значка миссии
  6. z = 11.5395 // Координаты значка миссии
  7. a = -1101.47 // Координаты пикапа
  8. b = -1330.97 // Координаты пикапа
  9. c = 11.3695 // Координаты пикапа  
  10. d = -1064.83 // Координаты педа
  11. e = -1445.94 // Координаты педа
  12. f = 11.7444 // Координаты педа    
  13. m = 1000 // Кол-во денег педа  
  14. h = 200 // Количество жизни актера  
  15. g = 169.2093 // Задать угол актеру  
  16. end
  17. :MISSION_1    
  18. wait 0                                    
  19. if 0256: player $player_char defined
  20. jf @MISSION_1                                                    
  21. Thread 'TEST'  
  22. if and
  23. 0038: $onmission == 0 // integer values
  24. 0ADC: test_cheat "BLK" // включить миссию  
  25. jf @MISSION_1    
  26. :MISSION_START // Старт миссии          
  27. 03CB: load_scene d e f // быстрая прогрузка местности, чтобы не видеть мерзкие LODы
  28. fade 0 300 // Затемнение экрана      
  29. gosub @begin // Начало      
  30. gosub @pickup // Запрос модели кейса    
  31. 0AB1: call_scm_func @fun 3 #VICE4 4 #flame 1@                
  32. 0213: 14@ = create_pickup 335 type 1 at a b c // Создать пикап кейса  
  33. 03DC: 15@ = create_marker_above_pickup 14@ // Создать маркер над пикапом кейса  
  34. 0055: put_player $player_char at x y z // Поставить игрока на точку    
  35. gosub @delay // Задержка        
  36. fade 1 300 // Убрать затемение экрана  
  37. 0acd: show_text_high_priority "~p~ Kill the enemy, take the case!!!" time 7000 // Надпись на экрана          
  38. 0A92: create_custom_thread "BOMB.s" // Запустить скрипт с врагами  
  39. :player  // Условия провал миссии  
  40. wait 0
  41. if 8256: not player $player_char defined
  42. jf @actor
  43. gosub @MISSION_FAILED // Провал миссии    
  44. :actor // Условия прохождение миссии
  45. if and
  46. 0118: actor 1@ dead
  47. pickup.Picked_up(14@)    
  48. jf @player            
  49. 0A9A: 13@ = openfile "CLEO\Set.ini" mode "rt" // Открыть ini файл в режиме чтение      
  50. 0ADA: 12@ = scan_file 13@ format "%d" 11@ //IF and SET
  51. if
  52. 0039: 11@ == 1 // integer values
  53. jf @player                          
  54. 0A9B: closefile 13@  
  55. 0A9A: 13@ = openfile "CLEO\Set.ini" mode 0x77  // Открыть ini файл в режиме записи    
  56. 0006: 11@ = 0 // integer values            
  57. 0AD9: write_formatted_text "%d" in_file 13@ 11@
  58. 0A9B: closefile 13@  
  59. gosub @MISSION_COMPLETED // Миссия выполнена  
  60. :MISSION_COMPLETED // Миссия выполнена
  61. 01E3: text_1number_styled 'M_PASS' number 1000 time 3000 style 1  // ˜© ?po¦?? ?ty m?cc?«! $~1~    
  62. 0394: play_music 1                        
  63. Player.Money($PLAYER_CHAR) += 1000            
  64. gosub @MISSION_END // Завершение миссии  
  65. return  
  66. :MISSION_FAILED // Провал миссии
  67. 00BA: text_styled 'M_FAIL' 3000 ms 1 // Надпись провал миссии    
  68. gosub @MISSION_END // Завершение миссии
  69. return  
  70. :MISSION_END // Завершение миссии  
  71. 0249: release_model #VICE4
  72. 01C2: remove_references_to_actor 1@              
  73. 0164: disable_marker 15@                
  74. 0215: destroy_pickup 14@        
  75. 0249: release_model 355            
  76. 0395: clear_area 1 at x y range z 100.0 // Очистка местностти  
  77. 0395: clear_area 0 at x y range z 100.0  
  78. 0004: $onmission = 0 // integer values
  79. 00D8: mission_cleanup    
  80. 0ABA: end_custom_thread_named "BOMB.s"      
  81. jump @MISSION_1 // Чтобы можно пройти заново
  82. return                                          
  83. 0A93: end_custom_thread // Завершение потока  
  84. :begin          
  85. 0317: increment_mission_attempts // команда, для того чтобы в статистике к попытке миссий прибавилось 1  
  86. 0004: $onmission = 1 // мисия запущена                                                        
  87. wait 0        
  88. return                  
  89. :pickup
  90. wait 0
  91. 0247: request_model 335  
  92. 038B: load_requested_models          
  93. if 0248: model 335 available
  94. jf @pickup
  95. return                    
  96. :delay
  97. 16@ = 0
  98. repeat
  99. wait 0                
  100. until 0029: 16@ >= 900 // задержка  
  101. return
  102. :fun
  103. repeat
  104. wait 0
  105. 0247: request_model 0@ // Запрос модели таксиста
  106. 0247: request_model 2@ // Запрос модели минигана
  107. 038B: load_requested_models
  108. gosub @delay
  109. until gosub @load
  110. 5@ = actor.Create(1@, 0@, d, e, f)
  111. 000E: 2@ -= 257 // Установить номер оружие
  112. 01B2: give_actor 5@ weapon 2@ ammo 9999
  113. 02E2: set_actor 5@ weapon_accuracy_to 100 // Установка точности стрельбы для актера
  114. 000A: 2@ += 257 // Установить модель оружие
  115. actor.Angle(5@) = g // Задать угол актеру
  116. actor.Health(5@) = h // Установить кол-во здоровье педа
  117. 03FE: set actor 5@ money m // Кол-во денег педа
  118. 01CA: actor 5@ kill_player $player_char // Актер хочет убить игрока
  119. Model.Destroy(2@)
  120. Model.Destroy(0@)
  121. 0AB2: ret 1 5@
  122. :load
  123. if and
  124. Model.Available(0@)
  125. Model.Available(2@)
  126. jf @load
  127. return
  128.  

Скрипт врагов

Код: Javascript
  1. {$CLEO .s}                
  2. 0000:    
  3. const
  4. x = -1150.94 // Координаты значка миссии
  5. y = -1418.94 // Координаты значка миссии
  6. z = 11.5395 // Координаты значка миссии
  7. a = -1101.47 // Координаты пикапа
  8. b = -1330.97 // Координаты пикапа
  9. c = 11.3695 // Координаты пикапа  
  10. d = -1064.83 // Координаты педа
  11. e = -1445.94 // Координаты педа
  12. f = 11.7444 // Координаты педа
  13. m = 1000 // Кол-во денег педа  
  14. h = 200 // Количество жизни актера  
  15. g = 169.2093 // Задать угол актеру  
  16. end                                      
  17. thread 'BOMB'      
  18. :1
  19. wait 0                                        
  20. 0AB1: call_scm_func @fun 3 #VICE4 4 #flame 1@ 2@ 3@ 4@    
  21. :2                            
  22. wait 0
  23. if and                              
  24. 0118: actor 1@ dead            
  25. 0118: actor 2@ dead            
  26. jf @3                                          
  27. 0AAB: file_exists "CLEO\Set.ini"    
  28. 0A9A: 13@ = openfile "CLEO\Set.ini" mode 0x77  // IF and SET        
  29. 0006: 11@ = 1 // integer values            
  30. 0AD9: write_formatted_text "%d" in_file 13@ 11@
  31. 0A9B: closefile 13@  
  32. jump @4
  33. :3      
  34. if 8256: not player $player_char defined
  35. jf @2
  36. :4
  37. 0164: disable_marker 3@    
  38. 0164: disable_marker 4@    
  39. 01C2: remove_references_to_actor 1@        
  40. 01C2: remove_references_to_actor 2@        
  41. 0249: release_model #VICE4
  42. 004E: end_thread // Завершение потока                            
  43. :fun
  44. repeat
  45. wait 0
  46. 0247: request_model 0@ // Запрос модели таксиста
  47. 0247: request_model 2@ // Запрос модели минигана    
  48. 038B: load_requested_models          
  49. gosub @delay              
  50. until gosub @load      
  51. 3@ = actor.Create(1@, 0@, d, e, f)    
  52. 000E: 2@ -= 257 // Установить номер оружие
  53. 01B2: give_actor 3@ weapon 2@ ammo 9999    
  54. 02E2: set_actor 3@ weapon_accuracy_to 100 // Установка точности стрельбы для актера
  55. 000A: 2@ += 257 // Установить модель оружие
  56. actor.Angle(3@) = g // Задать угол актеру  
  57. actor.Health(3@) = h // Установить кол-во здоровье педа                
  58. 03FE: set actor 3@ money m // Кол-во денег педа  
  59. 01CA: actor 3@ kill_player $player_char // Актер хочет убить игрока      
  60. 0187: 5@ = create_marker_above_actor 3@        
  61. 4@ = actor.Create(1@, 0@, d, e, f)    
  62. 000E: 2@ -= 257 // Установить номер оружие
  63. 01B2: give_actor 4@ weapon 2@ ammo 9999    
  64. 02E2: set_actor 4@ weapon_accuracy_to 100 // Установка точности стрельбы для актера
  65. 000A: 2@ += 257 // Установить модель оружие
  66. actor.Angle(4@) = g // Задать угол актеру  
  67. actor.Health(4@) = h // Установить кол-во здоровье педа                
  68. 03FE: set actor 4@ money m // Кол-во денег педа  
  69. 01CA: actor 4@ kill_player $player_char // Актер хочет убить игрока      
  70. 0187: 6@ = create_marker_above_actor 4@    
  71. 0249: release_model 0@
  72. 0249: release_model 2@
  73. 0AB2: ret 4 3@ 4@ 5@ 6@  
  74. :delay
  75. 16@ = 0
  76. repeat
  77. wait 0                
  78. until 0029: 16@ >= 900 // задержка  
  79. return
  80. :load
  81. if and
  82. Model.Available(0@)
  83. Model.Available(2@)
  84. jf @load
  85. return
  86.  
Название: Re: Помощь с CLEO
Отправлено: egor230 от Декабрь 01, 2017, 10:36:57 am
Здравствуйте, всем.
Нашел интересный cleo скрипт для sa. Он открывает дверь фабрике.
Код: Javascript
  1. {$CLEO .cs}
  2.  
  3. //-------------MAIN---------------
  4. 0662: printstring "SCRIPT_BY_[_KRASH_]"
  5. 03A4: name_thread "OTRKOYMNEETYXYNTY"
  6.  
  7. :OTRKOYMNEETYXYNTY_44
  8. 0001: wait 0 ms
  9. 00D6: if and
  10. 056D:   actor $PLAYER_ACTOR defined
  11. 0038:   $ONMISSION == 0
  12. 03CA:   object 0@ exists
  13. 00FE:   actor $PLAYER_ACTOR sphere 0 in_sphere 1055.53 2087.596 10.8203 radius 10.0 10.0 10.0
  14. 004D: jump_if_false @OTRKOYMNEETYXYNTY_44
  15. 034E: move_object 0@ to 1055.629 2087.67 15.469 speed 0.0 0.0 0.05 collision_check 0
  16.  
  17. :OTRKOYMNEETYXYNTY_150
  18. 0001: wait 0 ms
  19. 00D6: if
  20. 00FE:   actor $PLAYER_ACTOR sphere 0 in_sphere 1055.53 2087.596 10.8203 radius 10.0 10.0 10.0
  21. 004D: jump_if_false @OTRKOYMNEETYXYNTY_209
  22. 0002: jump @OTRKOYMNEETYXYNTY_44
  23.  
  24. :OTRKOYMNEETYXYNTY_209
  25. 0001: wait 0 ms
  26. 034E: move_object 0@ to 1055.629 2087.67 12.469 speed 0.0 0.0 0.05 collision_check 0
  27. 0002: jump @OTRKOYMNEETYXYNTY_150
  28.  

Решил сделать, что-то подобное в vc с гаражом Кема Джонса.
Код: Javascript
  1. {$CLEO .cs}
  2. 0000:  
  3. const
  4. t = 25 // Скорость дверей
  5. end
  6. 0006: 0@ = 0 // integer values      
  7. :Noname_2
  8. wait 0    
  9. if 056D: actor $PLAYER_ACTOR defined  
  10. jf @Noname_2  
  11. if 00F6: player $player_char in_sphere 0 near_point_on_foot -836.77 -901.84 12.05 radius 9.8 4.8 8.5
  12. jf @Noname_2          
  13. :Noname_1  
  14. wait 0      
  15. if and    
  16. 0AB0: key_pressed 69
  17. 0039: 0@ == 0 // integer values      
  18. jf @Noname_3  
  19. 0AE3: 3@ = random_object_near_point -836.77 -901.84 12.05 in_radius 5.0 find_next 0 //IF and SET    
  20. for 4@ = 1 to 100
  21. 034E: move_object 3@ to -837.13 -901.67 15.95 speed 0.0 0.0 0.05 collision_check 0
  22. wait t
  23. end
  24. 000A: 0@ += 1  // integer values  
  25. :Noname_3        
  26. wait 0  
  27. if and    
  28. 0AB0: key_pressed 69  
  29. 0039: 0@ == 1 // integer values      
  30. jf @Noname_4
  31. 0AE3: 3@ = random_object_near_point -836.77 -901.84 15.95 in_radius 5.0 find_next 0 //IF and SET    
  32. for 4@ = 1 to 100
  33. 034E: move_object 3@ to -836.77 -901.84 12.05 speed 0.0 0.0 0.05 collision_check 0
  34. wait t
  35. end
  36. 000E: 0@ -= 1  // integer values  
  37. :Noname_4        
  38. wait 0  
  39. if and    
  40. 80F6: not player $player_char in_sphere 0 near_point_on_foot -836.77 -901.84 12.05 radius 9.8 4.8 8.5
  41. 0039: 0@ == 1 // integer values      
  42. jf @Noname_1  
  43. 0AE3: 3@ = random_object_near_point -836.77 -901.84 15.95 in_radius 5.0 find_next 0 //IF and SET    
  44. for 4@ = 1 to 100
  45. 034E: move_object 3@ to -836.77 -901.84 12.05 speed 0.0 0.0 0.05 collision_check 0
  46. wait t
  47. end
  48. 000E: 0@ -= 1  // integer values  
  49. jump @Noname_2
  50.  
  51.  

Возник вопрос. Есть опкод 05F1: 3@ = random_object_near_point 0@ 1@ 2@ in_radius 10.0 find_next 1 //IF and SET
Он ищет случайные объекты в радиусе. Как проверить соответствует модель номеру,  например 3@ == 826?.
Как лучше двигать объект, через цикл for? Нужно высчитывать много.
Название: Re: Помощь с CLEO
Отправлено: mfisto от Декабрь 02, 2017, 09:38:34 pm
Ну во-первых цикл for не нужен. Опкод 034E - это еще и проверка. Ты можешь сделать вот так:

if
   034E: move_object 3@ to -836.77 -901.84 12.05 speed 0.0 0.0 0.05 collision_check 0
then
   ...
end

Чтоб проверить модель надо сделать вот так:

0AE3: 3@ = random_object_near_point -836.77 -901.84 15.95 in_radius 5.0 find_next 0 //IF and SET  // получаем хендл объекта в заданных координатах
0A98: 15@ = object 3@ struct   // получаем структуру по хендлу
15@ += 0x5C    //    переходим к смещению в структуре, где находится модель объекта
0A8D: 15@ = read_memory 15@ size 2 virtual_protect 0    //   вычисляем модель, которая в Вайсе занимает 2 байта (кстати и не только в этой гта)
if
   15@ == 826   //   проверяем равняется ли модель - 826
then
   ...
end
Название: Re: Помощь с CLEO
Отправлено: egor230 от Декабрь 06, 2017, 02:14:26 pm
Mfisto благодарю Вас за очень объяснение.
Ваш способ намного проще и лучше.
Вот как работать с памятью, чтобы сравнивать с id объекта, не знал.
Работа с памятью открывает новые возможности.
Изучаю ее, пока на SA.
Подскажите, пожалуйста, почему не получается отключить радар и интерфейс?
Не понимаю, должно работать.
Код: Javascript
  1. {$CLEO .cs}
  2. 0000:
  3. :NONAME_10
  4. 0001: wait 0 ms
  5. 00D6: if
  6. 0ADC: test_cheat "CV"
  7. 004D: jump_if_false @NONAME_10
  8. 0A8D: 1@ = read_memory 0xBA676C size 1 virtual_protect 1
  9. 0acd: show_text_high_priority "~p~ Kill the enemy, take the case!!!" time 7000 // Надпись на экрана
  10. 05DF: write_memory 1@ size 1 value 2 virtual_protect 0
  11. //05DF: write_memory 0xBA6769 size 1 value 0 virtual_protect 1
  12. 0002: jump @NONAME_10
  13. //0A93: end_custom_thread // Завершение потока
  14. 0xBA676C - [байт] Радарный режим
  15. 0 = карты и блики
  16. 1 = блики
  17. 2 = выкл.
  18. 0xBA6769 - [байт] Режим Hud
  19. 0 = выкл.
  20. 1 = on
  21.  

Название: Re: Помощь с CLEO
Отправлено: mfisto от Декабрь 07, 2017, 04:00:00 am
Если верить твоим адресам (в плане того, что ты сам написал), то надо всего лишь добавить к твоему коду две строчки:

0A8C: write_memory 0xBA676C size 1 value 2 virtual_protect 0 // эту строчку добавляешь туда, где надо отключить "Радарный режим"
0A8C: write_memory 0xBA6769 size 1 value 0 virtual_protect 0 // а эту - где надо отключить "Hud"
Название: Re: Помощь с CLEO
Отправлено: egor230 от Декабрь 09, 2017, 10:39:25 am
Благодарю Вас уважаемый mfisto за Ваш ответ. Теперь адреса памяти работаю.
Хочу научится с ними работать. Не совсем до конца это понимаю.
Например, искал уроки по вызову функций, их к сожалению нет.
Для каких адресов памяти, можно вызывать функцию и как?
Вот переделал один скрипт, теперь правая дверь авто сама открывается при входе.
Код: Javascript
  1. {$CLEO .cs}
  2. 0000:
  3. :1
  4. wait 0
  5. if and
  6. 80E0: not player $player_char driving
  7. 00E1: player 0 pressed_button 15
  8. jf @1                                    
  9. actor.storepos($PLAYER_ACTOR, 1@ 2@ 3@)
  10. :2
  11. 0AE2: 10@ = random_vehicle_near_point 1@ 2@ 3@ in_radius 20.0 find_next 0 pass_wrecked 1 //IF and SET
  12. 0AB1: call_scm_func @left_front_door 1 10@ ret 0  
  13. jump @1
  14. :left_front_door        
  15. 05E7: 10@ = car 0@ struct
  16. 05E4: call_function_method 0x59D1D0 struct 10@ num_params 1 pop 0 15 {1..19} 2@ // IsComponentPresent
  17. if 2@ == 1
  18. then
  19. 0085: 3@ = 10@
  20. 3@ += 0x2A0 // CDamageManager
  21. 05E4: call_function_method 0x5A9810 struct 3@ num_params 1 pop 0 2 {0..5} 4@ // GetComponnetStatus
  22. if 4@ <> 3
  23. then
  24. for 12@ = 0.0 TO 1.0 step 0.1
  25. 05E3: call_function_method 0x59CF50 struct 10@ num_params 3 pop 0 12@ 2 15 {1..19} // CAutomobile__OpenDoor ???
  26. wait 0
  27. end
  28. 05E3: call_function_method 0x59CF50 struct 10@ num_params 3 pop 0 1.0 2 15 {1..19} // CAutomobile__OpenDoor ???
  29. end
  30. end
  31. 0AB2: ret 0
  32.  
Название: Re: Помощь с CLEO
Отправлено: egor230 от Декабрь 29, 2017, 07:25:41 pm
Здравствуйте, всем.
Поздравлю всех с наступающим Новым годом.
Благодарю Вашим ответами изучил основы cleo.
Хочется дальше расти и развиваться.
Хотел у Вас спросить, есть опкод 0AD9: write_formatted_text "XYZ: %f %f %f" in_file 0@ 1@ 2@ 3@ а как использовать опкод  0A9E
Скрипт с этим опкодом вылетает.
Код: Javascript
  1. {$CLEO .cs}
  2. 0000:
  3. :1
  4. wait 0                      
  5. if 00E0:   player $player_char driving
  6. jf @1                    
  7. if 0AB0: key_pressed 0x4e // n
  8. jf @1                          
  9. 03C0: 0@ = actor $player_char car
  10. 00AA: store_car 0@ position_to 1@ 2@ 3@  
  11. 0AAB: file_exists "CLEO\he.ini"  
  12. 0A9A: 4@ = openfile "CLEO\he.ini" mode 0x77    // Открыть ini файл в режиме записи        
  13. 0A9E: writefile 4@ size 64 from 1@        
  14. 0A9B: closefile 4@
  15. jump @1
  16.  
Скажите, пожалуйста, как правильно использовать  опкод  0A9E
Название: Re: Помощь с CLEO
Отправлено: egor230 от Февраль 05, 2018, 10:25:01 pm
Здравствуйте, всем.
Хочу сделать дистанционное управление вертолета.
Сделал набор высоты, движение вперед.
Не могу сделать поворот вертолета. Подскажите, пожалуйста, умные люди.

Код: Javascript
  1. {$CLEO .cs}
  2. 0000:
  3. :1
  4. wait 0                  
  5. if 0AB0: key_pressed 0x4e // n
  6. jf @1                                      
  7. :2
  8. wait 0                  
  9. if 8AB0: key_pressed 0x4e // n
  10. jf @2          
  11. 04C4: create_coordinate 1@ 2@ 3@ from_actor $PLAYER_ACTOR offset 0.0 12.2 0.0
  12. 0AB1: call_scm_func @fun 4 #MAVERICK 1@ 2@ 3@ 0@    
  13. 0158: camera_on_vehicle 0@ mode 18 switchstyle 1
  14. 01B4: set_player $PLAYER_CHAR frozen_state 0      
  15. 01F7: set_player $player_char ignored_by_cops_state_to 1
  16. 03BF: set_player $player_char ignored_by_everyone_to 1  
  17. :3        
  18. wait 0              
  19. if 0AB0: key_pressed 0x26 // up
  20. jf @4                
  21. 0407: create_coordinate 1@ 2@ 3@ from_car 0@ with_offset 0.0 0.0 20.0
  22. 04A2: heli 0@ fly_to 1@ 2@ 3@  speed 0 0    
  23. :4                  
  24. wait 0              
  25. if 0AB0: key_pressed 0x63 // num 3
  26. jf @5            
  27. 0407: create_coordinate 1@ 2@ 3@ from_car 0@ with_offset 0.0 30.0 0.0                  
  28. 000A: 2@ += 28 // integer values  
  29. 04A2: heli 0@ fly_to 1@ 2@ 3@ speed 30 30  
  30. :5
  31. wait 0                
  32. if 0AB0: key_pressed 0x28 // down
  33. jf @6                
  34. 0407: create_coordinate 1@ 2@ 3@ from_car 0@ with_offset 0.0 0.0 -20.0
  35. 04A2: heli 0@ fly_to 1@ 2@ 3@  speed 0 0          
  36. :6  
  37. wait 0              
  38. if 0AB0: key_pressed 0x37 // left
  39. jf @7              
  40. 0407: create_coordinate 1@ 2@ 3@ from_car 0@ with_offset 0.0 -20.0 0.0  
  41. 04D0: force_heli 0@ looking_angle_to 105.0
  42.          
  43. :7  
  44. wait 0              
  45. if 0AB0: key_pressed 0x39 // rithit
  46. jf @3                
  47. 0407: create_coordinate 1@ 2@ 3@ from_car 0@ with_offset 30.0 30.0 0.0  
  48. 000A: 1@ += 280 // integer values        
  49. 000A: 2@ += 20 // integer values                  
  50. 04A2: heli 0@ fly_to 1@ 2@ 3@ speed 30 30  
  51. jump @3        
  52. :fun
  53. repeat
  54. wait 0
  55. Model.Load(0@)                
  56. 038B: load_requested_models              
  57. gosub @delay
  58. until Model.Available(0@)  
  59. 00A5: 4@ = create_car 0@ at 1@ 2@ 3@
  60. Model.Destroy(0@)
  61. 0AB2: ret 1 4@
  62. gosub @delay
  63. :delay
  64. 16@ = 0
  65. repeat
  66. wait 0                
  67. until 0029: 16@ >= 400 // задержка
  68. return
  69.  
Название: Re: Помощь с CLEO
Отправлено: egor230 от Февраль 06, 2018, 05:10:43 pm
Все, сделал.
Дистанционное управление вертолетом.
N - войти и выйти
Enter - выйти с посадкой
Вверх- набор выбор высоты.
Вниз- снижение.
Влево вправо.
Вперед num3
Назад num6.

Код: Javascript
  1. {$CLEO}
  2. 0000:
  3. :1
  4. wait 0                  
  5. if and
  6. 80E0: not player $player_char driving
  7. 0AB0: key_pressed 0x4e // n
  8. jf @1                                      
  9. :2
  10. wait 0                  
  11. if 8AB0: key_pressed 0x4e // n
  12. jf @2          
  13. 04C4: create_coordinate 1@ 2@ 3@ from_actor $PLAYER_ACTOR offset 0.0 12.2 0.0
  14. 0AB1: call_scm_func @fun 4 #MAVERICK 1@ 2@ 3@ 0@  
  15. gosub @fun1    
  16. :3        
  17. wait 0              
  18. if 0AB0: key_pressed 0x26 // up
  19. jf @4                
  20. 0407: create_coordinate 1@ 2@ 3@ from_car 0@ with_offset 0.0 0.0 20.0
  21. 04A2: heli 0@ fly_to 1@ 2@ 3@  speed 0 0    
  22. :4                  
  23. wait 0              
  24. if 0AB0: key_pressed 0x63 // num 3
  25. jf @5            
  26. 0407: create_coordinate 1@ 2@ 3@ from_car 0@ with_offset 0.0 30.0 0.0                  
  27. 000A: 2@ += 28 // integer values  
  28. 04A2: heli 0@ fly_to 1@ 2@ 3@ speed 30 30  
  29. :5
  30. wait 0                
  31. if 0AB0: key_pressed 0x28 // down
  32. jf @6                
  33. 0407: create_coordinate 1@ 2@ 3@ from_car 0@ with_offset 0.0 0.0 -20.0
  34. 04A2: heli 0@ fly_to 1@ 2@ 3@  speed 0 0          
  35. :6  
  36. wait 0              
  37. if 0AB0: key_pressed 0x25 // left
  38. jf @7              
  39. 0407: create_coordinate 1@ 2@ 3@ from_car 0@ with_offset -6.0 -6.0 0.0  
  40. 04A2: heli 0@ fly_to 1@ 2@ 3@  speed 1  
  41. :7  
  42. wait 0              
  43. if 0AB0: key_pressed 0x27 // rithit
  44. jf @8                
  45. 0407: create_coordinate 1@ 2@ 3@ from_car 0@ with_offset 6.0 -6.0 0.0    
  46. 04A2: heli 0@ fly_to 1@ 2@ 3@  speed 1        
  47. :8        
  48. wait 0              
  49. if 0AB0: key_pressed 0x66 // num 6
  50. jf @9            
  51. 0407: create_coordinate 1@ 2@ 3@ from_car 0@ with_offset 0.0 -30.0 0.0                
  52. 04A2: heli 0@ fly_to 1@ 2@ 3@ speed 30 30      
  53. :9        
  54. wait 0              
  55. if 0AB0: key_pressed 0xD// enter
  56. jf @10            
  57. gosub @fun2    
  58. 0369: put_player $player_char in_car 0@
  59. wait 400
  60. 03E2: actor $player_actor exit_car  
  61. 01C3: remove_references_to_car 0@      
  62. jump @1
  63. :10        
  64. wait 0          
  65. if 0AB0: key_pressed 0x4e // n            
  66. jf @3
  67. 01C3: remove_references_to_car 0@
  68. gosub @fun2        
  69. wait 1200    
  70. jump @1
  71. :fun
  72. repeat
  73. wait 0
  74. Model.Load(0@)                
  75. 038B: load_requested_models              
  76. gosub @delay
  77. until Model.Available(0@)  
  78. 00A5: 4@ = create_car 0@ at 1@ 2@ 3@
  79. Model.Destroy(0@)
  80. 0AB2: ret 1 4@
  81. :delay
  82. 16@ = 0
  83. repeat
  84. wait 0                
  85. until 0029: 16@ >= 400 // задержка
  86. return
  87. :fun1
  88. 0158: camera_on_vehicle 0@ mode 18 switchstyle 1
  89. 01B4: set_player $PLAYER_CHAR frozen_state 0      
  90. 01F7: set_player $player_char ignored_by_cops_state_to 1
  91. 03BF: set_player $player_char ignored_by_everyone_to 1    
  92. return
  93. :fun2
  94. 015A: restore_camera
  95. 01B4: set_player $PLAYER_CHAR frozen_state 1      
  96. 01F7: set_player $player_char ignored_by_cops_state_to 0
  97. 03BF: set_player $player_char ignored_by_everyone_to 0    
  98. return
  99.  
Название: Re: Помощь с CLEO
Отправлено: egor230 от Февраль 08, 2018, 10:20:45 pm
Здравствуйте, уважаемый Constantine.
Нужно сначала посмотреть код Вашего скрипта.
Название: Re: Помощь с CLEO
Отправлено: egor230 от Февраль 09, 2018, 04:56:33 pm
Здравствуйте,  всем.
Захотел, чтобы можно сбрасывать бомбы с вертолета.
Но получается ее прикрепить к вертолету опкодом  035C: place_object 0@ relative_to_car 4@ offset 0.0 0.0 -4.9     то, падает, то зависает в воздухе.
Подскажите, пожалуйста, как реализировать?
Код: Javascript
  1. {$CLEO}
  2. 0000:
  3. :1
  4. wait 0                  
  5. if and
  6. 80E0: not player $player_char driving
  7. 0AB0: key_pressed 0x4e // n
  8. jf @1                                      
  9. :2
  10. wait 0                  
  11. if 8AB0: key_pressed 0x4e // n
  12. jf @2                                      
  13. 04C4: create_coordinate 1@ 2@ 3@ from_actor $PLAYER_ACTOR offset 0.0 10.2 0.0
  14. 0AB1: call_scm_func @fun 4 #HUNTER 1@ 2@ 3@  4@
  15. 00AA: store_car 4@ position_to 1@ 2@ 3@ offset 0.0 0.0 -0.4                
  16. 0AB1: call_scm_func @fun1 1 #RCBOMB 0@              
  17. :4
  18. wait 0                  
  19. if and
  20. 00E0:  player $player_char driving
  21. 0AB0: key_pressed 0x4e // n
  22. jf @4        
  23. 00AA: store_car 4@ position_to 1@ 2@ 3@ offset 0.0 0.0 -0.8                  
  24. 01BC: put_object 0@ at 1@ 2@ 3@                            
  25. 035C: place_object 0@ relative_to_car 4@ offset 0.0 0.0 -4.9    
  26. 0392: object 0@ toggle_in_moving_list 1    
  27. wait 3000
  28. :3
  29. wait 0                  
  30. if and
  31. 00E0:  player $player_char driving
  32. 0AB0: key_pressed 0x4e // n
  33. jf @3                          
  34. wait 3000    
  35. 0400: create_coordinate 1@ 2@ 3@ from_object 0@ offset 0.0 0.0 0.0
  36. 020C: create_explosion_with_radius 10 at 1@ 2@ 3@  
  37. 01C4: remove_references_to_object 0@ // This object will now disappear when the player looks away
  38. jump @1                        
  39. :fun
  40. repeat
  41. wait 0
  42. Model.Load(0@)                
  43. 038B: load_requested_models              
  44. gosub @delay
  45. until Model.Available(0@)      
  46. 00A5: 6@ = create_car 0@ at 1@ 2@ 3@
  47. Model.Destroy(0@)
  48. 0AB2: ret 1 6@  
  49. :fun1
  50. repeat
  51. wait 0
  52. Model.Load(0@)                
  53. 038B: load_requested_models              
  54. gosub @delay
  55. until Model.Available(0@)                
  56. 0107: 5@ = create_object #RCBOMB at 0.0 0.0 0.0
  57. Model.Destroy(0@)
  58. 0453: object 5@ set_rotation -90.0 0.0 0.0  
  59. 0382: set_object 5@ collision_detection 1
  60. 04D9: object 5@ set_scripted_collision_check 1
  61. 0AB2: ret 1 5@  
  62. :delay
  63. 16@ = 0
  64. repeat
  65. wait 0                
  66. until 0029: 16@ >= 400 // задержка
  67. return
  68.  
Название: Re: Помощь с CLEO
Отправлено: Shagg_E от Февраль 09, 2018, 06:55:50 pm
egor230
Опкод 035C нужно применять в цикле(каждые 0 ms).

Constantine
Также замечу, что это подфорум по Вайсу. По СА здесь (http://forum.gtabuilder.ru/index.php?board=12.0).
Название: Re: Помощь с CLEO
Отправлено: egor230 от Февраль 10, 2018, 12:29:35 pm
Спасибо за Ваш ответ уважаемый  Shagg_E.
Действительно опкод 035C работает только в цикле.
Делать так.
Теперь можно сбрасывать бомбы  с вертолета.
Введите чит "HUN", чтобы сбросить бомбу, нажмите "B".

Код: Javascript
  1. {$CLEO}
  2. 0000:
  3. :1
  4. wait 0  
  5. gosub @d
  6. if and
  7. 80E0: not player $player_char driving
  8. 0ADC: test_cheat "hun"
  9. jf @1                      
  10. 04C4: create_coordinate 1@ 2@ 3@ from_actor $PLAYER_ACTOR offset 0.0 10.2 0.0
  11. 0AB1: call_scm_func @fun 4 #HUNTER 1@ 2@ 3@ 4@
  12. :4
  13. wait 0                  
  14. if 00E0:  player $player_char driving
  15. jf @4    
  16. gosub @b
  17. :5
  18. wait 0                  
  19. if 00DC: player $player_char driving 4@
  20. jf @1            
  21. jump @4                      
  22. :b      
  23. gosub @p        
  24. while if 8AB0: not key_pressed 0x42 // b
  25. wait 0                        
  26. 035C: place_object 0@ relative_to_car 4@ offset 0.0 0.9 -2.70
  27. 0453: object 0@ set_rotation -90.0 0.0 0.0      
  28. if 80DC: not player $player_char driving 4@
  29. then jump @1
  30. end    
  31. end                                  
  32. gosub @7                
  33. 01C4: remove_references_to_object 0@
  34. 0108: destroy_object 0@
  35. return                  
  36. :p
  37. 00AA: store_car 4@ position_to 1@ 2@ 3@ offset 0.0 0.0 0.0            
  38. 0AB1: call_scm_func @fun1 1 #RCBOMB 0@                                
  39. 01BC: put_object 0@ at 1@ 2@ 3@              
  40. return
  41. :7
  42. 0382: set_object 0@ collision_detection 1
  43. 04D9: object 0@ set_scripted_collision_check 1          
  44. 0392: object 0@ toggle_in_moving_list 1                        
  45. wait 3600 // таймер взрыва      
  46. 0400: create_coordinate 1@ 2@ 3@ from_object 0@ offset 0.0 0.0 0.0
  47. 020C: create_explosion_with_radius 10 at 1@ 2@ 3@
  48. return    
  49. :d    
  50. 01C3: remove_references_to_car 4@
  51. 01C4: remove_references_to_object 0@
  52. 0108: destroy_object 0@      
  53. return    
  54. :fun
  55. repeat
  56. wait 0
  57. Model.Load(0@)                
  58. 038B: load_requested_models              
  59. gosub @delay
  60. until Model.Available(0@)      
  61. 00A5: 6@ = create_car 0@ at 1@ 2@ 3@
  62. Model.Destroy(0@)
  63. 0AB2: ret 1 6@  
  64. :fun1
  65. repeat
  66. wait 0
  67. Model.Load(0@)                
  68. 038B: load_requested_models              
  69. gosub @delay
  70. until Model.Available(0@)                
  71. 0107: 5@ = create_object 0@ at 0.0 0.0 0.0
  72. Model.Destroy(0@)
  73. 0AB2: ret 1 5@  
  74. :delay
  75. 16@ = 0
  76. repeat
  77. wait 0                
  78. until 0029: 16@ >= 200 // задержка
  79. return        
  80.  
есть вопрос. Как использовать такие адреса памяти?
0x703997
Выбранный индекс меню [байт]. Сообщение GTAForums
•   00 - Статистика
•   01 - Начало игры
•   03 - Настройка звука
•   04 - Дисплей
•   05 - Язык
•   06 - Карта
Название: Re: Помощь с CLEO
Отправлено: Shagg_E от Февраль 10, 2018, 04:55:47 pm
есть вопрос. Как использовать такие адреса памяти?
0x703997
Выбранный индекс меню [байт]. Сообщение GTAForums
•   00 - Статистика
•   01 - Начало игры
•   03 - Настройка звука
•   04 - Дисплей
•   05 - Язык
•   06 - Карта

Читать его, чтобы узнать, в каком меню находится в данный момент игрок. Но это имеет смысл только в плагинах, поскольку CLEO не работает в меню. Или в MMS (http://forum.gtabuilder.ru/index.php?topic=339.0).
Название: Re: Помощь с CLEO
Отправлено: egor230 от Февраль 14, 2018, 02:52:22 pm
Спасибо уважаемый Shagg_E за Ваш ответ.
Да cleo изжил себя, надо учится писать плагины, чтобы работать с памятью.
На питоне можно писать плагины или только на с++?
Вот написал скрипт- Томми стоит на летящем самолете не падая. https://www.youtube.com/watch?v=BYLfgRrZCb0&feature=youtu.be (https://www.youtube.com/watch?v=BYLfgRrZCb0&feature=youtu.be)
Есть проблема, она постоянно снижается, не удерживая высоту. Подскажите, пожалуйста, как решить  эту проблему?
   
Код: Javascript
  1. {$CLEO}
  2. 0000:
  3. :1
  4. wait 0  
  5. if 0AB0: key_pressed 0x42 // b                                                
  6. jf @1        
  7. 04C4: create_coordinate 1@ 2@ 3@ from_actor $PLAYER_ACTOR offset 0.0 4.2 0.0
  8. 0AB1: call_scm_func @fun 4 #SKIMMER 1@ 2@ 3@ 0@ 4@    
  9. 00AA: store_car 0@ position_to 1@ 2@ 3@
  10. :4  
  11.  wait 0                        
  12. 00AA: store_car 0@ position_to 1@ 2@ 3@
  13. 000B: 1@ += 0.013357 // floating-point values
  14. 000B: 2@ += 0.627942 // floating-point values
  15. 000B: 3@ += 0.510589
  16. 0055: put_player $player_char at 1@ 2@ 3@
  17. 0171: set_player $player_char z_angle_to 4@
  18. if 0AB0: key_pressed 0x26 // up                              
  19. jf @3                      
  20. 000A: 3@ += 15 // integer values    
  21. car.PutAt(0@, 1@ 2@ 3@)                  
  22. :3
  23. if 0AB0: key_pressed 0x28 // down      
  24. jf @5        
  25. 0acd: show_text_high_priority "time" time 1000  
  26. 04C4: create_coordinate 1@ 2@ 3@ from_actor $PLAYER_ACTOR offset 0.0 90.0 100.0
  27. //|0012: 3@ *= 20
  28. :5
  29. 04D2: set_plane 0@ fly_autopilot_around_point 1@ 2@ 3@ 30  
  30. if 00F8: player $player_char stopped_in_sphere 0 near_point 1@ 2@ 3@  radius 3.0 3.0 1.5
  31. jf @4
  32. :2
  33. if 0AB0: key_pressed 0x4e // b                                                
  34. jf @4                          
  35. jump @1  
  36. :41
  37. wait 0
  38. return
  39. :fun
  40. repeat
  41. wait 0
  42. Model.Load(0@)                    
  43. 038B: load_requested_models        
  44. gosub @delay
  45. until Model.Available(0@)
  46. 00A5: 4@ = create_car 0@ at 1@ 2@ 3@
  47. Model.Destroy(0@)            
  48. 0174: 5@ = car 4@ z_angle
  49. 0AB2: ret 2 4@ 5@
  50. gosub @delay
  51. :delay
  52. 16@ = 0
  53. repeat
  54. wait 0                
  55. until 0029: 16@ >= 100 // задержка
  56. return
  57.  
Название: Re: Помощь с CLEO
Отправлено: Shagg_E от Февраль 15, 2018, 10:44:45 pm
Цитировать
На питоне можно писать плагины или только на с++?
Не знаю - не пользуюсь им(питоном). Плагины лучше писать строго на c++ . Ведь когда ты забросишь Вайс - знания по c++ останутся, а этот язык будет актуален еще долгие годы.

Цитировать
Есть проблема, она постоянно снижается, не удерживая высоту. Подскажите, пожалуйста, как решить  эту проблему?
Скорее всего проблема в опкоде автопилота(04D2), но не уверен(не пользовался им). Я предпочитаю задавать скорость и направление движения "вручную"(задавая точные значения в адреса памяти).
Название: Re: Помощь с CLEO
Отправлено: egor230 от Февраль 18, 2018, 02:11:14 pm
Уважаемый Shagg благодарю, что общайтесь со мной.
C++ очень интересный и мощный язык программирования. Жаль всегда не хватает времени. Дочь родилась.
Опкод 04D2 при скорости 56 снижается, а при 57 набирает высоту.
Вот бы научиться работать с ida базой и адресами памяти.
Название: Re: Помощь с CLEO
Отправлено: egor230 от Февраль 21, 2018, 08:44:29 pm
Здравствуйте, всем.
Подскажите, пожалуйста, адрес памяти, который устанавливает в машину определенный тип бомбы. Конечно, можно написать скрипт бомбы, но легче сделать это через память.
нашел только это
+ 0x25 - [1 байт] - тип бомбы (3 = дистанционный, 2 = зажигание двигателя, 1 = время, 0 = нет)
но как использовать? не знаю.
Название: Re: Помощь с CLEO
Отправлено: Shagg_E от Февраль 21, 2018, 09:44:20 pm
нашел только это
+ 0x25 - [1 байт] - тип бомбы (3 = дистанционный, 2 = зажигание двигателя, 1 = время, 0 = нет)
но как использовать? не знаю.
+0x25 - это смещение от какого-то адреса памяти. От какого адреса - это зависит от того, откуда взята эта информация.
Название: Re: Помощь с CLEO
Отправлено: egor230 от Февраль 22, 2018, 06:12:26 am
Спасибо за Ваш ответ Уважаемый Shagg.
Данная информация взята с сайта http://www.gtamodding.com/wiki/Memory_Addresses_(VC) (http://www.gtamodding.com/wiki/Memory_Addresses_(VC))
Вот этот кусочек https://prnt.sc/ii3nbj (https://prnt.sc/ii3nbj)
Может есть еще другой адрес??

Cделал так, зависает. Также не нашел адрес памяти гаража кэма.
Подскажите, пожалуйста.
Код: Javascript
  1. {$CLEO}
  2. 0000:
  3. :1
  4. wait 0
  5. if 0AB0: key_pressed 0x46 // f
  6. jf @1  
  7. 05E0: 0@ = read_memory 0x7D74B8 size 4 virtual_protect 0
  8. 0@ + = 0x25  
  9. 05DF: write_memory 0@  size 1 value 1 virtual_protect 0
  10. jump @1                    
  11.  
  12.  

Даже чтение адреса, приводит к вылету.

Код: Javascript
  1. {$CLEO}
  2. 0000:
  3. :1
  4. wait 0
  5. if 0AB0: key_pressed 0x46 // f
  6. jf @1  
  7. 05E0: 0@ = read_memory 0x7D74B8 size 1 virtual_protect 0
  8. 0@ + = 0x25   // сброс бомбы автомобиля
  9. 05E0: 1@ = read_memory 0@ size 1 virtual_protect 0  
  10. jump @1                    
  11.  
  12.  


Попытался сделать гараж, но он не работает в качестве перекраске.
Где я ошибся? 
Код: Javascript
  1. {$CLEO}              
  2. 0000:
  3. :1
  4. wait 0
  5. if 0AB0: key_pressed 0x41 // a
  6. jf @1  
  7. 0219: 0@ = create_garage_type 5 door -837.738 -902.016 11.103 to -852.820 -902.8630 11.103 depth -837.738 -914.941711    
  8. gosub @open
  9. jump @1                    
  10. :open
  11. 0AE3: 3@ = random_object_near_point -836.77 -901.84 12.05 in_radius 5.0 find_next 0 //IF and SET    
  12. for 4@ = 1 to 100
  13. 034E: move_object 3@ to -837.13 -901.67 15.95 speed 0.0 0.0 0.05 collision_check 0
  14. wait 4
  15. end  
  16. return      
  17.  
  18.  



Название: Re: Помощь с CLEO
Отправлено: Shagg_E от Февраль 24, 2018, 01:29:25 pm
Цитировать
Вот этот кусочек

Это не то. Глянь выше в этом списке - это относится к гаражам. Вернее - к машинам, находящимся в гаражах. В гараже, который ты пытался править, видимо, не было машины, поэтому ты получил вылет.

Правильный оффсет - это:
Цитировать
0x1FE    byte    (& 7) car bomb state


Вообще, в Трехе был опкод, проверяющий тип бомбы в транспорте (http://www.gtamodding.com/wiki/0228#Car_bomb_stages), а также опкод, устанавливающий нужный тип бомбы на авто (http://www.gtamodding.com/wiki/0242), но из Вайса их вырезали.
Однако в этих же статьях по этим опкодам приводятся варианты scm-функций, которые можно использовать вместо этих опкодов.
Я накатал тестовый код, который приведен в конце сообщения.


Цитировать
Также не нашел адрес памяти гаража кэма.

Он "ненастоящий". Т.е. в оригинальной игре в миссии ограбления дверь гаража открывается "вручную" путем "ручного" передвижения гаражной двери. Чтобы гараж был "рабочим" и автоматическим - нужно его обозначить("создать") и ничего двигать не придется.


Касаемо создания гаражей. Там всё просто.
Опкод 0219 создает гараж опроделенного типа(5 - покраска) (https://www.gtamodding.com/wiki/Garage#Vice_City) в определенном месте. Если в указанной зоне есть гаражная дверь - она автоматически будет открываться/закрываться.

Самое важное - это правильно обозначить координаты.

Возьмем один из стандартных гаражей:
Цитировать
0219: $681 = create_garage_type 5 door -914.129 -1263.54 10.706 to -906.3 -1266.9 14.421 depth -907.137 -1246.626


$681 - хэндл гаража. В принципе он нужен лишь для принудительного открытия/закрытия или удаления гаража.

5 - тип гаража (https://www.gtamodding.com/wiki/Garage#Vice_City).

Первые xyz координаты - это передний левый нижний угол гаража:
(http://funkyimg.com/i/2CHFp.jpg)

Вторые xyz координаты - это передний правый верхний угол гаража:
(http://funkyimg.com/i/2CHFq.jpg)

Последние xy координаты - это "глубина", т.е. задний левый угол гаража:
(http://funkyimg.com/i/2CHFr.jpg)

Пример, "активирующий" гараж Кэма, я также привел ниже.

Но ВНИМАНИЕ!
Гаражи нельзя создавать в CLEO скрипте, если ты не собираешься сразу их удалять, т.к. они не удаляются сами по себе и засоряют файлы сохранения также, как пикапы и парковки авто. Если ты 2 раза "создашь" гараж в одном месте - это будут 2 разных гаража в одном месте!

Опкод удаления гаража тоже был вырезан из вайса, но в статье о нем также приведен пример scm функции для обхода этого ограничения (https://www.gtamodding.com/wiki/02B9).


Вот код, который при вводе чита "CBNPNS" ставит бомбу 1 типа на машину игрока, если тот сидит в транспорте и никакой бомбы в авто не установлено. Также активируется гараж Кэма. В конце идут необходимые scm-функции.
Этот же код представлен в аттаче.

Код: Text
  1. {$CLEO .cs}
  2.  
  3. //-------------MAIN---------------
  4. thread 'CBNPNS'
  5.  
  6. :CBNPNS_01
  7. wait 0
  8. if and
  9.    Player.Defined($PLAYER_CHAR)
  10. 0ADC: test_cheat "CBNPNS"
  11. jf @CBNPNS_01
  12. if
  13. 00E0:   player $PLAYER_CHAR driving
  14. jf @CBNPNS_02
  15. 03C1: 0@ = player $PLAYER_CHAR car_no_save
  16. // car struct + 0x1FE (byte & 7) - car bomb state
  17. //
  18. //0 -   CARBOMB_NONE               No bomb
  19. //1 -   CARBOMB_TIMED              Inactive timed bomb, can be obtained from garage type 2
  20. //2 -   CARBOMB_ONIGNITION         Inactive ignition bomb, can be obtained from garage type 3
  21. //3 -   CARBOMB_REMOTE             Remote detonation bomb, can be obtained from garage type 4
  22. //4 -   CARBOMB_TIMEDACTIVE        Active timed bomb, activated from bomb type 1
  23. //5 -   CARBOMB_ONIGNITIONACTIVE   Active ignition bomb, activated from bomb type 2
  24. //
  25. if
  26. 0AB1: call_scm_func @opcode_0228 2 car_handle 0@ bomb_stage 0 // check if car bomb state == 0
  27. jf @CBNPNS_02
  28. 0AB1: call_scm_func @opcode_0242 2 car_handle 0@ bomb_type 1 // sets car bomb type 1
  29.  
  30. :CBNPNS_02
  31. 0219: 15@ = create_garage_type 5 door -836.738 -915.016 9.8 to -836.738 -898.316 13.4 depth -853.238 -905.016
  32. 0ACE: show_formatted_text_box "~h~The ~t~bomb ~h~has been ~x~installed ~h~and ~t~Kam's garage ~h~has been ~x~activated."
  33. jump @CBNPNS_01
  34.  
  35.  
  36. //-------------------------------------------------------------------------------------
  37. // SCM FUNCTIONS:
  38. //-------------------------------------------------------------------------------------
  39.  
  40. :opcode_0228
  41. // 0@ - input param (car handle)
  42. // 1@ - input param (bomb stage)
  43. 05E7: 0@ = car 0@ struct
  44. 0@ += 0x1FE  // car bomb offset
  45. 05E0: 0@ = read_memory 0@ size 1 virtual_protect 0
  46. 05F9: 0@ = 0@ AND 7
  47. 003B:   0@ == 1@  // check bomb stage in car against input
  48. 05F6: ret 0
  49.  
  50. :opcode_0242
  51. // 0@ - input param (car handle)
  52. // 1@ - input param (bomb stage)
  53. 05E7: 0@ = car 0@ struct
  54. 0@ += 0x1FE  // car bomb offset
  55. 05E0: 2@ = read_memory 0@ size 1 virtual_protect 0  // store previous value
  56. 05F9: 1@ = 1@ AND 7  // keep only the first three bits from input param
  57. 05F9: 2@ = 2@ AND 0xF8  // exclude the first three bits in stored value
  58. 05FA: 2@ = 2@ OR 1@  // replace the first three bits of stored value with input param
  59. 05DF: write_memory 0@ size 1 value 2@ virtual_protect 0  // set to new value
  60. 05F6: ret 0
Название: Re: Помощь с CLEO
Отправлено: egor230 от Февраль 26, 2018, 12:41:13 pm
Спасибо огромное Уважаемый Shagg за такой полный и подробный ответ. Благодаря ему, стал лучше понять принцип работы с памятью.

Отвечу Вам порядку.
Этот адрес и смещение ставит бомбу на машину находящуюся в гараже. Надо с ним поработать.
Жаль, что из gta vice вырезали опкоды, только благодаря scm может их вернуть. Благодарю Вас за написанный код
Да, двери в гараж кэма, открывал, путем перемещение объекта.
У меня именно поэтому и вылетало, неправильно обозначал координаты гаража.
Огромное Вам спасибо, что наглядно объяснили как правило обозначать координаты гаража.
Да если создавать гараж, только при условие, что игрок находится в машине, иначе удалить гараж опкодом, чтобы не засорять память.
Писал эти дни скрипт, много раз тестировал, чтобы отладить его. Конечно неидеален, не спорю.
Записал видеодемострацию. https://www.youtube.com/watch?v=9GV9s4nRsMI&feature=youtu.be (https://www.youtube.com/watch?v=9GV9s4nRsMI&feature=youtu.be)
Очень много проблем было с тем, чтобы поставить камеру, а точнее развернуть. Переходилось часами перебирать значения для опкодов
       
015F: set_camera_position -817.4 -905.55 13.86 0.0 rotation 0.0 0.0
0160: point_camera -3982.5 -238.75 63.44 switchstyle 2     

Может есть другой способ поставить камеру в нужным ракурсе?

Вроде все хорошо, но почему бомба с детонатором на машину не ставится. Голова ломаю почему.
Также, хоть и скрипт сам по себе небольшой, но работает он крайне медленно, думаю над его оптимизацией. По идей, все должен летать.
Вы очень помогайте. Очень делать, что-то посложнее. То, что делал еще полгода назад. Кажется смешным, простым. Сейчас бы это все написал не так коряво, а красивый и быстро работающим кодом.
Вот скрипт.
Код: Javascript
  1. {$CLEO}      
  2. const
  3. x = -847.231812 // Координаты внутри гаража  
  4. y = -901.642578 // Координаты внутри гаража  
  5. z = 11.103406  // Координаты внутри гаража  
  6. a = -834.576294 // Координаты гаража
  7. b = -902.218567 // Координаты гаража
  8. c = 11.103406 // Координаты  гаража
  9. end
  10. 0000:
  11. :1
  12. wait 0      
  13. 0164: disable_marker 13@ // удалить маркер
  14. if 00E0: player $PLAYER_CHAR driving
  15. jf @4
  16. 0570: 13@ = create_asset_radar_marker_with_icon 8 at x y z  // Внутри гаража        
  17. 03C1: 0@ = player $PLAYER_CHAR car_no_save // получить хендл авто
  18. if 00F7: player $player_char sphere 0 near_point_in_car a b c radius 20.0 20.0 3.0 sphere 0
  19. jf @4                                            
  20. gosub @open // открыть двери гаража              
  21. if 00FA: player $player_char stopped_in_sphere 0 near_point_in_car x y z radius 9.0 9.0 3.0
  22. jf @3    
  23. gosub @camera // установить камеру
  24. :Check // Проверки
  25. if and
  26. 8495: not vehicle 0@ burning
  27. 83CE: not car 0@ stuck
  28. 8119: not car 0@ wrecked
  29. 00DC: player $player_char driving 0@
  30. 0256: player $PLAYER_CHAR defined      
  31. 01C1: car 0@ stopped
  32. jf @3
  33. wait 0      
  34. if 0AB0: key_pressed 0x61// 1      
  35. then 0AB1: call_scm_func @opcode_0242 2 0@ 1                
  36. else
  37. if 0AB0: key_pressed 0x62// 2                        
  38. then 0AB1: call_scm_func @opcode_0242 2 0@ 2  
  39. else
  40. if 0AB0: key_pressed 0x63// 3                        
  41. then 0AB1: call_scm_func @opcode_0242 2 0@ 3  
  42. else
  43. if 0AB0: key_pressed 0x64// 4          
  44. then gosub @super_properties            
  45. else
  46. if 0AB0: key_pressed 0x65// 5                        
  47. then 0AB1: call_scm_func @opcode_0228 2 0@ 1  
  48. end  
  49. end  
  50. end  
  51. end
  52. end
  53. jump @Check
  54. :3                                        
  55. gosub @open  
  56. 015A: restore_camera
  57. 02EB: restore_camera_with_jumpcut            
  58. if or
  59. 80F5: not player $player_char in_sphere 0 near_point x y z radius 20.0 20.0 3.0
  60. 00F7: player $player_char sphere 0 near_point_in_car a b c radius 30.0 20.0 3.0 sphere 0
  61. jf @3                                    
  62. 0ACE: show_formatted_text_box "~w~garage doors are closed."    
  63. gosub @cloose                                          
  64. :4                                    
  65. 01C3: remove_references_to_car 0@      
  66. jump @1            
  67. //-------------------------------------------------------------------------------------
  68. // SCM FUNCTIONS:
  69. //-------------------------------------------------------------------------------------
  70.                    
  71. :cloose
  72. 0AE3: 3@ = random_object_near_point -836.77 -901.84 15.95 in_radius 5.0 find_next 0 //IF and SET    
  73. for 4@ = 1 to 100
  74. 034E: move_object 3@ to -836.77 -901.84 12.05 speed 0.0 0.0 0.05 collision_check 0
  75. wait 4
  76. end    
  77. return
  78. :open
  79. 0AE3: 3@ = random_object_near_point -836.77 -901.84 12.05 in_radius 5.0 find_next 0 //IF and SET    
  80. for 4@ = 1 to 100
  81. 034E: move_object 3@ to -837.13 -901.67 15.95 speed 0.0 0.0 0.05 collision_check 0
  82. wait 4
  83. end                    
  84. return    
  85. :camera                                          
  86. 015F: set_camera_position -817.4 -905.55 13.86 0.0 rotation 0.0 0.0
  87. 0160: point_camera -3982.5 -238.75 63.44 switchstyle 2    
  88. 0164: disable_marker 13@                          
  89. gosub @cloose                                                                                      
  90. 0ACE: show_formatted_text_box "~h~~t~The press 1 for install timed bomb~t~ ~h~press 2 for install ignition bomb, ~t~ ~y~ press 3 for install detonation bomb~x~ ~t~~h~press 4 to set super properties car~h~~b~~t~ press 5 to remove mine with the car.~b~ "
  91. return    
  92. :opcode_0228// сборс типа бомбы 0@ (хендл автомобиля) 1@ (тип бомбы)
  93. 05E7: 0@ = car 0@ struct
  94. 0@ += 0x1FE  // car bomb offset
  95. 05E0: 0@ = read_memory 0@ size 1 virtual_protect 0
  96. 05F9: 0@ = 0@ AND 7
  97. 003B:   0@ == 1@  // проверить стадию бомбы в автомобиле
  98. 0acd: show_text_high_priority "to remove mine with the car" time 1000      
  99. 05F6: ret 0
  100.  
  101. :opcode_0242 // Установить тип бомбы 0@ (car handle) 1@ (bomb stage)  
  102. gosub @text
  103. 05E7: 0@ = car 0@ struct
  104. 0@ += 0x1FE  // car bomb offset
  105. 05E0: 2@ = read_memory 0@ size 1 virtual_protect 0  // store previous value
  106. 05F9: 1@ = 1@ AND 7  // keep only the first three bits from input param
  107. 05F9: 2@ = 2@ AND 0xF8  // exclude the first three bits in stored value
  108. 05FA: 2@ = 2@ OR 1@  // replace the first three bits of stored value with input param
  109. 05DF: write_memory 0@ size 1 value 2@ virtual_protect 0  // set to new value
  110. 05F6: ret 0            
  111. :text
  112. if 0039: 1@ == 1 // integer values
  113. then 0acd: show_text_high_priority "Timed detonation" time 1000    
  114. else
  115. if 0039: 1@ == 2                        
  116. then 0acd: show_text_high_priority "Engine ignition detonation" time 1000      
  117. else
  118. if 0039: 1@ == 3                        
  119. then 0acd: show_text_high_priority "Remote detonation" time 1000    
  120. end  
  121. end  
  122. end  
  123. return
  124. :super_properties      
  125. 053F: set_car 0@ tires_vulnerable 0
  126. 02AC: set_car 0@ immunities 1 1 1 1 1
  127. 01EC: make_car 0@ very_heavy 1
  128. 0acd: show_text_high_priority "super properties are set" time 1000    
  129. return
  130.  
  131. /*
  132.  
  133. :opcode_02B9// удалить гараж
  134. // 0 @ - входной параметр (дескриптор гаража)
  135. 0@ * = 0xA8   // размер каждой структуры гаража
  136. 0@ + = 0x812668   // базовый адрес для гаражей
  137. 0@ + = 0x5   // смещение активации
  138. 05DF: write_memory 0@ size 1 value 1 virtual_protect 0   // деактивировать гараж
  139. 05F6: ret 0                                        
  140. // car struct + 0x1FE (byte & 7) - car bomb state
  141. //  press 1 for install timed bomb,  press 2 for install ignition bomb, press 2 for install detonation bomb.
  142. //0 -0  CARBOMB_NONE    Без бомбы
  143. 1       CARBOMB_TIMED   Неактивная бомба, рассчитанная по времени, может быть получена из гаражного типа 2
  144. 2       CARBOMB_ONIGNITION      Неактивная зажигательная бомба может быть получена из гаражного типа 3
  145. 3       CARBOMB_REMOTE  Удаленная детонационная бомба может быть получена из гаражного типа 4
  146. 4       CARBOMB_TIMEDACTIVE     Активная импульсная бомба, активированная из бомбы типа 1
  147. 5       CARBOMB_ONIGNITIONACTIVE        Активная зажигательная бомба, активированная из бомбы типа 2  
  148. //0219: 15@ = create_garage_type 5 door -836.738 -915.016 9.8 to -836.738 -898.316 13.4 depth -853.238 -905.016    
  149. //03DA: set_garage 15@ camera_follows_player      
  150. //03CB: set_camera 83.0 -849.8 9.3  
  151.  // "~h~The ~t~press 1 for install timed bomb,."
  152. // 0AB1: call_scm_func @opcode_0228 2 car_handle 0@ bomb_stage 0 // check if car bomb state == 0
  153. // jf @2 press 2 for install ignition bomb, press 2 for install detonation bomb~x~activated
  154. //0AB1: call_scm_func @opcode_0242 2 car_handle 0@ bomb_type 1 // sets car bomb type 1
  155. //0ACE: show_formatted_text_box          
  156.  
Название: Re: Помощь с CLEO
Отправлено: Shagg_E от Февраль 26, 2018, 03:08:50 pm
Классный скрипт!

Чтобы работала бомба с детонатором, нужно выдать игроку детонатор, как оружие вроде(очень давно этим не занимался, так что могу ошибаться):
Код: Text
  1. 01B1: give_player $PLAYER_CHAR weapon 34 ammo 1

Опкод 015F - установка камеры в нужную точку.
Опкод 0160 - это точка, в которую "смотрит" камера. Вместо этого опкода можно использовать другой опкод - чтобы камера смотрела прямо на авто:
Код: Text
  1. 0158: camera_on_vehicle 0@ mode 15 switchstyle 2

Аналогичные опкоды есть для слежения за актерами и объектами.

Параметр "2" в конце означает, что камера "телепортируется" мгновенно. Чтобы она переместилась плавно, нужно поставить 1 и добавить опкод перед установкой камеры:
Код: Text
  1. 0460: set_camera_pointing_time 0.0 1500
, где 1500 - время передвижения камеры.

Например:
Код: Text
  1. 0460: set_camera_pointing_time 0.0 1500
  2. 015F: set_camera_position -817.4 -905.55 13.86 0.0 rotation 0.0 0.0
  3. 0157: camera_on_player $PLAYER_CHAR mode 15 switchstyle 1
Этот код плавно переместит камеру в нужную точку за 1.5 секунды. Камера будет указывать на игрока.

Цитировать
скрипт сам по себе небольшой, но работает он крайне медленно, думаю над его оптимизацией
К сожалению - тут я не помощник. У меня уйдут часы на разбор, столько времени у меня, увы - нет...
Но ты просто держи в голове главный принцип - нужно стараться сокращать кол-во wait-ов до одного, стремясь превратить весь скрипт в один большой цикл. Это сложно, но итоговый код будет крайне органичен, плюс этот навык поможет тебе потом в любых других языках скриптинга и программирования.
Название: Re: Помощь с CLEO
Отправлено: egor230 от Февраль 27, 2018, 08:08:08 am
Спасибо уважаемый Shagg, что оценили мой скромный труд.
Ваш совет о детонаторе помог мне. Пришлось реализовать это через проверку.
if and             
02D8: actor $PLAYER_ACTOR current_weapon == 34
00E1: player 0 pressed_button 17
jf @1
020B: explode_car 0@   
jump @1                 

C установкой ракурса камеры, нужно поработать, тут есть свои нюансы. Спасибо за опкод
Решил обойтись без scm функции :opcode_0228 он работает не корректно.
Оптимизация сложный процесс, движок игры очень старый, изначально не рассчитал на такое.
Спасибо за совет.
Скажите, пожалуйста, адрес памяти дающий возможность стрелять ракетам из любой машины. Ракеты это объект, значит должны иметь свой id.
Хочу сделать самонаводящиеся ракеты на машины. 
Стал пользоваться {$I Garage.func}, чтобы загружать константы, gosub, SCM функций из другого файла, очень удобно, как импорт в языках программирования.
Очень интересна директива $OPCODE понял только, что добавление новых опкодов.
Видео демонстрация https://www.youtube.com/watch?v=xHvTUgfCK4U&feature=youtu.be (https://www.youtube.com/watch?v=xHvTUgfCK4U&feature=youtu.be)
     

Код: Javascript
  1. {$CLEO}      
  2. const
  3. x = -847.231812 // Координаты внутри гаража  
  4. y = -901.642578 // Координаты внутри гаража  
  5. z = 11.103406  // Координаты внутри гаража  
  6. a = -834.576294 // Координаты гаража
  7. b = -902.218567 // Координаты гаража
  8. c = 11.103406 // Координаты  гаража
  9. end
  10. 0000:      
  11. :1
  12. wait 0      
  13. 0164: disable_marker 13@ // удалить маркер
  14. if 00E0: player $PLAYER_CHAR driving
  15. jf @4
  16. 0570: 13@ = create_asset_radar_marker_with_icon 8 at x y z  // Внутри гаража        
  17. 03C1: 0@ = player $PLAYER_CHAR car_no_save // получить хендл авто
  18. if 00F7: player $player_char sphere 0 near_point_in_car a b c radius 20.0 20.0 3.0 sphere 0
  19. jf @4                                            
  20. gosub @open // открыть двери гаража              
  21. if 00FA: player $player_char stopped_in_sphere 0 near_point_in_car x y z radius 9.0 9.0 3.0
  22. jf @3    
  23. gosub @camera // установить камеру
  24. :Check // Проверки
  25. if and
  26. 8495: not vehicle 0@ burning
  27. 83CE: not car 0@ stuck
  28. 8119: not car 0@ wrecked
  29. 00DC: player $player_char driving 0@
  30. 0256: player $PLAYER_CHAR defined      
  31. 01C1: car 0@ stopped
  32. jf @3      
  33. wait 0      
  34. if 0AB0: key_pressed 0x61// 1      
  35. then 0AB1: call_scm_func @opcode_0242 2 0@ 1 // бомба с таймером            
  36. else
  37. if 0AB0: key_pressed 0x62// 2                        
  38. then 0AB1: call_scm_func @opcode_0242 2 0@ 2 // бомба взрывается при входе в авто    
  39. else
  40. if 0AB0: key_pressed 0x63// 3                        
  41. then 0AB1: call_scm_func @opcode_0242 2 0@ 3 // бомба с детонатором
  42. else
  43. if 0AB0: key_pressed 0x64// 4          
  44. then gosub @super_properties // пуленепробиваемость, супер масса            
  45. else
  46. if 0AB0: key_pressed 0x65// 5                        
  47. then 0AB1: call_scm_func @opcode_0242 2 0@ 0 // разминировать авто
  48. end  
  49. end  
  50. end  
  51. end
  52. end
  53. jump @Check
  54. :3                                        
  55. gosub @open  
  56. 015A: restore_camera
  57. 02EB: restore_camera_with_jumpcut            
  58. if or
  59. 80F5: not player $player_char in_sphere 0 near_point x y z radius 20.0 20.0 3.0
  60. 00F7: player $player_char sphere 0 near_point_in_car a b c radius 30.0 20.0 3.0 sphere 0
  61. jf @3                                    
  62. 0ACE: show_formatted_text_box "~w~garage doors are closed."    
  63. gosub @cloose  
  64. :4                                          
  65. 01C3: remove_references_to_car 0@  
  66. if and            
  67. 02D8: actor $PLAYER_ACTOR current_weapon == 34
  68. 00E1: player 0 pressed_button 17
  69. jf @1
  70. 020B: explode_car 0@    
  71. jump @1                
  72. :cloose
  73. 0AE3: 3@ = random_object_near_point -836.77 -901.84 15.95 in_radius 5.0 find_next 0 //IF and SET    
  74. for 4@ = 1 to 100
  75. 034E: move_object 3@ to -836.77 -901.84 12.05 speed 0.0 0.0 0.05 collision_check 0
  76. gosub @delay1
  77. end    
  78. return
  79. :open
  80. 0AE3: 3@ = random_object_near_point -836.77 -901.84 12.05 in_radius 5.0 find_next 0 //IF and SET    
  81. for 4@ = 1 to 100
  82. 034E: move_object 3@ to -837.13 -901.67 15.95 speed 0.0 0.0 0.05 collision_check 0
  83. gosub @delay1
  84. end                    
  85. return  
  86. :delay1
  87. 16@ = 0
  88. repeat
  89. wait 0                
  90. until 0029: 16@ >= 4 // задержка
  91. return              
  92. :camera                                          
  93. 015F: set_camera_position -817.4 -905.55 13.86 0.0 rotation 0.0 0.0
  94. 0160: point_camera -3982.5 -238.75 63.44 switchstyle 2    
  95. 0164: disable_marker 13@                          
  96. gosub @cloose                                                                                      
  97. 0ACE: show_formatted_text_box "~h~~t~The press 1 for install timed bomb~t~ ~h~press 2 for install ignition bomb, ~t~ ~y~ press 3 for install detonation bomb~x~ ~t~~h~press 4 to set super properties car~h~~b~~t~ press 5 to remove mine with the car.~b~ "
  98. return    
  99. :opcode_0242 // Установить тип бомбы 0@ (car handle) 1@ (bomb stage)    
  100. gosub @text
  101. 05E7: 0@ = car 0@ struct
  102. 0@ += 0x1FE  // car bomb offset
  103. 05E0: 2@ = read_memory 0@ size 1 virtual_protect 0  // store previous value
  104. 05F9: 1@ = 1@ AND 7  // keep only the first three bits from input param
  105. 05F9: 2@ = 2@ AND 0xF8  // exclude the first three bits in stored value
  106. 05FA: 2@ = 2@ OR 1@  // replace the first three bits of stored value with input param
  107. 05DF: write_memory 0@ size 1 value 2@ virtual_protect 0  // set to new value
  108. 05F6: ret 0        
  109. :text                                          
  110. if 0039: 1@ == 1 // integer values
  111. then 0acd: show_text_high_priority "Timed detonation" time 1000    
  112. else
  113. if 0039: 1@ == 2                        
  114. then 0acd: show_text_high_priority "Engine ignition detonation" time 1000      
  115. else
  116. if 0039: 1@ == 3                        
  117. then gosub @fun
  118. 0acd: show_text_high_priority "Remote detonation" time 1000    
  119. else
  120. if 0039: 1@ == 0                        
  121. then 0acd: show_text_high_priority "to remove mine with the car" time 1000      
  122. end
  123. end  
  124. end  
  125. end  
  126. return
  127. :super_properties      
  128. 053F: set_car 0@ tires_vulnerable 0
  129. 02AC: set_car 0@ immunities 1 1 1 1 1
  130. 01EC: make_car 0@ very_heavy 1
  131. 0acd: show_text_high_priority "super properties are set" time 1000    
  132. return
  133. :fun
  134. repeat
  135. wait 0
  136. Model.Load(#bomb)                            
  137. 038B: load_requested_models
  138. gosub @delay
  139. until Model.Available(#bomb)
  140. 01B1: give_player $PLAYER_CHAR weapon 34 ammo 1
  141. Model.Destroy(#bomb)
  142. return
  143. gosub @delay
  144. :delay
  145. 16@ = 0
  146. repeat
  147. wait 0                
  148. until 0029: 16@ >= 10 // задержка
  149. return
  150.  
Название: Re: Помощь с CLEO
Отправлено: Shagg_E от Март 02, 2018, 08:00:27 pm
Скажите, пожалуйста, адрес памяти дающий возможность стрелять ракетам из любой машины...
...
Очень интересна директива $OPCODE понял только, что добавление новых опкодов...
Боюсь, я тут не в силах чем-то помочь  :(
Первое наверное проще "эмулировать" путем создания и передвижения ракеты "вручную"(полный скриптовый контроль), а со вторым я не сталкивался...
Название: Re: Помощь с CLEO
Отправлено: egor230 от Март 04, 2018, 01:39:09 pm
Благодарю Вас уважаемый Shagg, за Ваш искренний ответ.
Попробовать эмулировать передвижения ракеты "вручную".
Все получилось, но ракета летит как-то "криво", а не прямо.
Как добавить звук выстрела? Есть таблица звуков?
Видео демонстрация https://www.youtube.com/watch?v=H_FmtrYXBLU&feature=youtu.be (https://www.youtube.com/watch?v=H_FmtrYXBLU&feature=youtu.be)
Код: Javascript
  1. {$CLEO}
  2. 0000:
  3. :1                                                                                              
  4. 01C4: remove_references_to_object 3@ // This object will now disappear when the player looks away    
  5. wait 0        
  6. if 00E0: player $player_char driving
  7. jf @1            
  8. if 00E1:  player 0 pressed_button 17
  9. jf @1    
  10. 03C1: 4@ = player $player_char car_no_save    
  11. 0174: 15@ = car 4@ z_angle
  12. 0407: create_coordinate 0@ 1@ 2@ from_car 4@ offset 0.0 0.0 0.50
  13. 0AB1: call_scm_func @fun 4 273 0@ 1@ 2@ 3@        
  14. 0177: set_object 3@ z_angle_to 15@
  15. 0382: set_object 3@ collision_detection 1
  16. 04D9: object 3@ set_scripted_collision_check 0                          
  17. 0400: create_coordinate 5@ 6@ 7@ from_object 3@ offset 0.0 80.0 0.0  // коор цели    
  18. :2
  19. wait 0                                                            
  20. 034E: move_object 3@ to 5@ 6@ 7@ speed 0.31 0.31 0.0 collision_check 0    
  21. 0392: object 3@ toggle_in_moving_list 0 // отключить физику объекта              
  22. if 04E6: object 3@ near_point 5@ 6@ 7@ radius 7.5 7.5 7.5 flag 1                
  23. jf @3                                              
  24. 0acd: show_text_high_priority "god" time 1000      
  25. jump @boom                                    
  26. :3
  27. if 05EF: 14@ = random_actor_near_point 5@ 6@ 7@ in_radius 0.10 find_next 0 pass_deads 0 //IF and SET      
  28. jf @4    
  29. jump @boom      
  30. :4
  31. if 05F0: 14@ = random_vehicle_near_point 5@ 6@ 7@ in_radius 0.10 find_next 0 pass_wrecked 0 //IF and SET            
  32. jf @5    
  33. if 8039: NOT 3@ == 0@    
  34. jf @5  
  35. jump @boom      
  36. :5
  37. if 05F1: 14@ = random_object_near_point 5@ 6@ 7@ in_radius 0.10 find_next 0 //IF and SET
  38. jf @2
  39. :boom  
  40. 020C: create_explosion_with_radius 6 at 5@ 6@ 7@      
  41. 01BC: put_object 3@ at 0.0 0.0 0.0
  42. jump @1
  43. :fun
  44. repeat
  45. wait 0
  46. Model.Load(0@)                            
  47. 038B: load_requested_models
  48. gosub @delay
  49. until Model.Available(0@)
  50. 0107: 4@ = create_object 0@ at 1@ 2@ 3@    
  51. Model.Destroy(0@)  
  52. 0453: object 4@ set_rotation 180.0 0.0 0.0
  53. 0AB2: ret 1 4@
  54. :delay
  55. 16@ = 0
  56. repeat
  57. wait 0                
  58. until 0029: 16@ >= 10 // задержка      
  59. return                      
  60.  

Хочу научить управлять авто дистанционно через память.

как вывести значение переменной на экран?
Код: Javascript
  1. {$CLEO}
  2. 0000:
  3. :1
  4. wait 0
  5. if 00E0: player $player_char driving
  6. jf @1
  7. if 00E1: player 0 pressed_button 17
  8. jf @1
  9. 03C0: 0@ = actor $PLAYER_ACTOR car //
  10. 05E7: 0@ = car 0@ struct //
  11. 0@ += 0x1F0 //
  12. 05E0: 11@ = read_memory 0@ size 1 virtual_protect 0
  13. 0acd: show_text_high_priority "11@ %d" time 1000
  14. jump @1
  15.  


Помогите, пожалуйста.

конечно, очень писать плагины для vc, уроков для нубов нет. Прям горю желанием, сделать, что крутое.
 
   
Название: Re: Помощь с CLEO
Отправлено: Shagg_E от Март 14, 2018, 02:49:06 pm
Как добавить звук выстрела? Есть таблица звуков?

Стандартными средствами никак... Может только путем замены одного из стандартных .wav в папке Audio и проигрывания его с помощью опкодов 03CF (https://www.gtamodding.com/wiki/03CF), 03D0 (https://gtagmodding.com/opcode-database/opcode/03D0/), 03D7 (https://gtagmodding.com/opcode-database/opcode/03D7/), 03D1 (https://gtagmodding.com/opcode-database/opcode/03D1/), 03D2 (https://gtagmodding.com/opcode-database/opcode/03D2/) и 040D (https://www.gtagmodding.com/opcode-database/opcode/040D/). Но для звука выстрела этот способ крайне медлителен и неудобен.
Касаемо звуков sfx - есть опкоды 018C (https://www.gtamodding.com/wiki/018C)(проиграть одиночный SFX звук), 018D (https://www.gtamodding.com/wiki/018D)(бесконечно зацикленный SFX звук) и 018E (https://gtagmodding.com/opcode-database/opcode/018E/)(остановить зацикленный звук). Как видно из списков звуков в статьях по этим опкодам - звука выстрела там нет. Но есть другие, не менее интересные звуки.
Я пытался расковырять проигрывание любых sfx звуков, но пока прогресс не очень большой (http://forum.gtabuilder.ru/index.php?topic=117.msg2881#msg2881). Конечно, удалось найти возможность проиграть некоторые другие звуки, но звуков выстрела там по-прежнему нет.
Там же, но сообщением ниже (http://forum.gtabuilder.ru/index.php?topic=117.msg2882#msg2882) я описал способ проигрывания некоторых реплик педами.

как вывести значение переменной на экран?

Запись
Код: Text
  1. 1@ = 5
  2. 2@ = 0.4
  3. 0ACF: show_formatted_styled_text "First: %d. Second: %.1f." time 2000 style 1 1@ 2@
выведет такой текст на экран:
Цитировать
"First: 5. Second: 0.4."

и этот текст будет на экране 2000мс(2 секунды). Т.е. %d - для integer, %.1f - для float значений.


конечно, очень писать плагины для vc, уроков для нубов нет. Прям горю желанием, сделать, что крутое.

Я и сам нуб в программировании, но мне помогли уроки с этого сайта (http://gtabuilder.ru/gta_vc/modding/lessons_on_programming/).
Название: Re: Помощь с CLEO
Отправлено: egor230 от Март 15, 2018, 11:36:15 am
Здравствуйте уважаемый Shagg. Очень-очень рад вашему ответу, так его ждали и меня от Вас.
Благодарю Вас за такие подробные объяснения, всё становится более понятным, ясным благодаря им.
Да, со звуком надо учиться работать. Думаю, тут  можно много сделать чего интересного. Жаль на всё это не хватает времени. Спасибо вам большое, что объяснили мне как вывести значения переменной на экран, то очень поможет в изучении работы с памятью. Жалко их очень мало, хотелось бы больше уроков по работе ida  базой. Там много чего можно отыскать интересного для будущих модов. Сколько я не бы бился получается выпустить ракету по прямой  по прямой траектории. Может как-то можно задать движения через память? Вы написали очень хороший мод по работе с объектами игры.
Название: Re: Помощь с CLEO
Отправлено: Shagg_E от Март 15, 2018, 12:46:32 pm
хотелось бы больше уроков по работе ida  базой.

Для вопросов по IDA можно использовать форум. Вот тема (http://forum.gtabuilder.ru/index.php?topic=110.0), например. Или вот еще (http://forum.gtabuilder.ru/index.php?topic=370.0).


Может как-то можно задать движения через память?

Через память (https://www.gtamodding.com/wiki/Memory_Addresses_(VC)) можно. Для Physical Entity(машин, педов и объектов с физикой) есть подкласс CPhysical (https://www.gtamodding.com/wiki/Memory_Addresses_(VC)#CPhysical), где:
0x070 - вектор движения Entity, т.е.
0x070 - (float) x movement speed
0x074 - (float) y movement speed
0x078 - (float) z movement speed
Название: Re: Помощь с CLEO
Отправлено: xanser от Март 16, 2018, 07:58:55 am
Вклинюсь тоже, тема должна быть полезна и другим участникам форума, а она звучит как "я придумываю все подряд, а shaggy ищет решение", и получается по сути тема одного человека непонятно какой направленности. Особой пользы от темы нет, можно общаться напрямую другими способами.

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

По IDA в рамках данного форума особо сказать нечего. Есть базы, в них есть закладка Structures, где можно посмотреть, что разобрано. Есть Alt-X на любой переменной или функции, где можно посмотреть все вызовы. Есть псевдокод на F5, который не всегда верно, но понятнее показывает происходящее, чем ассемблерный. Этого должно хватить, чтобы начать разбираться.
Название: Re: Помощь с CLEO
Отправлено: DK от Март 16, 2018, 10:24:16 am
У нас в англоязычном чате plugin-sdk больше 100 человек, я бы не сказал что это мало.
Люди есть, и интерес есть, и информация есть. Надо просто искать и найти.
Название: Re: Помощь с CLEO
Отправлено: egor230 от Март 25, 2018, 05:44:25 pm
Здравствуйте , уважаемый Shagg_E.  Благодарю вас за ваше сообщение. Эта очень полезные ссылки.  жалко мало информации  по  ida,  по сравнению с cleo, так сказать, чтобы облегчить трудный путь нубов. Ну и чтож будем мы искать, Google в помощь как говорится.
несколько дней пытался, задать Вектор движения объекта через память.  Брал структуру  объекта, добавлял это смещение, вылетало  ко сожалению. Значит, что-то делал не так,  буду копаться.
Уважаемый xanser, чем больше будет информации в доступном виде, тем больше людей,   буду делать моды,  будет больше интересных идей.
раньше  программирование   считалось чем-то очень сложным сложным, теперь благодаря Ютубу и форумам, разобраться становится легче.  Сколько уроков по cleo, благодаря чему бы написано большое количество скриптов. На сайте https://libertycity.ru/ (https://libertycity.ru/)  их более 3000 для GTA San Andreas.  А сколько asi  плагинов?  Мало. где писать? как их написать? мало кто знает.  Я и стараюсь тоже помочь начинающим, советом,  они порой, совершают настолько грубые ошибки, но в тот момент,  вспоминаю   какими зелёным  новичкам был, отвечаю на вопрос, чтобы у человека не пропала охота,   когда что-то долго не получается,  желание пропадает.  аудиторию надо расширять, чем больше людей, тем больше идей. одна голова хорошо, а  1000  ещё лучше.  Сам пытаюсь копать,  но иногда на  что-то натыкаешься  и не можешь найти решение проблемы.
Спасибо за ответ по IDA  теперь буду пытаться разобраться в этом.
DK,  с большим удовольствием читаю ваши посты  на разных сайтах. Глубоко поражён  вашим умом, насколько  Вы хорошо разбираетесь  в программировании.  жаль, что еще не дорос писать плагины  на с++, там наверно миссии  можно писать.
 Продолжаю работать с дверями гаража  Кема   Джонса. Хотел написать  scm функцию, в которую передаешь  допустим число 1, и двери   гаража  открываются.  Но в  scm  функциях, нельзя использовать цикл,  чтобы открыть дверь.  Приходится использовать scm  функцию и gosub.  Потом решил добавить звук,  как при открытии  любых гаражей,  хорошо что  нашел  это https://www.gtamodding.com/wiki/018C (https://www.gtamodding.com/wiki/018C) http://www.gtamodding.com/wiki/018D (http://www.gtamodding.com/wiki/018D)  тут тоже было много проблем, звуки wav  воспроизводится гораздо легче.  Но звук не удаляется опкодом 018E: stop_sound 6@, решил это немного странно, остаются  какие-то звуки.Также нашел кое-что интересное  если написать 0394: play_music 176// волна 103   то начинает играть Радиостанция  волна  103 когда вы находитесь не в машине.
Может я опять ошибся?
Код: Javascript
  1. {$CLEO .cs}
  2. 0000:
  3. :1
  4. wait 0
  5. if 0AB0: key_pressed 69
  6. jf @1                    
  7. 018D: 6@ = create_sound 4 at -836.77 -901.84 12.05    
  8. 0AB1: call_scm_func @garage 1 1 2@ 3@ 4@ 5@
  9. gosub @door                                                    
  10. wait 20          
  11. 018E: stop_sound 6@
  12. jump @1
  13.  
  14. :door          
  15. 0AE3: 0@ = random_object_near_point 2@ 3@ 4@ in_radius 2.0 find_next 0 //IF and SET
  16. repeat
  17. 034E: move_object 0@ to 2@ 3@ 5@ speed 0.0 0.0 0.05 collision_check 0  
  18. wait 4                    
  19. until 034E: move_object 0@ to 2@ 3@ 5@ speed 0.0 0.0 0.05 collision_check 0                
  20. return  
  21. :garage
  22. if 0039: 0@ == 1
  23. then
  24. 3@ = 12.05
  25. 4@ = 15.95
  26. else
  27. 3@ = 15.95
  28. 4@ = 12.05
  29. end        
  30. 1@ = -836.77
  31. 2@ = -901.84            
  32. 0AB2: ret 4 1@ 2@ 3@ 4@
  33.  
  34.  
Название: Re: Помощь с CLEO
Отправлено: Shagg_E от Март 25, 2018, 09:49:56 pm
egor230>
Я тут как раз недавно помогал одному челу сделать ворота со звуком (http://funkyimg.com/i/2DLnP.jpg) - глянь код:
https://pastebin.com/Kgr1niz4 (https://pastebin.com/Kgr1niz4)
Название: Re: Помощь с CLEO
Отправлено: egor230 от Март 30, 2018, 01:32:47 pm
Здравствуйте уважаемый Shagg_E.
 Спасибо большое за ваш скрипт,  Он помог мне понять В каком направлении двигаться.
Он открывает ворота нажатием двое фабрика мороженого. Решил  его переделать,  чтобы ворота  поднимались вверх, Всё работало.  Но  при  замены координат  на  двери  гаража  Кема джонса,  звук  зависал https://www.youtube.com/watch?v=CJ50v0rn_x8&feature=youtu.be (https://www.youtube.com/watch?v=CJ50v0rn_x8&feature=youtu.be)

Но я решил не успокаивается, разобраться в чём проблема.  Написал следующий  скрипт, вот  его видео демонстрация https://www.youtube.com/watch?v=cWsmvt61gKY&feature=youtu.be (https://www.youtube.com/watch?v=cWsmvt61gKY&feature=youtu.be)
всё это поместил в gosub. Может кому-то этот gosub  поможет
Вообще cleo здорово освежило игру, выдохнула в неё новую жизнь. Но почему-то в cleo встречаются какие-то баги, ошибки.
Конечно для GTA San Andreas, cleo обладает более широкими функциями. Изучить cleo достаточно легко. Но я надеюсь ему появится достойные альтернативы.
Код: Javascript
  1. {$CLEO .cs}
  2. 0000:
  3. :Check
  4. wait 0        
  5. 0AB0: key_pressed 69  
  6. jf @Check      
  7. gosub @garage
  8. jump @Check  
  9.                                      
  10. :garage
  11. 0AE3: 0@ = random_object_near_point -836.77 -901.84 12.05 in_radius 4.0 find_next 0 //IF and SET
  12. jf gosub @Check1                    
  13. 01BB: store_object 0@ position_to 1@ 2@ 3@
  14. 018D: 4@ = create_sound 2 at 1@ 2@ 3@                        
  15. wait 0
  16. if 0043: 3@ == 12.03
  17. then
  18. 0007: 3@ = 15.95              
  19. gosub @Open
  20. else
  21. if 0043: 3@ == 15.95
  22. then
  23. 01BB: store_object 0@ position_to 1@ 2@ 3@
  24. 0007: 3@ = 12.03  
  25. gosub @Open
  26. end
  27. end    
  28. return  
  29. :Open                
  30. while if 84E6: not object 0@ near_point 1@ 2@ 3@ radius 0.01 0.01 0.01 flag 0  
  31. wait 0                                                                  
  32. 034E: move_object 0@ to 1@ 2@ 3@ speed 0.0 0.0 0.05 collision_check 0
  33. end
  34. 018E: stop_sound 4@
  35. 018C: play_sound 3 at 1@ 2@ 3@
  36. 018E: stop_sound 4@  
  37. return  
  38. :Check1
  39. wait 0
  40. return
  41.  
Название: Re: Помощь с CLEO
Отправлено: Shagg_E от Март 30, 2018, 02:49:04 pm
В варианте, где у тебя зависал звук, нежно было увеличить радиус проверки опкода 04E6. Видимо, ворота не могли "остановиться" из-за маленького радиуса.

А вот здесь:
Цитировать
018E: stop_sound 4@
018C: play_sound 3 at 1@ 2@ 3@
018E: stop_sound 4@
Последнюю строчку можно удалить(зачем дубликат?), а в опкоде 018C звук 3 изменить на 5 (https://www.gtamodding.com/wiki/018C#Vice_City). Звук был 3 хорош для ворот фабрики мороженого, а для гаража лучше 5(это специальный "гаражный" звук).

А сам код хорошо оптимизирован, лучше чем у меня.
Название: Re: Помощь с CLEO
Отправлено: egor230 от Апрель 03, 2018, 12:36:19 pm
Здравствуйте уважаемый Shagg_E.  Очень признательны вам за Ваш ответ. Да, действительно проблема была в радиусе. Но я решил  полностью переделать скрипт, на это ушло очень много времени.  Вроде всё работает. Пытался написать не только рабочий код, но и  краткий, красивый, хорошо оптимизированный,  тестил его, всё вроде работает как надо. Дубликат опкода 018E нужен, чтобы точно избежать зависание  звука.  Спасибо большое теперь изменил  звук  на 5,  звучит хорошо.
Вот сам код.
Код: Javascript
  1. {$CLEO}      
  2. const
  3. x = -847.231812 // Координаты внутри гаража  
  4. y = -901.642578 // Координаты внутри гаража  
  5. z = 11.103406  // Координаты внутри гаража  
  6. a = -834.576294 // Координаты гаража
  7. b = -902.218567 // Координаты гаража
  8. c = 11.103406 // Координаты  гаража
  9. end
  10. 0000:      
  11. :1
  12. wait 0        
  13. 0164: disable_marker 13@ // удалить маркер
  14. if 00E0: player $PLAYER_CHAR driving // за рулем
  15. jf @1
  16. gosub @tag // создать маркер
  17. if 00F7: player $player_char sphere 0 near_point_in_car a b c radius 20.0 20.0 3.0 sphere 0 // на авто около гаража
  18. jf @1              
  19. gosub @garage // open        
  20. :2
  21. wait 0      
  22. if 00F7: player $player_char sphere 0 near_point_in_car a b c radius 30.0 30.0 3.0 sphere 0 // на авто около гаража
  23. jf @5          
  24. :3
  25. if 0103: actor $PLAYER_ACTOR in_sphere x y z radius 4.0 4.0 3.0 sphere 0 stopped_in_car //стоп авто внутри гаража
  26. jf @2              
  27. gosub @camera // set camera            
  28. gosub @garage// закрыть                    
  29. gosub @Chec // проверки                            
  30. :6  
  31. wait 0            
  32. if 80E3: not player $player_char in_sphere 0 near_point a b radius 17.0 17.0      
  33. jf @6                  
  34. :5                
  35. gosub @garage// закрыть гараж
  36. if 6@ == 1
  37. jf @1
  38. :7
  39. wait 0
  40. if and            
  41. 02D8: actor $PLAYER_ACTOR current_weapon == 34
  42. 00E1: player 0 pressed_button 17
  43. jf @7      
  44. 020B: explode_car 5@              
  45. 01C3: remove_references_to_car 5@  
  46. jump @1          
  47.  
  48. :Chec
  49. wait 0    
  50. if or
  51. 0495: vehicle 5@ burning
  52. 03CE: car 5@ stuck
  53. 8256: not player $PLAYER_CHAR defined  
  54. 0119: car 5@ wrecked
  55. 80DC: not player $player_char driving 5@
  56. 81C1: not car 5@ stopped
  57. jf @Checkes1    
  58. gosub @garage              
  59. gosub @return_camera        
  60. return
  61.  
  62. :Checkes1
  63. wait 0        
  64. if 0AB0: key_pressed 0x61// 1      
  65. then 0AB1: call_scm_func @opcode_0242 2 5@ 1 6@                
  66. else
  67. if 0AB0: key_pressed 0x62// 2                        
  68. then 0AB1: call_scm_func @opcode_0242 2 5@ 2 6@    
  69. else
  70. if 0AB0: key_pressed 0x63// 3                        
  71. then 0AB1: call_scm_func @opcode_0242 2 5@ 3 6@    
  72. else
  73. if 0AB0: key_pressed 0x64// 4          
  74. then gosub @super_properties            
  75. else
  76. if 0AB0: key_pressed 0x65// 5                        
  77. then 0AB1: call_scm_func @opcode_0242 2 5@ 0 6@  
  78. end  
  79. end  
  80. end  
  81. end
  82. end
  83. jump @Chec
  84.  
  85. :opcode_0242 // Установить тип бомбы 0@ (car handle) 1@ (bomb stage)    
  86. gosub @text
  87. 05E7: 0@ = car 0@ struct
  88. 0@ += 0x1FE  // car bomb offset
  89. 05E0: 2@ = read_memory 0@ size 1 virtual_protect 0  // store previous value
  90. 05F9: 1@ = 1@ AND 7  // keep only the first three bits from input param
  91. 05F9: 2@ = 2@ AND 0xF8  // exclude the first three bits in stored value
  92. 05FA: 2@ = 2@ OR 1@  // replace the first three bits of stored value with input param
  93. 05DF: write_memory 0@ size 1 value 2@ virtual_protect 0  // set to new value
  94. 05F6: ret 1 15@        
  95. :text                                          
  96. if 0039: 1@ == 1 // integer values
  97. then 0acd: show_text_high_priority "Timed detonation" time 1000    
  98. else
  99. if 0039: 1@ == 2                        
  100. then 0acd: show_text_high_priority "Engine ignition detonation" time 1000      
  101. else
  102. if 0039: 1@ == 3                        
  103. then gosub @fun
  104. 0acd: show_text_high_priority "Remote detonation" time 1000  
  105. 15@ = 1  
  106. else
  107. if 0039: 1@ == 0                        
  108. then 0acd: show_text_high_priority "to remove mine with the car" time 1000      
  109. end
  110. end  
  111. end  
  112. end  
  113. return
  114. :super_properties      
  115. 053F: set_car 5@ tires_vulnerable 0
  116. 02AC: set_car 5@ immunities 1 1 1 1 1
  117. 01EC: make_car 5@ very_heavy 1
  118. 0acd: show_text_high_priority "super properties are set" time 1000    
  119. return
  120. :fun
  121. repeat
  122. wait 0
  123. Model.Load(#bomb)                            
  124. 038B: load_requested_models
  125. gosub @delay
  126. until Model.Available(#bomb)
  127. 01B1: give_player $PLAYER_CHAR weapon 34 ammo 1
  128. Model.Destroy(#bomb)
  129. return
  130. gosub @delay
  131. :delay
  132. 16@ = 0
  133. repeat
  134. wait 0                
  135. until 0029: 16@ >= 10 // задержка
  136. return
  137. :return_camera    
  138. 015A: restore_camera
  139. 02EB: restore_camera_with_jumpcut
  140. return    
  141. :tag
  142. 0570: 13@ = create_asset_radar_marker_with_icon 8 at x y z  // Внутри гаража        
  143. 03C1: 5@ = player $PLAYER_CHAR car_no_save // получить хендл авто
  144. return                                      
  145. :garage
  146. 0AE3: 0@ = random_object_near_point -836.77 -901.84 12.05 in_radius 4.0 find_next 0 //IF and SET
  147. jf gosub @Check1                    
  148. 01BB: store_object 0@ position_to 1@ 2@ 3@
  149. 018D: 4@ = create_sound 2 at 1@ 2@ 3@                        
  150. wait 0
  151. if 0043: 3@ == 12.03
  152. then
  153. 0007: 3@ = 15.95              
  154. gosub @Open
  155. else
  156. if 0043: 3@ == 15.95
  157. then
  158. 01BB: store_object 0@ position_to 1@ 2@ 3@
  159. 0007: 3@ = 12.03  
  160. gosub @Open
  161. end
  162. end    
  163. return  
  164. :Open                
  165. while if 84E6: not object 0@ near_point 1@ 2@ 3@ radius 0.01 0.01 0.01 flag 0  
  166. wait 0                                                                  
  167. 034E: move_object 0@ to 1@ 2@ 3@ speed 0.0 0.0 0.05 collision_check 0
  168. end
  169. 018E: stop_sound 4@
  170. 018C: play_sound 5 at 1@ 2@ 3@
  171. 018E: stop_sound 4@  
  172. return  
  173. :Check1
  174. wait 0
  175. return
  176.  
  177.  
  178. :camera                                          
  179. 015F: set_camera_position -817.4 -905.55 13.86 0.0 rotation 0.0 0.0
  180. 0160: point_camera -3982.5 -238.75 63.44 switchstyle 2    
  181. 0164: disable_marker 13@                                                                                
  182. 0ACE: show_formatted_text_box "~h~~t~The press 1 for install timed bomb~t~ ~h~press 2 for install ignition bomb, ~t~ ~y~ press 3 for install detonation bomb~x~ ~t~~h~press 4 to set super properties car~h~~b~~t~ press 5 to remove mine with the car.~b~ "
  183. return    
  184.                
  185. /*
  186. //0 -0  CARBOMB_NONE    Без бомбы
  187. 1       CARBOMB_TIMED   Неактивная бомба, рассчитанная по времени, может быть получена из гаражного типа 2
  188. 2       CARBOMB_ONIGNITION      Неактивная зажигательная бомба может быть получена из гаражного типа 3
  189. 3       CARBOMB_REMOTE  Удаленная детонационная бомба может быть получена из гаражного типа 4
  190. 4       CARBOMB_TIMEDACTIVE     Активная импульсная бомба, активированная из бомбы типа 1
  191. 5       CARBOMB_ONIGNITIONACTIVE        Активная зажигательная бомба, активированная из бомбы типа 2          
  192.  
Тут появилась одна идея. В разделе статистика, есть строка ущерб имуществу. ее значение увеличивается  после  взрыва автомобиля.
Допустим мы заезжаем в гараж. Гаснет экран, игрока перемещаем из авто. Читаем  адрес памяти, которая отвечает за сумму ущерба, сохраняем ее в переменную,  взрываем авто, опять читаем адрес памяти, результат записываем в другую переменную. Находим разность их, чтобы грубо говоря найти стоимость авто. ее  получить  игрок в виде денег, можно называть это  утилизация автомобиля. Всё это можно легко реализовать,  только нужно знать адрес  памяти.  Везде искал его, так и не нашел.
Название: Re: Помощь с CLEO
Отправлено: Shagg_E от Апрель 04, 2018, 02:30:34 pm
Дубликат опкода 018E нужен, чтобы точно избежать зависание  звука.

Дубликат - не решение. Если зависание происходит - это значит, что код написан с ошибками.

только нужно знать адрес  памяти.  Везде искал его, так и не нашел.

Адреса ищутся так (http://club.itdrom.com/study/stud/lrnprogram/15.html). Но лучше конечно изучать уроки по реверсивной инженерии и IDA (http://gtabuilder.ru/gta_vc/modding/other_lessons/).

А вообще - стоимость авто прописана в handling.cfg у каждого авто в параметре Z.
Название: Re: Помощь с CLEO
Отправлено: egor230 от Апрель 07, 2018, 05:51:31 pm
Здравствуйте, уважаемый Shagg_E.
Да, вы правы дубликат был лишним,  всё прекрасно работает.
Благодаря вашему мудрому совету, нашёл адрес который отвечает за ущерб имуществу.  Кому нужен вот он 0x00975404.
Стоимость машины находится по смещению от  структуры  автомобиля.
Название: Re: Помощь с CLEO
Отправлено: egor230 от Май 05, 2018, 01:56:12 pm
Здравствуйте всем. Скажите пожалуйста, можно ли  через cleo двигать объекты?  дело в том, что у промзоны  есть  ворота, их я пытаюсь закрыть через cleo, но они даже не находятся через поиск объектов.  Может кто-то их двигать. стало интересно, почему не получается?
https://www.youtube.com/watch?v=sQGHC1DLG7k&feature=youtu.be (https://www.youtube.com/watch?v=sQGHC1DLG7k&feature=youtu.be)

Код: Javascript
  1. {$CLEO .cs}
  2. 0000:  
  3. :1
  4. wait 0      
  5. 80E0: not player $player_char driving // íå â àòâî
  6. jf @1
  7. if 0AB0: key_pressed 0x46 // f
  8. jf @1
  9. :2
  10. 05F1: 3@ = random_object_near_point -719.3805 -1279.2191 11.075 in_radius 5.0 find_next 0 //IF and SET
  11. jf @1                                    
  12. 01BB: store_object 3@ position_to 0@ 1@ 2@      
  13. 0acd: show_text_high_priority "god" time 1000    
  14. gosub @Open
  15.  
  16. jump @1        
  17. :Open                
  18. while if 84E6: not object 0@ near_point -749.4312 -1279.8885 11.0874 radius 0.01 0.01 0.01 flag 0  
  19. wait 0                                                                  
  20. 034E: move_object 0@ to -749.4312 -1279.8885 11.0874 speed 0.09 0.07 0.05 collision_check 0
  21. end
  22. 018E: stop_sound 4@
  23. 018C: play_sound 5 at 1@ 2@ 3@
  24. return  
  25.  
Название: Re: Помощь с CLEO
Отправлено: Shagg_E от Май 09, 2018, 11:54:02 am
Здравствуйте всем. Скажите пожалуйста, можно ли  через cleo двигать объекты?
Можно, но лишь те, что прописаны в data/object.dat
Название: Re: Помощь с CLEO
Отправлено: egor230 от Май 10, 2018, 02:37:28 pm
Спасибо большое за ваш ответ уважаемый Shagg_E. Как жалко, что не все объекты можно двигать. Продолжаю писать cleo скрипты. Сталкиваюсь с новым проблемами, например, пишу скрипт, выбор миссий, вроде  всё хорошо,  тут вдруг  при выборе 8 миссии,  бах вылет.  Сидишь, ломаешь голову,  почему вылетает?  Если у вас будет время,  подскажите, пожалуйста, будьте так  добрее.
Сама идея кажется не такой плохой. Вот демонстрация https://www.youtube.com/watch?v=DkYeYo0m9b0&feature=youtu.be (https://www.youtube.com/watch?v=DkYeYo0m9b0&feature=youtu.be)
Код: Javascript
  1. {$CLEO .cs}
  2. 0000:  
  3. :1
  4. wait 0          
  5. if and    
  6. 80E0:  player $player_char driving // не в атво    
  7. 0038: $onmission == 0 // integer values  
  8. jf @1
  9. 0AB0: key_pressed 0x46 // f
  10. jf @1  
  11. 05E0: 0@ = read_memory 0x978810 size 4 virtual_protect 0 // читать текущий интерьер      
  12. jf @1    
  13. 0@ == 0  
  14. jf @1
  15. 1@ = 2
  16. :2
  17. wait 0
  18. 0AB0: key_pressed 0x6b // +            
  19. jf @3    
  20. :21
  21. wait 0
  22. 8AB0: not key_pressed 0x6b // +
  23. jf @21      
  24. 1@ +=1  
  25. gosub @select_missions    
  26. :3
  27. 0AB0: key_pressed 0x6d // -
  28. jf @4  
  29. :31
  30. wait 0
  31. 8AB0: not key_pressed 0x6d // -
  32. jf @31  
  33. 1@ -=1                  
  34. gosub @select_missions    
  35. :4
  36. 0AB0: key_pressed 0x47 // j
  37. jf @2        
  38. :41
  39. wait 0
  40. if 8AB0: not key_pressed 0x47 // j
  41. jf @41                        
  42. 0417: start_mission 1@  // Initial
  43. jump @1  
  44.  
  45. :select_missions        
  46. wait 0        
  47. if 1@ == 3
  48. then  00BC: show_text_highpriority GXT 'LAW_1' time 2700 flag 1  // Text
  49. else if 1@ == 4
  50. then 00BC: show_text_highpriority GXT 'LAW_2' time 2700 flag 1    
  51. else if 1@ == 5
  52. then 00BC: show_text_highpriority GXT 'LAW_3' time 2700 flag 1      
  53. else if 1@ == 6
  54. then 00BC: show_text_highpriority GXT 'LAW_4' time 2700 flag 1  
  55. else if 1@ == 7
  56. then 00BC: show_text_highpriority GXT 'COL_1' time 2700 flag 1  
  57. else if 1@ == 8
  58. then 00BC: show_text_highpriority GXT 'COL_2' time 2700 flag 1          
  59. end                                
  60. end                        
  61. end              
  62. end        
  63. end
  64. end
  65. return
  66.  
  67.  
Название: Re: Помощь с CLEO
Отправлено: Shagg_E от Май 12, 2018, 01:25:17 pm
У меня вылетает, если пробовать в сохранении, в котором пройдены все основные миссии. Если пробовать запустить где-нибудь на середине сюжета(когда пройдена где-то половина миссий), либо пробовать запустить после начала новой игры - всё работает.
Быть может, в миссии есть какой-то триггер, который приводит к крашу, если запустить его после прохождения какой-нибудь миссии ближе к концу сюжета.

Попробуй глянуть другие загрузчики миссий(1 (https://libertycity.ru/files/gta-vice-city/99417-complete-mission-loader-r4.html), 2 (http://www.gtagarage.com/mods/show.php?id=27490) или 3 (https://gta.com.ua/file_details.phtml?id=907), например), может там эту проблему решили...
Название: Re: Помощь с CLEO
Отправлено: egor230 от Май 12, 2018, 02:03:04 pm
Спасибо вам большое уважаемый Shagg_E за решения моей проблемы.   Вся проблема  в  значениях глобальных перемен.  Теперь благодаря скрипту,  всё стало ясно. Теперь понял в каком направлении двигаться.  Вы мне очень помогли.
Название: Re: Помощь с CLEO
Отправлено: Shagg_E от Май 13, 2018, 01:57:40 pm
Третий вариант неправильный, кстати. Там некорректное использование глобальной переменной.
А первые два - вроде норм
Название: Re: Помощь с CLEO
Отправлено: egor230 от Май 15, 2018, 12:48:17 pm
Здравствуйте уважаемый Shagg_E.  Мне помог вариант номер 2.  Переделал, конечно его. Чтобы бы русские названия миссии.
Сейчас бьюсь над решением следующей проблемы вывод звуков через функцию.
Например.
Код: Javascript
  1. {$CLEO .cs}
  2. 0000:                          
  3. :1
  4. wait 0
  5. if 0AB0: key_pressed 0x46 // f
  6. jf @1                        
  7. 03CF: load_wav 'FIN_1a' as 1
  8. wait 0
  9. if 03D0:  wav 1 loaded
  10. then 03D1: play_wav 1
  11. if 03D2:  wav 1 ended
  12. then 040D: unload_wav 1        
  13. end
  14. end                
  15. jump @1                
  16.  


 Так вроде всё работает, но я хочу просто название звука передать в функцию. Мне всегда нравилась краткость.
Так вы же красивее и понятнее.

Код: Javascript
  1. {$CLEO .cs}
  2. 0000:                          
  3. :1
  4. wait 0
  5. if 0AB0: key_pressed 0x46 // f
  6. jf @1                                  
  7. 0AB1: call_scm_func @fun 1 "FIN_1a"
  8. jump @1          
  9. :fun
  10. 0AC8: 0@ = allocate_memory_size 64
  11. 0AD3: 0@ = format 0@      
  12. 0AD4: 0@ = scan_string 0@ format "%S"
  13. 03CF: load_wav 0@ as 1
  14. wait 0
  15. if 03D0:  wav 1 loaded
  16. then 03D1: play_wav 1
  17. if 03D2:  wav 1 ended
  18. then 040D: unload_wav 1        
  19. end
  20. end                                    
  21. 0AC9: free_allocated_memory 0@
  22. 0AB2: ret 0      
  23.  
Название: Re: Помощь с CLEO
Отправлено: DK от Май 15, 2018, 11:44:14 pm
В опкод 03CF нельзя передать указатель на строку.
Название: Re: Помощь с CLEO
Отправлено: egor230 от Май 17, 2018, 03:30:14 pm
Спасибо вам большое уважаемый DK за ваш ответ.  Как жаль, что нельзя этого сделать. Скажите пожалуйста, вот  адрес памяти, который отвечает за газ на машине, 0x1F0.  Когда машина стоит Значение 0, когда машина едет значение следующее 1065353216.
 При попытке  установить это значение  для машины, она не едет вперед, а игра вылетает.  Подскажите мне пожалуйста.

Код: Javascript
  1.  
  2. {$CLEO .cs}
  3. 0000:  
  4. :1
  5. wait 0      
  6. 80E0:  player $player_char driving // не в атво
  7. jf @1
  8. if 0AB0: key_pressed 0x46 // f
  9. jf @1      
  10. 0054: store_player $player_char position_to 0@ 1@ 2@
  11. :2
  12. 05F0: 3@ = random_vehicle_near_point 0@ 1@ 2@ in_radius 10.0 find_next 0 pass_wrecked 0 //IF and SET
  13. jf @1  
  14. 0186: 4@ = create_marker_above_car 3@
  15. :3
  16. wait 0    
  17. if 0AB0: key_pressed 0x4a // j
  18. jf @3
  19. 05E7: 0@ = car 3@ struct //получаем структуру этой машины
  20. 0@ += 0x1F0  //прибавляем смещение
  21. 05E0: 1@ = read_memory 0@ size 4 virtual_protect 0 //считыванием состоянием
  22. 0ACF: show_formatted_styled_text "%d" time 1000  style 3 1@      
  23. :4
  24. wait 0
  25. 05DF: write_memory 1@ size 4 value 1065353216 virtual_protect 0
  26. jump @1    
  27.  
Название: Re: Помощь с CLEO
Отправлено: kenking от Май 18, 2018, 09:44:25 am
Смещение 0x1F0 - это m_fGasPedal значение float https://github.com/DK22Pac/plugin-sdk/blob/master/plugin_vc/game_vc/CVehicle.h (https://github.com/DK22Pac/plugin-sdk/blob/master/plugin_vc/game_vc/CVehicle.h)
показывает нажата ли педаль газа на транспорте. Перезаписью этого значения не заставишь двигаться транспорт.
Название: Re: Помощь с CLEO
Отправлено: egor230 от Май 18, 2018, 03:44:50 pm
Спасибо большое уважаемый kenking за ваш ответ. Теперь стало понятно почему вылетает. Буду продолжать искать адрес  памяти, который отвечает  за движения вперед. Жаль, нету видео как писать  плагины  для  GTA vice city.
Название: Re: Помощь с CLEO
Отправлено: DK от Май 21, 2018, 12:31:16 am
Вылет - из-за того, что ты попутал переменные 0@ и 1@.
И значение там float, а не int (форматировать как %f, и вместо 1065353216 - 1.0).
В общем, написание скриптов, особенно в SB, где у переменных нету названий - это то ещё мучение.
Название: Re: Помощь с CLEO
Отправлено: egor230 от Май 30, 2018, 06:06:48 am
Спасибо большое за ваш ответ Уважаемый DK. Но к большому сожалению, что только не делал происходит вылет.  Написание скриптов на sb,  немного отличается от других языков программирования. А подскажите, пожалуйста, как заставить актера стрелять в определенную точку?
Название: Re: Помощь с CLEO
Отправлено: Shagg_E от Июнь 02, 2018, 10:49:11 pm
к большому сожалению, что только не делал происходит вылет.

Я уже приводил пример работы с выводом переменных на экран (http://forum.gtabuilder.ru/index.php?topic=325.msg3175#msg3175). Для float вроде нужно писать %.1f
как заставить актера стрелять в определенную точку?

Хз, пока сам не разобрался... Думаю, где-то в исходниках VCMP лежит ответ...
Название: Re: Помощь с CLEO
Отправлено: egor230 от Июнь 02, 2018, 10:57:59 pm
Спасибо большое за ваш ответ уважаемый Shagg_E.  очень  его   ждал.
Просто у меня появилась идея, чтобы  актер в режиме турели  стрелял  в определенные координаты.
 Вот небольшая  заготовка.
 
Код: Javascript
  1. {$CLEO .cs}
  2. 0000:
  3. :1
  4. wait 0
  5. 80E0: player $player_char driving // не в авто
  6. jf @1
  7. 0ADC: test_cheat "xc"
  8. jf @1
  9. 04C4: create_coordinate 0@ 1@ 2@ from_actor $PLAYER_ACTOR offset 0.0 6.2 0.0
  10. 05F5: call_scm_func @fun params_count 3 0@ 1@ 2@ 3@ 4@
  11. :2
  12. wait 0
  13. if 0AB0: key_pressed 0x46 // f
  14. jf @2
  15. 0407: create_coordinate 0@ 1@ 2@ from_car 3@ offset 0.0 20.0 1.50 // коор цели
  16. опкод чтоб стрелял в координаты
  17.  
  18. 0acd: show_text_high_priority "time" time 1000
  19. jump @1
  20. :fun
  21. repeat
  22. wait 0
  23. 0247: request_model #SENTXS
  24. 0247: request_model #WMOST
  25. 0247: request_model #ROCKETLA
  26. 038B: load_requested_models
  27. gosub @delay
  28. until gosub @available
  29. 00A5: 3@ = create_car #SENTXS at 0@ 1@ 2@
  30. 000B: 2@ += 4.0 // floating-point values
  31. 009A: 4@ = create_actor_pedtype 4 model #WMOST at 0@ 1@ 2@
  32. 01B2: give_actor 4@ weapon 30 ammo 9999 // Load the weapon model before using this
  33. 0464: put_actor 4@ into_turret_on_car 3@ at_car_offset 0.4242 -0.0679 1.1322 position 0 angle 360.0 with_weapon 30
  34. 0249: release_model #SENTXS
  35. 0249: release_model #WMOST
  36. 0249: release_model #ROCKETLA
  37. 0AB2: ret 2 3@ 4@
  38. :delay
  39. 16@ = 0
  40. repeat
  41. wait 0
  42. until 0029: 16@ >= 3 // задержка
  43. return
  44. :available
  45. wait 0
  46. if and
  47. 0248: model #SENTXS available
  48. 0248: model #WMOST available
  49. 0248: model #ROCKETLA available
  50. jf @available
  51. return
  52.  
Название: Re: Помощь с CLEO
Отправлено: Shagg_E от Июнь 02, 2018, 11:45:22 pm
Я планировал сделать свой режим стрельбы(в т.ч. - с выбором 3d точки цели для актера), но это будет еще очень не скоро... Пока же ничем с этим помочь не могу  :(
Название: Re: Помощь с CLEO
Отправлено: egor230 от Июнь 03, 2018, 01:25:03 am
Здравствуйте, уважаемый Shagg_E.  Вы меня направили на верный путь.
 Всё-таки  добился,  чтобы  актер стрелял из машины.  Конечно я тебя только прототип скрипта.
 вот   смотрите https://www.youtube.com/watch?v=Riejcb3uVo0&feature=youtu.be (https://www.youtube.com/watch?v=Riejcb3uVo0&feature=youtu.be)
Только почему он стреляет одиночными выстрелами, а ни очередью? Погулять любовь подсказке.
Код: Javascript
  1. {$CLEO .cs}
  2. 0000:  
  3. :1
  4. wait 0      
  5. 80E0:  player $player_char driving // не в авто
  6. jf @1
  7. 0ADC: test_cheat "xc"
  8. jf @1      
  9. 04C4: create_coordinate 0@ 1@ 2@ from_actor $PLAYER_ACTOR offset 0.0 6.2 0.0
  10. 05F5: call_scm_func @fun params_count 3 0@ 1@ 2@ 3@ 4@        
  11. 0407: create_coordinate 0@ 1@ 2@ from_car 3@ offset 0.0 20.0 1.50 // коор цели
  12. 0107: 5@ = create_object 350 at 0@ 1@ 2@            
  13. 02E2: set_actor 4@ weapon_accuracy_to 10
  14. :2
  15. wait 0
  16. if 8AB0: not key_pressed 0x46 // f
  17. jf @1                                    
  18. 01D8: unknown_actor 4@ unknown_fire_at_target 5@
  19. jump @2                                      
  20. :fun
  21. repeat                        
  22. wait 0
  23. 0247: request_model #SENTXS  
  24. 0247: request_model #WMOST  
  25. 0247: request_model #m4    
  26. 0247: request_model 350                                      
  27. 038B: load_requested_models            
  28. gosub @delay
  29. until gosub @available
  30. 00A5: 3@ = create_car #SENTXS at 0@ 1@ 2@    
  31. 000B: 2@ += 4.0  // floating-point values
  32. 009A: 4@ = create_actor_pedtype 4 model #WMOST at 0@ 1@ 2@        
  33. 01B2: give_actor 4@ weapon 26 ammo 9999 // Load the weapon model before using this    
  34. 0464: put_actor 4@ into_turret_on_car 3@ at_car_offset 0.4242 -0.0679 1.1322 position 0 angle 360.0 with_weapon 26  
  35. 0249: release_model #SENTXS
  36. 0249: release_model #WMOST
  37. 0249: release_model #m4
  38. 0AB2: ret 2 3@ 4@
  39. :delay
  40. 16@ = 0
  41. repeat
  42. wait 0                
  43. until 0029: 16@ >= 3 // задержка
  44. return    
  45. :available
  46. wait 0                
  47. if and
  48. 0248: model #SENTXS available
  49. 0248: model #WMOST available
  50. 0248: model #m4 available    
  51. 0248: model 350 available
  52. jf @available
  53. return                  
  54.  
Название: Re: Помощь с CLEO
Отправлено: Shagg_E от Июнь 03, 2018, 02:10:03 am
Попробуй при создании актера заменить 4 pedtype на другой(от полицейского или члена банды) (http://gtamodding.ru/wiki/Ped_Type#GTA_VC). Либо сделать "цель" не объектом, а актером.
Если второе сработает - сделай актера-цель невидимым (https://www.gtagmodding.com/opcode-database/opcode/0337/), затем помести этого невидимого актера в невидимый(модель #NULL) или маленький(модель кастета) объект и отключи у этого объекта коллизию (https://gtagmodding.com/opcode-database/opcode/0382/), чтобы этот летающий невидимый актер никому не мешал.
Название: Re: Помощь с CLEO
Отправлено: egor230 от Октябрь 30, 2018, 07:58:21 am
Спасибо за ваш ответ. Стрельбу  так и не получилось   реализовать, там много было багов. Потом писал lua скрипты для GTA San Andreas. Там достаточно удобно писать миссии. Например, сделал  функцию, которая проверяет ли запущена, далее  игрок находится в машине, тогда создается маркер,  если нет маркер удаляется, если игрок встал на маркер, его  перемещают  из машины, запускают проверку  в отдельном потоке, который постоянно проверяется жив и игрок или нет? Если игрок умер, запускается функция провала  и выхода из миссии.  Функция возвращает правду.  Конечно на словах всё выглядит запутанно. Всего около 40 строчек кода против около 100 на cleo. Что гораздо удобнее. Сейчас меня очень заинтересовали c++. Он не такой сложный, как я думал, это  не ассемблер))))
 Ещё раз Большое спасибо, чтобы вы мне очень помогли с cleo, сейчас мои вопросы кажутся такими глупыми, краснею когда читаю сообщения годовой давности)))))

https://libertycity.ru/files/gta-san-andreas/119508-prostaja-missija.html
Название: Re: Помощь с CLEO
Отправлено: Shagg_E от Октябрь 30, 2018, 07:12:25 pm
egor230> Так оно всегда и бывает. Меня тоже частенько смущает то, что писал раньше)) Успехов в моддинге! И не бойся задавать вопросы, даже если кто-то на это будет возмущаться.
Название: Re: Помощь с CLEO
Отправлено: Saint от Декабрь 02, 2018, 12:26:17 am
как правильно использовать опкоды 0437 и 039D
Название: Re: Помощь с CLEO
Отправлено: Shagg_E от Декабрь 02, 2018, 04:25:15 am
039D: scatter_particles [int1] [flt1] [int2] [int3] [int4] [int5] at [flt2] [flt3] [flt4] [flt5] [flt6] [flt7]

Создает анимированный партикл(дым, огонь, всплеск воды). Достаточно прописать 1 раз, и парктикл будет анимироваться столько времени, сколько было указано в опкоде.
Цитировать
    [int1]
        номер эффекта (список: 1 (https://i.gyazo.com/682db2e13410040db11defc4ed74cf9a.png), 2 (https://i.gyazo.com/47be908042e4862868996f13e4c27778.png), 3 (https://i.gyazo.com/40aa21857ee4f4f81b3688e223210a54.png))
    [flt1]
        размер
    [int2]
        Цвет: Red(0-255)
    [int3]
        Цвет: Green(0-255)
    [int4]
        Цвет: Blue(0-255)
    [int5]
        Длительность эффекта в ms
    [flt2]
        Координаты: X
    [flt3]
        Координаты: Y
    [flt4]
        Координаты: Z
    [flt5]
        Ускорение: X
    [flt6]
        Ускорение: Y
    [flt7]
        Ускорение: Z





0437: scatter_particle 1 size 0.52 at 772.2785 -268.6476 10.3203 speed_XYZ 0.0 0.0 0.0

Создает одиночный партикл. После появления сразу исчезает. Таким образом, для постоянного эффекта необходимо юзать опкод в цикле.
Подробнее о нем, а также список партиклов можно заценить тут (http://gtamodding.ru/wiki/%D0%92%D0%B8%D0%B7%D1%83%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D0%B5_%D1%8D%D1%84%D1%84%D0%B5%D0%BA%D1%82%D1%8B_%D0%B2_%D1%81%D0%BA%D1%80%D0%B8%D0%BF%D1%82%D0%B8%D0%BD%D0%B3%D0%B5#Vice_City).
Название: Re: Помощь с CLEO
Отправлено: Saint от Декабрь 03, 2018, 06:32:18 pm
не могу создать

только код не в клео а С++

// const SCRIPT_COMMAND scatter_particles = { 0x039D, "ifiiiiffffff" }; // scripting.h

ScriptCommand(&scatter_particles, iType, fSize, byteR, byteG, byteB, iTime, PosX, PosY, PosZ, speedX, speedY, speedZ); // = { 0x039D, "ifiiiiffffff" };

в игре ничего нет
Название: Re: Помощь с CLEO
Отправлено: Shagg_E от Декабрь 04, 2018, 06:42:13 am
Хз, в C++ не пробовал создавать. В SCM/CLEO это работает
Название: Re: Помощь с CLEO
Отправлено: Saint от Декабрь 08, 2018, 03:04:39 am
спасибо большое за информацию, разобрался, всё работает
Название: Re: Помощь с CLEO
Отправлено: daniel_360 от Март 09, 2019, 11:53:11 am
Здравствуйте, тут решил заняться адресами, вот нашёл один на gtamodding 0x703997, теперь думаю, как его отключить, пока без успеха 0A8C: write_memory 0x703997 size 1 value 1 virtual_protect 1 // Disable stats
Название: Re: Помощь с CLEO
Отправлено: daniel_360 от Март 10, 2019, 12:41:48 pm
Такая проблема, сделал скрипт на рандомный спавн машин

:Car_1
wait 0
if and
Player.Defined(0)
84AD:  not actor $PLAYER_ACTOR in_water
jf @Car_1
04C4: create_coordinate $cX $cY $cZ from_actor $PLAYER_ACTOR offset 0.0 20.0 0.0
02C1: set $cX $cY $cZ to_car_path_coords_closest_to $cX $cY $cZ
if and
8AE1: not 12@ = random_actor_near_point $cX $cY $cZ in_radius 2.0 find_next 0 pass_deads 0
8AE2: not 13@ = random_vehicle_near_point $cX $cY $cZ in_radius 2.0 find_next 0 pass_wrecked 0
8AE3: not 14@ = random_object_near_point $cX $cY $cZ in_radius 2.0 find_next 0
jf @Car_1
03C5: create_random_car_for_carpark $cX $cY $cZ 0.0
jump @Car_1

Работает, машины спавнятся, но когда игрок садится в неё, то машина создаётся заново, как это исправить, желательно показать где мои ошибки
Название: Re: Помощь с CLEO
Отправлено: egor230 от Март 10, 2019, 12:54:56 pm
Зачем используйте Глобальные переменные,  где у вас активация на рандомный спавн машин?
Название: Re: Помощь с CLEO
Отправлено: daniel_360 от Март 10, 2019, 01:59:51 pm
egor230, это я сделал в main.scm, а не в CLEO
Название: Re: Помощь с CLEO
Отправлено: Shagg_E от Март 10, 2019, 02:07:58 pm
Работает, машины спавнятся, но когда игрок садится в неё, то машина создаётся заново, как это исправить, желательно показать где мои ошибки
Ты используешь опкод, создающий пускай и временную, но всё же парковку, а в Вайсе припаркованные авто не могут создаваться ближе чем в радиусе 10 м, поэтому авто у тебя пересоздается.
Попробуй увеличить радиус проверки с 2.0 до 12.0-15.0 м.
Название: Re: Помощь с CLEO
Отправлено: daniel_360 от Март 10, 2019, 02:13:09 pm
Вот интересно, почему спавнятся одни и те же машины?
Название: Re: Помощь с CLEO
Отправлено: Shagg_E от Март 10, 2019, 02:16:19 pm
Вот интересно, почему спавнятся одни и те же машины?
Так работает стримминг в Вайсе. Это сделано для экономии памяти: спавнится в основном то, что уже существует неподалеку.

P.S. Тут:
Цитировать
8AE1: not 12@ = random_actor_near_point $cX $cY $cZ in_radius 2.0 find_next 0 pass_deads 0
8AE2: not 13@ = random_vehicle_near_point $cX $cY $cZ in_radius 2.0 find_next 0 pass_wrecked 0
8AE3: not 14@ = random_object_near_point $cX $cY $cZ in_radius 2.0 find_next 0
Поскольку ты не юзаешь эти переменные, ты можешь ставить туда одну и ту же(12@ например). Но это не ошибка, просто экономия переменных(на будущее)
Название: Re: Помощь с CLEO
Отправлено: daniel_360 от Март 10, 2019, 02:18:45 pm
https://yadi.sk/i/obLVDgGSsgJiJA (https://yadi.sk/i/obLVDgGSsgJiJA) пример
Название: Re: Помощь с CLEO
Отправлено: Shagg_E от Март 10, 2019, 02:20:12 pm
https://yadi.sk/i/obLVDgGSsgJiJA (https://yadi.sk/i/obLVDgGSsgJiJA) пример
Увеличь радиус проверки авто до 12 м. Радиусы проверок педов и объектов оставь равными 2. Проблема повторений, увы, уже глубоко в exe.
Название: Re: Помощь с CLEO
Отправлено: daniel_360 от Март 10, 2019, 02:24:07 pm
Щяс протестирую
Название: Re: Помощь с CLEO
Отправлено: daniel_360 от Март 10, 2019, 02:26:55 pm
Работает вроде неплохо, осталось сделать, чтоб спавнились разные машины и под разным углом
Название: Re: Помощь с CLEO
Отправлено: Shagg_E от Март 10, 2019, 02:38:07 pm
Юзай опкод
Код: Text
  1. 0208: $ANGLE = random_float 0.0 360.0
для генерации рандомного угла.
Касаемо моделей авто я уже сказал - стандартный стримминг работает таким образом. В принципе, повторяемость не будет так заметна, если ты сделаешь спавн авто в 100 метрах от игрока и будешь проверять наличие рядом авто в радиусе 80 метров. Тогда тачки не будут мельтешить, но вариантов всё равно будет не очень много (https://gtamodding.wiki/03C5).
Идеальное решение - делать сложный генератор действительно рандомных моделей авто, в зависимости от зон и т.д., но тогда каждую модель придется еще и загружать перед спавном.
Название: Re: Помощь с CLEO
Отправлено: daniel_360 от Март 10, 2019, 02:41:04 pm
Будем делать!
Название: Re: Помощь с CLEO
Отправлено: Shagg_E от Март 10, 2019, 02:50:39 pm
Будем делать!
В принципе, если хочешь по-больше авто на дорогах - делай больше постоянных парковок классическим методом
Код: Text
  1. 014B: $85 = init_car_generator #BANSHEE color 14 14 force_spawn 1 alarm 0 door_lock 0 min_delay 0 max_delay 10000 at -1212.8584 -1311.0272 14.9026 angle 334.5736
  2. 014C: set_parked_car_generator $85 cars_to_generate_to 0
Тем более, если речь идет о пост-апокалипсисе, где авто не могут в большом кол-ве постоянно перемещаться рандомным образом.
Так ты получишь некий баланс между постоянством заброшенного города и небольшим рандомом(от твоего скрипта), прибавляющим интерес к игре.
Название: Re: Помощь с CLEO
Отправлено: daniel_360 от Март 10, 2019, 02:54:41 pm
Ну, у меня в моде зомби апокалипсис наступил 4 дня назад
Название: Re: Помощь с CLEO
Отправлено: daniel_360 от Март 10, 2019, 02:58:52 pm
Вот ещё интересно, как на дорогах поставить сгоревшие машины?
https://yadi.sk/i/UuTauCYa4lHk3Q (https://yadi.sk/i/UuTauCYa4lHk3Q)
Название: Re: Помощь с CLEO
Отправлено: Shagg_E от Март 10, 2019, 03:03:06 pm
Вот ещё интересно, как на дорогах поставить сгоревшие машины?
https://yadi.sk/i/UuTauCYa4lHk3Q (https://yadi.sk/i/UuTauCYa4lHk3Q)
Тебе нужно будет писать уже другой скрипт, который будет спавнить авто в 1000м от игрока, взрывать его там(чтобы не было видно и слышно взрыв), затем перемещать куда-нибудь в зону видимости игрока.
Название: Re: Помощь с CLEO
Отправлено: daniel_360 от Март 10, 2019, 03:09:33 pm
А как нибудь через загрузку нельзя сделать?
Название: Re: Помощь с CLEO
Отправлено: Shagg_E от Март 10, 2019, 03:29:26 pm
Нет. Сам послуди - зачем такое делать Рокстарам для их оригинальных игр? Всё нестандартное приходится делать самому, вручную.
Название: Re: Помощь с CLEO
Отправлено: daniel_360 от Март 10, 2019, 03:43:00 pm
Shagg_E, ну это да, всё нужно делать своими ручками!
Название: Re: Помощь с CLEO
Отправлено: daniel_360 от Март 12, 2019, 06:16:05 pm
Здравствуйте, хотел спросить, как сделать машину повреждённой (открыты двери, багажник, капот, сломаны двери и т.д)?
Название: Re: Помощь с CLEO
Отправлено: Shagg_E от Март 12, 2019, 07:13:49 pm
Скорее всего, можно сделать по той же схеме, что и отрывание колеса (http://forum.gtabuilder.ru/index.php?topic=117.msg2815#msg2815).
Честно говоря, не изучал этот вопрос. Но повреждение/отделение компонентов авто есть в планах по новым опкодам (http://forum.gtabuilder.ru/index.php?topic=406.0)!
Название: Re: Помощь с CLEO
Отправлено: daniel_360 от Март 12, 2019, 07:23:58 pm
Примерно так https://yandex.ru/images/search?pos=90&p=3&img_url=https%3A%2F%2Fi.ytimg.com%2Fvi%2FDajdO3sUsls%2Fmaxresdefault.jpg&text=zombie%20andreas%20машины&rpt=simage (https://yandex.ru/images/search?pos=90&p=3&img_url=https%3A%2F%2Fi.ytimg.com%2Fvi%2FDajdO3sUsls%2Fmaxresdefault.jpg&text=zombie%20andreas%20машины&rpt=simage)
Название: Re: Помощь с CLEO
Отправлено: Shagg_E от Март 12, 2019, 10:43:53 pm
В SA для этого есть спец. опкоды, для VC стандартными путями этого не добиться. Нужно либо муторно работать с памятью через CLEO, либо работать в C++ и выводить функцию в опкод(чем я и планирую заняться когда-нибудь).
Название: Re: Помощь с CLEO
Отправлено: daniel_360 от Март 12, 2019, 10:53:59 pm
В GTA Raccoon City Stories, машины разбиты, но там вроде как-то через модель сделали!
Название: Re: Помощь с CLEO
Отправлено: Shagg_E от Март 12, 2019, 11:02:27 pm
Да, можно сразу модель в 3d редакторе изменить. Это не так сложно, как кажется.
Название: Re: Помощь с CLEO
Отправлено: daniel_360 от Март 12, 2019, 11:03:36 pm
Только теперь вопрос, можно ли будет починить машину, чтоб у неё всё было хорошо?
Название: Re: Помощь с CLEO
Отправлено: Shagg_E от Март 12, 2019, 11:29:54 pm
Угу (https://www.gtagarage.com/mods/show.php?id=16671) (здесь (https://www.youtube.com/watch?v=3mBR1S3fF4U) видео)
Название: Re: Помощь с CLEO
Отправлено: daniel_360 от Март 27, 2019, 06:18:46 pm
Здравствуйте, такой вопрос, как устроен зомби спавн в GTA Long Night, просто очень давно хочу узнать?
Название: Re: Помощь с CLEO
Отправлено: Shagg_E от Март 27, 2019, 07:52:54 pm
криво  ;D
Название: Re: Помощь с CLEO
Отправлено: xanser от Март 29, 2019, 09:19:47 am
Вот ещё интересно, как на дорогах поставить сгоревшие машины?
https://yadi.sk/i/UuTauCYa4lHk3Q (https://yadi.sk/i/UuTauCYa4lHk3Q)
Взрывать машины, чтобы они выглядели сгоревшими, не обязательно. За это отвечает такой флаг (на примере plugun sdk), кстати не только для машин:
Код: C++
  1. vehicle->m_nFlags->bRenderScorched = 1;
Если на cleo, то надо взять структуру машины, сдвинуть указатель на 0x52, и у этого значения поставить 5 бит в 1, как-то так короче:
Код: Text
  1. 05E7: 0@ = car 0@ struct
  2. 0@ += 0x52
  3. ((0@ >> 4) & 1) // тут я не знаю, как на cleo
Название: Re: Помощь с CLEO
Отправлено: Shagg_E от Март 29, 2019, 11:54:13 pm
у этого значения поставить 5 бит в 1, как-то так короче:
Ты имеешь в виду 5й бит? Тогда разве не проще через OR? Типа,
0@ |= 32Или я не так понял? Я сам в этом не силен, руководствуюсь всякими левыми статейками (https://ravesli.com/urok-45-pobitovye-operatory/).

В этом случае, в итоге должно быть как-то так:
Код: Text
  1. 0A97: 1@ = car 0@ struct
  2. 000A: 1@ += 0x52
  3. 0A8D: 2@ = read_memory 1@ size 1 virtual_protect 1
  4. 0B18: 2@ |= 16
  5. 0A8C: write_memory 1@ size 1 value 2@ virtual_protect 1

Но я не тестил, да и в операции мог ошибиться...

daniel_360> Но если это сработает для машин, то, как и написал xanser, это действительно должно работать и для людей/объектов, т.к. оффсет 0x52 находится даже до подкласса CPhysical (https://gtamods.com/wiki/Memory_Addresses_(VC)#CEntity)
Название: Re: Помощь с CLEO
Отправлено: xanser от Март 30, 2019, 01:33:12 pm
5-й бит, да. Я маленько напутал, взял вместо присвоения флага проверку условия из функции CVehicle::SetupLighting, там проверяется, если машина сгоревшая, то использовать "темное освещение"
Код: C++
  1.   if ( ((unsigned __int8)v1->m_nFlags[1] >> 4) & 1 )
  2.   {
  3.     WorldReplaceNormalLightsWithScorched(pRpWorld, flt_690264);
  4.   }
Как ты написал через OR - правильно, только вместо 32 надо 16 (10000), 32 это шестой бит.
Название: Re: Помощь с CLEO
Отправлено: Shagg_E от Март 30, 2019, 03:19:56 pm
Как ты написал через OR - правильно, только вместо 32 надо 16 (10000), 32 это шестой бит.
Аа, понятно: я просто считал с 0, поэтому подумал, что речь была о шестом по факту бите  :D
ИСПРАВИЛ
Название: Re: Помощь с CLEO
Отправлено: daniel_360 от Апрель 03, 2019, 05:19:17 pm
xanser, Можешь мне сделать plagin по замене названия GTA Vice City, просто я не знаю C++?
Название: Re: Помощь с CLEO
Отправлено: xanser от Апрель 05, 2019, 06:49:25 am
Кто везет, на том и едут, daniel_360, написал тебе личное сообщение на эту тему.
Название: Re: Помощь с CLEO
Отправлено: daniel_360 от Апрель 05, 2019, 09:54:43 pm
Здравствуйте, решил я кое-что интересное сделать, базу выживших, вот создал пару человек с оружием. Но, вот мне интересно, как там всё правильно настроить, чтобы, когда игрок стрелял, они не агрились и тоже не стреляли, если что, вот код:

:Surv1
thread 'Surv1'

:Surv1_1
wait 0
if and
Player.Defined(0)
not wasted_or_busted
00F5:   player $PLAYER_CHAR 0 -984.6564 -568.8753 11.2097 radius 200.0 200.0 200.0
jf @Surv1_1

:Surv1_2
Model.Load(#ARMY)
Model.Load(#MALE01)
Model.Load(#M4)
Model.Load(#SNIPER)
038B: load_requested_models

:Surv1_3
wait 0
if and
Model.Available(#ARMY)
Model.Available(#MALE01)
Model.Available(#M4)
Model.Available(#SNIPER)
jf @Surv1_3
Actor.Create($SUR1, CivMale, #ARMY, -898.8752, -550.2214, 22.4789)
Actor.Angle($SUR1) = 98.9238
Actor.Create($SUR2, CivMale, #MALE01, -935.8588, -518.7619, 27.9093)
Actor.Angle($SUR2) = 86.1648
Actor.Health($SUR1) = 300
Actor.Health($SUR2) = 300
01B2: give_actor $SUR1 weapon 26 ammo 320
02E2: set_actor $SUR1 weapon_accuracy_to 80
0350: set_actor $SUR1 maintain_position_when_attacked 1
01B2: give_actor $SUR2 weapon 28 ammo 90
02E2: set_actor $SUR2 weapon_accuracy_to 85
0350: set_actor $SUR2 maintain_position_when_attacked 1
Model.Destroy(#ARMY)
Model.Destroy(#MALE01)
Model.Destroy(#M4)
Model.Destroy(#SNIPER)

:Surv1_4
wait 0
if and
Actor.Dead($SUR1)
Actor.Dead($SUR2)
jf @Surv1_4
Actor.RemoveReferences($SUR1)
Actor.RemoveReferences($SUR2)
jump @Surv1_1

Я просто очень давно пытаюсь это всё хорошо настроить и оптимизировать. Даже была идея, чтобы игрок мог захватывать базы
Но, там были кое-какие проблемы и я отказался
Название: Re: Помощь с CLEO
Отправлено: daniel_360 от Апрель 17, 2019, 06:22:09 pm
Здравствуйте, хотел спросить, как исправить одну деталь, когда игрок телепортировался с машиной, но машина, как-то повёрнута не туда?
Название: Re: Помощь с CLEO
Отправлено: Shagg_E от Апрель 17, 2019, 08:53:36 pm
Повернуть её "туда"
Название: Re: Помощь с CLEO
Отправлено: daniel_360 от Апрель 17, 2019, 09:07:43 pm
Не, я про проблему с координатами
Название: Re: Помощь с CLEO
Отправлено: Shagg_E от Апрель 17, 2019, 10:02:19 pm
Тогда я не понял вопрос
Название: Re: Помощь с CLEO
Отправлено: xanser от Апрель 18, 2019, 05:39:54 am
При телепортации машины происходит резкое изменение ее координат. Игра похоже вычисляет по ним огромный вектор ускорения, что может заколбасить машину. Поэтому я обнуляю эти вектора при телепорте, может в этом вопрос. Ну и надо на клео это переписать

Код: ASM
  1. 00000000 CPhysical       struc ; (sizeof=0x120, mappedto_13)
  2. .....
  3. 00000070 m_vecMoveSpeed  CVector
  4. 0000007C m_vTurnForce    CVector
  5.  
Название: Re: Помощь с CLEO
Отправлено: daniel_360 от Апрель 18, 2019, 08:11:11 pm
Я вот про что спрашивал https://yadi.sk/i/x0dYdWi_rSSRUA
Название: Re: Помощь с CLEO
Отправлено: daniel_360 от Апрель 22, 2019, 05:44:47 pm
Здравствуйте, хотел узнать, как убрать людей в определённой зоне, мне вот нужно, чтобы в киностудии не спавнились люди
Название: Re: Помощь с CLEO
Отправлено: Shagg_E от Апрель 22, 2019, 06:10:54 pm
Я вот про что спрашивал https://yadi.sk/i/x0dYdWi_rSSRUA
Так я тебе и написал - поверни её:
Код: Text
  1. 0174: 1@ = car 0@ z_angle // записать поворот авто перед телепортацией
  2. 0175: set_car 0@ z_angle_to 1@ // установить поворот авто после телепортации

Здравствуйте, хотел узнать, как убрать людей в определённой зоне, мне вот нужно, чтобы в киностудии не спавнились люди
Если на постоянке - то редактированием data\maps\paths.ipl через специальные редакторы путей, если временно - то опкодом:
022B: create_forbidden_for_peds_cube x1 6.0 y1 15.0 z1 5.0 x2 12.0 y2 20.0 z2 15.0 - он временно сделает неактивными пути в заданном учатке
Название: Re: Помощь с CLEO
Отправлено: daniel_360 от Апрель 22, 2019, 08:33:03 pm
А как в paths.ipl найти нужное место?
Название: Re: Помощь с CLEO
Отправлено: Shagg_E от Апрель 22, 2019, 10:43:01 pm
С помощью этой проги (https://libertycity.ru/files/gta-vice-city/23683-path-editor-1.5b.html)... или этой (https://www.youtube.com/watch?v=-Alke0-uAMY).
Еще пути вроде можно редачить в 3dsmax, но я не пробовал.
Название: Re: Помощь с CLEO
Отправлено: daniel_360 от Апрель 24, 2019, 05:54:13 pm
Попробовал, не получается, зомби всё равно спавнятся в студии

:Cube
thread 'Cube'

:Cube_1
wait 0
0395: clear_area 1 at 10.1629 963.4605 range 9.8996 1.0
022A: remove_forbidden_for_peds_cube -112.495 920.349 0.0 9.705 1025.694 30.0
jump @Cube_1
Название: Re: Помощь с CLEO
Отправлено: Shagg_E от Апрель 24, 2019, 06:07:42 pm
Ты спрашивал не о зомби, а о людях(задавай вопрос точнее). С людьми это работает. А тот скрипт зомби, который ты подразумеваешь, спавнит даже на неактивных путях. Поэтому в этом случае поможет лишь физическое удаление путей из paths.ipl
Название: Re: Помощь с CLEO
Отправлено: daniel_360 от Май 04, 2019, 07:50:44 pm
Здравствуйте, хотел спросить, как правильно использовать опкод 00F5:   player $PLAYER_CHAR 0 -926.8099 -327.8378 13.3894 radius 4.0 4.0 4.0, просто когда я поставил координаты и выбрал радиус, бывает, что люди, спавнятся где-то в другом месте, а не в нужном

:Surv1
thread 'Surv1'

:Surv1_1
wait 0
if and
Player.Defined(0)
not wasted_or_busted
00F5:   player $PLAYER_CHAR 0 -150.3148 951.5107 14.4061 radius 200.0 200.0 200.0
jf @Surv1_1

:Surv1_2
Model.Load(#ARMY)
Model.Load(#MALE01)
Model.Load(#M4)
Model.Load(#SNIPER)
038B: load_requested_models

:Surv1_3
wait 0
if and
Model.Available(#ARMY)
Model.Available(#MALE01)
Model.Available(#M4)
Model.Available(#SNIPER)
jf @Surv1_3
Actor.Create($SUR1, CivMale, #ARMY, 2.6261, 956.7853, 11.1667)
Actor.Angle($SUR1) = 89.2999
Actor.Create($SUR2, CivMale, #MALE01, -76.1792, 941.3915, 10.9061)
Actor.Angle($SUR2) = 184.4517
Actor.Health($SUR1) = 300
Actor.Health($SUR2) = 300
01B2: give_actor $SUR1 weapon 26 ammo 320
02E2: set_actor $SUR1 weapon_accuracy_to 80
01ED: clear_actor $SUR1 threat_search
0350: set_actor $SUR1 maintain_position_when_attacked 1
01B2: give_actor $SUR2 weapon 28 ammo 90
02E2: set_actor $SUR2 weapon_accuracy_to 85
01ED: clear_actor $SUR2 threat_search
0350: set_actor $SUR2 maintain_position_when_attacked 1
Model.Destroy(#ARMY)
Model.Destroy(#MALE01)
Model.Destroy(#M4)
Model.Destroy(#SNIPER)

:Surv1_4
wait 0
if and
Actor.Dead($SUR1)
Actor.Dead($SUR2)
jf @Surv1_4
Actor.RemoveReferences($SUR1)
Actor.RemoveReferences($SUR2)
jump @Surv1_1
Название: Re: Помощь с CLEO
Отправлено: Shagg_E от Май 04, 2019, 08:35:12 pm
Этот опкод - просто проверка нахождения игрока в определенном радиусе от определенной точки. Тут никакой ошибки нет.
Проблема находится дальше - после спавна людей у тебя скрипт перезапускается, и люди спавнятся снова и снова каждую миллисекунду. Отсюда все глюки.
Чтобы так не происходило - в конце нужно проверять, что игрок ушел из того радиуса от той точки, и только потом перезапускать скрипт.
Название: Re: Помощь с CLEO
Отправлено: daniel_360 от Май 04, 2019, 08:55:12 pm
Большое спасибо, а то очень давно мучаюсь с этой проблемой!
Название: Re: Помощь с CLEO
Отправлено: daniel_360 от Январь 07, 2020, 06:46:24 pm
Здравствуйте, нужна помощь. Я вот создал код, он должен спавнить разные модели машин в радиусе 100 м. Всё работает, но спавнится одна и таже модель машины, пробовал разные методы исправления - не помголо. Не подскажете как исправить?
P.S. Код для main.scm

:Car
thread 'Car'

:Car_0
wait 0
if
Player.Defined(0)
jf @Car_0
0209: $ZC1 = random_int_in_ranges 130 236
if and
8038:  not $ZC1 == 136
8038:  not $ZC1 == 155
8038:  not $ZC1 == 160
8038:  not $ZC1 == 162
8038:  not $ZC1 == 176
8038:  not $ZC1 == 177
8038:  not $ZC1 == 182
8038:  not $ZC1 == 183
jf @Car_0
if and
8038:  not $ZC1 == 184
8038:  not $ZC1 == 187
8038:  not $ZC1 == 188
8038:  not $ZC1 == 189
8038:  not $ZC1 == 190
8038:  not $ZC1 == 199
8038:  not $ZC1 == 201
8038:  not $ZC1 == 202
jf @Car_0
if and
8038:  not $ZC1 == 203
8038:  not $ZC1 == 214
8038:  not $ZC1 == 215
8038:  not $ZC1 == 217
8038:  not $ZC1 == 218
8038:  not $ZC1 == 223
8038:  not $ZC1 == 224
8038:  not $ZC1 == 225
jf @Car_0
if and
8038:  not $ZC1 == 227
8038:  not $ZC1 == 232
8038:  not $ZC1 == 233
8038:  not $ZC1 == 234
8038:  not $ZC1 == 235
8038:  not $ZC1 == 171
8038:  not $ZC1 == 194
8038:  not $ZC1 == 195
jf @Car_0
if and
8038:  not $ZC1 == 231
8038:  not $ZC1 == 165
8038:  not $ZC1 == 180
8038:  not $ZC1 == 181
jf @Car_0
Model.Load($ZC1)
038B: load_requested_models
 
:Car_1
wait 0
if
Player.Defined(0)
jf @Car_3
if
Model.Available($ZC1)
jf @Car_0
04C4: create_coordinate $cX $cY $cZ from_actor $PLAYER_ACTOR offset 0.0 100.0 0.0
02C1: set $cX $cY $cZ to_car_path_coords_closest_to $cX $cY $cZ
if and
8AE1: not $ZC = random_actor_near_point $cX $cY $cZ in_radius 2.0 find_next 0 pass_deads 0
8AE2: not $ZC = random_vehicle_near_point $cX $cY $cZ in_radius 80.0 find_next 0 pass_wrecked 0
8AE3: not $ZC = random_object_near_point $cX $cY $cZ in_radius 2.0 find_next 0
jf @Car_1
0209: $CARH = random_int 250 1000
0209: $CARD = random_int 0 7

:Car_2
0208: $ANGLE = random_float 0.0 360.0
00A5: $CARZ = create_car $ZC1 at $cX $cY $cZ
020A: set_car $CARZ door_status_to $CARD
Car.Angle($CARZ) = $ANGLE
Car.Health($CARZ) = $CARH
Car.RemoveReferences($CARZ)
jump @Car_1
 
:Car_3
Model.Destroy($ZC1)
jump @Car_0
Название: Re: Помощь с CLEO
Отправлено: Shagg_E от Январь 08, 2020, 05:30:17 am
Нужно в случае, если модель не найдена - перебрасывать на загрузку той же модели, а не новой(старая же не была выгружена!).
И еще убрать jump @Car_1 в конце:

:Car
thread 'Car'

:Car_0
wait 0
if
Player.Defined(0)
jf @Car_0
0209: $ZC1 = random_int_in_ranges 130 236
if and
8038:  not $ZC1 == 136
8038:  not $ZC1 == 155
8038:  not $ZC1 == 160
8038:  not $ZC1 == 162
8038:  not $ZC1 == 176
8038:  not $ZC1 == 177
8038:  not $ZC1 == 182
8038:  not $ZC1 == 183
jf @Car_0
if and
8038:  not $ZC1 == 184
8038:  not $ZC1 == 187
8038:  not $ZC1 == 188
8038:  not $ZC1 == 189
8038:  not $ZC1 == 190
8038:  not $ZC1 == 199
8038:  not $ZC1 == 201
8038:  not $ZC1 == 202
jf @Car_0
if and
8038:  not $ZC1 == 203
8038:  not $ZC1 == 214
8038:  not $ZC1 == 215
8038:  not $ZC1 == 217
8038:  not $ZC1 == 218
8038:  not $ZC1 == 223
8038:  not $ZC1 == 224
8038:  not $ZC1 == 225
jf @Car_0
if and
8038:  not $ZC1 == 227
8038:  not $ZC1 == 232
8038:  not $ZC1 == 233
8038:  not $ZC1 == 234
8038:  not $ZC1 == 235
8038:  not $ZC1 == 171
8038:  not $ZC1 == 194
8038:  not $ZC1 == 195
jf @Car_0
if and
8038:  not $ZC1 == 231
8038:  not $ZC1 == 165
8038:  not $ZC1 == 180
8038:  not $ZC1 == 181
jf @Car_0

:Car_0b
Model.Load($ZC1)
038B: load_requested_models
 
:Car_1
wait 0
if
Player.Defined(0)
jf @Car_3
if
Model.Available($ZC1)
jf @Car_0b
04C4: create_coordinate $cX $cY $cZ from_actor $PLAYER_ACTOR offset 0.0 100.0 0.0
02C1: set $cX $cY $cZ to_car_path_coords_closest_to $cX $cY $cZ
if and
8AE1: not $ZC = random_actor_near_point $cX $cY $cZ in_radius 2.0 find_next 0 pass_deads 0
8AE2: not $ZC = random_vehicle_near_point $cX $cY $cZ in_radius 80.0 find_next 0 pass_wrecked 0
8AE3: not $ZC = random_object_near_point $cX $cY $cZ in_radius 2.0 find_next 0
jf @Car_1
0209: $CARH = random_int 250 1000
0209: $CARD = random_int 0 7

:Car_2
0208: $ANGLE = random_float 0.0 360.0
00A5: $CARZ = create_car $ZC1 at $cX $cY $cZ
020A: set_car $CARZ door_status_to $CARD
Car.Angle($CARZ) = $ANGLE
Car.Health($CARZ) = $CARH
Car.RemoveReferences($CARZ)
 
:Car_3
Model.Destroy($ZC1)
jump @Car_0
Название: Re: Помощь с CLEO
Отправлено: daniel_360 от Январь 08, 2020, 02:05:10 pm
Огромное спасибо, а то не хотелось бы видеть в моде одни и те же машины
UPD: Заметил небольшие фризы и лаги, походу опять что-то с моделями творится!
Название: Re: Помощь с CLEO
Отправлено: daniel_360 от Январь 08, 2020, 06:43:28 pm
Здравствуйте, сделал небольшой код. Он делает в машинах бензин.
Нужно сделать так, чтоб если игрок вышел из машины, то сохранилось то кол-во, которое было изначально. Попытался сделать это, но работает как-то не очень. Не подскажете как исправить, и что следует добавить в код?
P.S. Код как всегда для main.scm


:Fuel
thread 'Fuel'

:Fuel_1
wait 0
if and
Player.Defined(0)
Actor.Driving($PLAYER_ACTOR)
not Actor.Dead($PLAYER_ACTOR)
jf @Fuel_3
$CF1 = Actor.CurrentCar($PLAYER_ACTOR)
0209: $CF2 = random_int_in_ranges 0 100

:Fuel_2
wait 0
if and
not Car.Wrecked($CF1)
Actor.InCar($PLAYER_ACTOR, $CF1)
jf @Fuel_3
//00BE: text_clear_all
04F7: status_text $CF2 0 line 1 'FUEL1'
wait 1000
000C: $CF2 -= 1 // integer values
if
not $CF2 >= 0
jf @Fuel_2
$CF2 = 0
02D4: car $CF1 turn_off_engine

:Fuel_3
wait 0
if or
not Actor.InCar($PLAYER_ACTOR, $CF1)
Actor.Dead($PLAYER_ACTOR)
Car.Wrecked($CF1)
jf @Fuel_2
//00BE: text_clear_all
0151: remove_status_text $CF2
Car.RemoveReferences($CF1)
jump @Fuel_1
Название: Re: Помощь с CLEO
Отправлено: Shagg_E от Январь 08, 2020, 11:38:20 pm
Нужно для каждого существующего авто выделять отдельную переменную, хранящую индивидуальное количество бензина.
Сделать это можно двумя способами:
1) Создать большой двумерный массив "хэндл-бензин", где будут перебираться и храниться бензин для всех существующих в данный момент авто.
2) Производить инжект в функции создания, обработки и удаления транспорта, и подключать уже туда дополнительные переменные, например - опять же из своего массива.

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

Остается разве что сохранять в памяти игры количество бензина последних трех-пяти авто, в которых сидел игрок. Тогда и игрок будет обманут тем, что в игре якобы сохраняется бензин для авто, в которых он "давно" не сидел - и ресурсов с трудозатратами уйдет меньше.
Иначе говоря - выделяешь 3 переменные под количество бензина, затем - 3 переменные, в которые будешь копировать хэндл авто, и когда игрок садится в транспорт - проверяешь, совпадает ли его хэндл с одним из трех записанных ранее. Если совпадает - устанавливаешь уровень бензина из соответствующей тому транспорту выделенной переменной. Если не совпадает - делаешь рандомный уровень бензина и записываешь хэндл транспорта и уровень бензина в те переменные, которые перезаписывались раньше всего(тут нужно соблюдать порядок). То же самое(перезапись значений) должно происходить при покидании игроком транспорта.
Короче - это тоже в меру трудозатратный способ и нужно хорошо понимать, что и зачем делаешь, чтобы скрипт не вызывал дальнейших конфликтов.
Название: Re: Помощь с CLEO
Отправлено: kenking от Январь 09, 2020, 08:01:30 am
В структуре транспорта есть неиспользуемые байты. Можно записывать количество бензина в них.
Для SA делали подобные моды. Почитай здесь:

https://sannybuilder.com/forums/viewtopic.php?pid=11512#p11512 (https://sannybuilder.com/forums/viewtopic.php?pid=11512#p11512)
https://sannybuilder.com/forums/viewtopic.php?pid=4482#p4482 (https://sannybuilder.com/forums/viewtopic.php?pid=4482#p4482)
Название: Re: Помощь с CLEO
Отправлено: Shagg_E от Январь 09, 2020, 12:57:37 pm
Вот только вопрос, какие байты не используются...
Название: Re: Помощь с CLEO
Отправлено: kenking от Январь 09, 2020, 02:26:11 pm
Судя по состоянию базы на данный момент, это:
0x1D1 (3b)
0x209 (3b)
0x235 (3b)
Название: Re: Помощь с CLEO
Отправлено: daniel_360 от Январь 17, 2020, 08:38:30 pm
Снова проблема, игра начала тормозить и фризить, походу опять что-то с моделями

:Car
thread 'Car'

:Car_0
if
Player.Defined(0)
jf @Car_0
0209: $ZC1 = random_int_in_ranges 130 236
if and
8038:  not $ZC1 == 136
8038:  not $ZC1 == 155
8038:  not $ZC1 == 160
8038:  not $ZC1 == 162
8038:  not $ZC1 == 176
8038:  not $ZC1 == 177
8038:  not $ZC1 == 182
8038:  not $ZC1 == 183
jf @Car_0
if and
8038:  not $ZC1 == 184
8038:  not $ZC1 == 187
8038:  not $ZC1 == 188
8038:  not $ZC1 == 189
8038:  not $ZC1 == 190
8038:  not $ZC1 == 199
8038:  not $ZC1 == 201
8038:  not $ZC1 == 202
jf @Car_0
if and
8038:  not $ZC1 == 203
8038:  not $ZC1 == 214
8038:  not $ZC1 == 215
8038:  not $ZC1 == 217
8038:  not $ZC1 == 218
8038:  not $ZC1 == 223
8038:  not $ZC1 == 224
8038:  not $ZC1 == 225
jf @Car_0
if and
8038:  not $ZC1 == 227
8038:  not $ZC1 == 232
8038:  not $ZC1 == 233
8038:  not $ZC1 == 234
8038:  not $ZC1 == 235
8038:  not $ZC1 == 171
8038:  not $ZC1 == 194
8038:  not $ZC1 == 195
jf @Car_0
if and
8038:  not $ZC1 == 231
8038:  not $ZC1 == 165
8038:  not $ZC1 == 180
8038:  not $ZC1 == 181
jf @Car_0

:Car_0b
Model.Load($ZC1)
038B: load_requested_models
 
:Car_1
wait 0
if
Player.Defined(0)
jf @Car_3
if
Model.Available($ZC1)
jf @Car_0b
04C4: create_coordinate $cX $cY $cZ from_actor $PLAYER_ACTOR offset 0.0 100.0 0.0
02C1: set $cX $cY $cZ to_car_path_coords_closest_to $cX $cY $cZ
if and
8AE1: not $ZC = random_actor_near_point $cX $cY $cZ in_radius 2.0 find_next 0 pass_deads 0
8AE2: not $ZC = random_vehicle_near_point $cX $cY $cZ in_radius 80.0 find_next 0 pass_wrecked 0
8AE3: not $ZC = random_object_near_point $cX $cY $cZ in_radius 2.0 find_next 0
jf @Car_1
0209: $CARH = random_int 250 1000
0209: $CARD = random_int 0 7
/*not $CARD == 154
not $CARD == 166
not $CARD == 178
not $CARD == 191
not $CARD == 192
not $CARD == 193
not $CARD == 198*/

:Car_2
0208: $ANGLE = random_float 0.0 360.0
00A5: $CARZ = create_car $ZC1 at $cX $cY $cZ
020A: set_car $CARZ door_status_to $CARD
Car.Angle($CARZ) = $ANGLE
Car.Health($CARZ) = $CARH
Car.RemoveReferences($CARZ)
 
:Car_3
Model.Destroy($ZC1)
jump @Car_0
Название: Re: Помощь с CLEO
Отправлено: Shagg_E от Январь 17, 2020, 09:11:48 pm
Снова проблема, игра начала тормозить и фризить, походу опять что-то с моделями
Куда-то пропал начальный
wait 0сразу после
:Car_0перед
if
В идеале туда лучше пихнуть не wait 0, а wait 5000 или даже wait 10000 - ведь все равно же не нужно, чтобы тачки спамились тоннами.
Название: Re: Помощь с CLEO
Отправлено: daniel_360 от Январь 17, 2020, 09:49:38 pm
Спасибо большое, сделал небольшую задержку
Название: Re: Помощь с CLEO
Отправлено: daniel_360 от Февраль 02, 2020, 02:38:01 pm
Здравствуйте, как убрать переходы между островами и мостами (SPLASH'ы)?
Название: Re: Помощь с CLEO
Отправлено: Shagg_E от Февраль 02, 2020, 03:08:21 pm
https://gta.com.ua/forum/index.php?showtopic=841&page=34#entry2232846