API UO GetGold - LIHACHTETAN/ClassicUO-BadNewbie-BasicIDE GitHub Wiki
UO.GetGold
Оглавление · Алфавитный указатель · Character
ClassicUO • Runtime API
Читает количество золота из статуса текущего персонажа.
Точный синтаксис
UO.GetGold() -> 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.GetGold()
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.GetGold()
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.GetGold()
WAIT(500)
VAR after = UO.GetGold()
VAR difference = after - before
UO.Print('Balance change: ' + CStr(difference))
END SUB
Разбор параметров и выполнения:
- before/after разделяет WAIT(500) миллисекунд. difference=after-before может быть отрицательной при уменьшении баланса; это не исправленное переполнение беззнакового счётчика. Промежуточные обновления и смена персонажа могут быть пропущены.