Добавлен Rockmaf,
не публикуется
Алгоритмы, Наработки и Способности
Способ реализации:
Jass
Тип:
Наработка
Версия Warcraft:
1.26 и выше
Описание
Утечки:Нет
Mui:Да
Ссылки: Дракон, Взрыв
Требования: JNGP
Описание:Герой создает огненного дракона, который движется на противника и через несколько секунд взрывается.
Время действия: 1.10 сек.
Урон: 25/50/75 ед. урона.
Перезарядка: 10 сек.
Mui:Да
Ссылки: Дракон, Взрыв
Требования: JNGP
Описание:Герой создает огненного дракона, который движется на противника и через несколько секунд взрывается.
Время действия: 1.10 сек.
Урон: 25/50/75 ед. урона.
Перезарядка: 10 сек.
Скришоты
Подробности
Код
((код jass
function FireDragon_Act takes nothing returns nothing
local timer t = GetExpiredTimer()
local integer h = GetHandleId(t)
local unit b = LoadUnitHandle(hash,h,1) // загружаем юнитов
local unit a = LoadUnitHandle(hash,h,2)
local real d = GetUnitFacing(b)
local unit n = null
local group g = CreateGroup()
call SetUnitX(b,GetWidgetX(b)+ 20 *Cos(d*bj_DEGTORAD)) // двигаем юнита
call SetUnitY(b,GetWidgetY(b)+ 20 *Sin(d*bj_DEGTORAD))
call DestroyEffect(AddSpecialEffect("Abilities\\Spells\\Other\\Doom\\DoomDeath.mdl",GetUnitX(b),GetUnitY(b))) // спецэффект при движениий
call GroupEnumUnitsInRange(g,GetUnitX(b),GetUnitY(b),250,null)
loop
set n = FirstOfGroup(g)
exitwhen n == null
if IsUnitEnemy(n,GetOwningPlayer(b)) == true and IsUnitType(n,UNIT_TYPE_DEAD) == false then
call UnitDamageTarget(a,n,25*GetUnitAbilityLevel(a,'A000'),true,false,ATTACK_TYPE_NORMAL,DAMAGE_TYPE_FIRE,null)
endif
call GroupRemoveUnit(g,n) // удаляем юнита из группы
endloop
call DestroyGroup(g)
// обнуляем переменные
set t = null
set a = null
set b = null
set g = null
set n = null
endfunction
function FireDragon takes nothing returns nothing
local unit a = GetSpellAbilityUnit()
local timer t = CreateTimer()
local integer h = GetHandleId(t)
local group g = CreateGroup()
local unit n = null
local real d = bj_RADTODEG*Atan2(GetSpellTargetY()-GetUnitY(a),GetSpellTargetX()-GetUnitX(a)) // угол для Dummy юнита
local unit b = CreateUnit(GetOwningPlayer(a),'u000',GetUnitX(a),GetUnitY(a),d)
call SaveUnitHandle(hash,h,1,b) // сохраняем юнитов
call SaveUnitHandle(hash,h,2,a)
call TimerStart(t,0.02,true,function FireDragon_Act) // запуск таймера
call TriggerSleepAction(1.10) // тут можете сами настроить секунды
// здесь если хотите убрать взрыв можете удалить спецэффекты и урон
call DestroyEffect(AddSpecialEffect("Objects\\Spawnmodels\\Other\\NeutralBuildingExplosion\\NeutralBuildingExplosion.mdl",GetUnitX(b),GetUnitY(b)))
call DestroyEffect(AddSpecialEffect("SuperBigExplosion.mdx",GetUnitX(b),GetUnitY(b)))
call GroupEnumUnitsInRange(g,GetUnitX(b),GetUnitY(b),320,null)
loop
set n = FirstOfGroup(g)
exitwhen n == null
if IsUnitEnemy(n,GetOwningPlayer(b)) == true and IsUnitType(n,UNIT_TYPE_DEAD) == false then
call UnitDamageTarget(a,n,150*GetUnitAbilityLevel(a,'A000'),true,false,ATTACK_TYPE_NORMAL,DAMAGE_TYPE_FIRE,null)
endif
call GroupRemoveUnit(g,n)
endloop
call FlushChildHashtable(hash,h)
call PauseTimer(t)
call DestroyTimer(t)
call RemoveUnit(b)
call DestroyGroup(g)
set t = null
set a = null
set n = null
set g = null
set b = null
endfunction
function FireDragon_Cond takes nothing returns boolean
return GetSpellAbilityId() == 'A000'
endfunction
//===========================================================================
function InitTrig_FireDragon takes nothing returns nothing
local trigger t = CreateTrigger()
local integer index = 0
set index = 0
loop
call TriggerRegisterPlayerUnitEvent(t, Player(index), EVENT_PLAYER_UNIT_SPELL_EFFECT, null)
set index = index + 1
exitwhen index == bj_MAX_PLAYER_SLOTS // по просьбе NazarPunk`а сделал
endloop
call TriggerAddCondition(t, Condition( function FireDragon_Cond ) )
call TriggerAddAction(t, function FireDragon )
set t = null
endfunction
globals
hashtable hash = InitHashtable() // хэш таблица
endglobals
))
СКАЧАТЬ вот это скачивайте это на джаззе.
`
ОЖИДАНИЕ РЕКЛАМЫ...
Чтобы оставить комментарий, пожалуйста, войдите на сайт.
Отредактирован Берги
Щас ещё придут и скажут что "local unit n = null" не надо делать, но иногда бывает, что редактор пишет "андеклиред n" поэтому смысл какой никакой тут есть
А ещё если используешь вызов "GetUnitX(b)" более одного раза, его следует прокешировать в переменную, это будет быстрее на 0,0001 наносекунд
Отредактирован PT153
Да и не редактор, а pjass.exe. Более того, данная ошибка выводится, если ты пытаешься использовать переменную без значения, что приводит к краху потока в JASS.
Теперь я не могу наработки скидывать.(NazarPunk разозлится на меня)