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

UO.Gold

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

ClassicUO • Runtime API

Читает количество золота из статуса текущего персонажа.

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

UO.Gold() -> Any

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

Параметры

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

Возвращает

Integer/Decimal — неотрицательная сумма 0..4294967295. До 2147483647 включительно возвращается Integer, выше — Decimal (Double), точно представляющий любое 32-битное беззнаковое целое. 0 также означает отсутствие текущего неудалённого Player или полученной суммы. Это не Boolean, ID, число стопок или обход рюкзака/банка.

Поведение

  • Параметров нет. Читает кэш Player.Gold из CharacterStatus (0x11). Сервер определяет, какое золото входит в его счётчик; команда не перебирает вложенные сумки и не запрашивает банковский баланс. Нет/уничтожен Player — 0; присутствующий призрак может сохранять сумму статуса.
  • ReadGoldValue один раз читает bridge.Gold. Старый C# bridge сохраняет сигнатуру Int32 и передаёт биты UInt32. unchecked-преобразование восстанавливает беззнаковую сумму; малая сумма оборачивается в Integer, большая — в Decimal. Старший бит больше не превращает баланс в отрицательный. Преобразование локальное, пакетов нет.
  • Для сравнения больших сумм сохраняйте числовой результат. Не переводите его принудительно в CInt/CLng: здесь это 32-битный Integer. Большой BASIC-литерал пишите с точкой, например 3000000000.0. Снимок может устареть до покупки; CanAfford — локальная проверка, не разрешение сервера.
  • Каждый вызов читает локальные данные заново. Переменная хранит снимок; отдельные чтения могут получить разные обновления сервера. Ненулевой результат не проверяет подключение. Ноль может быть значением либо отсутствием данных.

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

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

1. RegisterCharacterGetterAliases

RegisterCharacterGetterAliases добавляет отсутствующие Gold/GetGold и встроенные имена. Ветка совместимости UO.Gold и её intrinsic используют тот же ReadGoldValue. Встроенные имена читаются заново, если их не перекрыли переменные.

Integer/Decimal — неотрицательная сумма 0..4294967295. До 2147483647 включительно возвращается Integer, выше — Decimal (Double), точно представляющий любое 32-битное беззнаковое целое. 0 также означает отсутствие текущего неудалённого Player или полученной суммы. Это не Boolean, ID, число стопок или обход рюкзака/банка.

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

2. ReadGoldValue

ReadGoldValue один раз читает bridge.Gold. Старый C# bridge сохраняет сигнатуру Int32 и передаёт биты UInt32. unchecked-преобразование восстанавливает беззнаковую сумму; малая сумма оборачивается в Integer, большая — в Decimal. Старший бит больше не превращает баланс в отрицательный. Преобразование локальное, пакетов нет.

Для сравнения больших сумм сохраняйте числовой результат. Не переводите его принудительно в CInt/CLng: здесь это 32-битный Integer. Большой BASIC-литерал пишите с точкой, например 3000000000.0. Снимок может устареть до покупки; CanAfford — локальная проверка, не разрешение сервера.

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

3. Invoke

Параметров нет. Читает кэш Player.Gold из CharacterStatus (0x11). Сервер определяет, какое золото входит в его счётчик; команда не перебирает вложенные сумки и не запрашивает банковский баланс. Нет/уничтожен Player — 0; присутствующий призрак может сохранять сумму статуса.

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

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

4. CharacterStatus

Параметров нет. Читает кэш Player.Gold из CharacterStatus (0x11). Сервер определяет, какое золото входит в его счётчик; команда не перебирает вложенные сумки и не запрашивает банковский баланс. Нет/уничтожен Player — 0; присутствующий призрак может сохранять сумму статуса.

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

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

5. Clear

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

Integer/Decimal — неотрицательная сумма 0..4294967295. До 2147483647 включительно возвращается Integer, выше — Decimal (Double), точно представляющий любое 32-битное беззнаковое целое. 0 также означает отсутствие текущего неудалённого Player или полученной суммы. Это не Boolean, ID, число стопок или обход рюкзака/банка.

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

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

Примеры

Пример 1. Вывести полученную сумму

# Вывести полученную сумму
#
# Читает количество золота из статуса текущего персонажа.
#
# Integer/Decimal — неотрицательная сумма 0..4294967295. До 2147483647 включительно возвращается
# Integer, выше — Decimal (Double), точно представляющий любое 32-битное беззнаковое целое. 0
# также означает отсутствие текущего неудалённого Player или полученной суммы. Это не Boolean,
# ID, число стопок или обход рюкзака/банка.

SUB Main()
    # amount хранит один результат; CStr форматирует его для журнала. Золото не ищется, не
    # переносится и не тратится.

    VAR amount = UO.Gold()
    UO.Print('Status gold: ' + CStr(amount))
END SUB

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

  • amount хранит один результат; CStr форматирует его для журнала. Золото не ищется, не переносится и не тратится.

Пример 2. Полная функция CanAfford с большой ценой

# Полная функция CanAfford с большой ценой
#
# Читает количество золота из статуса текущего персонажа.
#
# Integer/Decimal — неотрицательная сумма 0..4294967295. До 2147483647 включительно возвращается
# Integer, выше — Decimal (Double), точно представляющий любое 32-битное беззнаковое целое. 0
# также означает отсутствие текущего неудалённого Player или полученной суммы. Это не Boolean,
# ID, число стопок или обход рюкзака/банка.

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

    VAR price = 3000000000.0
    IF CanAfford(price) = TRUE THEN
        UO.Print('Local balance is sufficient')
    ELSE
        UO.Print('Local check failed')
    END IF
END SUB

SUB CanAfford(price)
    IF price < 0 OR UO.Self() = 0 THEN
        RETURN FALSE
    END IF
    VAR amount = UO.Gold()
    RETURN amount >= price
END SUB

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

  • price=3000000000.0 — пример цены, не предел. CanAfford(price) отвергает отрицательную цену или отсутствие Player, один раз читает сумму и возвращает Integer Boolean: 1=TRUE либо 0=FALSE по условию amount >= price. Сама сумма не Boolean. Функция полностью определена ниже.

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

# Наблюдать изменение баланса
#
# Читает количество золота из статуса текущего персонажа.
#
# Integer/Decimal — неотрицательная сумма 0..4294967295. До 2147483647 включительно возвращается
# Integer, выше — Decimal (Double), точно представляющий любое 32-битное беззнаковое целое. 0
# также означает отсутствие текущего неудалённого Player или полученной суммы. Это не Boolean,
# ID, число стопок или обход рюкзака/банка.

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

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

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

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