Вопросы по CLEO-скриптингу

hnnssy

Известный
Друг
2,684
2,754
Я наверное плохо задал вопрос. Например в цикле "while true end" после первой проверки на переменную хочу выполнить еще одну проверку. Как мне реализовать это ? Если делаю так, то текст выводится, но переменная не меняется или скрипт просто не доходит до самой первой проверки.
CLEO:
while true
wait 0
if 18@ == 1
then
Actor.PutAt($PLAYER_ACTOR 2727.2852 -2451.0808 16.9397)
wait 1500
Actor.PutAt($PLAYER_ACTOR 2622.1875 -2461.1560 3.0000)
if or
0118: actor $PLAYER_ACTOR dead
856D:  not actor $PLAYER_ACTOR defined
then
18@ == 0
0ACD: show_text_highpriority "SCRIPT STOP. DON'T KICK"
end
end
end
== - сравнение
= - присваивание
 
  • Нравится
Реакции: 01EG

woksonal

Известный
Проверенный
268
154
Я наверное плохо задал вопрос. Например в цикле "while true end" после первой проверки на переменную хочу выполнить еще одну проверку. Как мне реализовать это ? Если делаю так, то текст выводится, но переменная не меняется или скрипт просто не доходит до самой первой проверки.
CLEO:
while true
wait 0
if 18@ == 1
then
Actor.PutAt($PLAYER_ACTOR 2727.2852 -2451.0808 16.9397)
wait 1500
Actor.PutAt($PLAYER_ACTOR 2622.1875 -2461.1560 3.0000)
if or
0118: actor $PLAYER_ACTOR dead
856D:  not actor $PLAYER_ACTOR defined
then
18@ == 0
0ACD: show_text_highpriority "SCRIPT STOP. DON'T KICK"
end
end
end

CLEO:
while true
wait 0
    if 18@ == 1
    then
        if
        0118: not actor $PLAYER_ACTOR dead
        then
            Actor.PutAt($PLAYER_ACTOR 2727.2852 -2451.0808 16.9397)
            wait 1500
            Actor.PutAt($PLAYER_ACTOR 2622.1875 -2461.1560 3.0000)
        else
            0ACD: show_text_highpriority "SCRIPT STOP. DON'T KICK" time 1000
            18@ = 0
        end
    end
end
Я бы сделал так, вообще, используй табуляцию - очень помогает по началу.
Не понял совсем эту часть кода
CLEO:
then
18@ == 0
0ACD: show_text_highpriority "SCRIPT STOP. DON'T KICK"
end
Зачем сравнивать переменную 18@ после then? Для 0ACD нужно 2 параметра
Советую почитать http://ru-script.3dn.ru/publ/uroki_skriptinga/gta_sa/cikly_chast_1_while/34-1-0-55 и http://ru-script.3dn.ru/publ/uroki_skriptinga/gta_sa/cikly_chast_3_repeat_vlozhennye_cikly/34-1-0-59
 
Последнее редактирование:

hnnssy

Известный
Друг
2,684
2,754
1)
Можно ли в цикле repeat until , использовать 2 параметра на until
Например:
CLEO:
repeat
wait 0
if 0ab0: 90
Actor.PutAt($PLAYER_ACTOR 0.0 0.0 .0.0)
Actor.PutAt($PLAYER_ACTOR 999.0 999.0 .999.0)
until Actor.Dead , not Actor.Defined , 8ab0: not 90
Через запятую или как-то так захуярить.
2)
Можно ли считать циклы:
while true end
и
repeat until false
одинаковыми ?
1. нет, делай условие с break, если истинно
2. именно с этими условиями - да.
 

BlackKnigga

Известный
BH Team
922
445
1)
Можно ли в цикле repeat until , использовать 2 параметра на until
Например:
CLEO:
repeat
wait 0
if 0ab0: 90
Actor.PutAt($PLAYER_ACTOR 0.0 0.0 .0.0)
Actor.PutAt($PLAYER_ACTOR 999.0 999.0 .999.0)
until Actor.Dead , not Actor.Defined , 8ab0: not 90
Через запятую или как-то так захуярить.
2)
Можно ли считать циклы:
while true end
и
repeat until false
одинаковыми ?
Цикл while..end сначала проверяет выполнение условия, а уже потом, если верно условие, выполняется.
А цикл Repeat..Until сначала выполняет свои операторы и как дойдет до конца, проверяет условие. Если верно - продолжает цикл, иначе - выходит из цикла.
 

01EG

Известный
Проверенный
631
346
== - сравнение
= - присваивание
Вот где ошибка. FACEPLAM :)

while true
wait 0
if 18@ == 1
then
if
0118: not actor $PLAYER_ACTOR dead
then
Actor.PutAt($PLAYER_ACTOR 2727.2852 -2451.0808 16.9397)
wait 1500
Actor.PutAt($PLAYER_ACTOR 2622.1875 -2461.1560 3.0000)
else
0ACD: show_text_highpriority "SCRIPT STOP. DON'T KICK" time 1000
18@ = 0
end
end
end
Да, так смотрится красивее и логичнее, не подумал.
then
18@ == 0
0ACD: show_text_highpriority "SCRIPT STOP. DON'T KICK"
end
делал проверку на актера и если она срабатывала, то переменной должно было присвоить значение 0, а не проверить его, да потерял time(но это я с СБ уже забыл скопировать.)

----
В общем: всем спасибо за помощь. Скрипт не работал, потому что не присвоил переменной новое значение, а сделал на него проверку. Глупая ошибка.
 

AWRage

Активный
642
141
0C49: textdraw 1 set_box true color 0x55000000 size 1.0 0.5
Этот опкод не баганный? Какое бы я значение не поставил вместо 1.0 и 0.5, получается одна и та же 'Коробка'.
 

itsLegend

Фонд борьбы за жуков 🐞
Администратор
2,696
1,463
0C49: textdraw 1 set_box true color 0x55000000 size 1.0 0.5
Этот опкод не баганный? Какое бы я значение не поставил вместо 1.0 и 0.5, получается одна и та же 'Коробка'.
Скорее всего багнутый. Эмулируй RPC.
 

AWRage

Активный
642
141
Можно ли рендерить текстурой обрезанной? Например отрендерить половину текстуры.
 

AWRage

Активный
642
141
Сложно будет. Могу кинуть функцию на СФ АПИ сделаную. А дальше уже сам мучайся.
Да не, не надо, я понятия не имею что такое СФ АПИ)

А можно ли в одном потоке открыть файл и записывать в него данный, а в другом потоке из него же считывать их? Хочу сделать скрипт который будет управлять моей машиной и ехать за другой.
 
Последнее редактирование модератором:

Garrus

Известный
159
20
Подскажите, можно ли как-то проверить, введен ли текст в поле компонента editbox DXUT-диалога, если по-умолчанию поле пустое?