API Abs - LIHACHTETAN/ClassicUO-BadNewbie-BasicIDE GitHub Wiki
Abs
Оглавление · Алфавитный указатель · BASIC built-ins
ClassicUO • Runtime API
Возвращает модуль числа.
Точный синтаксис
Abs(value:Any) -> Any
Выберите одну из зарегистрированных форм. Параметры передаются позиционно. Any означает значение BASIC с преобразованием внутри команды; Unit — отсутствие возвращаемого значения.
Параметры
value— Обязательное число Integer/Decimal либо десятичная строка с точкой и необязательной экспонентой, например "-1.25e2". Язык интерфейса не влияет. Нераспознанный текст (включая hex-строку), Unit, Array и Object дают 0; числовой hex-литерал уже является Integer. Возможны NaN/Infinity. Integer сохраняет тип, кроме -2147483648: модуль возвращается как Decimal 2147483648. Decimal/строка дают Decimal. NaN остаётся NaN; обе бесконечности дают положительную.
Возвращает
Integer/Decimal — abs(value). Integer сохраняет тип, кроме -2147483648: модуль возвращается как Decimal 2147483648. Decimal/строка дают Decimal. NaN остаётся NaN; обе бесконечности дают положительную. Число, не ID и не признак успеха; 1/0 здесь нельзя трактовать как выполнено/не выполнено.
Поведение
- Вычисляется локально в потоке скрипта: без запроса серверу, движения, прицела, ожидания и изменения глобальных переменных.
- Decimal хранится как двоичный Double, не .NET decimal. Результат может быть приближённым; сравнивайте конечные дробные значения с допуском. NaN/Infinity не используйте как координаты или количество предметов.
- Integer сохраняет тип, кроме -2147483648: модуль возвращается как Decimal 2147483648. Decimal/строка дают Decimal. NaN остаётся NaN; обе бесконечности дают положительную.
Внутренние функции: от вызова до результата
Ниже реальные этапы регистрации и преобразования. Полные функции примеров показывают полезные формулы скрипта, не заменяя математическую реализацию платформы.
1. Register
Register связывает имя BASIC с одним аргументом с нативным вычислением. После преобразования вызывается System.Math; скрытые скрипты и процедуры сервера не запускаются.
Integer/Decimal — abs(value). Integer сохраняет тип, кроме -2147483648: модуль возвращается как Decimal 2147483648. Decimal/строка дают Decimal. NaN остаётся NaN; обе бесконечности дают положительную. Число, не ID и не признак успеха; 1/0 здесь нельзя трактовать как выполнено/не выполнено.
Исходник проекта: external/InjectionScript/src/InjectionScript/Runtime/InjectionApi.cs; функция Register.
2. BasicDouble
BasicDouble сохраняет Integer/Decimal, читает строку через инвариантный NumberStyles.Float, для неподдерживаемого значения даёт 0. Abs обрабатывает обычный Integer напрямую до перехода к Double.
Обязательное число Integer/Decimal либо десятичная строка с точкой и необязательной экспонентой, например "-1.25e2". Язык интерфейса не влияет. Нераспознанный текст (включая hex-строку), Unit, Array и Object дают 0; числовой hex-литерал уже является Integer. Возможны NaN/Infinity.
Исходник проекта: external/InjectionScript/src/InjectionScript/Runtime/InjectionApi.cs; функция BasicDouble.
3. BasicAbs
Integer сохраняет тип, кроме -2147483648: модуль возвращается как Decimal 2147483648. Decimal/строка дают Decimal. NaN остаётся NaN; обе бесконечности дают положительную.
Integer/Decimal — abs(value). Integer сохраняет тип, кроме -2147483648: модуль возвращается как Decimal 2147483648. Decimal/строка дают Decimal. NaN остаётся NaN; обе бесконечности дают положительную. Число, не ID и не признак успеха; 1/0 здесь нельзя трактовать как выполнено/не выполнено.
Исходник проекта: external/InjectionScript/src/InjectionScript/Runtime/InjectionApi.cs; функция BasicAbs.
Вычисляется локально в потоке скрипта: без запроса серверу, движения, прицела, ожидания и изменения глобальных переменных.
Примеры
Пример 1. Прямое вычисление
# Прямое вычисление
#
# Возвращает модуль числа.
#
# Integer/Decimal — abs(value). Integer сохраняет тип, кроме -2147483648: модуль возвращается
# как Decimal 2147483648. Decimal/строка дают Decimal. NaN остаётся NaN; обе бесконечности дают
# положительную. Число, не ID и не признак успеха; 1/0 здесь нельзя трактовать как выполнено/не
# выполнено.
SUB Main()
# value = -12; ожидается 12 (~ означает приближённо). value хранит результат, CStr лишь
# форматирует его для Print.
VAR value = Abs(-12)
UO.Print(CStr(value))
END SUB
Разбор параметров и выполнения:
- value = -12; ожидается 12 (~ означает приближённо). value хранит результат, CStr лишь форматирует его для Print.
Пример 2. Другой аргумент через переменную
# Другой аргумент через переменную
#
# Возвращает модуль числа.
#
# Integer/Decimal — abs(value). Integer сохраняет тип, кроме -2147483648: модуль возвращается
# как Decimal 2147483648. Decimal/строка дают Decimal. NaN остаётся NaN; обе бесконечности дают
# положительную. Число, не ID и не признак успеха; 1/0 здесь нельзя трактовать как выполнено/не
# выполнено.
SUB Main()
# value = '-2.5'; ожидается 2.5 (~ означает приближённо). value хранит результат, CStr лишь
# форматирует его для Print.
VAR inputValue = '-2.5'
VAR value = Abs(inputValue)
UO.Print(CStr(value))
END SUB
Разбор параметров и выполнения:
- value = '-2.5'; ожидается 2.5 (~ означает приближённо). value хранит результат, CStr лишь форматирует его для Print.
Пример 3. Полная вспомогательная функция
# Полная вспомогательная функция
#
# Возвращает модуль числа.
#
# Integer/Decimal — abs(value). Integer сохраняет тип, кроме -2147483648: модуль возвращается
# как Decimal 2147483648. Decimal/строка дают Decimal. NaN остаётся NaN; обе бесконечности дают
# положительную. Число, не ID и не признак успеха; 1/0 здесь нельзя трактовать как выполнено/не
# выполнено.
# manual-check: scalar-math Abs
SUB Main()
# value/target — числа, tolerance — неотрицательное допустимое отклонение. IsWithin возвращает
# 1/0; отрицательный допуск даёт 0. Только результат этого помощника является Boolean.
VAR value = IsWithin(12,10,2)
UO.Print(CStr(value))
END SUB
SUB IsWithin(value,target,tolerance)
IF tolerance < 0 THEN
RETURN 0
END IF
RETURN Abs(CDbl(value)-CDbl(target)) <= tolerance
END SUB
Разбор параметров и выполнения:
- value/target — числа, tolerance — неотрицательное допустимое отклонение. IsWithin возвращает 1/0; отрицательный допуск даёт 0. Только результат этого помощника является Boolean.