API UO GetStr - LIHACHTETAN/ClassicUO-BadNewbie-BasicIDE GitHub Wiki

UO.GetStr

Оглавление · Алфавитный указатель · Character

ClassicUO • Runtime API

Читает текущую силу (Strength, STR) персонажа.

Точный синтаксис

UO.GetStr() -> Integer
UO.GetStr(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.Strength, если Player существует и не уничтожен; иначе 0. Присутствующий мёртвый персонаж не является удалённым объектом. Характеристика не вычисляется из HP, маны или выносливости.
  • GetStr/GetInt/GetDex принимают ObjID. Данные PlayerMobile доступны только для self; для другого serial — 0, даже для загруженного mobile. Это ограничение относительно общего описания Stealth; чужая характеристика не подставляется и не угадывается.
  • Invoke читает на игровом потоке с возможностью отменить ожидание скриптом. Не запрашивает status, не открывает target, не посылает пакет, не меняет характеристику и не добавляет задержку.
  • Каждый вызов читает локальные данные заново. Переменная хранит снимок; отдельные чтения могут получить разные обновления сервера. Ненулевой результат не проверяет подключение. Ноль может быть значением либо отсутствием данных.
  • Равнозначные имена характеристики с UO. и без него, без учёта регистра: Str Strength GetStr GetStrength.
  • 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. и без него, без учёта регистра: Str Strength GetStr GetStrength.

Исходник проекта: 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. GetStrength

GetStr/GetInt/GetDex принимают ObjID. Данные PlayerMobile доступны только для self; для другого serial — 0, даже для загруженного mobile. Это ограничение относительно общего описания Stealth; чужая характеристика не подставляется и не угадывается.

Читает Player.Strength, если Player существует и не уничтожен; иначе 0. Присутствующий мёртвый персонаж не является удалённым объектом. Характеристика не вычисляется из HP, маны или выносливости.

Исходник проекта: src/ClassicUO.Client/Game/Managers/ClassicUOInjectionApiBridge.cs; функция GetStrength.

4. Invoke

Читает Player.Strength, если 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.Strength при обработке подходящего 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. Прочитать и вывести очки

# Прочитать и вывести очки
#
# Читает текущую силу (Strength, STR) персонажа.
#
# Integer — текущие очки характеристики, 0..65535 в модели клиента; не процент, ID, навык, режим
# блокировки или Boolean. 0 также означает отсутствие/удаление персонажа или недоступный объект.
# Сравнивайте с числовым требованием, не = TRUE. Это не предел характеристики и не
# гарантированное базовое значение без модификаторов.

SUB Main()
    # value сохраняет числовой результат; CStr лишь форматирует его для журнала. Аргументов и
    # действия персонажа нет.

    VAR value = UO.GetStr()
    UO.Print('Strength: ' + CStr(value))
END SUB

Разбор параметров и выполнения:

  • value сохраняет числовой результат; CStr лишь форматирует его для журнала. Аргументов и действия персонажа нет.

Пример 2. Сравнить два снимка

# Сравнить два снимка
#
# Читает текущую силу (Strength, STR) персонажа.
#
# Integer — текущие очки характеристики, 0..65535 в модели клиента; не процент, ID, навык, режим
# блокировки или Boolean. 0 также означает отсутствие/удаление персонажа или недоступный объект.
# Сравнивайте с числовым требованием, не = TRUE. Это не предел характеристики и не
# гарантированное базовое значение без модификаторов.

SUB Main()
    # before и after разделяет 1000 мс; WAIT добавлен в пример. change=after-before бывает
    # положительным, нулевым или отрицательным. Сам по себе он не различает все промежуточные
    # обновления и выход из мира.

    VAR before = UO.GetStr()
    WAIT(1000)
    VAR after = UO.GetStr()
    VAR change = after - before
    UO.Print('Change: ' + CStr(change))
END SUB

Разбор параметров и выполнения:

  • before и after разделяет 1000 мс; WAIT добавлен в пример. change=after-before бывает положительным, нулевым или отрицательным. Сам по себе он не различает все промежуточные обновления и выход из мира.

Пример 3. Полная функция проверки требования

# Полная функция проверки требования
#
# Читает текущую силу (Strength, STR) персонажа.
#
# 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.GetStr()
    RETURN value >= minimum
END SUB

Разбор параметров и выполнения:

  • minimum=80 — пример требования, не предел клиента. AttributeAtLeast(minimum) отвергает отсутствующего персонажа, один раз читает характеристику и возвращает Integer Boolean: 1=TRUE или 0=FALSE по условию >= minimum. Логическое значение даёт сравнение, не сама характеристика.

Пример 4. Выбрать персонажа по serial и имени объекта

# Выбрать персонажа по serial и имени объекта
#
# Читает текущую силу (Strength, STR) персонажа.
#
# 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.GetStr(id)
        VAR byName = UO.GetStr('statSubject')
        UO.Print('Direct: ' + CStr(direct) + '; alias: ' + CStr(byName))
    END IF
END SUB

Разбор параметров и выполнения:

  • id — результат UO.Self(), не type. AddObject сохраняет ID под именем statSubject без прицела, поскольку второй аргумент указан. Оба вызова выбирают одного персонажа, но чтения не атомарны.