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

Оффлайн Shagg_E

  • Главный Модератор
  • Постоялец
  • *****
  • Сообщений: 683
  • Репутация: +22/-0
  • Изобретательный Рукожопъ
    • Просмотр профиля
    • NewRockstar
Re: Помощь с CLEO
« Ответ #45 : Сентябрь 12, 2017, 10:21:35 pm »
0AB1: call_scm_func @fun1 3 0@ 1@ 2@ var_ret 0не нужно писать "var_ret 0". Просто сразу пишешь получаемые параметры. А поскольку тут их нет - ничего вообще писать не нужно:
0AB1: call_scm_func @fun1 3 0@ 1@ 2@и всё.
Посмотри внимательно в том посте, ссылку на который я скинул. Там про всё это написано

Оффлайн egor230

  • Новичок
  • **
  • Сообщений: 182
  • Репутация: +7/-0
    • Просмотр профиля
    • Mr
Re: Помощь с CLEO
« Ответ #46 : Сентябрь 15, 2017, 07:37:41 am »
Спасибо за Ваш ответ уважаемый  Shagg_E
Вы мне очень помогли Вашим советом.
Решил проблему, сделав скрипт путем увеличения порядкового номера модели ход. оружия (они расположены последовательно начиная 258 и закачивая 269). Старался сделать скрипт компактным высокоуровневым кодом. Все работает! По нажатию клавиши 1 идет переключения оружия ближнего боя. Хотел, чтобы по нажатию клавиши 2 переключались пистолеты (colt45 и python), но почему-то не работает. Никак не могу понять причину! Если у Вас будет свободное время, подскажите, пожалуйста, очень Вашего ответа.
{$CLEO .cs}
0000:           
0006: 0@ = 258 // начало диапазона ход. оружия
0006: 1@ = 0 //  начало диапазона типа ход. оружия
0006: 3@ = 273 // начало диапазона пистолета
0006: 4@ = 16 //  начало диапазона типа пистолета
:1
while true
wait 0
if // (1 ветка)
0256:   player $PLAYER_CHAR defined // игрок жив
then
if // (2 ветка)     
0AB0: key_pressed 0x31 // клавиши 1 нажата
then
gosub @sab // сдвиг модели ход. оружия на 1 перед
if // (3 ветка) 
8039: not 0@ == 270 //проверка это конец диапазона ход. оружия
then
gosub @sab1 // функция загр. модели ход. оружия
else
gosub @sab2 // возврат начала диапазона ход. оружия 
if // (4 ветка)     
0AB0: key_pressed 0x32 // клавиши 1 нажата
then
gosub @sab11 // сдвиг модели пистолетов на 1 перед
if // (4 ветка) 
8039: not 3@ == 276  // проверка это конец диапазона ход. оружия
then                                                                           
gosub @sab22 // функция загр. пистолетов
else
gosub @sab33 // возврат начала диапазона пистолетов
end
end
end
end
end
end
jump @1   
:sab11
000A: 3@ += 1 
000A: 4@ += 1 
0006: 5@ = 200
return   
:sab22 // функция загр. пистолетов
0AB1: call_scm_func @fun 3 3@ 4@ 5@ var_ret 0 
wait 900 // задержка между переключениями оружия 
return
:sab33
0006: 3@ = 273
0006: 4@ = 16       
return               
:sab                                   
000A: 0@ += 1 
000A: 1@ += 1 
0006: 2@ = 0
return
:sab1 // функция загр. модели ход. оружия
0AB1: call_scm_func @fun 3 0@ 1@ 2@ var_ret 0 
wait 900 // задержка между переключениями оружия 
return
:fun
repeat
wait 0
Model.Load(0@)
until Model.Available(0@)
01B2: give_actor $PLAYER_ACTOR weapon 1@ ammo 2@
Model.Destroy(0@)
0AB2: ret 0
:sab2
0006: 0@ = 258
0006: 1@ = 0
return       
« Последнее редактирование: Сентябрь 15, 2017, 09:03:30 am от egor230 »

