-
Notifications
You must be signed in to change notification settings - Fork 0
API Basic Do uk
ClassicUO • Basic
Do перевіряє умову перед тілом або після нього. While повторює при істині, Until — до істини. Repeat … Until є підтримуваною старою формою з перевіркою після тіла.
Do While condition
statements
Loop
Do Until condition
statements
Loop
Do
statements
Loop While condition
Do
statements
Loop Until condition
Do
statements
Loop
Repeat
statements
Until condition
Continue Do
Exit Do
Break
-
condition / While / Until— Логічний вираз: числові 0/False та 1/True. While продовжує при істині, Until при істині виходить. Вираз обчислюється на кожній перевірці; текст не розбирається як Boolean. -
position / Repeat— Умова після Do може пропустити перший прохід. Після Loop або Until у Repeat перевіряється щонайменше після одного проходу. Дозволено лише одну позицію умови. Безумовний Do … Loop потребує явного виходу. -
statements / exit— Тіло циклу. Continue Do переходить до наступної перевірки; Exit Do залишає найближчий Do або Repeat. Break залишає найближчий цикл будь-якого виду. RETURN завершує всю процедуру/функцію.
Do, Loop, Repeat, Until та Exit Do нічого не повертають. Приклади явно повертають з Main Integer 1,33,83 — поєднання лічильників, а не логічні результати команд.
- Підготовка зіставляє блоки й перевіряє переходи. Умови одночасно на початку та в кінці одного Do спричиняють SC020. Рушій перевіряє вираз у вибраній позиції й повторює тіло за правилом While/Until.
- Continue Do з умовою в кінці обов’язково перевіряє цю умову; з умовою на початку повертає до заголовка. Під час виходу з Try його Finally виконується рівно один раз.
- Repeat спочатку виконує тіло: перевіряйте порожній масив до входу. Автоматичного таймауту немає. Для очікування гри використовуйте свідомий Wait та часову межу; пауза й зупинка працюють.
- В одній умові LOOP UNTIL можна поєднати перевірки: (A) OrElse (B) OrElse (C) завершує цикл за будь-якою з них; (A) AndAlso (B) потребує обох. Дужки задають групи. Це один складений вираз, а не кілька UNTIL. OrElse та AndAlso пропускають зайві перевірки. Великі набори зручно перебирати в List/масиві власною функцією. Вихід із циклу не вимикає UO.Follow: викличте UO.Follow(0), наприклад у Finally; фонові умови масиву stopConditions команди Follow не потребують такого циклу.
# ready=True вже задовольняє Until. Перший Do Until ready має нуль ітерацій: before=0. Другий перевіряє лише після збільшення after, тому after=1. Main повертає before*10+after=1.
Option Explicit On
Sub Main()
Var ready = True
Var before = 0
Var after = 0
Do Until ready
before += 1
Loop
Do
after += 1
Loop Until ready
Return before * 10 + after
End SubПояснення параметрів і виконання:
ready=True вже задовольняє Until. Перший Do Until ready має нуль ітерацій: before=0. Другий перевіряє лише після збільшення after, тому after=1. Main повертає before*10+after=1.
# attempts починається з 0 й зростає щопроходу. Перші два Continue Do виконують Finally і перевірку attempts<4. На третій спробі Exit Do теж виконує Finally. attempts=3, cleanup=3, результат 33. Це локальна модель, а не реальні мережеві повтори.
Option Explicit On
Sub Main()
Var attempts = 0
Var cleanup = 0
Do
Try
attempts += 1
If attempts < 3 Then
Continue Do
End If
Exit Do
Finally
cleanup += 1
End Try
Loop While attempts < 4
Return attempts * 10 + cleanup
End SubПояснення параметрів і виконання:
attempts починається з 0 й зростає щопроходу. Перші два Continue Do виконують Finally і перевірку attempts<4. На третій спробі Exit Do теж виконує Finally. attempts=3, cleanup=3, результат 33. Це локальна модель, а не реальні мережеві повтори.
# values містить 3,5,0 і гарантовано не порожній. Repeat читає комірку, збільшує index і суму. Until зупиняється при value=0 або межі масиву; OrElse пропускає другу перевірку після знайденого нуля. total=8 та index=3 дають 83.
Option Explicit On
Sub Main()
Dim values[2]
values[0] = 3
values[1] = 5
values[2] = 0
Var index = 0
Var value = 0
Var total = 0
Repeat
value = values[index]
index += 1
total += value
Until (value = 0) OrElse (index >= GetArrayLength(values))
Return total * 10 + index
End SubПояснення параметрів і виконання:
values містить 3,5,0 і гарантовано не порожній. Repeat читає комірку, збільшує index і суму. Until зупиняється при value=0 або межі масиву; OrElse пропускає другу перевірку після знайденого нуля. total=8 та index=3 дають 83.
# Це локальна модель без очікувань та ігрових пакетів. hp=100 — здоров’я, leaderVisible=True — видимість, elapsed=0 — минулі мілісекунди. Кожен прохід додає 250 до elapsed і віднімає 10 від hp. На шостому проході hp=40: перша умова істинна, решта не обчислюються. Main повертає 1500 мс, а не true. У грі читайте поточний стан і додавайте очікування, як у прикладі UO.Follow.
Option Explicit On
Sub Main()
Var hp = 100
Var leaderVisible = True
Var elapsed = 0
Do
elapsed += 250
hp -= 10
Loop Until (hp <= 40) OrElse (Not leaderVisible) OrElse (elapsed >= 30000)
Return elapsed
End SubПояснення параметрів і виконання:
Це локальна модель без очікувань та ігрових пакетів. hp=100 — здоров’я, leaderVisible=True — видимість, elapsed=0 — минулі мілісекунди. Кожен прохід додає 250 до elapsed і віднімає 10 від hp. На шостому проході hp=40: перша умова істинна, решта не обчислюються. Main повертає 1500 мс, а не true. У грі читайте поточний стан і додавайте очікування, як у прикладі UO.Follow.
ClassicUO
Bad Newbie & Basic IDE
Найти в справочнике
Клиент и скрипты
Каталоги значений
Разработка и помощь