API UO Poisoned - LIHACHTETAN/ClassicUO-BadNewbie-BasicIDE GitHub Wiki
UO.Poisoned
Оглавление · Алфавитный указатель · Character
ClassicUO • Runtime API
Проверяет отравление персонажа.
Точный синтаксис
UO.Poisoned() -> Integer
UO.Poisoned(id:Any) -> Integer
Выберите одну из зарегистрированных форм. Параметры передаются позиционно. Any означает значение BASIC с преобразованием внутри команды; Unit — отсутствие возвращаемого значения.
Параметры
id— Необязательный объект в показанных формах: serial числом/hex-строкой, self, lasttarget или зарегистрированное имя AddObject. Это не type. Без аргумента читается self. Неизвестный текст в некоторых формах вызывает ошибку преобразования; проверяйте имя перед вызовом.
Возвращает
Integer Boolean: 1 = TRUE, 0 = FALSE. Сравнивать можно с числами или логическими константами без кавычек. 1 — mobile имеет IsPoisoned, 0 — флага нет или mobile отсутствует. Степень яда и оставшееся время не возвращаются.
Это логический результат: 1 = TRUE, 0 = FALSE. После VAR result = команда(...) можно писать IF result = TRUE THEN или IF result = 1 THEN; для отрицательного результата — IF result = FALSE THEN или IF result = 0 THEN. TRUE/FALSE пишутся без кавычек. Вызовите команду один раз и сохраните результат: повторный вызов может повторить действие или прочитать уже изменившееся состояние.
Поведение
- Читает локальную модель: не открывает target, не запрашивает status, не меняет флаг и не отправляет пакет. Уничтоженный объект считается отсутствующим ещё до удаления записи из словаря.
- Результат — отдельное чтение. Мир может измениться между Exists и следующим вызовом; несколько запросов не образуют атомарный снимок.
- Для Poisoned/Flying учитывается версия протокола: до 7.0.0.0 бит 0x04 означает яд; начиная с 7.0.0.0 он означает полёт, а яд хранится отдельно. Полёт не вычисляется из Z.
Внутренние функции: от вызова до результата
Ниже реальные внутренние C#-этапы. ReadState — полностью определённая вспомогательная функция примера, а не скрытая встроенная команда.
1. RegisterCharacterGetterAliases
При создании runtime RegisterCharacterGetterAliases регистрирует имена и формы. Без аргумента используется bridge.Self; с аргументом передаётся выбранный serial. Ранее зарегистрированные формы сохраняются.
1 — mobile имеет IsPoisoned, 0 — флага нет или mobile отсутствует. Степень яда и оставшееся время не возвращаются.
Исходник проекта: external/InjectionScript/src/InjectionScript/Runtime/InjectionApiUO.cs; функция RegisterCharacterGetterAliases.
2. TryGetObject
TryGetObject распознаёт число, hex-строку и сохранённые имена. Запись AddObject разрешается заново при вызове; это не поиск graphic/type и не интерактивный выбор.
Необязательный объект в показанных формах: serial числом/hex-строкой, self, lasttarget или зарегистрированное имя AddObject. Это не type. Без аргумента читается self. Неизвестный текст в некоторых формах вызывает ошибку преобразования; проверяйте имя перед вызовом.
Исходник проекта: external/InjectionScript/src/InjectionScript/Runtime/InjectionApiUO.cs; функция TryGetObject.
3. Invoke
Invoke выполняет чтение на игровом потоке; с рабочего потока ожидается обработка запроса менеджером. Отмена скрипта прерывает ожидание. Паузы и дополнительные сетевые запросы не добавляются.
Результат — отдельное чтение. Мир может измениться между Exists и следующим вызовом; несколько запросов не образуют атомарный снимок.
Исходник проекта: src/ClassicUO.Client/Game/Managers/ClassicUOInjectionApiBridge.cs; функция Invoke.
4. Get
World.Get ищет объект по serial и возвращает null для IsDestroyed. Затем выбирается флаг Mobile. Для Alive проверяются Exists и отсутствие IsDead; предмет допускается. При чтении собственного Dead используется Player.IsDead.
1 — mobile имеет IsPoisoned, 0 — флага нет или mobile отсутствует. Степень яда и оставшееся время не возвращаются.
Исходник проекта: src/ClassicUO.Client/Game/World.cs; функция Get.
Читает локальную модель: не открывает target, не запрашивает status, не меняет флаг и не отправляет пакет. Уничтоженный объект считается отсутствующим ещё до удаления записи из словаря.
Примеры
Пример 1. Проверить собственное состояние
# Проверить собственное состояние
#
# Проверяет отравление персонажа.
#
# Integer Boolean: 1 = TRUE, 0 = FALSE. Сравнивать можно с числами или логическими константами
# без кавычек. 1 — mobile имеет IsPoisoned, 0 — флага нет или mobile отсутствует. Степень яда и
# оставшееся время не возвращаются.
#
# Это логический результат: 1 = TRUE, 0 = FALSE. После VAR result = команда(...) можно писать IF
# result = TRUE THEN или IF result = 1 THEN; для отрицательного результата — IF result = FALSE
# THEN или IF result = 0 THEN. TRUE/FALSE пишутся без кавычек. Вызовите команду один раз и
# сохраните результат: повторный вызов может повторить действие или прочитать уже изменившееся
# состояние.
SUB Main()
# Пустые скобки читают self. active сохраняет результат один раз; TRUE и FALSE задают две ветви.
# Print только выводит пример сообщения.
VAR active = UO.Poisoned()
IF active = TRUE THEN
UO.Print('State is active')
ELSE
UO.Print('State is inactive or unavailable')
END IF
END SUB
Разбор параметров и выполнения:
- Пустые скобки читают self. active сохраняет результат один раз; TRUE и FALSE задают две ветви. Print только выводит пример сообщения.
Пример 2. Выбранный объект и полная функция ReadState
# Выбранный объект и полная функция ReadState
#
# Проверяет отравление персонажа.
#
# Integer Boolean: 1 = TRUE, 0 = FALSE. Сравнивать можно с числами или логическими константами
# без кавычек. 1 — mobile имеет IsPoisoned, 0 — флага нет или mobile отсутствует. Степень яда и
# оставшееся время не возвращаются.
#
# Это логический результат: 1 = TRUE, 0 = FALSE. После VAR result = команда(...) можно писать IF
# result = TRUE THEN или IF result = 1 THEN; для отрицательного результата — IF result = FALSE
# THEN или IF result = 0 THEN. TRUE/FALSE пишутся без кавычек. Вызовите команду один раз и
# сохраните результат: повторный вызов может повторить действие или прочитать уже изменившееся
# состояние.
SUB Main()
# lasttarget — ранее выбранный объект. Exists проверяет его наличие. obj — единственный параметр
# ReadState; функция возвращает результат команды без изменения. Её определение входит в
# копируемый код.
IF UO.Exists('lasttarget') THEN
VAR observed = ReadState('lasttarget')
UO.Print('State 1/0: ' + CStr(observed))
END IF
END SUB
SUB ReadState(obj)
RETURN UO.Poisoned(obj)
END SUB
Разбор параметров и выполнения:
- lasttarget — ранее выбранный объект. Exists проверяет его наличие. obj — единственный параметр ReadState; функция возвращает результат команды без изменения. Её определение входит в копируемый код.
Пример 3. Заметить изменение за полсекунды
# Заметить изменение за полсекунды
#
# Проверяет отравление персонажа.
#
# Integer Boolean: 1 = TRUE, 0 = FALSE. Сравнивать можно с числами или логическими константами
# без кавычек. 1 — mobile имеет IsPoisoned, 0 — флага нет или mobile отсутствует. Степень яда и
# оставшееся время не возвращаются.
#
# Это логический результат: 1 = TRUE, 0 = FALSE. После VAR result = команда(...) можно писать IF
# result = TRUE THEN или IF result = 1 THEN; для отрицательного результата — IF result = FALSE
# THEN или IF result = 0 THEN. TRUE/FALSE пишутся без кавычек. Вызовите команду один раз и
# сохраните результат: повторный вызов может повторить действие или прочитать уже изменившееся
# состояние.
SUB Main()
# Два вызова без аргументов читают self, WAIT(500) задаёт 500 миллисекунд. Сравниваются два
# снимка; промежуточные переходы могут быть пропущены. Бесконечного ожидания нет.
VAR before = UO.Poisoned()
WAIT(500)
VAR after = UO.Poisoned()
IF before <> after THEN
UO.Print('State changed: ' + CStr(before) + ' -> ' + CStr(after))
END IF
END SUB
Разбор параметров и выполнения:
- Два вызова без аргументов читают self, WAIT(500) задаёт 500 миллисекунд. Сравниваются два снимка; промежуточные переходы могут быть пропущены. Бесконечного ожидания нет.