Автор Тема: Помощь с CLEO  (Прочитано 47574 раз)

Оффлайн egor230

  • Новичок
  • **
  • Сообщений: 183
  • Репутация: +7/-0
    • Просмотр профиля
    • Mr
Re: Помощь с CLEO
« Ответ #75 : Октябрь 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 поэтому их закомментировал. 
 
Код: 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.  

Оффлайн Shagg_E

  • Администратор
  • Постоялец
  • *****
  • Сообщений: 705
  • Репутация: +24/-4
  • Изобретательный Рукожопъ
    • Просмотр профиля
    • NewRockstar
Re: Помощь с CLEO
« Ответ #76 : Ноябрь 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
, который "подчищает" некоторые действия, созданные другими опкодами(так же, как в миссиях). Подробнее тут.

Код: 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.
Могу только посредством беглого анализа сказать, что в записи
Код: Text
  1. 004E: end_thread // Завершение потока  
  2. jump @MISSION_1 // Чтобы можно пройти заново    
  3. return
последние 2 строчки не выполняются, поскольку первая строчка завершает весь скрипт. Также в CLEO-скриптах вместо опкода 004E юзается 0A93(о котором я написал в начале этого сообщения).
Даже если ты удалишь первую строчку, то опять же - последняя никогда не выполнится, поскольку jump - это безоговорочный "прыжок", без выполнения кода, написанного ниже.
Т.е., чтобы выполнился return - тебе нужно удалить 2 верхние строчки.
« Последнее редактирование: Ноябрь 11, 2017, 01:55:27 am от Shagg_E »

Оффлайн egor230

  • Новичок
  • **
  • Сообщений: 183
  • Репутация: +7/-0
    • Просмотр профиля
    • Mr
Re: Помощь с CLEO
« Ответ #77 : Ноябрь 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.  

Оффлайн egor230

  • Новичок
  • **
  • Сообщений: 183
  • Репутация: +7/-0
    • Просмотр профиля
    • Mr
Re: Помощь с CLEO
« Ответ #78 : Декабрь 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? Нужно высчитывать много.

Оффлайн mfisto

  • Скриптер
  • Главный Модератор
  • Новичок
  • *****
  • Сообщений: 176
  • Репутация: +19/-0
  • Не пью, не курю, за компьютером сижу...
    • mfistof
    • Просмотр профиля
    • Empire of CJ
Re: Помощь с CLEO
« Ответ #79 : Декабрь 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
I know everything and nothing...

Оффлайн egor230

  • Новичок
  • **
  • Сообщений: 183
  • Репутация: +7/-0
    • Просмотр профиля
    • Mr
Re: Помощь с CLEO
« Ответ #80 : Декабрь 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.  


Оффлайн mfisto

  • Скриптер
  • Главный Модератор
  • Новичок
  • *****
  • Сообщений: 176
  • Репутация: +19/-0
  • Не пью, не курю, за компьютером сижу...
    • mfistof
    • Просмотр профиля
    • Empire of CJ
Re: Помощь с CLEO
« Ответ #81 : Декабрь 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"
I know everything and nothing...

Оффлайн egor230

  • Новичок
  • **
  • Сообщений: 183
  • Репутация: +7/-0
    • Просмотр профиля
    • Mr
Re: Помощь с CLEO
« Ответ #82 : Декабрь 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.  

Оффлайн egor230

  • Новичок
  • **
  • Сообщений: 183
  • Репутация: +7/-0
    • Просмотр профиля
    • Mr
Re: Помощь с CLEO
« Ответ #83 : Декабрь 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

Оффлайн egor230

  • Новичок
  • **
  • Сообщений: 183
  • Репутация: +7/-0
    • Просмотр профиля
    • Mr
Re: Помощь с CLEO
« Ответ #84 : Февраль 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.  

Оффлайн egor230

  • Новичок
  • **
  • Сообщений: 183
  • Репутация: +7/-0
    • Просмотр профиля
    • Mr
Re: Помощь с CLEO
« Ответ #85 : Февраль 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.  

Оффлайн egor230

  • Новичок
  • **
  • Сообщений: 183
  • Репутация: +7/-0
    • Просмотр профиля
    • Mr
Re: Помощь с CLEO
« Ответ #86 : Февраль 08, 2018, 10:20:45 pm »
Здравствуйте, уважаемый Constantine.
Нужно сначала посмотреть код Вашего скрипта.

Оффлайн egor230

  • Новичок
  • **
  • Сообщений: 183
  • Репутация: +7/-0
    • Просмотр профиля
    • Mr
Re: Помощь с CLEO
« Ответ #87 : Февраль 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.  

Оффлайн Shagg_E

  • Администратор
  • Постоялец
  • *****
  • Сообщений: 705
  • Репутация: +24/-4
  • Изобретательный Рукожопъ
    • Просмотр профиля
    • NewRockstar
Re: Помощь с CLEO
« Ответ #88 : Февраль 09, 2018, 06:55:50 pm »
egor230
Опкод 035C нужно применять в цикле(каждые 0 ms).

Constantine
Также замечу, что это подфорум по Вайсу. По СА здесь.
« Последнее редактирование: Февраль 09, 2018, 06:59:44 pm от Shagg_E »

Оффлайн egor230

  • Новичок
  • **
  • Сообщений: 183
  • Репутация: +7/-0
    • Просмотр профиля
    • Mr
Re: Помощь с CLEO
« Ответ #89 : Февраль 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 - Карта