Я столкнулся с проблемой: многие люди хотят сделать ауру, которая будет работать, как обычная аура, но при этом добавлять нестандартные способности ( к примеру +X хп юниту или +X дамаг и т.п). К сожалению, я в инете ничего не нашел (мб плохо искал).
Эта наработка поможет вам решить эту проблему.
Для этого вам нужно будет создать способность для героя (самого владельца ауры)
Способность, которую будет получать юнит в области действия ауры
И заполнить поля в скрипте.(разрешено трогать только те поля, где есть комментарии)
Эта наработка поможет вам решить эту проблему.
Для этого вам нужно будет создать способность для героя (самого владельца ауры)
Способность, которую будет получать юнит в области действия ауры
И заполнить поля в скрипте.(разрешено трогать только те поля, где есть комментарии)
library Aura{
private integer spos= 'A001'//аура героя
private integer array addsp[12]//не трогать
//НАЙСТРОЙКИ
private struct Aura_Data {
integer lvl
unit caster
group g=CreateGroup()
real x
real y
real rad =300.+(100.*GetUnitAbilityLevel(GetLearningUnit(),spos))//область действия. 300-начальное значение; 100-доп дистанция за 1 уровень способности
real time=1. //время обновления юнитов в области кастера
}
//Добавляемые способности. Вместо "0" пропишите код способности. Каждая переменная заполняется сразу после предыдущей (1 потом 2, потом 3 и т.д), либо система будет работать неверно.
private n SSS(){
addsp[1] = 'A000' //1 добавляемая способность юнитам в области действия ауры
addsp[2] = 'A002' //2 добавляемая способность юнитам в области действия ауры
addsp[3] = 0 //3 добавляемая способность юнитам в области действия ауры
addsp[4] = 0 //4 добавляемая способность юнитам в области действия ауры
addsp[5] = 0 //5 добавляемая способность юнитам в области действия ауры
addsp[6] = 0 //6 добавляемая способность юнитам в области действия ауры
addsp[7] = 0 //7 добавляемая способность юнитам в области действия ауры
addsp[8] = 0 //8 добавляемая способность юнитам в области действия ауры
addsp[9] = 0 //9 добавляемая способность юнитам в области действия ауры
addsp[10]= 0 //10 добавляемая способность юнитам в области действия ауры
addsp[11]= 0 //Не трогать!
}
define {
private f=GetFilterUnit()
private eu=GetEnumUnit()
private n=nothing
}
//Условия
private boolean cond(){
timer t = GetExpiredTimer()
Aura_Data d = LoadInteger(hash,GetHandleId(t),StringHash("Aura _Data"))
return GetUnitState(f,UNIT_STATE_LIFE)>0\ //жив?
&& IsUnitAlly(f,GetOwningPlayer(d.caster))==true\ //не пренадлежит врагу?
&& IsUnitType(f,UNIT_TYPE_STRUCTURE)==false \//здание?
&& IsUnitIllusion(f)==false //работает на иллюзиях?
}
private n aura_back(){
timer t = GetExpiredTimer()
Aura_Data d = LoadInteger(hash,GetHandleId(t),StringHash("Aura _Data"))
integer i=1
loop{
exitwhen addsp[i]==0
UnitRemoveAbility(eu,addsp[i])
i++
}
GroupRemoveUnit(d.g,eu)
}
private n aura_d (){
timer t = GetExpiredTimer()
Aura_Data d = LoadInteger(hash,GetHandleId(t),StringHash("Aura _Data"))
integer i=1
if IsUnitInRangeXY(eu,d.x,d.y,d.rad) && GetUnitAbilityLevel(d.caster,spos)!=0{
loop {
exitwhen addsp[i]==0
UnitAddAbility(eu,addsp[i])
SetUnitAbilityLevel(eu,addsp[i],GetUnitAbilityLevel(d.caster,spos))
i++
}
else
i=1
loop {
exitwhen addsp[i]==0
UnitRemoveAbility(eu,addsp[i])
i++
}
GroupRemoveUnit(d.g,eu)
}
}
private n d_a(){
timer t = GetExpiredTimer()
Aura_Data d = LoadInteger(hash,GetHandleId(t),StringHash("Aura _Data"))
integer i=1
loop {
exitwhen addsp[i]==0
UnitRemoveAbility(eu,addsp[i])
i++
GroupRemoveUnit(d.g,eu)
}
}
private n aura_go(){
timer t = GetExpiredTimer()
Aura_Data d = LoadInteger(hash,GetHandleId(t),StringHash("Aura _Data"))
d.x=GetUnitX(d.caster)
d.y=GetUnitY(d.caster)
ForGroup(d.g,function aura_back)
GroupEnumUnitsInRange(d.g,d.x,d.y,d.rad,function cond)
ForGroup(d.g,function aura_d)
if GetUnitAbilityLevel(d.caster,spos)==0 or d.lvl!=GetUnitAbilityLevel(d.caster,spos) {
ForGroup(d.g,function d_a)
PauseTimer(t)
d.caster=null
DestroyGroup(d.g)
d.g=null
FlushChildHashtable(hash,GetHandleId(t))
DestroyTimer(t)
Aura_Data.destroy(d)
}
}
private boolean Trig_Aura_Conditions (n){
return GetLearnedSkill() == spos
}
private n Trig_Aura_Actions (){
Aura_Data d = Aura_Data.create()
timer t = CreateTimer()
d.caster=GetLearningUnit()
d.lvl= GetUnitAbilityLevel(d.caster,GetLearnedSkill())
SaveInteger(hash,GetHandleId(t),StringHash("Aura _Data"),d)
SSS()
TimerStart(t,d.time,true,function aura_go)
}
n InitTrig_Aura(){
gg_trg_Aura = CreateTrigger( )
integer i=0
loop{
TriggerRegisterPlayerUnitEvent(gg_trg_Aura, Player(i), EVENT_PLAYER_HERO_SKILL, null)
exitwhen i==11 //кол-во игроков (по-умолчанию 12). Чтобы работало для компьютера поставьте значение=15
i++
}
TriggerAddCondition( gg_trg_Aura, Condition( function Trig_Aura_Conditions ) )
TriggerAddAction( gg_trg_Aura, function Trig_Aura_Actions )
}
}
Ред. nvc123
Москва не сразу строилась)
Хотя то, что ты предлагаешь - минутное дело через цикл. А вот подавление потрудиться придется
quq_CCCP, Как заказывал. Теперь аура может добавить 10 способностей юниту