Там все гораздо проще, на каждого юнита аттачится экземпляр структуры где хранится цель, заклинатель, кол-во урона в сек, и сколько хп у тебя было, по нему высчитывается урон каждые 4 секунды. Тебе ни 10 таймеров ни группы не нужны.
function WC5 takes nothing returns boolean
local trigger t = GetTriggeringTrigger( )
local integer S5I = GetHandleId( t )
local unit P7I = ( LoadUnitHandle( HashData, ( S5I ), ( 2 ) ) )
local unit P8I = ( LoadUnitHandle( HashData, ( S5I ), ( 17 ) ) )
local integer SUI = GetUnitAbilityLevel( P7I, 'A0NO' )
local integer NPI = GetTriggerEvalCount( t )
local real WD5 = ( LoadReal( HashData, ( S5I ), ( 392 ) ) )
local real H84 = 0
if GetTriggerEventId( ) == EVENT_WIDGET_DEATH then
call DestroyEffect( ( LoadEffectHandle( HashData, ( S5I ), ( 32 ) ) ) )
call FlushChildHashtable( HashData, ( S5I ) )
call S0I( t )
else
if NPI == 4 or NPI == 8 or NPI == 12 then
call DestroyEffect( ( LoadEffectHandle( HashData, ( S5I ), ( 32 ) ) ) )
if NPI == 12 then
call FlushChildHashtable( HashData, ( S5I ) )
call S0I( t )
elseif NPI == 4 or NPI == 8 then
call SaveEffectHandle( HashData, ( S5I ), ( 32 ), ( AddSpecialEffectTarget( "effects\\NetherInferno.mdx", P8I, "origin" ) ) )
endif
set H84 = ( 0.08 + SUI * 0.08 ) * QDI( WD5 - GetUnitState( P8I, UNIT_STATE_LIFE ), 0 )
if H84 > 0 then
call UYI( "+" + I2S( R2I( H84 ) ), 2, P8I, 0.023, 68, 0, 187, 216 )
endif
endif
call DamageTarget( P7I, P8I, 1, 5 * SUI + H84 )
endif
set t = null
set P7I = null
set P8I = null
return false
endfunction
function WE5 takes nothing returns nothing
local trigger t = CreateTrigger( )
local integer S5I = GetHandleId( t )
local unit P7I = GetTriggerUnit( )
local unit P8I = GetEnumUnit( )
call DestroyEffect( AddSpecialEffectTarget( "effects\\NetherInferno.mdx", P8I, "origin" ) )
call TriggerRegisterTimerEvent( t, 1, true )
call TriggerRegisterDeathEvent( t, P8I )
call TriggerAddCondition( t, Condition( function WC5 ) )
call SaveUnitHandle( HashData, ( S5I ), ( 17 ), ( P8I ) )
call SaveUnitHandle( HashData, ( S5I ), ( 2 ), ( P7I ) )
call SaveReal( HashData, ( S5I ), ( 392 ), ( ( GetUnitState( P8I, UNIT_STATE_LIFE ) ) * 1.0 ) )
call SaveEffectHandle( HashData, ( S5I ), ( 32 ), ( AddSpecialEffectTarget( "effects\\NetherInferno.mdx", P8I, "origin" ) ) )
set t = null
set P7I = null
set P8I = null
endfunction
function WF5 takes nothing returns nothing
local unit P7I = GetTriggerUnit( )
local location l = GetSpellTargetLoc( )
local real x = GetLocationX( l )
local real y = GetLocationY( l )
local group g = NTI( )
local integer SUI = GetUnitAbilityLevel( P7I, 'A0NO' )
call GroupEnumUnitsInRange( g, x, y, 180 + 25, Condition( function D01 ) )
call ForGroup( g, function WE5 )
call NSI( g )
call RemoveLocation( l )
set l = null
set g = null
endfunction
function WG5 takes nothing returns boolean
if GetSpellAbilityId( ) == 'A0NO' then
call WF5( )
endif
return false
endfunction
function NI1 takes nothing returns nothing
local trigger t = CreateTrigger( )
call UMI( t, EVENT_PLAYER_UNIT_SPELL_EFFECT )
call TriggerAddCondition( t, Condition( function WG5 ) )
set t = null
endfunction
Как видишь все очень примитивно.Точно так же делаешь структуру с данными кто, где, когда. Нет смысла пытатся хранить сразу группу.
Bergi_Bear, 200% на 2, крит по механике варкравта заменяет основную атаку множенной, т.е если сработал крит - твоя основная атака не срабатывает, она подменяется множенной, при этом отваливаются всякие орбы которые "ждали" обычной атаки.
Это техническая способность, сама по себе не работает, это как создать труп - у кладбища, без способности оживить скелета или вызывать жука трупоеда оно бесполезно. Тут тоже самое, само по себе не пашет, юзай связку способностей или триггерный вариант спауна возле здания.
GetLocalPlayer, кому оно укаколось в 2020? параноики еще не вымерли, в 2006 это никому не было интересно, и никто этого не делал, сейчас и подавно. Карта которая открывала сайт близов, вот все демо на которое хватило ума у чувака который ниче умнее не придумал это близард послать а не расскзаать аудитории вменяемо об этой находке.
Fly123, xgm.guru/p/wc3/memoryhack
В краце это пару функций, и ''сломанный массив", благодаря этому массиву мы можем читать и писать данные. Ну остальное - тысячи строк кода функций для мемхака, которые юзают этот массив. Есть возможность заружать сторонние длл, которые модифицируют игру, ибо согласитесь делать фишки как в мапхаках с кд в секундах или регенерации в интерфейсе проще через вижуал студио чем через хексредактор и список мамашиных инструкций?
Раньше был лимит 8 мегабайт на игру по сети, на айкапе нету его сняли, но какой он там хз, 2 гб это явно много. В общем карта может быть и немного больше 8 мегабайт но уж явно не стоит злоупотреблять и делать карту дикого размера.
Может если руки кривые, во первых ы сферу молний низя сувать чаннелинг спеллы, фатал.
Удаление юнитов - дибильная идея, есть функция kill unit, которая нормально утилизирует юнитов.
Qulore, потому что ты игнорируешь то что пишу я и другие, и просишь готовую наработку. Ты не 1 такой, таких как ты десятки. увы научится они не могут... Я же прямо говорю что нужна практика, читай статьи и вникай, смотри карты близардов и вникай- почему сделано так а не иначе?
Иначе ты никогда ничему не научишся. Я не написал ничего нового, все описанное выше давно известно и разжевано.
Пока не начнешь вникаеть как и что в варе работает, ты так и будешь тыкатся.
Надеюсь ты запомнил - вейты юзать нельзя, нужно понимать что функции из раздела - реакция на событие, реагирует на событие в потоке триггера, применяющий юнит - вернет нужного юнита лишь в триггере который спаботал на каст абилки, при том до вейта, после вейта там скорее всего null или другой юнит, триггер может за время вейта сработать десятки раз на событие каста. Поэтому нужны переменные, в которые будут сразу записаны все параметры вначале и только потом действия, если нужна задержка - лучше осваивай таймеры.
Почему ты такой..., у тебя это не может работать по определению: вейты зло.
У тебя GetTriggerUnit() - применяющий юнит, да и цель - существуют лишь до дейсвтвия ждать, далее их уже нет. Тоже самое с последний созданый юнит - на деле это тупо глобальная переменная, её нельзя использовать после вейта, т.к данные могли уже 10 раз переписатся.
Нужно Сперва нанести урон, и сразу же приказать даммику кастануть сон, а у сна поставить время подготовки заклинания, разумеется даммика лучше сделать за нейтралпассивных и сделать глобальнуюальность, а у сна сделать в настройках возможность примнения в союзников. Т.к если враг стоит где то в лесу, то из за обзора даммик может тупо не увидеть врага, враг уйдет в тень.
Все эти действия Wait, PolledWait не пригодны для использования в качестве задержек для триггерных заклинаний, их единственно назначение - синхронизация геймкеша и кинематики в кампании. Поэтому сразу думайте как можно обойтись, или как иначе реализовать задержку.
Qulore, методом тыка пробуешь и все. Но туман абилка баганая, она помойму только на союзников и здания работает норм, лучше сайленс даммиком каждому вошедьшему в область или пиво панды пивовара кидать, если хочется идеально. Но думаю не осилишь. Опен дота - тучка рики smocescreen смотри, там сделано как раз 2 вида, в зависимости от стороны героя создается даммик с своей версией способности для скоржей и для сентов. Иначе она не работает...
Зачем вам это, у вас же не дота - где по балансу автокасты не должны мешать орбам?
Тут сложная реализация, помнится драколич долго бился чтобы сделать хускару стрелы из леденой брони, чтобы уж точно пахало как надо. Если система не под функционал рефаунда - то не удивительно, хрен ты без мемхака или детекта рефорджа сделаешь норм автокаст орбы, чтобы прямо как 1 в 1 близордовские но без орба.
Мда, ума нема? Причем тут список ид юнитов? ID - это просто уникальные номера в таблице обьектов, чтобы игра могла найти нужную строчку в таблице и загрузить оттуда данные для создания юнита.
Есть событие - герой нанят в алтаре, или некий юнит зашел в регион, вот их и юзай чтобы им вручать предметы при появлении на карте.
Ох.. может быть это не по теме, ибо я плохо понял вопрос
Разве нельзя просто выбрать юнитов на карте указанного типа? Или при появлении нужного юнита заносить его в группу, а потом выбрать каждого юнита в группе и дать им артефакт
Дело в том, что нужно им дать артефакты до их выхода из алтаря, но сейчас я начинаю понимать, что это невозможно
Зачем? В этом нет никакого смысла, вручать предметы ты можешь лишь живому юниту с инвентарем, когда он только вышел из алтаря - сходу вручил ему предмет и все, ты это не забывай нет юнита, нет предмета. У умерших героев можно удалять предметы, а вот при попытке вручить - ничего не выйдет.
Qulore, хватит клянчить чтобы сделали за тебя, тебе описали подробное устройство такой абилки, ты ни гугу. Иди учись, никто за тебя ничего делать не будет, есть полно статей и примеров - хоть бы 1 прочитали, ты даже не понимаешь что такое переменная.
Полноценный псевдоконтроль возможен лишь с помощью мемхака.
Прочее же - смотри как сделано в доте, ульт спектры был в опен доте и там есть фищка, атаку то стопить можно но толку мало.
» WarCraft 3 / Нужна помощь (vjass)
» WarCraft 3 / Как сделать так чтоб 4 удар был 100 крит 200%
» WarCraft 3 / Способность завод не работает
» WarCraft 3 / MapHack для реплея
» WarCraft 3 / Способности - Редактор объектов
» WarCraft 3 / MemoryHackAPI
» WarCraft 3 / MemoryHackAPI
» WarCraft 3 / Объясните как сейчас всё существует
Ред. PT153
» WarCraft 3 / Объясните как сейчас всё существует
В краце это пару функций, и ''сломанный массив", благодаря этому массиву мы можем читать и писать данные. Ну остальное - тысячи строк кода функций для мемхака, которые юзают этот массив. Есть возможность заружать сторонние длл, которые модифицируют игру, ибо согласитесь делать фишки как в мапхаках с кд в секундах или регенерации в интерфейсе проще через вижуал студио чем через хексредактор и список мамашиных инструкций?
» WarCraft 3 / По поводу размеров карты в байтах, лаунчеров для WC3 и вообще
» WarCraft 3 / MapHack для реплея
» WarCraft 3 / Проблема с биндами в Dota Allstars
Пишите автору кеев, мб исправит для 1.27б.
» WarCraft 3 / Способность
Удаление юнитов - дибильная идея, есть функция kill unit, которая нормально утилизирует юнитов.
» WarCraft 3 / Спосоность связанная со сном
Иначе ты никогда ничему не научишся. Я не написал ничего нового, все описанное выше давно известно и разжевано.
Пока не начнешь вникаеть как и что в варе работает, ты так и будешь тыкатся.
Надеюсь ты запомнил - вейты юзать нельзя, нужно понимать что функции из раздела - реакция на событие, реагирует на событие в потоке триггера, применяющий юнит - вернет нужного юнита лишь в триггере который спаботал на каст абилки, при том до вейта, после вейта там скорее всего null или другой юнит, триггер может за время вейта сработать десятки раз на событие каста. Поэтому нужны переменные, в которые будут сразу записаны все параметры вначале и только потом действия, если нужна задержка - лучше осваивай таймеры.
Ред. Берги
» WarCraft 3 / Спосоность связанная со сном
У тебя GetTriggerUnit() - применяющий юнит, да и цель - существуют лишь до дейсвтвия ждать, далее их уже нет. Тоже самое с последний созданый юнит - на деле это тупо глобальная переменная, её нельзя использовать после вейта, т.к данные могли уже 10 раз переписатся.
Нужно Сперва нанести урон, и сразу же приказать даммику кастануть сон, а у сна поставить время подготовки заклинания, разумеется даммика лучше сделать за нейтралпассивных и сделать глобальнуюальность, а у сна сделать в настройках возможность примнения в союзников. Т.к если враг стоит где то в лесу, то из за обзора даммик может тупо не увидеть врага, враг уйдет в тень.
» WarCraft 3 / Order ID , flamingarrowstarg
» WarCraft 3 / Как проверять себя
» WarCraft 3 / Order ID , flamingarrowstarg
Тут сложная реализация, помнится драколич долго бился чтобы сделать хускару стрелы из леденой брони, чтобы уж точно пахало как надо. Если система не под функционал рефаунда - то не удивительно, хрен ты без мемхака или детекта рефорджа сделаешь норм автокаст орбы, чтобы прямо как 1 в 1 близордовские но без орба.
» WarCraft 3 / Как проверять себя
» WarCraft 3 / Установка высоты камеры с помощью команды.
» WarCraft 3 / Стаки
» WarCraft 3 / Id юнита в самого юнита (wurst)
Есть событие - герой нанят в алтаре, или некий юнит зашел в регион, вот их и юзай чтобы им вручать предметы при появлении на карте.
» WarCraft 3 / Стаки
» WarCraft 3 / Как "запаузить" любые действия с юнитом. (Не в прямом смысле)
Прочее же - смотри как сделано в доте, ульт спектры был в опен доте и там есть фищка, атаку то стопить можно но толку мало.
» WarCraft 3 / Стаки