Frzctions, вот примерно так можно сделать, но для этого нужно включать думалку.
код jass
globals
group TempGroup = CreateGroup()
unit bj_lastFilterUnit = null
endglobals
function Trig_Dark_Explosion_Copy_Conditions takes nothing returns boolean
return ( GetSpellAbilityId() == 'A005' )
endfunction
function Ally_Filter takes nothing returns boolean
set bj_lastFilterUnit = GetFilterUnit()
return GetWidgetLife(bj_lastFilterUnit) > 0.405 and IsUnitAlly( bj_lastFilterUnit, bj_groupEnumOwningPlayer) and GetUnitState( bj_lastFilterUnit, UNIT_STATE_LIFE ) < GetUnitState( bj_lastFilterUnit, UNIT_STATE_MAX_LIFE ) and not IsUnitType( bj_lastFilterUnit, UNIT_TYPE_STRUCTURE ) // через and можно дополнить критерии отбора союзников
endfunction
function Enemy_Filter takes nothing returns boolean
set bj_lastFilterUnit = GetFilterUnit()
return GetWidgetLife(bj_lastFilterUnit) > 0.405 and IsUnitEnemy(bj_lastFilterUnit, bj_groupEnumOwningPlayer) and not IsUnitType( bj_lastFilterUnit, UNIT_TYPE_STRUCTURE ) // через and можно дополнить критерии отбора противников
endfunction
function Trig_Dark_Explosion_Copy_Actions takes nothing returns nothing
local unit caster = GetSpellAbilityUnit()
local real cx = GetUnitX(caster)
local real cy = GetUnitY(caster)
local real heal = RMaxBJ( 25.00, GetHeroStr( caster, true ) * 3.00 )
local real damage = RMaxBJ( 25.00, GetHeroStr( caster, true) * 25.00 )
local unit enumunit = null
set bj_groupEnumOwningPlayer = GetOwningPlayer( caster )
// союзники
call GroupClear(TempGroup)
call GroupEnumUnitsInRange( TempGroup, cx, cy, 650.00, Condition( function Ally_Filter) )
loop
set enumunit = FirstOfGroup( TempGroup )
exitwhen enumunit == null
call GroupRemoveUnit( TempGroup, enumunit )
call SetUnitState( enumunit, UNIT_STATE_LIFE, GetUnitState( enumunit, UNIT_STATE_LIFE ) + heal )
call DestroyEffect(AddSpecialEffectTarget( "Abilities\\Spells\\Undead\\VampiricAura\\VampiricAuraTarget.mdl", enumunit, "chest" ))
endloop
// враги
call GroupClear(TempGroup)
call GroupEnumUnitsInRange( TempGroup, cx, cy, 650.00, Condition( function Enemy_Filter) )
loop
set enumunit = FirstOfGroup( TempGroup )
exitwhen enumunit == null
call GroupRemoveUnit( TempGroup, enumunit )
call UnitDamageTarget( caster, enumunit, damage, false, false, ATTACK_TYPE_NORMAL, DAMAGE_TYPE_FIRE, WEAPON_TYPE_WHOKNOWS )
call DestroyEffect(AddSpecialEffectTarget( "Abilities\\Spells\\Undead\\VampiricAura\\VampiricAuraTarget.mdl", enumunit, "chest" ))
endloop
set enumunit = null
set caster = null
endfunction
//===========================================================================
function InitTrig_Dark_Explosion_Copy takes nothing returns nothing
set gg_trg_Dark_Explosion_Copy = CreateTrigger( )
call TriggerRegisterAnyUnitEventBJ( gg_trg_Dark_Explosion_Copy, EVENT_PLAYER_UNIT_SPELL_CAST )
call TriggerAddCondition( gg_trg_Dark_Explosion_Copy, Condition( function Trig_Dark_Explosion_Copy_Conditions ) )
call TriggerAddAction( gg_trg_Dark_Explosion_Copy, function Trig_Dark_Explosion_Copy_Actions )
endfunction
Frzctions, еще раз, для переноса неких данных из одной функции в другую, которая не вызывается напрямую через call юзают либо хештаблицы, либо глобальные переменные, они если что для этого и созданы, ну либо строят код так чтобы переносить ничего не потребовалось...
Чтобы передать в группу переменную, нужна либо хештаблица либо глобальная переменная, так же в группе будет работать GetTriggerUnit() - тот кто применил спелл.
Steal nerves, самое стремное что любой приказ через IssueXXXOrder сбивает всю очередь, только стан умеет сдвигать всю очередь и сувать свой приказ. Но это можно абузить.
EVENT_UNIT_DECAY или как то так, вроде есть на конкретного юнита и всех юнитов конкретного игрока.
А насчет вокскрес или нет, это как? Юниты сами не воксресают как и герои, умер значит умер, на воскрешения героя есть отдельное событие.
Это не так то просто без редактора. РО коды объектов, просто целые числа в порядке возрастания, вам придется переставить все нужные объекты так чтобы не осталось провалов, насколько помню даже в редакторе с этим были проблемы если удалить кучу объектов созданных когда то давно, самыми первыми.
Наверное ты вызываешь какое либо событие. Действия в варе идут строго линейно, вызов триггера или запуск события подразумевают что сначала выполнятся все действия в этих триггерах, а только потом продолжится выполнение потока который их вызвал. Проще говоря нанося урон, движок вара сначала выполнит все действия реагирующие на урон, а только потом продолжит выполнять код после нанесения урона.
Это поле для кулдауниндикатора, т.к кулдаун на предметах мнимый, это поле ссылается на абилку от которой берется кд, если предметов с таким полем в инвентаре несколько - то на всех будет отрисовыватся кулдаун от 1, обычно в это поле записывают ту же абилку которая указана в способностях предметов, но это имеет смысл если предмет активируемый и не является руной.
Bergi_Bear, все за бывают про айкап лаунчер написанный непонятно кем, запускаемый от имени администратора.
А про взломанный\пиратский софт я вовсе промолчу.
Doc, мда, прочитай внимательно. То что я написал, я писал о том что близзардам это не упало, получится шило на мыло, Чем жасс похож на луа - Достаточно посмотреть на него, не надо мне тут писать что виртуальная машина по другому устроена, jass скиповый язык, обрезанный до минимума что бы не глючило и все, и то мы все знаем что таки глюки с багами остались. Близзарды не возьмут целиком любой интерпретируемый язык и не включат его в варкравт, как бы вы не хотели, итого - луа\жасс\хреназ - все одно и тоже. Лечить все болячки долго и никому не упало, массив code - не сделают и не сделали, не потому что немогли или нельзя - а потому что разработчикам вара это ненужно и даже вредно, никакие ускорение и конструкции сверх стандартного в понимании близзов функционала нет и быть не может!
Bergi_Bear, а можно вообще написать свой лаунчер и хранить в карте .dll, как дота на айкапе)
Ну вот это дело и делает IseFog. Свой лаунчер, изначально для ускорение функционала мемхака, но не взлетело, оказалось как у айкапа для защиты публике важнее... Кто бы мог подумать?
» WarCraft 3 / Передача локальной переменной
» WarCraft 3 / Передача локальной переменной
» WarCraft 3 / Передача локальной переменной
» WarCraft 3 / Передача локальной переменной
» WarCraft 3 / Передача локальной переменной
» WarCraft 3 / Передача локальной переменной
» WarCraft 3 / Передача локальной переменной
» WarCraft 3 / повернуть здание через мемхак
» WarCraft 3 / Сохранение приказов v2.0
» WarCraft 3 / Отследить разложения юнита.
А насчет вокскрес или нет, это как? Юниты сами не воксресают как и герои, умер значит умер, на воскрешения героя есть отдельное событие.
» WarCraft 3 / Удаление лишнего
» WarCraft 3 / Локальные переменне при нескольких "вейтах"
» WarCraft 3 / wait течет или капает?
Существуют таймеры и триггеры.
» WarCraft 3 / Локальные переменне при нескольких "вейтах"
» WarCraft 3 / Мечта о мотоцикле в Варкрафт
» WarCraft 3 / Последовательность выполнения
» WarCraft 3 / Статы предметов
» WarCraft 3 / Вычисляем по IP
А про взломанный\пиратский софт я вовсе промолчу.
» WarCraft 3 / Патч 1.31, скоро?
» WarCraft 3 / Реплей
» WarCraft 3 / Проверка файла мемхаком
» WarCraft 3 / АнтиХак
» WarCraft 3 / Хак на память Warcraft3
» WarCraft 3 / Хак на память Warcraft3
Ред. quq_CCCP
» WarCraft 3 / Спел похищение жизни!