Оффлайн egor230

  • Новичок
  • **
  • Сообщений: 182
  • Репутация: +7/-0
    • Просмотр профиля
    • Mr
Re: Помощь с CLEO
« Ответ #47 : Сентябрь 16, 2017, 12:43:06 pm »
Здравствуйте все. Нашёл очень интересный скрипт на просторах интернета, который позволяет перезагружать другие скрипты не выходя из игры для нее перезапуска. Это позволяет редактировать скрипт что называется на "ходу". Очень экономя своё время. Конечно, этот скрипт можно улучшать, но он имеет один недостаток. Нужно написать имя каждого потока и скрипта который мы хотим перезапустить. Что не очень удобно. Можно сделать так, чтобы он автоматически находил их сам? Например, из файла cleo. Может asi плагин? Прикрепляю исходник.

{$CLEO}
0000: NOP     
thread "REBOOT"     
 
:REBOOTC     
wait 0
if and     
0ab0: key_pressed 15 //заменяем на свою
0ab0: key_pressed 16 //заменяем на свою
Player.Defined(0)     
jf @REBOOTC     
0ABA: end_custom_thread_named 'rbt'
while true
wait 50
if and
0ab0: key_pressed 15 //заменяем на свою
0ab0: key_pressed 16 //заменяем на свою
then break
end
end     
0A92: create_custom_thread "rebootc.cs"  //тут указываем название скрипта перезагрузки .” у меня это rebootc
wait 1000
thread 'rbt'     
0ABA: end_custom_thread_named 'ffaa' //название перезагружаемого потока
wait 50     
0A92: create_custom_thread "asdf.cs" //название перезагружаемого скрипта, с вышеуказанным потоком
0acd: show_text_high_priority "Script was reloaded" time 1000     
wait 1000     
jump @REBOOTC
[code=php]
« Последнее редактирование: Сентябрь 16, 2017, 12:46:30 pm от egor230 »

Оффлайн Shagg_E

  • Главный Модератор
  • Постоялец
  • *****
  • Сообщений: 683
  • Репутация: +22/-0
  • Изобретательный Рукожопъ
    • Просмотр профиля
    • NewRockstar
Re: Помощь с CLEO
« Ответ #48 : Сентябрь 17, 2017, 01:46:30 am »
Цитировать
Хотел, чтобы по нажатию клавиши 2 переключались пистолеты (colt45 и python), но почему-то не работает.
Достаточно использовать табуляцию(сдвиг строк на 4 пробела при нажатии клавижи TAB), чтобы увидеть, что проверка второй клавиши находится где-то не там:
:1
while true
    wait 0
    if // (1 ветка)
        0256:   player $PLAYER_CHAR defined // игрок жив
    then
        if // (2 ветка)     
            0AB0: key_pressed 0x31 // клавиши 1 нажата
        then
            gosub @sab // сдвиг модели ход. оружия на 1 перед
            if // (3 ветка)
                8039: not 0@ == 270 //проверка это конец диапазона ход. оружия
            then
                gosub @sab1 // функция загр. модели ход. оружия
            else
                gosub @sab2 // возврат начала диапазона ход. оружия
                if // (4 ветка)     
                    0AB0: key_pressed 0x32 // клавиши 1 нажата
                then
                    gosub @sab11 // сдвиг модели пистолетов на 1 перед
                    if // (4 ветка)
                        8039: not 3@ == 276  // проверка это конец диапазона ход. оружия
                    then                                                                           
                        gosub @sab22 // функция загр. пистолетов
                    else
                        gosub @sab33 // возврат начала диапазона пистолетов
                    end
                end
            end
        end
    end
end
jump @1


Цитировать
Нужно написать имя каждого потока и скрипта который мы хотим перезапустить. Что не очень удобно. Можно сделать так, чтобы он автоматически находил их сам? Например, из файла cleo.
А как игра узнает, какой именно скрипт нужно перезагрузить? Тогда уж перезагружать сразу все. Но ведь многие скрипты по-просто не расчитаны на перезагрузку. Да и к тому же: представленный код перезагрузки вполне удобно юзать, когда работаешь над каким-нибудь одним скриптом. Ты же не работаешь над несколькими одновременно, поэтому не вижу проблемы 1 раз изменить код перезагрузки, заменив название перезагружаемого скрипта, чтобы потом спокойно тестировать и работать над своим скриптом...

