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

UO.Weight

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

ClassicUO • Runtime API

Читает счётчик статуса своего персонажа: текущий вес в stones.

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

UO.Weight() -> Integer

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

Параметры

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

Возвращает

Integer — текущий вес в stones, 0..65535 в модели клиента. 0 может быть реальным значением, отсутствием данных либо отсутствующим/уничтоженным Player. Это количество, не Boolean, ID или type: 1 означает одну единицу, а не успех. Команда не перебирает объекты и не возвращает массив.

Поведение

  • Команда не принимает аргументов. Используйте точные сигнатуры выше.
  • Чтение в игровом потоке берёт Player.Weight, если текущий Player существует и не уничтожен; иначе 0. Экипировка не перебирается, бонусы не пересчитываются, статус не запрашивается, ожидания обновления нет. Присутствующий призрак не равен уничтоженному Player.
  • Weight читает общий вес, сообщённый сервером, в stones. Какие веса тела, экипировки и вложенных сумок входят в сумму, определяют правила шарда. Команда не обходит контейнеры, не суммирует веса предметов и не обновляет закрытые сумки. Это не свойство Weight отдельного предмета и не число items.
  • CharacterStatus проверяет обязательное тело до обновления. Weight есть в собственном расширенном статусе, слоты — с type 3, Luck — с type 4, серверный WeightMax — с type 5. Компактный/старый пакет без необязательного счётчика оставляет его предыдущий кэш. Новый Player начинает с нулей; вызов не доказывает получение свежего статуса.
  • RegisterCharacterGetterAliases добавляет отсутствующие функции без аргументов и встроенные имена для поля. Существующие ветки совместимости читают то же поле bridge. Регистр имени не важен; intrinsic без скобок читается заново, если его не перекрыла переменная.
  • Каждый вызов читает локальные данные заново. Переменная хранит снимок; отдельные чтения могут получить разные обновления сервера. Ненулевой результат не проверяет подключение. Ноль может быть значением либо отсутствием данных.

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

Внутренние этапы чтения кэшированного счётчика. Полностью объявленная функция CanCarry, LuckAtLeast либо CanAddFollower в примере — пользовательский BASIC, а не скрытое нативное действие. Она не меняет инвентарь или питомцев.

1. RegisterCharacterGetterAliases

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

Weight GetWeight.

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

2. Invoke

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

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

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

3. CharacterStatus

CharacterStatus проверяет обязательное тело до обновления. Weight есть в собственном расширенном статусе, слоты — с type 3, Luck — с type 4, серверный WeightMax — с type 5. Компактный/старый пакет без необязательного счётчика оставляет его предыдущий кэш. Новый Player начинает с нулей; вызов не доказывает получение свежего статуса.

Weight читает общий вес, сообщённый сервером, в stones. Какие веса тела, экипировки и вложенных сумок входят в сумму, определяют правила шарда. Команда не обходит контейнеры, не суммирует веса предметов и не обновляет закрытые сумки. Это не свойство Weight отдельного предмета и не число items.

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

4. Clear

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

Integer — текущий вес в stones, 0..65535 в модели клиента. 0 может быть реальным значением, отсутствием данных либо отсутствующим/уничтоженным Player. Это количество, не Boolean, ID или type: 1 означает одну единицу, а не успех. Команда не перебирает объекты и не возвращает массив.

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

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

Примеры

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

# Вывести сохранённый счётчик
#
# Читает счётчик статуса своего персонажа: текущий вес в stones.
#
# Integer — текущий вес в stones, 0..65535 в модели клиента. 0 может быть реальным значением,
# отсутствием данных либо отсутствующим/уничтоженным Player. Это количество, не Boolean, ID или
# type: 1 означает одну единицу, а не успех. Команда не перебирает объекты и не возвращает
# массив.

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

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

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

  • value хранит один вызов без аргументов для собственного персонажа; CStr форматирует число для журнала, не меняя его смысл.

Пример 2. Наблюдать изменение

# Наблюдать изменение
#
# Читает счётчик статуса своего персонажа: текущий вес в stones.
#
# Integer — текущий вес в stones, 0..65535 в модели клиента. 0 может быть реальным значением,
# отсутствием данных либо отсутствующим/уничтоженным Player. Это количество, не Boolean, ID или
# type: 1 означает одну единицу, а не успех. Команда не перебирает объекты и не возвращает
# массив.

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

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

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

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

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

# Полная вспомогательная функция
#
# Читает счётчик статуса своего персонажа: текущий вес в stones.
#
# Integer — текущий вес в stones, 0..65535 в модели клиента. 0 может быть реальным значением,
# отсутствием данных либо отсутствующим/уничтоженным Player. Это количество, не Boolean, ID или
# type: 1 означает одну единицу, а не успех. Команда не перебирает объекты и не возвращает
# массив.

SUB Main()
    # CanCarry(extra) получает дополнительный вес в stones; 10 — пример, не число стопок. Отвергает
    # отрицательный extra, отсутствие Player или maximum <= 0, читает текущий вес и предел, затем
    # возвращает Integer Boolean: 1=TRUE либо 0=FALSE по extra <= maximum - current. Вычитание
    # избегает переполнения current + extra. При перегрузе результат false даже для extra=0. Это
    # локальная оценка, не разрешение сервера; чтения не атомарны, а нулевой вес может быть
    # неизвестным.

    IF CanCarry(10) = TRUE THEN
        UO.Print('Local check passed')
    ELSE
        UO.Print('Local check failed or data unavailable')
    END IF
END SUB

SUB CanCarry(extra)
    IF extra < 0 OR UO.Self() = 0 THEN
        RETURN FALSE
    END IF
    VAR current = UO.Weight()
    VAR maximum = UO.MaxWeight()
    IF maximum <= 0 THEN
        RETURN FALSE
    END IF
    RETURN extra <= maximum - current
END SUB

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

  • CanCarry(extra) получает дополнительный вес в stones; 10 — пример, не число стопок. Отвергает отрицательный extra, отсутствие Player или maximum <= 0, читает текущий вес и предел, затем возвращает Integer Boolean: 1=TRUE либо 0=FALSE по extra <= maximum - current. Вычитание избегает переполнения current + extra. При перегрузе результат false даже для extra=0. Это локальная оценка, не разрешение сервера; чтения не атомарны, а нулевой вес может быть неизвестным.