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

UO.ColdResist

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

ClassicUO • Runtime API

Читает поле сопротивления текущего персонажа: холод.

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

UO.ColdResist() -> Integer

Выберите одну из зарегистрированных форм. Параметры передаются позиционно. Any означает значение BASIC с преобразованием внутри команды; Unit — отсутствие возвращаемого значения.

Параметры

Параметров нет.

Возвращает

Integer — знаковое значение статуса, -32768..32767 в модели клиента. Отрицательное значение сохраняется. 0 бывает реальным сопротивлением, отсутствием данных либо отсутствующим/уничтоженным Player; GetResist также даёт 0 для неизвестного селектора. Это не Boolean, ID, навык или предел сопротивления. 1 означает один пункт, а не успешное выполнение.

Поведение

  • Команда не принимает аргументов. Используйте точные сигнатуры выше.
  • Чтение в игровом потоке берёт Player.ColdResistance, если текущий Player существует и не уничтожен; иначе 0. Экипировка не перебирается, бонусы не пересчитываются, статус не запрашивается, ожидания обновления нет. Присутствующий призрак не равен уничтоженному Player.
  • Стихийные поля приходят в расширенном CharacterStatus (0x11), type >= 4. Сама команда не проверяет эпоху сервера. Компактный/старый статус без этих полей оставляет предыдущий кэш; у нового Player исходно 0. Сопротивление яду не является флагом Poisoned; это также не навык Resisting Spells.
  • CharacterStatus проверяет обязательное тело до изменения имени, здоровья и собственных характеристик, затем переводит каждое слово сопротивления в знаковый Int16. Обрезанное обязательное тело не меняет прежние данные. Необязательный хвост type 6 сохраняет прежние правила; команды сопротивлений не читают из него максимальные пределы.
  • Каждый вызов читает локальные данные заново. Переменная хранит снимок; отдельные чтения могут получить разные обновления сервера. Ненулевой результат не проверяет подключение. Ноль может быть значением либо отсутствием данных.
  • RegisterCharacterGetterAliases добавляет отсутствующие функции без аргументов и встроенные имена для поля. Существующие ветки совместимости читают то же поле bridge. Регистр имени не важен; intrinsic без скобок читается заново, если его не перекрыла переменная.

Внутренние функции: от вызова до результата

Реальные внутренние этапы локального чтения сопротивления. ResistanceAtLeast ниже — полностью объявленная пользовательская BASIC-функция, а не скрытая встроенная команда или надевание защитной экипировки.

1. RegisterCharacterGetterAliases

RegisterCharacterGetterAliases добавляет отсутствующие функции без аргументов и встроенные имена для поля. Существующие ветки совместимости читают то же поле bridge. Регистр имени не важен; intrinsic без скобок читается заново, если его не перекрыла переменная.

ColdResist ResistCold GetColdResist GetResistCold.

Исходник проекта: external/InjectionScript/src/InjectionScript/Runtime/InjectionApiUO.cs; функция RegisterCharacterGetterAliases.

2. Invoke

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

Invoke читает на игровом потоке с возможностью отменить ожидание скриптом. Не запрашивает status, не открывает target, не посылает пакет, не меняет характеристику и не добавляет задержку.

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

3. CharacterStatus

CharacterStatus проверяет обязательное тело до изменения имени, здоровья и собственных характеристик, затем переводит каждое слово сопротивления в знаковый Int16. Обрезанное обязательное тело не меняет прежние данные. Необязательный хвост type 6 сохраняет прежние правила; команды сопротивлений не читают из него максимальные пределы.

Стихийные поля приходят в расширенном CharacterStatus (0x11), type >= 4. Сама команда не проверяет эпоху сервера. Компактный/старый статус без этих полей оставляет предыдущий кэш; у нового Player исходно 0. Сопротивление яду не является флагом Poisoned; это также не навык Resisting Spells.

Исходник проекта: src/ClassicUO.Client/Network/PacketHandlers.cs; функция CharacterStatus.

4. Clear