Оффлайн egor230

  • Новичок
  • **
  • Сообщений: 182
  • Репутация: +7/-0
    • Просмотр профиля
    • Mr
Re: Помощь с CLEO
« Ответ #49 : Сентябрь 17, 2017, 05:50:53 pm »
Спасибо большое ответ, уважаемый Shagg_E. Вы очень мудрый человек, учусь от Вас))))))))
Благодарю Вас за совет по табуляции, люблю когда код скрипта идет ровно.
Исправил, переключается все оружия, 1 ход оружия 2 пистолеты 3 дробовики.
Вместо wait использовать таймер, иначе оружия не загружалось, Томми стрелять пустыми руками)))
Нагрузка большая для движка 2002 года.
Скрипт перезагрузки скрипта можно улучшить, создав ini файл.
Cleo имеет сильные ограничения, писать на нем мисси ад!
Можно ли как- улучшить Sanny Builder 3? Например, сразу выдался определенный шаблон, как {$CLEO .cs}, 0000, 1:, jump @.
Там есть интересный пункт добавить. Только сменил тему, сделав похожим на редактор atom.
Очень хочу освоить lua vice, жаль нету уроков, хотя бы один скрипт написать.
Этот скрипт, только гранаты не меняет, буду проверять на отдельном скрипте.

