это целочисленная, ключ вджасса позволяет генерировать уникальное константное число, это по сути улучшенная версия StringHash
библиотека позволяет блокировать урон, по сути как доспехи элуны против магии или как там правильно, только намного более гибкое ибо ты сам решаешь сколько блочить на каждый случай, мне не понадобилось, я по привычке закинул
да, это время
да, в остальных триггерах я просто налепил всяких эффектов, они не важны
Meddin, я думал над тем чтобы сразу писать на чистом джассе, зная тебя, но стало лень когда библиотеку на блок урона закинул (она кстати не пригодилась), если нужна будет помощь с переписыванием, то напишешь, потому что там 2 хэштаблицы понадобятся если сохранять именно такой тип ядов, потому что возможна перезапись значений
яд можно разделить на несколько категорий
вариковский - проверяющий наличие дебаффа на юните, не стакающийся яд который сбивается тем, кто атакует, обновляется при атаке
нубский - тупо таймер каждый раз периодический вешать, стакающийся яд
нормальный - сохраняется таймер в атакующего по ключу жертвы, таким образом яд от разных юнитов будет стакаться, но от одного и того же нет, только обновляться, то есть яды не перебивают друг друга и при этом работают как вариковские
ладно, ты наверное не разобрался либо занят, в общем я решил сделать пример
вот основной код
globals
constant hashtable H = InitHashtable( )
constant group TempGroup = CreateGroup( )
endglobals
function addEff takes nothing returns nothing
local timer t = GetExpiredTimer( )
local unit u = LoadUnitHandle( H, GetHandleId( t ), 0 )
local EffectS A = LoadInteger( H, GetHandleId( u ), EffectStructKey )
set A.eff = AddSpecialEffectTarget( "Abilities\\Weapons\\FarseerMissile\\FarseerMissile.mdl", u, "weapon" )
set A.eff2 = AddSpecialEffectTarget( "Abilities\\Weapons\\ZigguratMissile\\ZigguratMissile.mdl", u, "weapon" )
call FlushChildHashtable( H, GetHandleId( t ) )
call DestroyTimer( t )
set t = null
set u = null
endfunction
function poisonDamage takes nothing returns nothing
local timer t = GetExpiredTimer( )
local integer i = GetHandleId( t )
local unit attacker = LoadUnitHandle( H, i, 0 )
local unit damaged = LoadUnitHandle( H, i, 1 )
local real r = LoadReal( H, i, 3 ) - 1.00
call UnitDamageTarget( attacker, damaged, 20.00, false, false, null, null, null )
if r <= 0.00 or not UnitAlive( damaged ) then
call RemoveSavedHandle( H, GetHandleId( attacker ), GetHandleId( damaged ) )
call DestroyEffect( LoadEffectHandle( H, i, 2 ) )
call DestroyTimer( t )
call FlushChildHashtable( H, i )
else
call SaveReal( H, i, 3, r )
endif
set t = null
set attacker = null
set damaged = null
endfunction
function FlamingAttacks_Actions takes nothing returns nothing
local unit attacker = GetEventDamageSource( )
local unit damaged = GetTriggerUnit( )
local real damage = GetEventDamage( )
local unit u
local timer t
local EffectS A
if GetUnitAbilityLevel( damaged, 'Bssd' ) > 0 then
call UnitRemoveAbility( damaged, 'Bssd' )
// потужні удари
if GetUnitAbilityLevel( attacker, 'A002' ) > 0 then
call GroupEnumUnitsInRange( TempGroup, GetUnitX( damaged ), GetUnitY( damaged ), 300.00, null )
loop
set u = FirstOfGroup( TempGroup )
exitwhen u == null
call GroupRemoveUnit( TempGroup, u )
if IsUnitEnemy( u, GetOwningPlayer( attacker ) ) and UnitAlive( u ) then
call UnitDamageTarget( attacker, u, damage, false, false, null, null, null )
endif
endloop
set t = CreateTimer( )
set A = LoadInteger( H, GetHandleId( attacker ), EffectStructKey )
call DestroyEffect( A.eff )
call DestroyEffect( A.eff2 )
call DestroyEffect( AddSpecialEffect( "Abilities\\Spells\\Human\\ThunderClap\\ThunderClapCaster.mdl", GetUnitX( damaged ), GetUnitY( damaged ) ) )
call SaveUnitHandle( H, GetHandleId( t ), 0, attacker )
call TimerStart( t, 1.00, false, function addEff )
set t = null
elseif GetUnitAbilityLevel( attacker, 'A003' ) > 0 then
// вогняна атака
call GroupEnumUnitsInRange( TempGroup, GetUnitX( damaged ), GetUnitY( damaged ), 150.00, null )
loop
set u = FirstOfGroup( TempGroup )
exitwhen u == null
call GroupRemoveUnit( TempGroup, u )
if u != damaged and IsUnitEnemy( u, GetOwningPlayer( attacker ) ) and UnitAlive( u ) then
call UnitDamageTarget( attacker, u, damage / 2.00, false, false, null, null, null )
endif
endloop
set t = LoadTimerHandle( H, GetHandleId( attacker ), GetHandleId( damaged ) )
if t == null then
set t = CreateTimer( )
call SaveTimerHandle( H, GetHandleId( attacker ), GetHandleId( damaged ), t )
call SaveUnitHandle( H, GetHandleId( t ), 0, attacker )
call SaveUnitHandle( H, GetHandleId( t ), 1, damaged )
call SaveEffectHandle( H, GetHandleId( t ), 2, AddSpecialEffectTarget( "Abilities\\Spells\\Other\\BreathOfFire\\BreathOfFireDamage.mdl", damaged, "origin" ) )
call TimerStart( t, 1.00, true, function poisonDamage )
endif
call SaveReal( H, GetHandleId( t ), 3, 5.00 )
call DestroyEffect( AddSpecialEffectTarget( "Abilities\\Spells\\Items\\AIfb\\AIfbSpecialArt.mdl", damaged, "chest" ) )
call DestroyEffect( AddSpecialEffectTarget( "Abilities\\Weapons\\RedDragonBreath\\RedDragonMissile.mdl", damaged, "chest" ) )
set t = null
endif
endif
set damaged = null
set attacker = null
endfunction
//===========================================================================
//function InitTrig_FlamingAttacks takes nothing returns nothing
//set gg_trg_FlamingAttacks = CreateTrigger( )
//endfunction
смотришь есть ли у атакованного дебафф яда, если есть - снимаешь его и делаешь триггерные операции (доп. урон, свой собственный яд и так далее, всё что связанно в автоатакой)
саму абилку яда выдать всем юнитам, чья атака должна отлавливаться
JIEGEND, перестань юзать капс, это больше раздражает и сбивает с толку чем приносит пользы в принцип обмена информации, попробуй просто порыться в гуи, всё есть
Meddin, всё у тебя работает, как я и сказал, орб не даёт наложить эффект яда, просто сделай либо триггерный яд, либо триггерный орб, второе предпочтительнее ибо с помощью яда можно отлавливать урон с руки
EugeAl, краш, что же ещё. Когда-то был вопрос с этой темой, там древо ночных эльфов стояло или что, короче стабильно крашило из-за координат, я продемонстрировать не смогу потому что попросту не помню, если тебя и вправду это так парит, удели время для поиска вопросов/тем по крашу Вара из-за иконки
Похоже, это касается темы варкрафта, а не технических проблем сайта, так что отвечу на вопрос
Ро - редактор объектов, гуи - графический пользовательский интерфейс триггеров, джасс - язык придуманный близзардами, на 1.26 имеет так же различные диалекты, вроде сджасса, вджасса, зинка, вурста и так далее, помимо этого есть возможность использовать даже луа
при замахе проверять цель, если это твой конкретный герой, то заблочить абилку смертельного удара, если не он, то разблочить
помимо этого можно сделать кастомный крит через отлов урона
Ред. rsfghd
» WarCraft 3 / Проблема с ядом
Ред. rsfghd
» WarCraft 3 / Проблема с ядом
» WarCraft 3 / Проблема с ядом
вариковский - проверяющий наличие дебаффа на юните, не стакающийся яд который сбивается тем, кто атакует, обновляется при атаке
нубский - тупо таймер каждый раз периодический вешать, стакающийся яд
нормальный - сохраняется таймер в атакующего по ключу жертвы, таким образом яд от разных юнитов будет стакаться, но от одного и того же нет, только обновляться, то есть яды не перебивают друг друга и при этом работают как вариковские
» Администрация XGM / Теперь комментарии вообще не склеиваются
» WarCraft 3 / Проблема с ядом
» Администрация XGM / Рекомендации
» Администрация XGM / Рекомендации
» WarCraft 3 / Проблема с ядом
» WarCraft 3 / Проблема с ядом
» WarCraft 3 / Проблема с ядом
https://xgm.guru/p/wc3/114895
саму абилку яда выдать всем юнитам, чья атака должна отлавливаться
» WarCraft 3 / Помогите сделать грамотый триггер
» WarCraft 3 / Помогите сделать грамотый триггер
» WarCraft 3 / Помогите сделать грамотый триггер
» WarCraft 3 / Проблема с ядом
» WarCraft 3 / Помогите сделать грамотый триггер
» WarCraft 3 / Проблема с ядом
» WarCraft 3 / Несколько свойств в одной способности
» WarCraft 3 / Снаряды заклинаний
» WarCraft 3 / Условие на движение
» WarCraft 3 / Это чё?
» WarCraft 3 / Это чё?
Ро - редактор объектов, гуи - графический пользовательский интерфейс триггеров, джасс - язык придуманный близзардами, на 1.26 имеет так же различные диалекты, вроде сджасса, вджасса, зинка, вурста и так далее, помимо этого есть возможность использовать даже луа
» WarCraft 3 / Блокировка получения опыта
» WarCraft 3 / Как запретить работать способность на конкретного героя
» WarCraft 3 / Условие на движение
» WarCraft 3 / Как запретить работать способность на конкретного героя
помимо этого можно сделать кастомный крит через отлов урона