You are not logged in.
Pages: 1
Здравствуйте, у меня вопрос связанный с опкодами пикапа и времени. Необходимо чтобы пикап здоровья (возле больницы в Портленде), появлялся бы только с 7 утра и до 7 вечера. Получается что с 7 вечера до 7 утра пикап будет удален, и его нельзя будет подобрать.
Как сделать пикап доступным только в заданный ему промежуток времени ?
Offline
нужно написать скрипт, который будет постоянно читать текущее время игры, и если оно в промежутке между 7 утра и 7 вечера, пикап нужно удалить, иначе создать. т.е нужно
1) цикл с небольшой задержкой типа 250 ms
2) прочитать текущее время
3) проверить время
4) в зависимости от результата 4.1) удалить пикап или 4.2) создать пикап
Offline
Примерно так ?
// This file was decompiled using SCM.ini published by GTAMods.com on 2017-07-29 {$CLEO .cs} //-------------MAIN--------------- 0001: wait 100 ms :VRPI while 00BF: $hours = current_time_hours, $minutes = current_time_minutes wait 250 $hours = 19 $minutes = 00 0215: destroy_pickup $IND_PICKUP8 0215: destroy_pickup $IND_PICKUP9 0215: destroy_pickup $COM_PICKUP8 0215: destroy_pickup $COM_PICKUP9 0215: destroy_pickup $SUB_PICKUP8 0215: destroy_pickup $SUB_PICKUP9 if and 00BF: $hours = current_time_hours, $minutes = current_time_minutes $hours = 07 $minutes = 01 then break end end
Offline
некоторые опкоды подобраны верно, но структурно скрипт не имеет никакой логики. рекомендую посмотреть следующие статьи
https://docs.sannybuilder.com/v/ru/codi … #while-end
https://docs.sannybuilder.com/v/ru/codi … onstrukcii
из явных ошибок нужно исправить условие в while и условие в if
Offline
Я переписал код с нуля итак его понимает игра в main.scm
:PICK_CR 03A4: name_thread 'PICK_CR' :PICK_CR_10 0001: wait 0 ms 00BF: $HOURS = current_time_hours, $MINUTES = current_time_minutes 00D6: if and 001A: 19 > $HOURS // int > $ 0018: $HOURS < 7 // $ > int 004D: jump_if_false @PICK_CR_47 :PICK_CR_47 //проверил в игре и убедился тыщу раз что игра при таком коде удаляет пикапы :crazy: //"если нет пикапов, то удалить пикапы" :o 0001: wait 0 ms 00D6: if and 83CA: not object $IND_PICKUP8 exists 83CA: not object $IND_PICKUP9 exists 83CA: not object $COM_PICKUP8 exists 83CA: not object $COM_PICKUP9 exists 83CA: not object $SUB_PICKUP8 exists 83CA: not object $SUB_PICKUP9 exists 004D: jump_if_false @PICK_CR_47 0215: destroy_pickup $IND_PICKUP8 0215: destroy_pickup $IND_PICKUP9 0215: destroy_pickup $COM_PICKUP8 0215: destroy_pickup $COM_PICKUP9 0215: destroy_pickup $SUB_PICKUP8 0215: destroy_pickup $SUB_PICKUP9 0002: jump @PICK_CR_10 //с этой метки идёт попытка создать пикапы. Но пикапы не возвращаются с 7 утра. :PICK_CR_11 00D6: if and 001A: 19 < $HOURS // int > $ 0018: $HOURS > 7 // $ > int 004D: jump_if_false @PICK_CR_48 :PICK_CR_48 0001: wait 0 ms 00D6: if and 03CA: not object $IND_PICKUP8 exists 03CA: not object $IND_PICKUP9 exists 03CA: not object $COM_PICKUP8 exists 03CA: not object $COM_PICKUP9 exists 03CA: not object $SUB_PICKUP8 exists 03CA: not object $SUB_PICKUP9 exists 004D: jump_if_false @PICK_CR_48 0213: $IND_PICKUP8 = create_pickup #HEALTH type 14 at 1147.75 -597.0625 14.875 0213: $IND_PICKUP9 = create_pickup #HEALTH type 14 at 1147.75 -585.25 14.875 0213: $COM_PICKUP8 = create_pickup #HEALTH type 14 at 182.875 -16.25 16.1875 0213: $COM_PICKUP9 = create_pickup #HEALTH type 14 at 222.5625 16.0 16.1875 0213: $SUB_PICKUP8 = create_pickup #HEALTH type 14 at -1247.5 -79.5 58.75 0213: $SUB_PICKUP9 = create_pickup #HEALTH type 14 at -1247.5 -82.5 58.75 0002: jump @PICK_CR_11
Люди добрые помогите, я уже замучился
Last edited by Remca12 (30-10-2020 18:53)
Offline
Уже гораздо лучше. Однако есть проблема с условиями. Когда ты пишешь конструкцию if, ты должен предусмотреть 2 варианта развития событий: 1) если условие выполняется и 2) если условие не выполняется. Скрипты пишутся таким образом, что команды, которые должны выполняться в первом случае (когда условие истинно) располагаются после команды jf. А команды, которые выполняются, когда условие ложно, располагаются по адресу метки jf.
if < какое-то условие> jf @метка-когда-условие-ложно <команды если условие истинно> .... :метка-когда-условие-ложно <команды если условие ложно>
В простейшем случае, можно не думать о метках, если использовать конструкцию if..then..end. Тогда пример выше становится
if < какое-то условие> then <команды если условие истинно> else <команды если условие ложно> end
очень просто.
теперь посмотрим на твое первое условие
00D6: if and 001A: 19 > $HOURS // int > $ 0018: $HOURS < 7 // $ > int 004D: jump_if_false @PICK_CR_47 :PICK_CR_47 //проверил в игре и убедился тыщу раз что игра при таком коде удаляет пикапы :crazy:
проблема тут в том, что независимо от результата проверки скрипт перейдет на метку PICK_CR_47. Правильно было бы написать
004D: jump_if_false @PICK_CR_10
попробуй теперь проанализировать и найти в своем скрипте место, с которого происходит переход на PICK_CR_11. я не нашел
Offline
Pages: 1