{$CLEO .cs}
0000:           
0006: 0@ = 258 // начало диапазона ход. оружия
0006: 1@ = 0 //  начало диапазона типа ход. оружия
0006: 3@ = 273 // начало диапазона пистолета
0006: 4@ = 16 //  начало диапазона типа пистолетов
0006: 5@ = 275 // начало диапазона дробовиков
0006: 6@ = 18 //  начало диапазона типа дробовика
0006: 7@ = 280 // начало диапазона автоматов
0006: 8@ = 21 //  начало диапазона типа автоматов
0006: 9@ = 286 // начало диапазона тяжелого оружия
0006: 10@ = 29 //  начало диапазона типа тяжелого оружия 
0006: 11@ = 269 // начало диапазона гранат
0006: 12@ = 11 //  начало диапазона типа гранат
:1                                   
while true
wait 0
if // (1 ветка)
0256:   player $PLAYER_CHAR defined // игрок жив             
then     
if // (2 ветка)     
0AB0: key_pressed 0x31 // клавиши 1 нажата
jf @2
gosub @sab // сдвиг модели ход. оружия на 1 перед
if // (3 ветка) 
0039:  0@ == 270 //проверка это конец диапазона ход. оружия
then
gosub @sab1 // возврат начала диапазона ход. оружия   
else
gosub @sab2 // функция загр. модели ход. оружия
jump @1     
:2
if // (5 ветка)     
0AB0: key_pressed 0x32 // клавиши 2 нажата
jf @3                                           
gosub @sab11 // сдвиг модели пистолетов на 1 перед
if // (6 ветка) 
0039:  3@ == 276  // проверка это конец диапазона пистолетов
then                                                                           
gosub @sab22 // возврат начала диапазона пистолетов
else
gosub @sab33 // функция загр. пистолетов
jump @1     
:3
if // (7 ветка)     
0AB0: key_pressed 0x33 // клавиши 3 нажата
jf @4                                           
gosub @sab1d // сдвиг модели дробовиков на 1 перед
if // (8 ветка) 
0039: 5@ == 279  // проверка это конец диапазона дробовиков
then                                                                           
gosub @sab2d // возврат начала диапазона дробовиков
else
gosub @sab3d // функция загр. дробовиков
jump @1 
:4
if // (9 ветка)     
0AB0: key_pressed 0x34 // клавиши 4 нажата
jf @5                                           
gosub @sab1a // сдвиг модели автоматов на 1 перед
if // (10 ветка) 
0039: 7@ == 285  // проверка это конец диапазона автоматов
then                                                                           
gosub @sab2a // возврат начала диапазона автоматов
else
gosub @sab3a // функция загр. автоматов
jump @1
:5
if // (11 ветка)     
0AB0: key_pressed 0x35 // клавиши 5 нажата
jf @6       
if
0039: 1@ == 27
then                                                         
gosub @sabm4 // функция загр. m4   
else
gosub @sabkr  // функция загр. крюгер m4
jump @1   
:6
if // (12 ветка)     
0AB0: key_pressed 0x36 // клавиши 6 нажата
jf @7
if
0039: 1@ == 29
then                                                         
gosub @sabls // лазерная загр. винтовки 
else
gosub @sabsp // обычной загр. винтовки
jump @1
:7
if // (13 ветка)     
0AB0: key_pressed 0x37 // клавиши 7 нажата
jf @8                                               
gosub @sabhard // сдвиг модели тяжелого оружия на 1 вперед
if // (4 ветка) 
0039: 9@ == 291  // проверка это конец диапазона тяжелого оружия
then                                                                           
gosub @sabhard1 // возврат начала диапазона тяжелого оружия 
else
gosub @sabhard2 // функция загр. тяжелого оружия
jump @1
:8
if // (4 ветка)     
0AB0: key_pressed 0x38 // клавиши 8 нажата
jf @1                                     
gosub @grena // сдвиг модели гранат на 1 вперед
if // (4 ветка) 
0039: 11@ == 273  // проверка это конец диапазона гранат
then                                                                           
gosub @grena1 // возврат начала диапазона гранат 
else
gosub @grena2 // функция загр. гранат
end
end
end
end
end
end
end
end
end
end
jump @1
:sabsp // функция загр. пистолетов
0006: 0@ = 285
0006: 1@ = 28 
0006: 2@ = 200
0AB1: call_scm_func @fun 3 0@ 1@ 2@
gosub @delay // задержка между переключениями оружия 
return
:sabls // функция загр. пистолетов
0006: 0@ = 286
0006: 1@ = 29 
0006: 2@ = 200
0AB1: call_scm_func @fun 3 0@ 1@ 2@
gosub @delay // задержка между переключениями оружия
return
:sabm4 // функция загр. mp4
0006: 0@ = 280
0006: 1@ = 26 
0006: 2@ = 200
0AB1: call_scm_func @fun 3 0@ 1@ 2@
gosub @delay // задержка между переключениями оружия
0006: 1@ = 26
return
:grena
000A: 11@ += 1 
000A: 12@ += 1 
0006: 2@ = 200
return   
:grena1
0006: 11@ = 269
0006: 12@ = 11       
return       
:grena2 // функция загр. пистолетов 
0AB1: call_scm_func @fun 3 11@ 12@ 2@
gosub @delay // задержка между переключениями оружия 
return 
:sab1
0006: 0@ = 258
0006: 1@ = 0
return             
:sab                                   
000A: 0@ += 1 
000A: 1@ += 1 
0006: 2@ = 0
return     
:sab2 // функция загр. модели ход. оружия
0AB1: call_scm_func @fun 3 0@ 1@ 2@
gosub @delay // задержка между переключениями оружия
return
:sab11 // сдвиг модели пистолетов на 1 перед
000A: 3@ += 1 
000A: 4@ += 1 
0006: 2@ = 200
return   
:sab22  // возврат начала диапазона пистолетов
0006: 3@ = 273
0006: 4@ = 16       
return       
:sab33 // функция загр. пистолетов 
0AB1: call_scm_func @fun 3 3@ 4@ 2@
gosub @delay // задержка между переключениями оружия
return   
:sab1d // возврат начала диапазона дробовиков
000A: 5@ += 1 
000A: 6@ += 1 
0006: 2@ = 200
return   
:sab2d // возврат начала диапазона дробовиков
0006: 5@ = 275
0006: 6@ = 18       
return       
:sab3d // функция загр. дробовиков 
0AB1: call_scm_func @fun 3 5@ 6@ 2@
gosub @delay // задержка между переключениями оружия
return   
:sabm // функция загр. пистолетов 
0AB1: call_scm_func @fun 3 7@ 8@ 2@
gosub @delay // задержка между переключениями оружия
return                       
:sab1a
000A: 7@ += 1 
000A: 8@ += 1 
0006: 2@ = 200
return
:sab2a
0006: 7@ = 280
0006: 8@ = 21       
return       
:sab3a // функция загр. автоматов 
0AB1: call_scm_func @fun 3 7@ 8@ 2@
gosub @delay // задержка между переключениями оружия
return       
:sabhard
000A: 9@ += 1 
000A: 10@ += 1 
0006: 2@ = 200
return   
:sabhard1
0006: 9@ = 286
0006: 10@ = 29       
return       
:sabhard2 // функция загр. пистолетов 
0AB1: call_scm_func @fun 3 9@ 10@ 2@
gosub @delay // задержка между переключениями оружия
return   
:sabkr // функция загр. крюгер
0006: 0@ = 276
0006: 1@ = 27 
0006: 2@ = 200
0AB1: call_scm_func @fun 3 0@ 1@ 2@
gosub @delay // задержка между переключениями оружия 
0006: 1@ = 27
return
:fun
repeat
wait 0
Model.Load(0@)
until Model.Available(0@)
038B: load_requested_models
gosub @delay
01B2: give_actor $PLAYER_ACTOR weapon 1@ ammo 2@
Model.Destroy(0@)
0AB2: ret 0
:delay
16@ = 0
repeat
wait 0                 
until 0029: 16@ >= 300 // задержка между переключениями оружия
return
[code=html5]

