API UO Followers - LIHACHTETAN/ClassicUO-BadNewbie-BasicIDE GitHub Wiki
UO.Followers
Оглавление · Алфавитный указатель · Mobiles
ClassicUO • Runtime API
Читает счётчик статуса своего персонажа: занятые слоты управления питомцами.
Точный синтаксис
UO.Followers() -> Integer
Выберите одну из зарегистрированных форм. Параметры передаются позиционно. Any означает значение BASIC с преобразованием внутри команды; Unit — отсутствие возвращаемого значения.
Параметры
Параметров нет.
Возвращает
Integer — занятые слоты управления питомцами, 0..255 в модели клиента. 0 может быть реальным значением, отсутствием данных либо отсутствующим/уничтоженным Player. Это количество, не Boolean, ID или type: 1 означает одну единицу, а не успех. Команда не перебирает объекты и не возвращает массив.
Поведение
- Команда не принимает аргументов. Используйте точные сигнатуры выше.
- Чтение в игровом потоке берёт Player.Followers, если текущий Player существует и не уничтожен; иначе 0. Экипировка не перебирается, бонусы не пересчитываются, статус не запрашивается, ожидания обновления нет. Присутствующий призрак не равен уничтоженному Player.
- PetsCurrent/Followers сообщает занятые слоты управления из своего статуса type >= 3. Один питомец может занимать несколько слотов; правила для призванных и приручённых существ задаёт сервер. Это не число видимых mobile, не список ID питомцев и не число животных рядом.
- CharacterStatus проверяет обязательное тело до обновления. Weight есть в собственном расширенном статусе, слоты — с type 3, Luck — с type 4, серверный WeightMax — с type 5. Компактный/старый пакет без необязательного счётчика оставляет его предыдущий кэш. Новый Player начинает с нулей; вызов не доказывает получение свежего статуса.
- RegisterCharacterGetterAliases добавляет отсутствующие функции без аргументов и встроенные имена для поля. Существующие ветки совместимости читают то же поле bridge. Регистр имени не важен; intrinsic без скобок читается заново, если его не перекрыла переменная.
- Каждый вызов читает локальные данные заново. Переменная хранит снимок; отдельные чтения могут получить разные обновления сервера. Ненулевой результат не проверяет подключение. Ноль может быть значением либо отсутствием данных.
Внутренние функции: от вызова до результата
Внутренние этапы чтения кэшированного счётчика. Полностью объявленная функция CanCarry, LuckAtLeast либо CanAddFollower в примере — пользовательский BASIC, а не скрытое нативное действие. Она не меняет инвентарь или питомцев.
1. RegisterCharacterGetterAliases
RegisterCharacterGetterAliases добавляет отсутствующие функции без аргументов и встроенные имена для поля. Существующие ветки совместимости читают то же поле bridge. Регистр имени не важен; intrinsic без скобок читается заново, если его не перекрыла переменная.
PetsCurrent Followers GetPetsCurrent GetFollowers.
Исходник проекта: external/InjectionScript/src/InjectionScript/Runtime/InjectionApiUO.cs; функция RegisterCharacterGetterAliases.
2. Invoke
Чтение в игровом потоке берёт Player.Followers, если текущий 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 начинает с нулей; вызов не доказывает получение свежего статуса.
PetsCurrent/Followers сообщает занятые слоты управления из своего статуса type >= 3. Один питомец может занимать несколько слотов; правила для призванных и приручённых существ задаёт сервер. Это не число видимых mobile, не список ID питомцев и не число животных рядом.
Исходник проекта: src/ClassicUO.Client/Network/PacketHandlers.cs; функция CharacterStatus.
4. Clear
World.Clear удаляет Player. Далее возвращается 0, пока не появятся текущий персонаж и его данные. Сохранённое значение не доказывает выполнение требования после переподключения.
Integer — занятые слоты управления питомцами, 0..255 в модели клиента. 0 может быть реальным значением, отсутствием данных либо отсутствующим/уничтоженным Player. Это количество, не Boolean, ID или type: 1 означает одну единицу, а не успех. Команда не перебирает объекты и не возвращает массив.
Исходник проекта: src/ClassicUO.Client/Game/World.cs; функция Clear.
Каждый вызов читает локальные данные заново. Переменная хранит снимок; отдельные чтения могут получить разные обновления сервера. Ненулевой результат не проверяет подключение. Ноль может быть значением либо отсутствием данных.
Примеры
Пример 1. Вывести сохранённый счётчик
# Вывести сохранённый счётчик
#
# Читает счётчик статуса своего персонажа: занятые слоты управления питомцами.
#
# Integer — занятые слоты управления питомцами, 0..255 в модели клиента. 0 может быть реальным
# значением, отсутствием данных либо отсутствующим/уничтоженным Player. Это количество, не
# Boolean, ID или type: 1 означает одну единицу, а не успех. Команда не перебирает объекты и не
# возвращает массив.
SUB Main()
# value хранит один вызов без аргументов для собственного персонажа; CStr форматирует число для
# журнала, не меняя его смысл.
VAR value = UO.Followers()
UO.Print('Followers: ' + CStr(value))
END SUB
Разбор параметров и выполнения:
- value хранит один вызов без аргументов для собственного персонажа; CStr форматирует число для журнала, не меняя его смысл.
Пример 2. Наблюдать изменение
# Наблюдать изменение
#
# Читает счётчик статуса своего персонажа: занятые слоты управления питомцами.
#
# Integer — занятые слоты управления питомцами, 0..255 в модели клиента. 0 может быть реальным
# значением, отсутствием данных либо отсутствующим/уничтоженным Player. Это количество, не
# Boolean, ID или type: 1 означает одну единицу, а не успех. Команда не перебирает объекты и не
# возвращает массив.
SUB Main()
# WAIT(500) разделяет before и after на 500 миллисекунд. difference может быть положительной,
# нулевой или отрицательной; промежуточные обновления и смена персонажа могут быть пропущены.
# Пауза относится к примеру.
VAR before = UO.Followers()
WAIT(500)
VAR after = UO.Followers()
VAR difference = after - before
UO.Print('Counter change: ' + CStr(difference))
END SUB
Разбор параметров и выполнения:
- WAIT(500) разделяет before и after на 500 миллисекунд. difference может быть положительной, нулевой или отрицательной; промежуточные обновления и смена персонажа могут быть пропущены. Пауза относится к примеру.
Пример 3. Полная вспомогательная функция
# Полная вспомогательная функция
#
# Читает счётчик статуса своего персонажа: занятые слоты управления питомцами.
#
# Integer — занятые слоты управления питомцами, 0..255 в модели клиента. 0 может быть реальным
# значением, отсутствием данных либо отсутствующим/уничтоженным Player. Это количество, не
# Boolean, ID или type: 1 означает одну единицу, а не успех. Команда не перебирает объекты и не
# возвращает массив.
SUB Main()
# CanAddFollower(extraSlots) получает требуемые слоты; 2 — пример для одного существа с двумя
# слотами, не обязательно двух существ. Отвергает отрицательное число, отсутствие Player или
# maximum <= 0, читает занятые слоты/предел и возвращает Integer Boolean: 1=TRUE либо 0=FALSE по
# extraSlots <= maximum - current. Нет переполнения сложения; превышение предела даёт false даже
# для нуля. Не проверяет владельца, навык приручения или разрешение сервера. Между чтениями
# возможны обновления.
IF CanAddFollower(2) = TRUE THEN
UO.Print('Local check passed')
ELSE
UO.Print('Local check failed or data unavailable')
END IF
END SUB
SUB CanAddFollower(extraSlots)
IF extraSlots < 0 OR UO.Self() = 0 THEN
RETURN FALSE
END IF
VAR current = UO.Followers()
VAR maximum = UO.PetsMax()
IF maximum <= 0 THEN
RETURN FALSE
END IF
RETURN extraSlots <= maximum - current
END SUB
Разбор параметров и выполнения:
- CanAddFollower(extraSlots) получает требуемые слоты; 2 — пример для одного существа с двумя слотами, не обязательно двух существ. Отвергает отрицательное число, отсутствие Player или maximum <= 0, читает занятые слоты/предел и возвращает Integer Boolean: 1=TRUE либо 0=FALSE по extraSlots <= maximum - current. Нет переполнения сложения; превышение предела даёт false даже для нуля. Не проверяет владельца, навык приручения или разрешение сервера. Между чтениями возможны обновления.