#1 28-10-2020 13:18

Remca12
Registered: 30-06-2019
Posts: 33

Время появления пикапа

Здравствуйте, у меня вопрос связанный с опкодами пикапа и времени. Необходимо чтобы пикап здоровья (возле больницы в Портленде), появлялся бы только с 7 утра и до 7 вечера. Получается что с 7 вечера до 7 утра пикап будет удален, и его нельзя будет подобрать.
Как сделать пикап доступным только в заданный ему промежуток времени ?

Offline

#2 29-10-2020 04:00

Seemann
Registered: 07-08-2006
Posts: 2,156

Re: Время появления пикапа

нужно написать скрипт, который будет постоянно читать текущее время игры, и если оно в промежутке между 7 утра и 7 вечера, пикап нужно удалить, иначе создать. т.е нужно
1) цикл с небольшой задержкой типа 250 ms
2) прочитать текущее время
3) проверить время
4) в зависимости от результата 4.1) удалить пикап или 4.2) создать пикап

Offline

#3 29-10-2020 13:06

Remca12
Registered: 30-06-2019
Posts: 33

Re: Время появления пикапа

Примерно так ?

// 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

#4 29-10-2020 18:51

Seemann
Registered: 07-08-2006
Posts: 2,156

Re: Время появления пикапа

некоторые опкоды подобраны верно, но структурно скрипт не имеет никакой логики. рекомендую посмотреть следующие статьи
https://docs.sannybuilder.com/v/ru/codi … #while-end
https://docs.sannybuilder.com/v/ru/codi … onstrukcii

из явных ошибок нужно исправить условие в while и условие в if

Offline

#5 30-10-2020 18:39

Remca12
Registered: 30-06-2019
Posts: 33

Re: Время появления пикапа

Я переписал код с нуля итак его понимает игра в 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

Люди добрые помогите, я уже замучился wall clap

Last edited by Remca12 (30-10-2020 18:53)

Offline

#6 31-10-2020 18:57

Seemann
Registered: 07-08-2006
Posts: 2,156

Re: Время появления пикапа

Уже гораздо лучше. Однако есть проблема с условиями. Когда ты пишешь конструкцию 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

Board footer

Powered by FluxBB