Оффлайн egor230

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

Оффлайн Shagg_E

  • Главный Модератор
  • Постоялец
  • *****
  • Сообщений: 683
  • Репутация: +22/-0
  • Изобретательный Рукожопъ
    • Просмотр профиля
    • NewRockstar
Re: Помощь с CLEO
« Ответ #51 : Сентябрь 26, 2017, 02:24:41 pm »
Глянул мельком... зачем ты создаешь актера 2 раза?
Тут:
Код: Text
  1. 009A: 13@ = create_actor_pedtype 15@ model 0@ at 0.0 0.0 0.0
и тут:
Код: Text
  1. 0129: 13@ = create_actor 15@ 0@ in_car 12@ driverseat
Затем еще удаляешь несуществующего актера:
Код: Text
  1. Actor.RemoveReferences(14@)

Насчет типа педа: попробуй поменять на civmale(номер 4).
Если после всех этих манипуляций вылеты не прекратятся - будем думать дальше...

Оффлайн mfisto

  • Скриптер
  • Главный Модератор
  • Новичок
  • *****
  • Сообщений: 176
  • Репутация: +19/-0
  • Не пью, не курю, за компьютером сижу...
    • mfistof
    • Просмотр профиля
    • Empire of CJ
Re: Помощь с CLEO
« Ответ #52 : Сентябрь 26, 2017, 06:34:05 pm »
Зачем в цикле использовать постояное выделение памяти?
0AC8: 14@ = allocate_memory_size 260
I know everything and nothing...

Оффлайн egor230

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

Оффлайн egor230

  • Новичок
  • **
  • Сообщений: 182
  • Репутация: +7/-0
    • Просмотр профиля
    • Mr
