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

Оффлайн Tommi4kaVar4etti

  • Прохожий
  • *
  • Сообщений: 55
  • Репутация: +0/-0
    • Просмотр профиля
Помощь с CLEO
« : Февраль 21, 2016, 05:45:14 pm »
Я делаю мод стрельбы с пассажирского сидения для gta3 и vice city и мне нужно изменить Assembler code через CLEO.
Адрес и Assembler code выглядят так:
gta-vc.exe+1005CE mov [ebx+00000244],00000032
gta-vce.exe+10C6D6 mov [ebx+00000244],00000032

и нужно это заменить на:
gta-vc.exe+1005CE mov [ebx+00000244],00000001
gta-vce.exe+10C6D6 mov [ebx+00000244],00000001

Оффлайн Sektor

  • Администратор
  • Постоялец
  • *****
  • Сообщений: 512
  • Репутация: +33/-0
    • Просмотр профиля
Re: Помощь с CLEO
« Ответ #1 : Февраль 21, 2016, 06:40:25 pm »
Скиньте точные адреса памяти, в которые вы хотели бы сделать запись. Лучше все скопировать даже с IDA и сюда запостить.

Оффлайн mfisto

  • Скриптер
  • Главный Модератор
  • Новичек
  • *****
  • Сообщений: 174
  • Репутация: +19/-0
  • Не пью, не курю, за компьютером сижу...
    • mfistof
    • Просмотр профиля
    • Empire of CJ
Re: Помощь с CLEO
« Ответ #2 : Февраль 21, 2016, 10:04:26 pm »
Тебе просто надо записать следующее:

0A8C: write_memory 0x005005D4 size 1 value 1 virtual_protect 1
0A8C: write_memory 0x0050C6DC size 1 value 1 virtual_protect 1
I know everything and nothing...

Оффлайн Tommi4kaVar4etti

  • Прохожий
  • *
  • Сообщений: 55
  • Репутация: +0/-0
    • Просмотр профиля
Re: Помощь с CLEO
« Ответ #3 : Февраль 22, 2016, 09:58:40 am »
Тебе просто надо записать следующее:

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

Спасибо! Очень помогли!

Оффлайн egor230

  • Прохожий
  • *
  • Сообщений: 90
  • Репутация: +1/-0
    • Просмотр профиля
    • Mr
Re: Помощь с CLEO
« Ответ #4 : Июль 02, 2017, 08:34:43 pm »
Здравствуйте, уважаемые господа.
Читая Ваш форум, сильно поражен глубиной Ваших знаний!
Подскажите, пожалуйста, где ошибиться в этом скрипте?
Первый скрипт лифт в небоскрёбе.

{$CLEO .cs}

//-------------MAIN---------------
0000: NOP
:elevator_1
wait 0
if and
0102:   actor $PLAYER_ACTOR stopped_near_point_on_foot -559.85 782.59 22.88 radius 1.0 1.0 1.0 sphere
005EE:   key_pressed 70
jf @elevator_2
wait 100
fade 1 1000
wait 1000
0055: put_player $PLAYER_CHAR at  -555.26 787.57 97.51     
jump @elevator_2
               
:elevator_2
wait 0
if and
0102:   actor $PLAYER_ACTOR stopped_near_point_on_foot -555.26 787.57 97.51  radius 1.0 1.0 1.0 sphere
005EE:   key_pressed 70
jf @elevator_1
wait 100
fade 1 1000
wait 1000
0055: put_player $PLAYER_CHAR at -559.85 782.59 22.88         
jump @elevator_1

Оффлайн GeniusZ

  • Призрак
  • Сообщений: 29
  • Репутация: +0/-0
    • Просмотр профиля
Re: Помощь с CLEO
« Ответ #5 : Июль 03, 2017, 07:18:30 am »
Вы неправильно затемняете экран и не ставите задержки, чтобы игрока не телепортировало бесконечно:

...
fade 0 1000
wait 1000
0055: put_player $PLAYER_CHAR at  -555.26 787.57 97.51   
fade 1 1000
wait 1000
...
fade 0 1000
wait 1000
0055: put_player $PLAYER_CHAR at -559.85 782.59 22.88       
fade 1 1000
wait 1000
...
« Последнее редактирование: Июль 03, 2017, 12:26:29 pm от GeniusZ »

Оффлайн egor230

  • Прохожий
  • *
  • Сообщений: 90
  • Репутация: +1/-0
    • Просмотр профиля
    • Mr
Re: Помощь с CLEO
« Ответ #6 : Июль 03, 2017, 09:57:33 am »
 
