API UO GetInt - LIHACHTETAN/ClassicUO-BadNewbie-BasicIDE GitHub Wiki
UO.GetInt
Оглавление · Алфавитный указатель · Character
ClassicUO • Runtime API
Читает текущий интеллект (Intelligence, INT) персонажа.
Точный синтаксис
UO.GetInt() -> Integer
UO.GetInt(ObjID:Any) -> Integer
Выберите одну из зарегистрированных форм. Параметры передаются позиционно. Any означает значение BASIC с преобразованием внутри команды; Unit — отсутствие возвращаемого значения.
Параметры
ObjID— ObjID только в показанной форме с одним аргументом: serial персонажа числом, десятичной/0x hex-строкой, "self", "lasttarget" или именем AddObject. Выбирает объект, не graphic/type. Без аргумента читается текущий персонаж.
Возвращает
Integer — текущие очки характеристики, 0..65535 в модели клиента; не процент, ID, навык, режим блокировки или Boolean. 0 также означает отсутствие/удаление персонажа или недоступный объект. Сравнивайте с числовым требованием, не = TRUE. Это не предел характеристики и не гарантированное базовое значение без модификаторов.
Поведение
- Поддерживаются () для self и (ObjID) для явного объекта. Других необязательных аргументов нет.
- Читает Player.Intelligence, если Player существует и не уничтожен; иначе 0. Присутствующий мёртвый персонаж не является удалённым объектом. Характеристика не вычисляется из HP, маны или выносливости.
- GetStr/GetInt/GetDex принимают ObjID. Данные PlayerMobile доступны только для self; для другого serial — 0, даже для загруженного mobile. Это ограничение относительно общего описания Stealth; чужая характеристика не подставляется и не угадывается.
- Invoke читает на игровом потоке с возможностью отменить ожидание скриптом. Не запрашивает status, не открывает target, не посылает пакет, не меняет характеристику и не добавляет задержку.
- Каждый вызов читает локальные данные заново. Переменная хранит снимок; отдельные чтения могут получить разные обновления сервера. Ненулевой результат не проверяет подключение. Ноль может быть значением либо отсутствием данных.
- Равнозначные имена характеристики с UO. и без него, без учёта регистра:
Int Intelligence GetInt GetIntelligence. - Int(value) без UO. округляет BASIC-число вниз, Str(value) без UO. форматирует значение в текст. Это другие операции, чем UO.Int()/UO.Str(), читающие характеристики. GetInt(ObjID) не округляет число.
- ExecuteStealthCompatibility.Arg сначала разрешает имя объекта, затем преобразует число. Неизвестная нечисловая строка вызывает ошибку преобразования, не прицел. Decimal приводится к Integer, Array/Unit — к 0. Для выбора персонажа используйте корректный serial, не такие преобразования.
Внутренние функции: от вызова до результата
Ниже реальные этапы чтения. AttributeAtLeast — полностью определённая пользовательская BASIC-функция из примера, не скрытая встроенная API и не изменение характеристики.
1. RegisterCharacterGetterAliases
RegisterCharacterGetterAliases регистрирует отсутствующие функции без аргументов и встроенные имена. Имеющиеся ветки совместимости выбирают свой getter; оба пути возвращают Integer. Имя без скобок читается заново, если его не перекрыла переменная скрипта.
Равнозначные имена характеристики с UO. и без него, без учёта регистра: Int Intelligence GetInt GetIntelligence.
Исходник проекта: external/InjectionScript/src/InjectionScript/Runtime/InjectionApiUO.cs; функция RegisterCharacterGetterAliases.
2. ExecuteStealthCompatibility
ObjID только в показанной форме с одним аргументом: serial персонажа числом, десятичной/0x hex-строкой, "self", "lasttarget" или именем AddObject. Выбирает объект, не graphic/type. Без аргумента читается текущий персонаж.
ExecuteStealthCompatibility.Arg сначала разрешает имя объекта, затем преобразует число. Неизвестная нечисловая строка вызывает ошибку преобразования, не прицел. Decimal приводится к Integer, Array/Unit — к 0. Для выбора персонажа используйте корректный serial, не такие преобразования.
Исходник проекта: external/InjectionScript/src/InjectionScript/Runtime/InjectionApiUO.cs; функция ExecuteStealthCompatibility.
3. GetIntelligence
GetStr/GetInt/GetDex принимают ObjID. Данные PlayerMobile доступны только для self; для другого serial — 0, даже для загруженного mobile. Это ограничение относительно общего описания Stealth; чужая характеристика не подставляется и не угадывается.
Читает Player.Intelligence, если Player существует и не уничтожен; иначе 0. Присутствующий мёртвый персонаж не является удалённым объектом. Характеристика не вычисляется из HP, маны или выносливости.
Исходник проекта: src/ClassicUO.Client/Game/Managers/ClassicUOInjectionApiBridge.cs; функция GetIntelligence.
4. Invoke
Читает Player.Intelligence, если Player существует и не уничтожен; иначе 0. Присутствующий мёртвый персонаж не является удалённым объектом. Характеристика не вычисляется из HP, маны или выносливости. Invoke читает на игровом потоке с возможностью отменить ожидание скриптом. Не запрашивает status, не открывает target, не посылает пакет, не меняет характеристику и не добавляет задержку.
Integer — текущие очки характеристики, 0..65535 в модели клиента; не процент, ID, навык, режим блокировки или Boolean. 0 также означает отсутствие/удаление персонажа или недоступный объект. Сравнивайте с числовым требованием, не = TRUE. Это не предел характеристики и не гарантированное базовое значение без модификаторов. Каждый вызов читает локальные данные заново. Переменная хранит снимок; отдельные чтения могут получить разные обновления сервера. Ненулевой результат не проверяет подключение. Ноль может быть значением либо отсутствием данных.
Исходник проекта: src/ClassicUO.Client/Game/Managers/ClassicUOInjectionApiBridge.cs; функция Invoke.
5. CharacterStatus
CharacterStatus записывает полученное поле STR/DEX/INT в Player.Intelligence при обработке подходящего status-пакета собственного персонажа. Команды читают этот кэш и не ждут нового пакета.
Invoke читает на игровом потоке с возможностью отменить ожидание скриптом. Не запрашивает status, не открывает target, не посылает пакет, не меняет характеристику и не добавляет задержку.
Исходник проекта: src/ClassicUO.Client/Network/PacketHandlers.cs; функция CharacterStatus.
6. Clear
World.Clear удаляет Player. Далее возвращается 0, пока не появятся текущий персонаж и его данные. Сохранённое значение не доказывает выполнение требования после переподключения.
Integer — текущие очки характеристики, 0..65535 в модели клиента; не процент, ID, навык, режим блокировки или Boolean. 0 также означает отсутствие/удаление персонажа или недоступный объект. Сравнивайте с числовым требованием, не = TRUE. Это не предел характеристики и не гарантированное базовое значение без модификаторов.
Исходник проекта: src/ClassicUO.Client/Game/World.cs; функция Clear.
World.Clear удаляет Player. Далее возвращается 0, пока не появятся текущий персонаж и его данные. Сохранённое значение не доказывает выполнение требования после переподключения.
Примеры
Пример 1. Прочитать и вывести очки
# Прочитать и вывести очки
#
# Читает текущий интеллект (Intelligence, INT) персонажа.
#
# Integer — текущие очки характеристики, 0..65535 в модели клиента; не процент, ID, навык, режим
# блокировки или Boolean. 0 также означает отсутствие/удаление персонажа или недоступный объект.
# Сравнивайте с числовым требованием, не = TRUE. Это не предел характеристики и не
# гарантированное базовое значение без модификаторов.
SUB Main()
# value сохраняет числовой результат; CStr лишь форматирует его для журнала. Аргументов и
# действия персонажа нет.
VAR value = UO.GetInt()
UO.Print('Intelligence: ' + CStr(value))
END SUB
Разбор параметров и выполнения:
- value сохраняет числовой результат; CStr лишь форматирует его для журнала. Аргументов и действия персонажа нет.
Пример 2. Сравнить два снимка
# Сравнить два снимка
#
# Читает текущий интеллект (Intelligence, INT) персонажа.
#
# Integer — текущие очки характеристики, 0..65535 в модели клиента; не процент, ID, навык, режим
# блокировки или Boolean. 0 также означает отсутствие/удаление персонажа или недоступный объект.
# Сравнивайте с числовым требованием, не = TRUE. Это не предел характеристики и не
# гарантированное базовое значение без модификаторов.
SUB Main()
# before и after разделяет 1000 мс; WAIT добавлен в пример. change=after-before бывает
# положительным, нулевым или отрицательным. Сам по себе он не различает все промежуточные
# обновления и выход из мира.
VAR before = UO.GetInt()
WAIT(1000)
VAR after = UO.GetInt()
VAR change = after - before
UO.Print('Change: ' + CStr(change))
END SUB
Разбор параметров и выполнения:
- before и after разделяет 1000 мс; WAIT добавлен в пример. change=after-before бывает положительным, нулевым или отрицательным. Сам по себе он не различает все промежуточные обновления и выход из мира.
Пример 3. Полная функция проверки требования
# Полная функция проверки требования
#
# Читает текущий интеллект (Intelligence, INT) персонажа.
#
# Integer — текущие очки характеристики, 0..65535 в модели клиента; не процент, ID, навык, режим
# блокировки или Boolean. 0 также означает отсутствие/удаление персонажа или недоступный объект.
# Сравнивайте с числовым требованием, не = TRUE. Это не предел характеристики и не
# гарантированное базовое значение без модификаторов.
SUB Main()
# minimum=80 — пример требования, не предел клиента. AttributeAtLeast(minimum) отвергает
# отсутствующего персонажа, один раз читает характеристику и возвращает Integer Boolean: 1=TRUE
# или 0=FALSE по условию >= minimum. Логическое значение даёт сравнение, не сама характеристика.
IF AttributeAtLeast(80) = TRUE THEN
UO.Print('Requirement met')
ELSE
UO.Print('Requirement not met or no player')
END IF
END SUB
SUB AttributeAtLeast(minimum)
IF UO.Self() = 0 THEN
RETURN FALSE
END IF
VAR value = UO.GetInt()
RETURN value >= minimum
END SUB
Разбор параметров и выполнения:
- minimum=80 — пример требования, не предел клиента. AttributeAtLeast(minimum) отвергает отсутствующего персонажа, один раз читает характеристику и возвращает Integer Boolean: 1=TRUE или 0=FALSE по условию >= minimum. Логическое значение даёт сравнение, не сама характеристика.
Пример 4. Выбрать персонажа по serial и имени объекта
# Выбрать персонажа по serial и имени объекта
#
# Читает текущий интеллект (Intelligence, INT) персонажа.
#
# Integer — текущие очки характеристики, 0..65535 в модели клиента; не процент, ID, навык, режим
# блокировки или Boolean. 0 также означает отсутствие/удаление персонажа или недоступный объект.
# Сравнивайте с числовым требованием, не = TRUE. Это не предел характеристики и не
# гарантированное базовое значение без модификаторов.
SUB Main()
# id — результат UO.Self(), не type. AddObject сохраняет ID под именем statSubject без прицела,
# поскольку второй аргумент указан. Оба вызова выбирают одного персонажа, но чтения не атомарны.
VAR id = UO.Self()
IF id <> 0 THEN
UO.AddObject('statSubject', id)
VAR direct = UO.GetInt(id)
VAR byName = UO.GetInt('statSubject')
UO.Print('Direct: ' + CStr(direct) + '; alias: ' + CStr(byName))
END IF
END SUB
Разбор параметров и выполнения:
- id — результат UO.Self(), не type. AddObject сохраняет ID под именем statSubject без прицела, поскольку второй аргумент указан. Оба вызова выбирают одного персонажа, но чтения не атомарны.