Re: Помощь с CLEO
« Ответ #54 : Октябрь 02, 2017, 02:10:35 pm »
Здравствуйте, всем.
Уважаемые очень умные люди, ценители классики.
Подскажите мне, пожалуйста.
Пытаюсь написать cleo миссии  для vc, она никак не запускается.
Голову можно сломать.
Помогите, пожалуйста. Буду очень Вам признателен.
Код: HTML5
  1. {$CLEO}
  2. 0000:  
  3. :STARTER
  4. thread 'STARTER'
  5. wait 0      
  6. if
  7. 0256: player $PLAYER_CHAR defined
  8. jf @STARTER
  9. if
  10. $ONMISSION == 0
  11. jf @STARTER
  12. 02A7: 0@ = create_icon_marker_and_sphere 34 at  77.3075 -879.1083 10.4481
  13. :STARTER_1
  14. wait 0
  15. if
  16. $ONMISSION == 1
  17. then
  18. marker.Disable(0@)
  19. jump @STARTER
  20. end
  21. if
  22. not actor.Driving($PLAYER_ACTOR)
  23. then
  24.  if
  25.  0102: actor $PLAYER_ACTOR in_sphere  77.3075 -879.1083 10.4481 radius 2.0 2.0 2.0 sphere 0 stopped_on_foot
  26.  then
  27.  jump @STARTER_2
  28.  end
  29. end
  30. jump @STARTER_1  
  31. :STARTER_2
  32. Marker.Disable(0@)  
  33. 00BE: text_clear_all
  34. 03E6: remove_text_box
  35. 00BA: show_text_styled GXT 'MISS_01' time 1000 style 2
  36. 0A94: start_custom_mission "MISSION"
  37. jump @STARTER

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

Оффлайн Shagg_E

  • Главный Модератор
  • Постоялец
  • *****
  • Сообщений: 683
  • Репутация: +22/-0
  • Изобретательный Рукожопъ
    • Просмотр профиля
    • NewRockstar
Re: Помощь с CLEO
« Ответ #55 : Октябрь 02, 2017, 03:34:14 pm »
Так нельзя делать. Поскольку CLEO для Вайса не поддерживает CLEO-миссии - нужно писать миссию и её стартер в виде одного скрипта.
Также повторю то, что писал когда-то в начале темы: нельзя создавать маркеры в cleo-скриптах таким путем, поскольку это портит сохранения.

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

Также добавил еще один пример миссии(Mission.txt), который активируется с чит-кода "MISSIONSTART". Этот пример уже не мой, но написан по тому же принципу.

Оффлайн egor230

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

Оффлайн Shagg_E

  • Главный Модератор
  • Постоялец
  • *****
  • Сообщений: 683
  • Репутация: +22/-0
  • Изобретательный Рукожопъ
    • Просмотр профиля
    • NewRockstar
Re: Помощь с CLEO
« Ответ #57 : Октябрь 03, 2017, 02:21:44 pm »
Цитировать
к сожалению, он не компилируется.


Странно: у меня и другого чела(автора второй миссии) всё компилируется отлично.
Поставь последний Sanny Builder v3.2.2, а затем поставь актуальные VCSCM.INI и opcodes.txt для SannyBuilder(кинь эти файлы в Sanny Builder 3\data\vc\)
« Последнее редактирование: Октябрь 03, 2017, 02:23:52 pm от Shagg_E »

Оффлайн egor230

  • Новичок
  • **
  • Сообщений: 182
  • Репутация: +7/-0
    • Просмотр профиля
    • Mr
Re: Помощь с CLEO
« Ответ #58 : Октябрь 03, 2017, 04:18:51 pm »
Уважаемый  Shagg_E, рад Вашему ответ.
Несмотря на Вашу занятность, Вы помогайте, отвечая на банальные вопросы.
Все сделал как Вы сказали, все же выдает ошибку при компиляция
Привожу скрин ошибки, может быть у меня что-то не так.
http://pixs.ru/showimage/netJPG_9279626_27746496.jpg

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

Оффлайн Shagg_E

  • Главный Модератор
  • Постоялец
  • *****
  • Сообщений: 683
  • Репутация: +22/-0
  • Изобретательный Рукожопъ
    • Просмотр профиля
    • NewRockstar
Re: Помощь с CLEO
« Ответ #59 : Октябрь 03, 2017, 08:37:21 pm »
Цитировать
Все сделал как Вы сказали, все же выдает ошибку при компиляция
Очень странно - кейворды(а именно их отсутствие и вызвало эту ошибку, судя по скрину) должны устанавливаться вместе с Sanny Builder.
Попробуй поставить мои(в аттаче) - кидать также в Sanny Builder 3\data\vc\.

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

И последняя строчка
Код: Text
  1. 0ABA: end_custom_thread_named 'U'
- лишняя(во-первых, выше уже есть jump, а во-вторых - поток не может закрыть сам себя таким способом!)