Добавлен EviLInside
Ниже код заклинания, с использованием сторонних систем библиотек/систем.
Смысл способности - летит снаряд нанося по очереди нескольким целям урон, цели не повторяются. Все юниты пораженные закидываются в группу. При получении урона любой цели из группы, остальные цели из группы получают столько же урона. (ну допустим в течении 10 секунд после того как группа была сформирована)
Короче я в затупке. Всё что до формирования группы готово, а то что сделано на данный момент это типо для ТЕСТА - любой юнит из группы кто получает урон умирает.
Направьте на путь истинный ) как сделать то что я хочу.
Смысл способности - летит снаряд нанося по очереди нескольким целям урон, цели не повторяются. Все юниты пораженные закидываются в группу. При получении урона любой цели из группы, остальные цели из группы получают столько же урона. (ну допустим в течении 10 секунд после того как группа была сформирована)
Короче я в затупке. Всё что до формирования группы готово, а то что сделано на данный момент это типо для ТЕСТА - любой юнит из группы кто получает урон умирает.
Направьте на путь истинный ) как сделать то что я хочу.
EDIT: Короче нифига непонятно я наверное пояснил что мне нужно. Постараюсь ещё раз.
Верхняя структура DeadlyLinkX должна получить группу (которую я сформировал в другой структуре чуть ниже)
и вот структура DeadlyLinkX должна заниматься этой группо, а именно - при получении урона любого юнита из группы, остальные из группы должны получить столько же урона. Через 10 сек всё чистится.
То что сделано у меня в структуре DeadlyLinkX это кривая попытка для себя понять получилось ли у меня взять юнитов и определить их (по средством смерти если они получили урон) Да получилось, но то что получилось я не могу выстроить в то что мне нужно. Возможно там нужно всё/многое/кое-что менять.
Верхняя структура DeadlyLinkX должна получить группу (которую я сформировал в другой структуре чуть ниже)
и вот структура DeadlyLinkX должна заниматься этой группо, а именно - при получении урона любого юнита из группы, остальные из группы должны получить столько же урона. Через 10 сек всё чистится.
То что сделано у меня в структуре DeadlyLinkX это кривая попытка для себя понять получилось ли у меня взять юнитов и определить их (по средством смерти если они получили урон) Да получилось, но то что получилось я не могу выстроить в то что мне нужно. Возможно там нужно всё/многое/кое-что менять.
scope DeadlyLink
//=====================================vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv==========================================
private struct DeadlyLinkX
group groupxx
trigger damagetrg
static method OnDamage takes nothing returns nothing
local unit source =GetEventDamageSource()
local unit target = BlzGetEventDamageTarget()
call KillUnit(target)
set source = null
set target = null
endmethod
static method Dmg takes group g returns thistype
local thistype this = thistype.allocate()
local integer i = 0
local unit u
local integer size = 0
set this.groupxx = g
set this.damagetrg = CreateTrigger()
call TriggerRegisterUnitEvent(this.damagetrg,BlzGroupUnitAt(this.groupxx, 0) , EVENT_UNIT_DAMAGED)
set size = BlzGroupGetSize(this.groupxx)
if size > -1 then
loop
exitwhen i == size
set u = BlzGroupUnitAt(this.groupxx, i)
call TriggerRegisterUnitEvent(this.damagetrg, u , EVENT_UNIT_DAMAGED)
set i = i + 1
endloop
endif
call TriggerAddAction(this.damagetrg, function thistype.OnDamage)
set u = null
set g = null
return this
endmethod
endstruct
//=========================================^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^==============================================
private struct DeadlyLink extends Missiles
integer charge
group group2
method onFinish takes nothing returns boolean
local unit u
local group grp = CreateGroup()
local group grp2 = CreateGroup()
local DeadlyLink mssl
local unit source2 = source
local group g = CreateGroup()
if charge > 0 then
call GroupEnumUnitsInRange(grp, GetUnitX(target), GetUnitY(target), 500, null)
loop
set u = FirstOfGroup(grp)
exitwhen u == null
if IsUnitInGroup(u, group2) == false and IsUnitEnemy(u, GetOwningPlayer(source)) and UnitAlive(u) and u != target and BlzIsUnitInvulnerable(u) == false and not IsUnitType(u, UNIT_TYPE_STRUCTURE) then
call GroupAddUnit(grp2,u)
endif
call GroupRemoveUnit(grp, u)
endloop
call DestroyGroup(grp)
set grp = null
if CountUnitsInGroup(grp2) > 0 then
set u = GroupPickRandomUnit(grp2)
set mssl = DeadlyLink.create(GetUnitX(target), GetUnitY(target), 60, GetUnitX(u), GetUnitY(u), 60)
set mssl.model = "Abilities\\Spells\\Items\\OrbCorruption\\OrbCorruptionMissile.mdl"
set mssl.speed = 1500
set mssl.target = u
set mssl.source = source2
set mssl.scale = 1
set mssl.charge = charge - 1
set mssl.group2 = CreateGroup()
call GroupAddGroup(group2,mssl.group2)
call GroupAddUnit(mssl.group2,u)
call mssl.launch()
endif
else
set g = group2
call DeadlyLinkX.Dmg(g) //ВОТ ТУТ Я ТИПО ПЕРЕДАЮ ИНФУ В ВЕРХНЮЮ СТРУКТУРУ DeadlylinkX
endif
call DestroyGroup(grp2)
call DestroyGroup(group2)
set grp2 = null
set u = null
set source2 = null
set group2 = null
set g = null
return false
endmethod
endstruct
private struct Start
static method onCast takes nothing returns nothing
local DeadlyLink mssl
local unit caster = GetSpellAbilityUnit()
set mssl = DeadlyLink.create(Spell.source.x, Spell.source.y, 85, GetUnitX(Spell.target.unit), GetUnitY(Spell.target.unit), 85)
set mssl.model = "Abilities\\Spells\\Items\\OrbCorruption\\OrbCorruptionMissile.mdl"
set mssl.speed = 1500
set mssl.target = Spell.target.unit
set mssl.scale = 1
set mssl.charge = 5
set mssl.source = caster
set mssl.group2 = CreateGroup()
call GroupAddUnit(mssl.group2,Spell.target.unit)
call mssl.launch()
set caster = null
endmethod
static method onInit takes nothing returns nothing
call RegisterSpellEffectEvent('A03E', function thistype.onCast)
endmethod
endstruct
endscope
Принятый ответ
EviLInside, в структуре находится таймер и группа, таймер запускаешь на функцию удаления, а всем юнитам в группе в этой структуре сохраняешь саму структуру, чтобы доставать и наносить разовый урон если кто-то из них его получит от постороннего источника, в таймер тоже сохраняешь, по окончании действия таймера выбираешь всех юнитов в группе и очищаешь им сохранённую структуру, т.к. сама структура лишь 1 раз создалась на этот спелл, то и уничтожить её вместе с группой и таймером достаточно 1 раз, в истекающем таймере
короче один раз создал и посохранял её везде, потом уничтожил в истекающем таймере и очистил везде где сохранял
`
ОЖИДАНИЕ РЕКЛАМЫ...
Чтобы оставить комментарий, пожалуйста, войдите на сайт.
Отредактирован EviLInside
По сути я тут не пойму как в первую структуру перекинуть инфу о группе правильно, правильно взять эти данные и сделать то что нужно с ними, а потом всё подчистить. В общем именно в метод OnDamage передать инфу о группе не могу..Как сделалал - это какие то костыли через отдельного юнита. В общем ересь получилась
Юниты A, B, C
Если один из них получит урон то урон идет на других в таком случае
Юнит А наносит урон Б и С
Юнит Б наносит урон А и С
Юнит С нанлсит А и Б
И так бесконечно по этому и умирают
?
Отредактирован rsfghd
Можешь глянуть карту мою про Свина. Там есть умение "Ужасающий крик". Суть в том, что часть урона по любому юниту с оцепенением, передается всем другим юнитам, кто находится под оцепенением. Если я правильно тебя понял, то это как раз почти тоже самое, что и у тебя. Код на гуи без утечек. Суть поймешь и переделаешь на любой код.
Отредактирован rsfghd