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

Оффлайн mfisto

  • Скриптер
  • Главный Модератор
  • Новичок
  • *****
  • Сообщений: 176
  • Репутация: +19/-0
  • Не пью, не курю, за компьютером сижу...
    • mfistof
    • Просмотр профиля
    • Empire of CJ
Re: Помощь с CLEO
« Ответ #60 : Октябрь 04, 2017, 11:47:18 am »
Здесь не верно:
actor.Driving($player_char)Должно быть:
actor.Driving($player_actor)
I know everything and nothing...

Оффлайн egor230

  • Новичок
  • **
  • Сообщений: 183
  • Репутация: +7/-0
    • Просмотр профиля
    • Mr
Re: Помощь с CLEO
« Ответ #61 : Октябрь 05, 2017, 12:00:41 pm »
Спасибо Вам огромное уважаемый Shagg_E с Вашими кейвордами все заработало.
Благодаря Вашему мудрому совету машины меняют свой цвет без проблем.
Ценное замечание насчет поток. Признаюсь искреннее, не совсем понимают, зачем нужен поток в скрипте?
mfisto, спасибо большое за ценное замечание.
В cleo для vc, сейчас мне интересно поработать с памятью, она расширяет возможности.

Оффлайн egor230

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

Оффлайн egor230

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

« Последнее редактирование: Октябрь 09, 2017, 12:53:36 pm от egor230 »

Оффлайн Shagg_E

  • Администратор
  • Постоялец
  • *****
  • Сообщений: 705
  • Репутация: +24/-4
  • Изобретательный Рукожопъ
    • Просмотр профиля
    • NewRockstar
Re: Помощь с CLEO
« Ответ #64 : Октябрь 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)
- все три способа абсолютно легитимны. Просто юзай тот, который тебе кажется наиболее удобным. При компиляции будет один результат.
« Последнее редактирование: Октябрь 09, 2017, 02:32:41 pm от Shagg_E »

Оффлайн egor230

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

Оффлайн kenking

  • Новичок
  • **
  • Сообщений: 237
  • Репутация: +16/-0
    • Просмотр профиля
Re: Помощь с CLEO
« Ответ #66 : Октябрь 10, 2017, 04:42:41 pm »
... ставим $ONMISSION == 1,  миссия активировалась- создаем маркер, делаем проверки стоим на маркере, удаляем его и так далее.
Странно флаг  $ONMISSION == 1 в скрипте не отключает возможность прохождения других миссии, хотя по идеи должен.
...
Ты же не установил флаг, а опять его проверяешь. Двойное равенство - это проверка равна ли левая часть выражения правому? Надо
$ONMISSION = 1
После прохождения миссии опять вернуть в прежнее состояние
$ONMISSION = 0

Оффлайн egor230

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

Оффлайн Shagg_E

  • Администратор
  • Постоялец
  • *****
  • Сообщений: 705
  • Репутация: +24/-4
  • Изобретательный Рукожопъ
    • Просмотр профиля
    • NewRockstar
Re: Помощь с CLEO
« Ответ #68 : Октябрь 18, 2017, 02:25:34 pm »
Пробуй ставить задержки в несколько секунд по очереди с начала скрипта до его конца и тестируй. Т.е. сначала после первого опкода и тестируй, потом после второго и т.д. Я так часто ищу участки скриптов, вызывающие ошибку.

Оффлайн egor230

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


Оффлайн Shagg_E

  • Администратор
  • Постоялец
  • *****
  • Сообщений: 705
  • Репутация: +24/-4
  • Изобретательный Рукожопъ
    • Просмотр профиля
    • NewRockstar
Re: Помощь с CLEO
« Ответ #70 : Октябрь 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 я не знаю совершенно...
« Последнее редактирование: Октябрь 19, 2017, 10:11:02 pm от Shagg_E »

Оффлайн egor230

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

Оффлайн Shagg_E

  • Администратор
  • Постоялец
  • *****
  • Сообщений: 705
  • Репутация: +24/-4
  • Изобретательный Рукожопъ
    • Просмотр профиля
    • NewRockstar
Re: Помощь с CLEO
« Ответ #72 : Октябрь 23, 2017, 01:05:04 pm »
Цитировать
Раньше придерживался девиз "Главное, чтоб работало", сейчас с опытом, хочется переписать все скрипты, начиная с первого, теперь вижу все свои недочеты и серьезные огрехи, которые тогда не замечал.
Твой прогресс меня радует - немногие так быстро углубляются в скриптинг, да еще и прислушиваются к советам. Если продолжишь в том же темпе - скоро я тебе уже буду бесполезен ;)
Повторюсь - я практически во всех аспектах моддинга Вайса нахожусь примерно на среднем уровне, моё отличие от многих других лишь в том, что я в своё время наделал миллиарды ошибок и порой годами доходил до решения той или иной проблемы, зачастую не додумываясь(или просто упираясь) банально спросить совета более опытного человека. А бывало, что и спросить было не у кого...
Именно по этой причине я сейчас стараюсь помогать людям, у которых вижу желание изучать что-то новое: просто не хочу, чтобы они тратили на решения отдельных проблем столько же времени, сколько когда-то угробил на это я. А не потому что я супер-мега эксперт.
Уже сталкивался несколько раз, когда некоторые модмейкеры, которым я когда-то помогал осваивать новые трюки в какой-либо области моддинга, публикуют что-то в этой самой области, до чего я бы и не додумался. Что-то, что вдохновляет других, включая и меня самого.
Поэтому я надеюсь, что когда-нибудь и ты будешь также помогать другим.

Оффлайн egor230

  • Новичок
  • **
  • Сообщений: 183
  • Репутация: +7/-0
    • Просмотр профиля
    • Mr
Re: Помощь с CLEO
« Ответ #73 : Октябрь 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/
Есть вопрос в чем отличия между этими опкодами 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.  
« Последнее редактирование: Октябрь 24, 2017, 09:22:07 am от egor230 »

Оффлайн Shagg_E

  • Администратор
  • Постоялец
  • *****
  • Сообщений: 705
  • Репутация: +24/-4
  • Изобретательный Рукожопъ
    • Просмотр профиля
    • NewRockstar
Re: Помощь с CLEO
« Ответ #74 : Октябрь 27, 2017, 03:43:10 pm »
По lua скриптам - есть спец. раздел.

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

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

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

Цитировать
Написал скрипт
А теперь скомпилируй и декомпилируй его. И увидишь, что в конце скрипт "обрублен", что вызовет краш игры, если игрок не существует.
Всегда проверяй декомпиляцией, чтобы отсечь такие элементарные ошибки.
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
« Последнее редактирование: Октябрь 27, 2017, 04:49:36 pm от Shagg_E »