Skip to content

API UO Followers

Codex edited this page Sep 22, 2026 · 6 revisions

UO.Followers

ClassicUO / Basic IDE

Home · Все команды · Каталоги

Помогает заранее решить, хватит ли персонажу места для следующего приручённого или призванного существа. Followers показывает занятые слоты управления, FollowersMax — их общий предел. Это не число животных рядом и не команда движения Follow.

Читает счётчик статуса своего персонажа: занятые слоты управления питомцами.

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

UO.Followers() -> Integer

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

Параметры

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

Возвращает

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

Поведение

  • Например, занято 3 из 5 — свободно 2 слота. Значение 4 может означать четыре существа по одному слоту, одно на четыре либо другую комбинацию. Для существа на 2 слота проверки «занято < максимум» недостаточно: нужно maximum - current >= 2. Стоимость конкретного существа и лимит определяет сервер; не подставляйте постоянное 5 вместо FollowersMax.
  • 0 не доказывает, что питомец потерян, умер или отпущен: это может быть пустой либо ещё не обновлённый статус. Увеличение счётчика — лишь дополнительный признак изменения контроля; оно не определяет, какое существо приручено. Проверяйте также сообщения сервера и самого питомца. Эти слоты не равны местам в конюшне.
  • Команда не принимает аргументов. Используйте точные сигнатуры выше.
  • Чтение в игровом потоке берёт 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. Посчитать доступные слоты перед выходом

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

SUB Main()
    # currentзанято, maximumпредел, freeSlotsразница. При неизвестном/нулевом пределе или
    # противоречивых данных пример прекращается, не утверждая, что место свободно. Команда только
    # читает последний статус, не запрашивает новое обновление.

    VAR current = UO.Followers()
    VAR maximum = UO.FollowersMax()
    IF UO.Self() = 0 OR maximum <= 0 OR current > maximum THEN
        UO.Print("Follower status is unavailable or inconsistent")
        RETURN
    END IF
    VAR freeSlots = maximum - current
    UO.Print("Control slots: " + CStr(current) + "/" + CStr(maximum))
    UO.Print("Free slots: " + CStr(freeSlots))
END SUB

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

  • current — занято, maximum — предел, freeSlots — разница. При неизвестном/нулевом пределе или противоречивых данных пример прекращается, не утверждая, что место свободно. Команда только читает последний статус, не запрашивает новое обновление.

Пример 2. Проверить вместимость перед Animal Taming

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

SUB Main()
    # Сначала выберите нужное животное, чтобы его ID был в lasttarget. requiredSlots=2настройка
    # примера, замените её реальной стоимостью этого существа на вашем сервере. При нехватке места
    # не ставится target и не вызывается навык. Иначе очередь цели готовится ДО единственного
    # аргумента UseSkill("Animal Taming"). Начало попытки не гарантирует успеха: важны навык,
    # дальность, приручаемость и ответ сервера.

    VAR requiredSlots = 2
    VAR current = UO.Followers()
    VAR maximum = UO.FollowersMax()
    IF UO.Self() = 0 OR maximum <= 0 OR maximum - current < requiredSlots THEN
        UO.Print("Not enough known control slots")
        RETURN
    END IF
    VAR animal = UO.LastTarget()
    IF animal = 0 THEN
        UO.Print("Select the animal first")
        RETURN
    END IF
    UO.WaitTargetObject(animal)
    UO.UseSkill("Animal Taming")
END SUB

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

  • Сначала выберите нужное животное, чтобы его ID был в lasttarget. requiredSlots=2 — настройка примера, замените её реальной стоимостью этого существа на вашем сервере. При нехватке места не ставится target и не вызывается навык. Иначе очередь цели готовится ДО единственного аргумента UseSkill("Animal Taming"). Начало попытки не гарантирует успеха: важны навык, дальность, приручаемость и ответ сервера.

Пример 3. Переиспользовать проверку для существ разной стоимости

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

SUB Main()
    # CanAddFollowerполностью объявленный пользовательский помощник, не новая UO-команда. Он
    # возвращает 1/True при достаточном кэшированном лимите, иначе 0/False. Параметр extraSlots# стоимость ДОБАВЛЯЕМОГО существа, не его type/ID. 2пример; функция не приручает и не
    # призывает. Проверку следует повторить непосредственно перед действием.

    IF CanAddFollower(2) THEN
        UO.Print("Capacity check passed; verify the creature cost before acting")
    ELSE
        UO.Print("Insufficient capacity or unavailable status")
    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 — полностью объявленный пользовательский помощник, не новая UO-команда. Он возвращает 1/True при достаточном кэшированном лимите, иначе 0/False. Параметр extraSlots — стоимость ДОБАВЛЯЕМОГО существа, не его type/ID. 2 — пример; функция не приручает и не призывает. Проверку следует повторить непосредственно перед действием.

Русский · English · Українська · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어

Clone this wiki locally