Lafayette Posted January 26 Share Posted January 26 Уважаемые авторы аддонов! Пожалуйста, ознакомьтесь с изменениями, которые разработчики сделают в игре с обновлением 14.1, и подготовьте заранее обновления своих аддонов, чтобы зарелизить их как только - так сразу. Обновление 14.1 планируется в скором времени. Расшифровка переменных NAME это Fade Move Resize Rotation RotationWithChildren TextScale Новые API widget:Play[NAME]EffectSequence( sequenceParams ) Запускает на виджете цепочку эффектов типа NAME На виджете может существовать лишь одна цепочка \ эффект типа NAME Если на виджете уже есть активная цепочка эффектов NAME или эффект NAME то они будут прерваны Поля: sequenceParams - таблица описывающая эффект, поля 1::N - N вложенных таблиц-описателей шагов эффекта, имеют вид { start, finish, duration, algo } start - начальное состояние на шаге (может быть полностью или частично опущено) finish - конечное состояние на шаге (может быть полностью или частично опущено) duration - время шага, может быть опущено, по умолчанию 1000 мс algo - алгоритм эффекта, может быть опущен, по умолчанию EA_MONOTONOUS_INCREASE Эта таблица по сути полностью повторяет параметры widget:Play[NAME]EffectSequence. showOnStart - boolean - default false - Вызвать widget:Show( true ) в начале эффекта hideOnFinish - boolean - default false - Вызвать widget:Show( false ) в конце эффекта (или при его прерывании). sendFinishEvent - boolean - default false - Нужно ли слать EVENT_EFFECT_SEQUENCE_FINISHED в конце эффекта Примечание - не присылается для зацикленных эффектов кроме случая принудительного завершения эффекта с флагом sendEvent sendStepEvent - boolean - default false - Нужно ли слать EVENT_EFFECT_SEQUENCE_STEP в конце каждого шага эффекта Примечание - НЕ присылается для последнего шага (исключение - зацикленные эффекты, там нет последнего шага) eventLabel - number or string or nil - default nil - Произвольное число или строка, ни на что не влияет, но приходит в эвентах шага и завершения (для упрощения трекинга в скриптах) cycled - boolean or int - default false - Зациклить эффект. Если задано true то бесконечный цикл, если число то заданное число циклов. startOffsetMs - number - default 0 - С какой миллисекунды начать цепочку эффектов (может быть больше длительности цепочки, тогда start = start % duration) Возвращаемые значения: Нет Пример: wtIconFlash:PlayFadeEffectSequence{ { 0.5, 1, 500 }, { nil, 0.5 }, showOnStart = true } Виджет становится видимым, плавно меняет прозрачность: за 0,5 сек с полупрозрачного до непрозрачного, затем за 1 сек с непрозрачного до полупрозрачного widget:HasActiveEffects( effectType ) Проверить есть ли на виджете эффекты Поля: effectType - ET_* - тип эффекта (если nil то любой) Возвращаемые значения: boolean - true если эффекты есть, false если нету widget:GetAddonName() Получить имя аддона которому принадлежит виджет Поля: нет Возвращаемые значения: string - системное имя аддона оторому принадлежит виджет widget:PlayEffectSequencePack( sequenceList ) Запускает на виджете несколько цепочек эффектов Поля: sequenceList - таблица таблиц описателей эффектов. Ключем является тип эффекта (ET_...), значением таблица описатель эффекта (идентичная widget:Play[NAME]EffectSequence) Возвращаемые значения: Нет Пример: widget:PlayEffectSequencePack{ [ET_FADE] = fadeParams, [ET_RESIZE] = resizeParams } --[[ Это эквивалентно widget:PlayFadeEffectSequence( fadeParams ) widget:PlayResizeEffectSequence( resizeParams ) ]] widget:FinishAllEffects( finalPosition, sendEvent ) Завершает все эффекты на виджете Поля и возвращаемые значения идентичны widget:Finish[NAME]Effect Новые эвенты EVENT_EFFECT_SEQUENCE_STEP - Завершился один шаг цепочки эффектов Эвент посылается только если был заказан и только в тот аддон который запустил цепочку эффектов. Поля: wtOwner - widgetSafe - виджет владелец эффекта effectType - ET_* - тип эффекта step - number - номер завершенного шага (1::N) label - string or number or nil - Данные из sequenceParams.eventLabel EVENT_EFFECT_SEQUENCE_FINISHED - Завершилась цепочка эффектов Эвент посылается только если был заказан и только в тот аддон который запустил цепочку эффектов. Поля: wtOwner - widgetSafe - виджет владелец эффекта effectType - ET_* - тип эффекта label - string or nil - Данные из sequenceParams.eventLabel (будут приведены к строке) Изменения в имеющихся АПИ widget:GetNamedChildren() Меняется индексация с 0 на индексацию с 1 common.GetAddonMainForm( addonSysName ) Больше не ругается на "неправильную" строку Если запрошенного аддона не существует - вернет nil Если запрошенный аддон существует, но его форму получить нельзя (аддон выгружен. нет формы, форма защищена и тп) - вернет false Доступ к виджетам чужих аддонов через stateMainForm и доступ из скриптов к stateMainForm в целом считаются deprecated (но пока не удаляются) widget:Play[NAME]Effect( from, to, timeMs, algorithmType, addonName ) изменяется на widget:Play[NAME]Effect( from, to, timeMs, algorithmType, needEvent, addonList ) from - без изменений to - без изменений timeMs - без изменений algorithmType - без изменений needEvent - boolean - default false - Нужно ли посылать эвент EVENT_EFFECT_FINISHED об этом эффекте addonList - table of strings (from 1) or nil - таблица с системными именами аддонов которым нужно послать эвент (кроме себя) Примечание - поле игнорируется в пользовательских аддонах widget:Finish[NAME]Effect() изменяется на widget:Finish[NAME]Effect( finalPosition, sendEvent ) Прервать выполнение эффекта или цепочки эффектов Поля: finalPosition - boolean - default false - Выставить состояние виджета как finish из последнего шага цепочки / эффекта (по умолчанию оставить текущее состояние виджета на момент прерывания ) Примечание - для зацикленных цепочковых эффектов последний шаг в данном случае определяется так же как и для простых цепочек sendEvent - boolean - default false - Послать эвент о завершении (по-умолчанию при прерывании из скрипта эвент не посылается). Для обычного эффекта придет EVENT_EFFECT_FINISHED, для цепочки EVENT_EFFECT_SEQUENCE_FINISHED. Флаг заказа эвента при старте эффекта не учитывается. EVENT_EFFECT_FINISHED Эвент теперь приходит только если был заказан и только в тот аддон который запустил эффект Дополнительно приходит в аддоны из списка addonList. Приходит только для обычных, не цепочковых эффектов. Поля без изменений Quote Link to comment Share on other sites More sharing options...
Lafayette Posted February 7 Author Share Posted February 7 Еще немного информации. Новые API ValuedText:IsEmpty() - аналог common.IsEmptyValuedText( valuedText ) ValuedText:ToWString() - аналог common.ExtractWStringFromValuedText( ValuedText ) TextViewSafe:GetWString(), ButtonSafe:GetWString() - получить текст из контрола в виде WString ValuedText:SetTextValues( values ), TextViewSafe:SetTextValues( values ), ButtonSafe:SetTextValues( values ) - аналог common.SetTextValues( obj, values ) userMods.FromValuedText( ValuedText, flat ) - преобразовать VT в строку. Сохраняются как теги так и их значения. flat - выбросить переносы строк WString:ToLower() - привести к нижнему регистру WString:IsEmpty() - аналог common.IsEmptyWString( WString ) WString:ToInt() - аналог common.GetIntFromWString( WString ) WString:Truncate( maxLen, [dotsCount:3, needTrim:false] ) - аналог common.TruncateWString( WString, maxLen, dotsCount, needTrim ) WString:ToAbbr() - аналог common.GetShortString( WString ) WString:Compare( WString2, [ignoreRegistry:false] ) - аналог common.CompareWString \ Ex WString:IsContain( WStringPart, [ignoreRegistry:false] ) - аналог common.IsSubstring \ Ex common.IsValidText( text ) - Проверяет что текст валидный. Валидными считаются ValuedObject, непустой WString, непустой ValuedText Модификация API common.CreateValuedText() -> common.CreateValuedText( [values] ) - теперь имеет опциональный аргумент values, если он передан, то созданный VT сразу будет заполнен через SetTextValues Модификация WString Метаметоды eq, le, lt - проверка на равенство с любым значением, порядковое сравнение только внутри WString Метаметод len Метаметод concat - WString \ String в любой комбинации Объявляются deprecated и будут удалены через одно крупное обновление common. ExtractWStringFromValuedText SetTextValues IsEmptyWString IsEmptyValuedText CompareWString / Ex IsSubstring / Ex GetWStringLength TruncateWString GetIntFromWString GetShortString Пример конвертаций VT ToWs = userMods.ToWString FromVt = userMods.FromValuedText CreateVt = common.CreateValuedText CreateVt( { format = ToWs( "<html>Value: <r name='val' /></html>" ), val = ToWs( "test" ) } ):ToWString() -- WString: [[Value: test]] FromVt( CreateVt( { format = ToWs( "<html>Value: <r name='val' /></html>" ), val = ToWs( "test" ) } ), true ) -- String: [[<html>Value: <r name="val">test</r></html>]] Quote Link to comment Share on other sites More sharing options...
Recommended Posts