API UO LastStatus - LIHACHTETAN/ClassicUO-BadNewbie-BasicIDE GitHub Wiki
Оглавление · Алфавитный указатель · Character
ClassicUO • Runtime API
Возвращает serial последнего объекта, для которого клиент принял статус.
UO.LastStatus() -> Integer
Выберите одну из зарегистрированных форм. Параметры передаются позиционно. Any означает значение BASIC с преобразованием внутри команды; Unit — отсутствие возвращаемого значения.
Параметров нет.
Integer — 32 бита serial, не type и не логический результат. 0: ещё нет принятого статуса либо мир очищен. Старший бит сохраняется; отрицательное число тоже может представлять serial. Проверяйте <> 0, а не > 0 и не = TRUE.
- Без параметров. Чтение не отправляет пакеты, не открывает окно и не ждёт ответа. UO.GetStatus(id), RequestStats и UpdateObject лишь запрашивают данные: отправка не меняет LastStatus.
- Принятый пакет 0x11 сохраняет serial и известные клиенту X/Y вместе в World для всех скриптов. Неизвестный/уничтоженный объект и неполный базовый пакет не заменяют запись. Последующие пакеты других объектов могут её заменить.
- X/Y — снимок Entity на момент получения, а не текущая позиция. Для mobile это мировые клетки; для предмета внутри контейнера это могут быть координаты содержимого. Пакет статуса сам не передаёт X/Y. Перемещение/удаление объекта после приёма не меняет снимок; World.Clear сбрасывает его. Для текущих координат существующего объекта используйте GetX/GetY.
- Отдельные вызовы не образуют атомарный снимок; сервер может обновить запись между ними. Равенство serial не доказывает новый ответ именно на ваш запрос. laststatus без скобок — живое встроенное значение, если скрипт не переопределил его переменной; UO.LastStatus() — зарегистрированная функция.
Ниже реальные внутренние C#-этапы. ReadSavedStatus — полностью определённая вспомогательная функция примера, а не скрытая встроенная команда.
CharacterStatus проверяет базовый пакет и наличие Entity через World.Get, обновляет поля статуса и сохраняет serial/X/Y. Позиция копируется из Entity, не из байтов статуса.
Integer — 32 бита serial, не type и не логический результат. 0: ещё нет принятого статуса либо мир очищен. Старший бит сохраняется; отрицательное число тоже может представлять serial. Проверяйте <> 0, а не > 0 и не = TRUE.
Исходник проекта: src/ClassicUO.Client/Network/PacketHandlers.cs; функция CharacterStatus.
ExecuteStealthCompatibility возвращает serial bridge в Integer. LastStatusX/LastStatusY используют IStatusSnapshotBridge для сохранённых координат; старый сторонний bridge без этого интерфейса сохраняет прежнее чтение GetX/GetY.
Integer — 32 бита serial, не type и не логический результат. 0: ещё нет принятого статуса либо мир очищен. Старший бит сохраняется; отрицательное число тоже может представлять serial. Проверяйте <> 0, а не > 0 и не = TRUE.
Исходник проекта: external/InjectionScript/src/InjectionScript/Runtime/InjectionApiUO.cs; функция ExecuteStealthCompatibility.
Invoke выполняет чтение World на игровом потоке с учётом отмены скрипта. Нет ожидания сетевого ответа или изменения статуса.
Без параметров. Чтение не отправляет пакеты, не открывает окно и не ждёт ответа. UO.GetStatus(id), RequestStats и UpdateObject лишь запрашивают данные: отправка не меняет LastStatus.
Исходник проекта: src/ClassicUO.Client/Game/Managers/ClassicUOInjectionApiBridge.cs; функция Invoke.
Clear сбрасывает serial и обе координаты в 0, включая очистку с сохранением работающих скриптов.
X/Y — снимок Entity на момент получения, а не текущая позиция. Для mobile это мировые клетки; для предмета внутри контейнера это могут быть координаты содержимого. Пакет статуса сам не передаёт X/Y. Перемещение/удаление объекта после приёма не меняет снимок; World.Clear сбрасывает его. Для текущих координат существующего объекта используйте GetX/GetY.
Исходник проекта: src/ClassicUO.Client/Game/World.cs; функция Clear.
Отдельные вызовы не образуют атомарный снимок; сервер может обновить запись между ними. Равенство serial не доказывает новый ответ именно на ваш запрос. laststatus без скобок — живое встроенное значение, если скрипт не переопределил его переменной; UO.LastStatus() — зарегистрированная функция.
# Прочитать последнее значение
#
# Возвращает serial последнего объекта, для которого клиент принял статус.
#
# Integer — 32 бита serial, не type и не логический результат. 0: ещё нет принятого статуса либо
# мир очищен. Старший бит сохраняется; отрицательное число тоже может представлять serial.
# Проверяйте <> 0, а не > 0 и не = TRUE.
SUB Main()
# Значение читается один раз. Для serial HEX сохраняет удобную шестнадцатеричную запись; для
# координаты CStr выводит число. Вызов не выбирает объект.
VAR value = UO.LastStatus()
UO.Print('Saved value: ' + HEX(value))
END SUBРазбор параметров и выполнения:
- Значение читается один раз. Для serial HEX сохраняет удобную шестнадцатеричную запись; для координаты CStr выводит число. Вызов не выбирает объект.
# Запросить статус и прочитать известные данные
#
# Возвращает serial последнего объекта, для которого клиент принял статус.
#
# Integer — 32 бита serial, не type и не логический результат. 0: ещё нет принятого статуса либо
# мир очищен. Старший бит сохраняется; отрицательное число тоже может представлять serial.
# Проверяйте <> 0, а не > 0 и не = TRUE.
SUB Main()
# subject — serial self. 500 — пауза в миллисекундах, выбранная только для примера. Она не
# гарантирует ответа: показана текущая запись, которая могла остаться старой или принадлежать
# другому объекту.
VAR subject = UO.Self()
IF subject <> 0 THEN
UO.GetStatus(subject)
WAIT(500)
VAR value = UO.LastStatus()
UO.Print('Known value: ' + HEX(value))
END IF
END SUBРазбор параметров и выполнения:
- subject — serial self. 500 — пауза в миллисекундах, выбранная только для примера. Она не гарантирует ответа: показана текущая запись, которая могла остаться старой или принадлежать другому объекту.
# Полный помощник ReadSavedStatus
#
# Возвращает serial последнего объекта, для которого клиент принял статус.
#
# Integer — 32 бита serial, не type и не логический результат. 0: ещё нет принятого статуса либо
# мир очищен. Старший бит сохраняется; отрицательное число тоже может представлять serial.
# Проверяйте <> 0, а не > 0 и не = TRUE.
SUB Main()
# expectedId — serial, сохранённый в Main. Помощник полностью определён ниже; -1 означает, что
# выбранной записи уже нет, и не является результатом самой команды. Проверка до/после снижает
# риск смешения объектов, но не гарантирует атомарность при обновлениях того же serial.
VAR expectedId = UO.LastStatus()
IF expectedId <> 0 THEN
VAR value = ReadSavedStatus(expectedId)
UO.Print('Checked value: ' + CStr(value))
END IF
END SUB
SUB ReadSavedStatus(expectedId)
IF expectedId = 0 OR UO.LastStatus() <> expectedId THEN
RETURN -1
END IF
VAR value = UO.LastStatus()
IF UO.LastStatus() <> expectedId THEN
RETURN -1
END IF
RETURN value
END SUBРазбор параметров и выполнения:
- expectedId — serial, сохранённый в Main. Помощник полностью определён ниже; -1 означает, что выбранной записи уже нет, и не является результатом самой команды. Проверка до/после снижает риск смешения объектов, но не гарантирует атомарность при обновлениях того же serial.