По событию юнит умирает, а дальше думать как фильтровать юнитов, к примеру если у вас это некий яд, то урон от яда должен наносится даммиком, если убивший даммик - то юнит умер от яда, это всего лишь 1 пример. Ну офк исходя из задачи и думаем о реализации.
Че ты собрался делать? Снова вопрос на тему вангования че ты там собрался делать? Код правят в жаскравте или блокноте, насчет зачем? Карта не открывается в редакторе потому что это ломаная карта а не исходник, такой ответ устраивает?
Ну блин, как насчет посмотреть как сделано в тех же картах близзардов.
Есть таймер, а есть Окно таймера, один считает время а второй показывает картинку на экране. По истечению времени таймер может вызвать триггер или функцию.
Эмм, чем стандартные скиллы не угодили, вроде создать труп (склеп нежити) , Призвать трупоеда (Повелитель могил), здание будет спавнить вокруг себя юнитов, по кд абилки, при этом не выше установленного лимита.
Потом нагружает карту не триггер, а его неумелое использование.
Я да написал про цикл, все слоты инвентаря поверил и выключил все остальные предметы,что тут непонятно? Включённый на выключенный предмет меняешь и все.
прикреплять спецээфект можно к разным частям юнита, спина, грудь, голова, руки, оружие - но не все модели имеют эти точки, да и выглядит убого.
предметы можно менять в иевентаре на лету, если юнит юзнул и предмет А, то удалить предмет А, и создать в иевентаре предмет Б, и наоборот. Естественно циклом проходим по всему инвентарю.
Зачем такое делать, кроме как вкл-выкл орб эффектов, чтобы не перебивали друг друга?
Anariys3333, какими скринами если там текст, который будет не виден нехрена. Потом если ты думаешь что ты себе скопируешь, я тебя разочарую - нефига, это так не работает, все время за тебя кто то твои хотелки делать не будет.
Я не юзаю GUI триггеры и пишу исключительно на jass, и достаточно подробно обьяснил как делается такая способность, если ты вовсе ни разу редактор триггеров не открывал, увы. Такие способности с нулевыми познаниями не сделать, информации много, берем и пробуем. Пишем что конкретно непонятно или не работает?
Уже было, примечание следует добавить - что они фаталят.
Там не со всеми обьектами пашет, так что имейте это ввиду, у тех же cost нативок насколько помюню был изьян.
код приложен под катом, бери и правь.
Хештаблица - ну банальное прикрепление данных к обьекту, в данном случае к триггеру юнита, call SaveUnitHandle( хештаблица, id триггера, ключ, юнит), SaveUnitHandle( HashData, id, 0, targ ). Насет абилки кольца защиты, есть такой предмет - кольцо защиты, и есть у него способность, которая повышает защиту, копируюем её, бонус защиты на ноль настраиваем, а в полях Граффика маг, спецэффект. Это нужно чтобы прекрепить спецэффект к юниту, который не пропадет при морфе, сокрытии или других действиях. Просто пустышка для визуального эффекта, можно использовать и другие способности, но абилка бонуса защиты не имеет иконки и не багут\мешает другим способностям, работают у всех юнитов (бонус атрибутов фатальнет у не героев).
function Trig_Surge_Expires_Conditions takes nothing returns boolean
local trigger trg = GetTriggeringTrigger()
local integer id = GetHandleId(trg)
local unit targ = LoadUnitHandle( HashData, id, 0 )
call DisableTrigger(trg)
call UnitRemoveAbility( targ, 'A0C9' )
call UnitRemoveAbility( targ, 'B07W' )
call RemoveSavedHandle( HashData, ExSurge, GetHandleId(targ))
call FlushChildHashtable( HashData, id )
call S0I(trg)
set trg = LoadTriggerHandle( HashData, ExPhaseKey, GetHandleId(targ) )
if trg == null then
//call SetUnitPathing( targ, true )
endif
set targ = null
set trg = null
return false
endfunction
function Trig_Surge_Actions takes nothing returns nothing
local unit targ = GetSpellTargetUnit( )
local real dur = RMaxBJ( 1.50 * GetUnitAbilityLevel( GetSpellAbilityUnit(),'A0R7' ) + 1.50, 3.01 )
local trigger trg = LoadTriggerHandle( HashData, ExSurge, GetHandleId(targ) )
local integer id
if trg != null then
call TriggerEvaluate(trg)
endif
set trg = LoadTriggerHandle( HashData, ExPhaseKey, GetHandleId(targ) )
if trg != null then
call TriggerEvaluate(trg)
endif
set trg = CreateTrigger()
set id = GetHandleId(trg)
call SaveTriggerHandle( HashData,ExSurge, GetHandleId(targ), trg )
call SaveUnitHandle( HashData, id, 0, targ )
call TriggerAddCondition( trg, Condition(function Trig_Surge_Expires_Conditions ) )
call TriggerRegisterDeathEvent( trg, targ )
call TriggerRegisterTimerEvent( trg, dur, false )
call UnitAddAbility( targ, 'A0C9' )
call UnitMakeAbilityPermanent( targ, true, 'A0C9' )
call SetUnitAbilityLevel( targ, 'A0C9', GetUnitAbilityLevel( GetSpellAbilityUnit(),'A0R7' ) )
call AuraUpdateEffect( targ, 'A0R7' )
call IO1(UD,GetUnitX(targ),GetUnitY(targ))
call DestroyEffect(AddSpecialEffectTarget("effects\\Surge.mdx",targ,"origin"))
if not IsUnitType( targ,UNIT_TYPE_FLYING)then
//call SetUnitPhased(targ)
endif
set targ = null
set trg = null
endfunction
function Trig_Surge_Conditions takes nothing returns boolean
if GetSpellAbilityId() == 'A0R7' then
call Trig_Surge_Actions()
endif
return false
endfunction
function Register_Surge takes nothing returns nothing
local trigger trg = CreateTrigger( )
local integer nIndex = 1
call TriggerAddCondition( trg, Condition( function Trig_Surge_Conditions ) )
loop
exitwhen nIndex > 11
if IsSlotPlayer( Player( nIndex ) ) then
call TriggerRegisterPlayerUnitEvent( trg, Player( nIndex ), EVENT_PLAYER_UNIT_SPELL_EFFECT, OnlyHero )
endif
set nIndex = nIndex + 1
endloop
set trg = null
endfunction
Это код способности surge, из доты, когда то давно делал. Ну собственно тут довольно примитивный код и как раз пример как нужно следить за юнитом, тут реализован и диспел и перебивание баффа при повторном применении, это не намного сложнее кастомного сна, который я описал выше.
Просто добавляем в кондишене второго триггера услвоие с GetTriggerEventId() == ну и событие, к примеру EVENT_WIDGET_DEATH чтобы снимать эффект при смерти, уроне выше 0 не от кастера или от истечении времени.
А в чем проблема, т.к сон сбивается при уроне, то стандартные способности не подойдут, берешь обычное высасывание жизни, и создаешь триггер событием которого будет - юнит приводит способность в действие, условие - примененная способность == твоё сосание жизни, ну и действие:
Применяем на жертву PauseUnit, вручаем жертве способность на основе кольца защиты с нулевым бонусом и прекрепленным эффектом сна, далее создаем новый триггер, с событиями - юнит получает урон, юнит умирает, время вышло, кастер отдел приказ, цель точка, цель обьект, без указания цели. Ну и добавляем триггеру новое условие, в котором будем делать действия. Сохраняем в хештаблицу юнита цель и нашего кастера. Выгружаем в условии вновь созданного нами триггера, проверяем от чего сработал триггер, если триггер сработал от смерти, или урона, или от приказа не равного - приказу похищения жизни, триггер отключаем, у юнита удаляем паузу и абилку пустышку для визуального эффекта. Если цель получила урон не от кастера, и урон выше 0 - то паузим кастера и тут же сбиваем паузу, попутно так же выключая триггер и снимая с жертвы паузу и спецэффект. Ну и не забываем обнулять все локальные переменные и удалять триггер в конце.
LaBlinov369, это хакнутая версия game.dll, в ней исправили лимит карт для мультиплеера, запомните на айкап дорога закрыта с ним, айкап лаунчер считает что с игрой чето нетак. Снимать лимит, не трогая целостность файлов игры умеют многие проги, тот же WFE, был даже отдельный микс файл для снятия лимита.
Механику каста ты никак не изменишь у дефолтных способностей, Берёшь автокаст пустышку к примеру ярость огра, или ледяной щит,и триггерно из них делаешь эти абилки.
Ну как же, винда вам даст формат диска, ага. Есть 100500 способов без мемхака сделать пакость юзеру, ну это лишено смысла - ибо чтобы это работало, вам нужна популярная карта, своя популярная карта на создание которой уйдет уйма времени и сил, другие популярные карты висят на хостботах, и ваша ломаная версия никому не уперлась, к вам даже не зайдут. Дальше то что?
FriendlyGuest, такие способности делаются не так, у вас ошибка в реализации, если ты хочешь спелл со снярядом, то либо ты делаешь триггерный снаряд и спелл пустышку или хитрость с детекиом урона. При касте молотка бурь, ты создаёшь новый триггер с событием - время вышло ( примерное время полёта снаряда, от 0.6 до 3 сёк), событие цель умирает, событие цель получила урон. В условии делаются все действия, если триггер сработал от истечения времени или от смерти, то утилизируем триггер, иначе проверяем урон, он ровно 0.00, урон от кластера и цель имеет бафф стана, тогда наносим полный урон по формуле. Сам молоток урона не наносит, такая реализация позволяет юзать без проблемно все дефолт абилки со снарядами и дебаффом, чётко отслеживаю их попадание и промахи или блок амулет защиты. Разумеется на гуи нехватает инструментов для этого и это делается на jass, но код очень прост, могу сделать пример как буду дома.
С массивами тоже не все так просто, но это все хрень, в реальной игре такого нет как и такого обьёма данных, по 10к+ записей, это все ахинея и не заслуживает внимания. Нет ничего плохого ни в глобалках ни в хештаблице, и ненадо пытается все на массивах делать или исключительно все на хт.
Vlod, ага, там много ошибок и глупостей. Но факт что хт не нужно боятся, они не настолько медленные чтобы отказыватся, разница - одно обращение к хт = 2 обращения к массиву примерно, в мемхаке анрайза есть тест на скорость, можите попробовать, сравнить разницу.
Немного не понял что хотите добится, и причем тут полный урон?
При касте способности цели мгновенно наносится урон по формуле 'Уровень способности Х 2 х ловкость героя, включая бонусы на момент каста', вроде все верно но не мешало бы использовать переменные и вычислить урон 1 раз, не делая рассчет 2 раза, для функции урона и для функции текстага.
Если вам нужен урон с учетом резиста - тут нужен отдельный триггер с событием юнит получает урон, условием что урон выше 0, ну и действием записать входящий урон в глобальную переменную, из которой вы прочитаете кол-во урона с учетом резистов в своем триггере, т.к событие урона сработает раньше реального нанесения урона.
» WarCraft 3 / Найти умирающего юнита
» WarCraft 3 / Как работать с картой в виде папки?
» WarCraft 3 / Таймер и тренировка
Есть таймер, а есть Окно таймера, один считает время а второй показывает картинку на экране. По истечению времени таймер может вызвать триггер или функцию.
» WarCraft 3 / Насколько триггер грузит карту?
» WarCraft 3 / 1 оружие = 2 предмета
» WarCraft 3 / 1 оружие = 2 предмета
» WarCraft 3 / Как создать способность
Я не юзаю GUI триггеры и пишу исключительно на jass, и достаточно подробно обьяснил как делается такая способность, если ты вовсе ни разу редактор триггеров не открывал, увы. Такие способности с нулевыми познаниями не сделать, информации много, берем и пробуем. Пишем что конкретно непонятно или не работает?
» WarCraft 3 / Наличие типа юнита в массиве
» WarCraft 3 / AI natives
Там не со всеми обьектами пашет, так что имейте это ввиду, у тех же cost нативок насколько помюню был изьян.
Ред. quq_CCCP
» WarCraft 3 / Как создать способность
Хештаблица - ну банальное прикрепление данных к обьекту, в данном случае к триггеру юнита, call SaveUnitHandle( хештаблица, id триггера, ключ, юнит), SaveUnitHandle( HashData, id, 0, targ ). Насет абилки кольца защиты, есть такой предмет - кольцо защиты, и есть у него способность, которая повышает защиту, копируюем её, бонус защиты на ноль настраиваем, а в полях Граффика маг, спецэффект. Это нужно чтобы прекрепить спецэффект к юниту, который не пропадет при морфе, сокрытии или других действиях. Просто пустышка для визуального эффекта, можно использовать и другие способности, но абилка бонуса защиты не имеет иконки и не багут\мешает другим способностям, работают у всех юнитов (бонус атрибутов фатальнет у не героев).
» WarCraft 3 / Как создать способность
Ред. quq_CCCP
» WarCraft 3 / Как создать способность
Просто добавляем в кондишене второго триггера услвоие с GetTriggerEventId() == ну и событие, к примеру EVENT_WIDGET_DEATH чтобы снимать эффект при смерти, уроне выше 0 не от кастера или от истечении времени.
» WarCraft 3 / Как создать способность
» WarCraft 3 / Как создать способность
» WarCraft 3 / Как создать способность
» WarCraft 3 / Как создать способность
Применяем на жертву PauseUnit, вручаем жертве способность на основе кольца защиты с нулевым бонусом и прекрепленным эффектом сна, далее создаем новый триггер, с событиями - юнит получает урон, юнит умирает, время вышло, кастер отдел приказ, цель точка, цель обьект, без указания цели. Ну и добавляем триггеру новое условие, в котором будем делать действия. Сохраняем в хештаблицу юнита цель и нашего кастера. Выгружаем в условии вновь созданного нами триггера, проверяем от чего сработал триггер, если триггер сработал от смерти, или урона, или от приказа не равного - приказу похищения жизни, триггер отключаем, у юнита удаляем паузу и абилку пустышку для визуального эффекта. Если цель получила урон не от кастера, и урон выше 0 - то паузим кастера и тут же сбиваем паузу, попутно так же выключая триггер и снимая с жертвы паузу и спецэффект. Ну и не забываем обнулять все локальные переменные и удалять триггер в конце.
» IrInA Host Bot / Game.dll
» WarCraft 3 / Автокаст прожимных навыков
» WarCraft 3 / Использование ShellExecute
» WarCraft 3 / Друг
» WarCraft 3 / Как сделать всплывающий урон от такой способности?
» WarCraft 3 / Ресурсы карт
Ред. quq_CCCP
» WarCraft 3 / Обучение jass
» WarCraft 3 / Обучение jass
» WarCraft 3 / Как сделать всплывающий урон от такой способности?
При касте способности цели мгновенно наносится урон по формуле 'Уровень способности Х 2 х ловкость героя, включая бонусы на момент каста', вроде все верно но не мешало бы использовать переменные и вычислить урон 1 раз, не делая рассчет 2 раза, для функции урона и для функции текстага.
Если вам нужен урон с учетом резиста - тут нужен отдельный триггер с событием юнит получает урон, условием что урон выше 0, ну и действием записать входящий урон в глобальную переменную, из которой вы прочитаете кол-во урона с учетом резистов в своем триггере, т.к событие урона сработает раньше реального нанесения урона.