API UO Self - LIHACHTETAN/ClassicUO-BadNewbie-BasicIDE GitHub Wiki
UO.Self
Оглавление · Алфавитный указатель · Character
ClassicUO • Runtime API
Возвращает ID текущего персонажа.
Точный синтаксис
UO.Self() -> Integer
Выберите одну из зарегистрированных форм. Параметры передаются позиционно. Any означает значение BASIC с преобразованием внутри команды; Unit — отсутствие возвращаемого значения.
Параметры
Параметров нет.
Возвращает
Integer — serial/ID, не graphic/type, слой, количество предметов или Boolean. 0 — текущего объекта нет. Сохраняются все 32 бита serial; проверяйте <> 0, не = TRUE или > 0. Сохранённый результат сам не обновляется. Читает World.Player.Serial; отсутствующий или уничтоженный Player даёт 0. Смерть отличается от удаления: присутствующий призрак сохраняет ID персонажа.
Поведение
- Параметров нет. Читает локальные данные через Invoke на игровом потоке; отмена скрипта прерывает ожидание этого потока. Не посылает пакет, не открывает контейнер/target и не переносит предмет.
- Встроенное self/backpack без скобок читается заново, если его не перекрыла переменная скрипта. Строковые имена обрабатывает принимающая команда. В назначении переноса "self" означает рюкзак, а UO.Self() возвращает serial персонажа. Для ID контейнера явно используйте UO.Backpack().
- World.Clear удаляет Player; последующие чтения дают 0. Вход в мир или замена надетой сумки могут изменить ID. Отдельные чтения не атомарны. Ненулевой ID не доказывает подключение, разрешение сервера или загрузку содержимого.
Внутренние функции: от вызова до результата
Ниже реальные этапы чтения объекта клиента. IsOwnSerial — полная функция показанного скрипта, а не ещё одна встроенная команда.
1. ExecuteStealthCompatibility
ExecuteStealthCompatibility выбирает ветку без аргументов и оборачивает Integer bridge в InjectionValue. Выходного параметра Pascal или дополнительных необязательных аргументов нет.
Integer — serial/ID, не graphic/type, слой, количество предметов или Boolean. 0 — текущего объекта нет. Сохраняются все 32 бита serial; проверяйте <> 0, не = TRUE или > 0. Сохранённый результат сам не обновляется.
Исходник проекта: external/InjectionScript/src/InjectionScript/Runtime/InjectionApiUO.cs; функция ExecuteStealthCompatibility.
2. Invoke
Читает World.Player.Serial; отсутствующий или уничтоженный Player даёт 0. Смерть отличается от удаления: присутствующий призрак сохраняет ID персонажа. Invoke выполняет чтение на игровом потоке; с рабочего потока ожидается обработка запроса менеджером. Отмена скрипта прерывает ожидание. Паузы и дополнительные сетевые запросы не добавляются.
Integer — serial/ID, не graphic/type, слой, количество предметов или Boolean. 0 — текущего объекта нет. Сохраняются все 32 бита serial; проверяйте <> 0, не = TRUE или > 0. Сохранённый результат сам не обновляется. Параметров нет. Читает локальные данные через Invoke на игровом потоке; отмена скрипта прерывает ожидание этого потока. Не посылает пакет, не открывает контейнер/target и не переносит предмет.
Исходник проекта: src/ClassicUO.Client/Game/Managers/ClassicUOInjectionApiBridge.cs; функция Invoke.
3. Clear
World.Clear удаляет Player; последующие чтения дают 0. Вход в мир или замена надетой сумки могут изменить ID. Отдельные чтения не атомарны. Ненулевой ID не доказывает подключение, разрешение сервера или загрузку содержимого.
World.Clear удаляет Player; последующие чтения дают 0. Вход в мир или замена надетой сумки могут изменить ID. Отдельные чтения не атомарны. Ненулевой ID не доказывает подключение, разрешение сервера или загрузку содержимого.
Исходник проекта: src/ClassicUO.Client/Game/World.cs; функция Clear.
World.Clear удаляет Player; последующие чтения дают 0. Вход в мир или замена надетой сумки могут изменить ID. Отдельные чтения не атомарны. Ненулевой ID не доказывает подключение, разрешение сервера или загрузку содержимого.
Примеры
Пример 1. Прочитать и вывести ID
# Прочитать и вывести ID
#
# Возвращает ID текущего персонажа.
#
# Integer — serial/ID, не graphic/type, слой, количество предметов или Boolean. 0 — текущего
# объекта нет. Сохраняются все 32 бита serial; проверяйте <> 0, не = TRUE или > 0. Сохранённый
# результат сам не обновляется. Читает World.Player.Serial; отсутствующий или уничтоженный
# Player даёт 0. Смерть отличается от удаления: присутствующий призрак сохраняет ID персонажа.
SUB Main()
# id сохраняет результат одного вызова; HEX форматирует serial для журнала. Пример ничего не
# выбирает и не использует.
VAR id = UO.Self()
UO.Print('ID: ' + HEX(id))
END SUB
Разбор параметров и выполнения:
- id сохраняет результат одного вызова; HEX форматирует serial для журнала. Пример ничего не выбирает и не использует.
Пример 2. Обнаружить изменение ID
# Обнаружить изменение ID
#
# Возвращает ID текущего персонажа.
#
# Integer — serial/ID, не graphic/type, слой, количество предметов или Boolean. 0 — текущего
# объекта нет. Сохраняются все 32 бита serial; проверяйте <> 0, не = TRUE или > 0. Сохранённый
# результат сам не обновляется. Читает World.Player.Serial; отсутствующий или уничтоженный
# Player даёт 0. Смерть отличается от удаления: присутствующий призрак сохраняет ID персонажа.
SUB Main()
# before/after читаются с интервалом 250 мс. WAIT добавлен только в пример. Равенство означает
# одинаковые конечные ID; промежуточные изменения могут быть пропущены.
VAR before = UO.Self()
WAIT(250)
VAR after = UO.Self()
IF before <> after THEN
UO.Print('ID changed: ' + HEX(after))
END IF
END SUB
Разбор параметров и выполнения:
- before/after читаются с интервалом 250 мс. WAIT добавлен только в пример. Равенство означает одинаковые конечные ID; промежуточные изменения могут быть пропущены.
Пример 3. Полная функция IsOwnSerial
# Полная функция IsOwnSerial
#
# Возвращает ID текущего персонажа.
#
# Integer — serial/ID, не graphic/type, слой, количество предметов или Boolean. 0 — текущего
# объекта нет. Сохраняются все 32 бита serial; проверяйте <> 0, не = TRUE или > 0. Сохранённый
# результат сам не обновляется. Читает World.Player.Serial; отсутствующий или уничтоженный
# Player даёт 0. Смерть отличается от удаления: присутствующий призрак сохраняет ID персонажа.
SUB Main()
# candidate — сохранённый ID LastTarget. IsOwnSerial(candidate) принимает один serial и
# возвращает Integer Boolean: 1=TRUE для текущего ненулевого собственного ID, иначе 0=FALSE.
# Определение функции приведено полностью; target не изменяется.
VAR candidate = UO.LastTarget()
IF IsOwnSerial(candidate) = TRUE THEN
UO.Print('Own object selected')
ELSE
UO.Print('Different object or no own object')
END IF
END SUB
SUB IsOwnSerial(candidate)
VAR current = UO.Self()
RETURN current <> 0 AND current = candidate
END SUB
Разбор параметров и выполнения:
- candidate — сохранённый ID LastTarget. IsOwnSerial(candidate) принимает один serial и возвращает Integer Boolean: 1=TRUE для текущего ненулевого собственного ID, иначе 0=FALSE. Определение функции приведено полностью; target не изменяется.