25.10.2007, 12:27 | #1 |
TM Team
Либерал года Помощник модератора
Регистрация: 16.08.2005
Сообщений: 3,685
|
Ability Effect
Ability Effect Авторы: ABBAPOH & TM team Для понимания статьи необходим средний уровень жасса. Вступление Эта статья посвящена одной (точнее двум) очень полезным, но редко используемым функциям. Код:
native GetAbilityEffect takes string abilityString, effecttype t, integer index returns string native GetAbilityEffectById takes integer abilityId, effecttype t, integer index returns string Какие типы эффектов можно использовать?: Код:
constant effecttype EFFECT_TYPE_EFFECT = ConvertEffectType(0) // Графика - Эффект constant effecttype EFFECT_TYPE_TARGET = ConvertEffectType(1) // Графика - Цель constant effecttype EFFECT_TYPE_CASTER = ConvertEffectType(2) // Графика - Маг constant effecttype EFFECT_TYPE_SPECIAL = ConvertEffectType(3) // Графика - Особые constant effecttype EFFECT_TYPE_AREA_EFFECT = ConvertEffectType(4) // Графика - Область constant effecttype EFFECT_TYPE_MISSILE = ConvertEffectType(5) // Графика - Анимация дистанционной атаки constant effecttype EFFECT_TYPE_LIGHTNING = ConvertEffectType(6) // Графика - Эффекты Молнии Все эти поля, кроме EFFECT_TYPE_LIGHTNING содержат то, что мы туда запишем (молнию можно из списка выбирать, писать ручками туда нельзя). Для чего может понадобится доставать способности? - можно хранить там ЛЮБЫЕ строки, необязательно пути к эффектам. Ну например, для функции преобразования символа в число можно "упрятать" строку с символами в объекты, чтобы ее сложнее было найти. Код:
function Chr takes string s, integer i returns string return SubString(s, i-1, i) endfunction function I2Char takes integer i returns string return Chr(GetAbilityEffectById(1093677105,ConvertEffectType(0),0), i + 1) endfunction А сейчас переходим к одному из примеров использования функции GetAbilityEffectById. Спелл Система Данная система работает на функции получения эффектов; плюсом этой системы является ее простота и удобство использования; кроме того, теоретически она должна давать небольшое преимущество по сравнению с обычными системами. Код:
//SPELL EFFECT function SpellEffect_Con takes nothing returns boolean set udg_String=GetAbilityEffectById(GetSpellAbilityId(), EFFECT_TYPE_EFFECT, 1) return SubString(udg_String, 0, 3) == "SE:" endfunction function SpellEffect_Act takes nothing returns nothing call ExecuteFunc(SubString(udg_String, 3, StringLength(udg_String))+"_Act") endfunction function InitTrig_SpellSystem takes nothing returns nothing set gg_trg_SpellSystem = CreateTrigger( ) call TriggerRegisterAnyUnitEventBJ( gg_trg_SpellSystem , EVENT_PLAYER_UNIT_SPELL_EFFECT ) call TriggerAddCondition( gg_trg_SpellSystem , Condition( function SpellEffect_Con ) ) call TriggerAddAction( gg_trg_SpellSystem , function SpellEffect_Act ) endfunction Чем система лучше регистрации триггеров на каждый спелл? - во первых имеется всего ОДИН триггер, и для каждого сказанного заклинания проверяется ОДНО условие (когда просто регистрируем триггер, то приходится проверять ВСЕ условия - если у вас 100 спеллов, то при касте ЛЮБОГО спелла надо выполнить 100 проверок). Далее, заклинания НИКАК не зависят от кода - в коде лежит только функция действия, все остальное лежит в РО; не нужно копипастить действия по созданию триггера или что-то куда-то заносить. Заключение Замечание - Можно сделать так, чтобы строки можно было хранить не только в способностях (кстати, баффы это тоже способности и для них все работает), но и в ЛЮБЫХ объектах. Но это, как говорится - совсем другая тема - об этом повествует статья remal'а - Реализация дополнительных данных в объектах карты Мы рассмотрели один конкретный пример - спелл систему. Однако это не единственное применение функции GetAbilityEffect - ее можно использовать например в системе РС. Можно хранить те строки, которые нежелательно видеть нубам, пытающимся взломать вашу карту Последний раз редактировалось Авварон; 14.06.2008 в 21:53. |
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1) | |
Опции темы | |
|
|