Скрипт содержит различные общеупотребительные функции.
Путь: '''/Interface/Common/CoreScripts/AddonBase.lua'''
Зависимости:
AddonBaseInternal (закрытая ссылка) или AddonBaseUserMods
Функции, алиасы и переменные доступные всегда:
Глобальные переменные:
ADDON_NAME - string - системное имя аддона
HALF_PI = math.pi / 2
DOUBLE_PI = math.pi * 2
TO_DEGREES = 180 / math.pi
TO_RADIANS = math.pi / 180
Алиасы:
apitype = common.GetApiType
IsWs = common.IsWString
IsVt = common.IsValuedText
IsVo = common.IsValuedObject
IsValidText = common.IsValidText
IntWs = common.FormatInt
FloatWs = common.FormatFloat
NumberWs = common.FormatNumber
GetIntWs = common.GetIntFromWString
GetEWs = common.GetEmptyWString -- Пояснение: Оптимизировано, возвращает статическую переменную а не новый экземпляр пустого WString
GetEVt = common.CreateValuedText -- Пояснение: Рекомендуется использовать только без параметров
GetEVo = common.CreateValuedObject
CreateVt = common.CreateValuedText -- Пояснение: Рекомендуется использовать только с параметром textValues
Функции:
table.isempty( tab ) - Проверка таблицы tab на пустоту, без проверки типов
table.size( tab ) - Количество ключей в таблице tab, без проверки типов
table.map( tab ) - "Перевернуть" таблицу tab (ключ-значение => значение-ключ), без проверки типов, без проверки корректности биективного преобразования
table.minn( tab ) - Возвращает минимальный числовой ключ в таблице tab, при отсутствии числовых ключей возвращает nil, без проверки типов
table.maxn2( tab ) - Возвращает максимальный числовой ключ в таблице tab, при отсутствии числовых ключей возвращает nil, без проверки типов
table.append( tab, arg1, arg2 ) - Аналог table.insert по параметрам, но вставляет не одно значение а все из таблицы
table.normalize( tab ) - Меняет индексацию таблицы с 0 на 1, без проверки типов
table.denormalize( tab ) - Меняет индексацию таблицы с 1 на 0, без проверки типов
table.index( tab, ... ) - Эквивалент val = tab[ arg1 ][ arg2 ]...[ argN ], без проверки типов
table.newindex( tab, ... ) - Эквивалент tab[ arg1 ][ arg2 ]...[ argN - 1 ] = argN, без проверки типов
table.getcount( tab, entry, [equal] ) - Количество элементов entry в таблице tab, без проверки типов
Параметры:
tab - table - таблица в которой производится подсчет
entry - any - искомое значение
equal - function or nil - Функция компаратор (по умолчанию проверка на равенство)
Возвращаемые значения:
number - количество вхождений
table.search( tab, entry, [equal] ) - Поиск элемента entry в таблице tab, без проверки типов
Параметры:
tab - table - таблица в которой производится поиск
entry - any - искомое значение
equal - function or nil - Функция компаратор (по умолчанию проверка на равенство)
Возвращаемые значения:
boolean - найдено или нет
[any] - ключ по которому найден entry (если найден, если несколько то произвольный из их числа)
table.binsearch( tab, entry, [comp], [equal] ) - Бинарный поиск элемента entry в таблице tab, tab должна иметь непрерывную индексацию с 1 и быть отсортирована, без проверки типов
Параметры:
tab - table - таблица в которой производится поиск
entry - any - искомое значение
comp - function or nil - Функция компаратор "меньше" (по умолчанию проверка на меньше)
equal - function or nil - Функция компаратор "равно" (по умолчанию проверка на равенство)
Возвращаемые значения:
Если элемент найден:
true
any - ключ по которому найден entry (если несколько то произвольный из их числа)
any - значение по данному ключу
Если элемент не найден:
false
any - ключ при вставке по которому entry (через table.insert) сортировка таблицы сохранится
any - текущее значение по данному ключу
table.getrandom( tab ) - Получить случайную пару ключ/значение из таблицы tab, без проверки типов
string.escape( str ) - Экранировать управляющие символы регулярных выражений в строке str, без проверки типов
string.split( str, [separators], [noEscape] ) - Разбить строку на массив подстрок по заданным сепараторам
Разбиение выполняется по регулярке: "([^" .. separators .. "]+)"
Параметры:
str - string - строка к разбиению
separators- string or nil - символы по которым будет выполнено разбиение (по умолчанию - пробельные символы)
noEscape- boolean or nil - не экранировать управляющие символы в separators (по умолчанию false)
Возвращаемые значения:
table of strings (from 1) - результат разбиения: массив строк индексированный с 1
ValidateText( text ) - Валидирует текст (через common.IsValidText), при запуске с lua невалидный текст меняется на подробное сообщение об ошибке, при запуске с luac - на пустую строку
JoinTextValues( values, [glueFormatWString], [iter] ) - Склеивает все тексты из values в один
Параметры:
values - table - исходные тексты (WString, ValuedText или ValuedObject в любых комбинациях)
glueFormatWString - WString or nil - Формат склейки двух элементов, должен содержать теги __accumulated_value, __added_value. По умолчанию State::DefaultJoinTextValuesFormat
iter - function or nil - Итератор по values, по умолчанию ipairs
Возвращаемые значения:
ValuedText - результирующий текст
GetAddonText( [sysGroup], sysName, [optional] ) - получить текст sysName из группы аддона sysGroup с кешированием
GetStateText( [sysGroup], sysName, [optional] ) - получить текст sysName из группы стейта sysGroup с кешированием
GetAddonTexture( [sysGroup], sysName, [optional] ) - получить текстуру sysName из группы аддона sysGroup с кешированием
GetStateTexture( [sysGroup], sysName, [optional] ) - получить текстуру sysName из группы стейта sysGroup с кешированием
GetAddonSound( [sysGroup], sysName, [optional] ) - получить простой звук sysName из группы аддона sysGroup с кешированием
GetStateSound( [sysGroup], sysName, [optional] ) - получить простой звук sysName из группы стейта sysGroup с кешированием
Параметр sysGroup может быть не задан - по умолчанию Common
Параметр optional - если задано то отсутствие ресурса (или группы) не считается ошибкой
getindex( val ) - Алиас для getindex_rw
Получить "индекс" от произвольного значения
Если значение это не userdata - вернет само значение
Если значение это userdata - вернет эквивалентную userdata, при этом
1) Все методы userdata и API продолжают корректно с ней работать
2) Гарантируется что getindex( userdata1 ) == getindex( userdata2 ) выполняется тогда и только тогда когда юзердаты равны по значению (равенство по ссылке не требуется)
3) Выполнение предыдущего пункта гарантируется независимо от времени вызова getindex (до перезапуска аддона)
Варианты getindex:
getindex_rw - Получить и сохранить индекс
getindex_ro - получить, но не сохранять индекс (если от данной юзердаты (по значению) не брался getindex_rw то последующие вызовы getindex не будут удовлетворять свойству 2)
getindex_fast_rw - getindex_rw без проверок, требуется действительная userdata на входе (иначе ошибка)
getindex_fast_ro - getindex_ro без проверок, требуется действительная userdata на входе (иначе ошибка)
zpairs - аналог ipairs для индексации с 0
Функции, алиасы и переменные доступные при наличии логирования (определяется по наличию FromWs):
Глобальные переменные: LOG_MULTILINE_FORMAT = true - Выполнять преобразование вывода N строк за раз в в вывод N раз по одной строке (удобно для вывода в консоль) Функции: ReloadAddon() - Перезагрузить самого себя advtostring( val ) - Преобразовать что угодно в "красивую" строку LogInfo( ... ) - Вывести произвольные данные в лог с уровнем INFO LogWarning( ... ) - Вывести произвольные данные в лог с уровнем WARNING LogError( ... ) - Вывести произвольные данные в лог с уровнем ERROR LogInfoTS( ... ) - Вывести произвольные данные в лог с уровнем INFO, время прошедшее с первого и последнего вызова LogInfoTS LogInfoTN( ... ) - Вывести произвольные данные в лог с уровнем INFO, время прошедшее с первого и последнего вызова LogInfoTS и сбросить таймер. LogMemoryUsage() - Вывести в лог информацию о потреблении памяти аддоном LogTrace() - Вывести в лог lua-стектрейс
Функции, алиасы и переменные доступные при запуске с lua (без компиляции):
Глобальные переменные: DEBUG_BYPASS_ASSERTS = false - игнорировать ассерты Алиасы: print = LogInfo Функции: error( format, ... ) - Ошибка, поддерживает вывод сложного сообщения об ошибке с параметрами (через string.format, поддерживается только %s, все параметры приводятся к строкам через advtostring) assert( check, format, ... ) = function( check, format, ... ) if not check then return error( format, ... ) end end LogIndexSize - Вывести подробную статистику по размеру индекса для getindex ResetIndex - Сбросить индекс для getindex. МОЖЕТ СЛОМАТЬ РАБОТУ АДДОНА.