-
Notifications
You must be signed in to change notification settings - Fork 0
API Fix
Оглавление · Алфавитный указатель · BASIC built-ins
ClassicUO • Runtime API
Отбрасывает дробную часть к нулю.
Fix(value:Any) -> Integer
Выберите одну из зарегистрированных форм. Параметры передаются позиционно. Any означает значение BASIC с преобразованием внутри команды; Unit — отсутствие возвращаемого значения.
-
value— Обязательное число Integer/Decimal либо десятичная строка с точкой и необязательной экспонентой, например "-1.25e2". Язык интерфейса не влияет. Нераспознанный текст (включая hex-строку), Unit, Array и Object дают 0; числовой hex-литерал уже является Integer. Возможны NaN/Infinity. Только конечный вход с результатом в -2147483648..2147483647. -2.9 даёт -2, в отличие от floor(-2.9)=-3. Вне диапазона и NaN/Infinity не являются допустимым входом преобразования.
Integer — truncate(value). Только конечный вход с результатом в -2147483648..2147483647. -2.9 даёт -2, в отличие от floor(-2.9)=-3. Вне диапазона и NaN/Infinity не являются допустимым входом преобразования. Число, не ID и не признак успеха; 1/0 здесь нельзя трактовать как выполнено/не выполнено.
- Вычисляется локально в потоке скрипта: без запроса серверу, движения, прицела, ожидания и изменения глобальных переменных.
- Decimal хранится как двоичный Double, не .NET decimal. Результат может быть приближённым; сравнивайте конечные дробные значения с допуском. NaN/Infinity не используйте как координаты или количество предметов.
- Только конечный вход с результатом в -2147483648..2147483647. -2.9 даёт -2, в отличие от floor(-2.9)=-3. Вне диапазона и NaN/Infinity не являются допустимым входом преобразования.
Ниже реальные этапы регистрации и преобразования. Полные функции примеров показывают полезные формулы скрипта, не заменяя математическую реализацию платформы.
Register связывает имя BASIC с одним аргументом с нативным вычислением. После преобразования вызывается System.Math; скрытые скрипты и процедуры сервера не запускаются.
Integer — truncate(value). Только конечный вход с результатом в -2147483648..2147483647. -2.9 даёт -2, в отличие от floor(-2.9)=-3. Вне диапазона и NaN/Infinity не являются допустимым входом преобразования. Число, не ID и не признак успеха; 1/0 здесь нельзя трактовать как выполнено/не выполнено.
Исходник проекта: external/InjectionScript/src/InjectionScript/Runtime/InjectionApi.cs; функция Register.
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.
Вычисляется локально в потоке скрипта: без запроса серверу, движения, прицела, ожидания и изменения глобальных переменных.
# Прямое вычисление
#
# Отбрасывает дробную часть к нулю.
#
# Integer — truncate(value). Только конечный вход с результатом в -2147483648..2147483647. -2.9
# даёт -2, в отличие от floor(-2.9)=-3. Вне диапазона и NaN/Infinity не являются допустимым
# входом преобразования. Число, не ID и не признак успеха; 1/0 здесь нельзя трактовать как
# выполнено/не выполнено.
SUB Main()
# value = 2.9; ожидается 2 (~ означает приближённо). value хранит результат, CStr лишь
# форматирует его для Print.
VAR value = Fix(2.9)
UO.Print(CStr(value))
END SUBРазбор параметров и выполнения:
- value = 2.9; ожидается 2 (~ означает приближённо). value хранит результат, CStr лишь форматирует его для Print.
# Другой аргумент через переменную
#
# Отбрасывает дробную часть к нулю.
#
# Integer — truncate(value). Только конечный вход с результатом в -2147483648..2147483647. -2.9
# даёт -2, в отличие от floor(-2.9)=-3. Вне диапазона и NaN/Infinity не являются допустимым
# входом преобразования. Число, не ID и не признак успеха; 1/0 здесь нельзя трактовать как
# выполнено/не выполнено.
SUB Main()
# value = -2.9; ожидается -2 (~ означает приближённо). value хранит результат, CStr лишь
# форматирует его для Print.
VAR inputValue = -2.9
VAR value = Fix(inputValue)
UO.Print(CStr(value))
END SUBРазбор параметров и выполнения:
- value = -2.9; ожидается -2 (~ означает приближённо). value хранит результат, CStr лишь форматирует его для Print.
# Полная вспомогательная функция
#
# Отбрасывает дробную часть к нулю.
#
# Integer — truncate(value). Только конечный вход с результатом в -2147483648..2147483647. -2.9
# даёт -2, в отличие от floor(-2.9)=-3. Вне диапазона и NaN/Infinity не являются допустимым
# входом преобразования. Число, не ID и не признак успеха; 1/0 здесь нельзя трактовать как
# выполнено/не выполнено.
# manual-check: scalar-math Fix
SUB Main()
# total>=0 и size>0 задают полные партии: 27/5 даёт 5. Ошибочный вход даёт собственный запасной
# 0, который возможен и без полной партии. Частное должно помещаться в Integer.
VAR value = WholeBatches(27,5)
UO.Print(CStr(value))
END SUB
SUB WholeBatches(total,size)
IF total < 0 OR size <= 0 THEN
RETURN 0
END IF
RETURN Fix(CDbl(total)/CDbl(size))
END SUBРазбор параметров и выполнения:
- total>=0 и size>0 задают полные партии: 27/5 даёт 5. Ошибочный вход даёт собственный запасной 0, который возможен и без полной партии. Частное должно помещаться в Integer.
ClassicUO - Bad Newbie & Basic IDE Edition