Спасибо большое за Вашу ценную подсказку, признаю свою неопытность, первый раз пишу скрипт. Нужно еще долго учиться и набираться опыта.
В миссии "Прожектор" от киностудия, открывались двери лифта, мы попадали на другой этаж небоскреба… потом туда "обычный" путём весьма сложно попасть. 
К сожалению не знаю каким опкодом открыть двери лифта и как это сделать через скрипт.
В данный момент только начинаю изучать CLEO, чтобы делать скрипты для vice city, мне она очень нравится своей атмосферой.
Сейчас попробую, потом обязательно опишусь об результатах.

Оффлайн egor230

  • Прохожий
  • *
  • Сообщений: 90
  • Репутация: +1/-0
    • Просмотр профиля
    • Mr
Re: Помощь с CLEO
« Ответ #7 : Июль 09, 2017, 09:27:56 am »
Здравствуйте, всем.
Очень надеюсь на Ваш совет.
Пытаюсь сделать первый скрипт.
Чтобы игрок находясь в лифте банка и при нажатие F, перемещайся в хранилище.
Вылетает при нажатии F.
Помогайте пожалуйста.
{$CLEO .cs}

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

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

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

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

{$CLEO}
wait 0
while true
    wait 0
    if
      0256:   player $PLAYER_CHAR defined
      then
        continue
     end
    if
     0102:  actor $PLAYER_CHAR stopped_near_point_on_foot -938.11 -351.20 17.80 radius 1.0 1.0 1.0 sphere 0
    then
        continue
    end
    if
        05EE:   key_pressed 70 //VK_...
    then
         0055: put_player $PLAYER_CHAR at -938.91 -351.93 7.23
     end
     end
   
« Последнее редактирование: Июль 09, 2017, 10:11:53 am от egor230 »

Онлайн Shagg_E

  • Главный Модератор
  • Постоялец
  • *****
  • Сообщений: 509
  • Репутация: +14/-0
  • Изобретательный Рукожопъ
    • Просмотр профиля
    • NewRockstar
Re: Помощь с CLEO
« Ответ #8 : Июль 09, 2017, 11:06:37 am »
Вылетает при нажатии F.
Помогайте пожалуйста.
Дело в том, что команда
Код: Text
  1. fade 0 1000
затемняет экран в течении 1000ms(т.е. 1 секунда)
а команда
Код: Text
  1. fade 1 1000
- убирает затемнение в течении 1000ms. Игра так сделана, что вы не можете убирать затемнение, пока экран полностью не затемнится.
Что происходит в вашем коде:
Код: Text
  1. fade 0 1000 // затемняется экран в течении 1000ms(1 секунда)
  2. wait 100 // проходит 100 ms(т.е. 0.1 секунды)
  3. 0055: put_player $PLAYER_CHAR at -938.91 -351.93 7.23 // телепорт игрока(т.е. экран еще не успеет затемниться, а вы уже телепортируете игрока)
  4. fade 1 1000 // прошло всего 0.1 секунды, а вы уже убираете затемнение, что приводит к вылету
  5. wait 100 // этот код уже не выполняется, т.к. игра вылетела

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

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

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

Оффлайн egor230

  • Прохожий
  • *
  • Сообщений: 90
  • Репутация: +1/-0
    • Просмотр профиля
    • Mr
Re: Помощь с CLEO
« Ответ #9 : Июль 09, 2017, 03:58:49 pm »
Огромное Вам спасибо за столь полный ответ на банальный вопрос.
Примите искреннюю благодарность за Ваше подробное и доходчивое объяснение.
Исключительная редкость получить ответ от человека имеющего такие глубокие познания в cleo.

Имею огромное желание писать пока скрипты для vice city, очень рад что встретился Ваш форум, где можно развиваться в этом  направлении.
К большому сожалению, игра вылетает на этапе загрузки…. 
Конечно, можно сделать легко телепорт без нажатие клавиши F, но хочется понять, где моя ошибка.

Оффлайн egor230

  • Прохожий
  • *
  • Сообщений: 90
  • Репутация: +1/-0
    • Просмотр профиля
    • Mr
Re: Помощь с CLEO
« Ответ #10 : Июль 10, 2017, 07:27:16 am »
Здравствуйте.
Наконец-то скрипт работает.
Лифты в банке и небоскрёбе спускают и поднимают при нажатии клавиши F.
Скриншоты
http://pixs.ru/showimage/1jpg_8992674_26821624.jpg
http://pixs.ru/showimage/2jpg_5330334_26821626.jpg
http://pixs.ru/showimage/3jpg_1961155_26821627.jpg
http://pixs.ru/showimage/4jpg_8258854_26821628.jpg

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

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

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

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

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

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

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

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

:Elevator_8
jump @Elevator_9

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

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

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

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

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

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

:Elevator_15
0002: jump @Elevator_1


« Последнее редактирование: Июль 10, 2017, 07:35:45 am от egor230 »

Оффлайн egor230

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