World.Clear удаляет Player. Далее возвращается 0, пока не появятся текущий персонаж и его данные. Сохранённое значение не доказывает выполнение требования после переподключения.

Integer — знаковое значение статуса, -32768..32767 в модели клиента. Отрицательное значение сохраняется. 0 бывает реальным сопротивлением, отсутствием данных либо отсутствующим/уничтоженным Player; GetResist также даёт 0 для неизвестного селектора. Это не Boolean, ID, навык или предел сопротивления. 1 означает один пункт, а не успешное выполнение.

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

Каждый вызов читает локальные данные заново. Переменная хранит снимок; отдельные чтения могут получить разные обновления сервера. Ненулевой результат не проверяет подключение. Ноль может быть значением либо отсутствием данных.

Примеры

Пример 1. Вывести сохранённое значение

# Вывести сохранённое значение
#
# Читает поле сопротивления текущего персонажа: холод.
#
# Integer — знаковое значение статуса, -32768..32767 в модели клиента. Отрицательное значение
# сохраняется. 0 бывает реальным сопротивлением, отсутствием данных либо
# отсутствующим/уничтоженным Player; GetResist также даёт 0 для неизвестного селектора. Это не
# Boolean, ID, навык или предел сопротивления. 1 означает один пункт, а не успешное выполнение.

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

    VAR value = UO.ColdResist()
    UO.Print('ColdResistance: ' + CStr(value))
END SUB

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

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

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

# Сравнить два снимка
#
# Читает поле сопротивления текущего персонажа: холод.
#
# Integer — знаковое значение статуса, -32768..32767 в модели клиента. Отрицательное значение
# сохраняется. 0 бывает реальным сопротивлением, отсутствием данных либо
# отсутствующим/уничтоженным Player; GetResist также даёт 0 для неизвестного селектора. Это не
# Boolean, ID, навык или предел сопротивления. 1 означает один пункт, а не успешное выполнение.

SUB Main()
    # Между before и after стоит WAIT(500) миллисекунд; difference может быть отрицательной.
    # Промежуточные обновления могут быть пропущены. Пауза относится к примеру, не к задержке API.

    VAR before = UO.ColdResist()
    WAIT(500)
    VAR after = UO.ColdResist()
    VAR difference = after - before
    UO.Print('Resistance change: ' + CStr(difference))
END SUB

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

  • Между before и after стоит WAIT(500) миллисекунд; difference может быть отрицательной. Промежуточные обновления могут быть пропущены. Пауза относится к примеру, не к задержке API.

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

# Полная функция проверки минимального сопротивления
#
# Читает поле сопротивления текущего персонажа: холод.
#
# Integer — знаковое значение статуса, -32768..32767 в модели клиента. Отрицательное значение
# сохраняется. 0 бывает реальным сопротивлением, отсутствием данных либо
# отсутствующим/уничтоженным Player; GetResist также даёт 0 для неизвестного селектора. Это не
# Boolean, ID, навык или предел сопротивления. 1 означает один пункт, а не успешное выполнение.

SUB Main()
    # minimum=50 — пример требования, не предел клиента. ResistanceAtLeast отвергает отсутствующий
    # Player, читает одно значение и возвращает Integer Boolean: 1=TRUE либо 0=FALSE по условию
    # value >= minimum. Само сопротивление не Boolean. Функция полностью объявлена ниже.

    IF ResistanceAtLeast(50) = TRUE THEN
        UO.Print('Local resistance requirement met')
    ELSE
        UO.Print('Requirement not met or no player')
    END IF
END SUB

SUB ResistanceAtLeast(minimum)
    IF UO.Self() = 0 THEN
        RETURN FALSE
    END IF
    VAR value = UO.ColdResist()
    RETURN value >= minimum
END SUB

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

  • minimum=50 — пример требования, не предел клиента. ResistanceAtLeast отвергает отсутствующий Player, читает одно значение и возвращает Integer Boolean: 1=TRUE либо 0=FALSE по условию value >= minimum. Само сопротивление не Boolean. Функция полностью объявлена ниже.