вот как решил
{$CLEO}
//-------------MAIN---------------\\
0000: NOP
thread 'CAMFSTF'
wait 1000
:MyCar
Wait 0
014B: $Car = init_parked_car_generator #BLOODRB 8 8 0 alarm 50 door_lock 0 0 40000 at 106.39 -807.28 10.46 angle 180.0
014C: set_parked_car_generator $Car cars_to_generate_to 101
004E: end_thread
         
Но с некоторыми не работает, например, PANLANT
« Последнее редактирование: Июль 14, 2017, 12:51:18 pm от egor230 »

Оффлайн egor230

  • Прохожий
  • *
  • Сообщений: 90
  • Репутация: +1/-0
    • Просмотр профиля
    • Mr
Re: Помощь с CLEO
« Ответ #12 : Июль 15, 2017, 01:39:36 pm »
Здравствуйте.
Подскажите, пожалуйста, хочу создать пачку денег на точке, а игра вылетает.
Помогите, пожалуйста, разобраться, где ошибка.
{$CLEO .cs}

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

:Noname_12
wait 0
00D6: if
0256: player $PLAYER_CHAR defined
04A6: 3@ = create_asset_money_pickup_at 109.39 -808.28 10.46  money 1 1
:2
wait 0
if
0214: pickup 3@ picked_up
004D: jump_if_false @2
0215: destroy_pickup 3@
0109: player $PLAYER_CHAR money 1+= 4@
       
jump @Noname_12
004E: end_thread

Онлайн Shagg_E

  • Главный Модератор
  • Постоялец
  • *****
  • Сообщений: 509
  • Репутация: +14/-0
  • Изобретательный Рукожопъ
    • Просмотр профиля
    • NewRockstar
Re: Помощь с CLEO
« Ответ #13 : Июль 15, 2017, 04:29:26 pm »
Здравствуйте, всем.
Снова возникала проблема со скрипитом сплавна авто в заданных координатах.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Ну и последнее:
У тебя очень много косяков в скриптах. Это не проблема, если приложить усилия. Пожалуйста, прочитай в справке SannyBuilder основы скриптинга(Статьи/введение в скриптинг). Конечно, там инфа в основном для SA, но тебе нужно изучать хотя бы самое-самое важное: узнать всё про переменные, метки(label), циклы и т.д.
Однако там инфа про скриптинг в main.scm, а в CLEO-скриптинге иногда действуют другие правила.
Поэтому скачай последнюю библиотеку CLEO для Vice City, затем скачай актуальные VCSCM.INI и opcodes.txt для SannyBuilder(кинь эти файлы в Sanny Builder 3\data\vc\) и смотри эти уроки по скриптингу на youtube. Конечно, они опять для SA, но первые несколько уроков подходят и для Vice City. Они хотя бы дадут общее понимание скриптинга.
« Последнее редактирование: Июль 15, 2017, 08:39:45 pm от Shagg_E »

Оффлайн egor230

  • Прохожий
  • *
  • Сообщений: 90
  • Репутация: +1/-0
    • Просмотр профиля
    • Mr
Re: Помощь с CLEO
« Ответ #14 : Июль 16, 2017, 03:50:07 pm »
Спасибо огромное за Ваш подробный ответ, с доскональный объяснением. Безгранично Вам за него благодарен.
Теперь стало абсолютно понятно, к каким ужасным приводит использования глобальных переменных в скрипте.
Буду учиться работать с локальными переменными. Пока только начал, практика повысит уровень навыка. У меня очень скромные планы.
Спасибо за совет об jump, будем стараться.
 Мудрый совет о спавне машин, действительная лишняя нагрузка не к чему. Согласен, лучше спавить на определительных условиях, чтобы лишний раз не засорят память игры, иначе рано или поздно может быть вылет.
Спав авто на определенном расстоянии- идеальный выход, все гениальное просто. Обязательно так сделаю, как Вы сказали.
Модель PANLANT перепутал в файле handling.cfg с SEAPLANE, Прошу прощение, что сбил Вас  с толка.
Еще одна моя ошибка с тредом.
С проверками мне нужно учится работать.
Значит, если операции над игроком не проводятся, проверку существует игрок, можно не писать.
Опять еще одна моя ошибка.
Пикапы  лучше делать при радиусе, так правильнее.
Точка пикапа должна быть в радиусе.
На ошибках учатся, главное, что на свете есть такие люди высокого ума, которые просвещают темный народ.
Хорошо еще раз перечитаю, справку по основам скриптинг.
Почти все уроки почти для SA мало для VC.
Но желание есть.
Важно понять основу.
Спасибо за полезные ссылки, они помогут в изучении скриптинга.
Ваш ответ, много научил меня еще спасибо.

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

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

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

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

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

:savegame_209
0002: jump @savegame

:savegame_288
0001: wait 0 ms
0215: destroy_pickup 10@
00D6: if
0038: $ONMISSION == 0
004D: jump_if_false @savegame_288
0002: jump @savegame