В Custom Hero Survival есть способность фатальный удар, это пассивка с перезарядкой.
Способность: Герой наносит фатальный удар врагу наносящий 40 урона и 6% от общего здоровья противника.
Вот игрок ударил и нанёс урон, теперь нужно сделать перезарядку, но как? Еще игроков 8, так что для каждого нужна своя перезарядка. Если что нашёл вроде как нашёл эту способность на jass, но когда сохраняю вылазит "Unrecognized PIJASS (syntax) error"
Способность: Герой наносит фатальный удар врагу наносящий 40 урона и 6% от общего здоровья противника.
Вот игрок ударил и нанёс урон, теперь нужно сделать перезарядку, но как? Еще игроков 8, так что для каждого нужна своя перезарядка. Если что нашёл вроде как нашёл эту способность на jass, но когда сохраняю вылазит "Unrecognized PIJASS (syntax) error"
function Trig_Devastating_Blow_Conditions takes nothing returns boolean
if(not(GetUnitAbilityLevelSwapped('Aimp',GetEventDamageSource())>0))then
return false
endif
if(not(udg_integers13[GetConvertedPlayerId(GetOwningPlayer(GetEventDamageSource()))]==0))then
return false
endif
if(not(IsUnitAliveBJ(udg_units01[GetConvertedPlayerId(GetOwningPlayer(GetEventDamageSource()))])==true))then
return false
endif
return true
endfunction
function Trig_Devastating_Blow_Actions takes nothing returns nothing
set udg_integers13[GetConvertedPlayerId(GetOwningPlayer(GetEventDamageSource()))]=10
call DestroyEffectBJ(udg_effects01[GetConvertedPlayerId(GetOwningPlayer(GetEventDamageSource()))])
call DestroyEffectBJ(udg_effects02[GetConvertedPlayerId(GetOwningPlayer(GetEventDamageSource()))])
call AddSpecialEffectLocBJ(GetUnitLoc(GetTriggerUnit()),"Damnation Orange.mdx")
call DestroyEffectBJ(GetLastCreatedEffectBJ())
call AddSpecialEffectLocBJ(GetUnitLoc(GetTriggerUnit()),"Abilities\\Spells\\Other\\Volcano\\VolcanoDeath.mdl")
call DestroyEffectBJ(GetLastCreatedEffectBJ())
call AddSpecialEffectTargetUnitBJ("chest",GetTriggerUnit(),"Objects\\Spawnmodels\\Human\\HumanBlood\\BloodElfSpellThiefBlood.mdl")
call DestroyEffectBJ(GetLastCreatedEffectBJ())
call AddSpecialEffectTargetUnitBJ("chest",GetTriggerUnit(),"Objects\\Spawnmodels\\Critters\\Albatross\\CritterBloodAlbatross.mdl")
call DestroyEffectBJ(GetLastCreatedEffectBJ())
call UnitDamageTargetBJ(GetEventDamageSource(),GetTriggerUnit(),(40.00*I2R(GetUnitAbilityLevelSwapped('Aimp',GetEventDamageSource()))),ATTACK_TYPE_HERO,DAMAGE_TYPE_NORMAL)
call UnitDamageTargetBJ(GetEventDamageSource(),GetTriggerUnit(),(0.06*GetUnitStateSwap(UNIT_STATE_MAX_LIFE,GetTriggerUnit())),ATTACK_TYPE_MAGIC,DAMAGE_TYPE_NORMAL)
endfunction
function Trig_Devastating_Blow_Ennhance_Func001Func001Func002C takes nothing returns boolean
if(not(udg_integers13[udg_integer53]==0))then
return false
endif
return true
endfunction
function Trig_Devastating_Blow_Ennhance_Func001Func001C takes nothing returns boolean
if(not(udg_integers13[udg_integer53]>0))then
return false
endif
if(not(GetUnitAbilityLevelSwapped('Aimp',udg_units01[udg_integer53])>0))then
return false
endif
return true
endfunction
function Trig_Devastating_Blow_Ennhance_Actions takes nothing returns nothing
set udg_integer53=1
loop
exitwhen udg_integer53>8
if(Trig_Devastating_Blow_Ennhance_Func001Func001C())then
set udg_integers13[udg_integer53]=(udg_integers13[udg_integer53]-1)
if(Trig_Devastating_Blow_Ennhance_Func001Func001Func002C())then
call DestroyEffectBJ(udg_effects01[udg_integer53])
call AddSpecialEffectTargetUnitBJ("hand left",udg_units01[udg_integer53],"Abilities\\Weapons\\LavaSpawnMissile\\LavaSpawnMissile.mdl")
set udg_effects01[udg_integer53]=GetLastCreatedEffectBJ()
call DestroyEffectBJ(udg_effects02[udg_integer53])
call AddSpecialEffectTargetUnitBJ("hand right",udg_units01[udg_integer53],"Abilities\\Weapons\\LavaSpawnMissile\\LavaSpawnMissile.mdl")
set udg_effects02[udg_integer53]=GetLastCreatedEffectBJ()
else
endif
else
endif
set udg_integer53=udg_integer53+1
endloop
endfunction
function Trig_Devastating_Blow_Add_Conditions takes nothing returns boolean
if(not(IsUnitInGroup(GetTriggerUnit(),udg_group06)!=true))then
return false
endif
return true
endfunction
function Trig_Devastating_Blow_Add_Actions takes nothing returns nothing
call GroupAddUnitSimple(GetTriggerUnit(),udg_group06)
call TriggerRegisterUnitEvent(udg_trigger11,GetTriggerUnit(),EVENT_UNIT_DAMAGED)
endfunction
Принятый ответ
function CriticalStike_CD takes nothing returns nothing
local integer h = GetHandleId(GetExpiredTimer())
call RemoveSavedBoolean(H, GetHandleId(LoadUnitHandle(H, h, 'srcU')), 'csCD') // вместо H ставишь свою хештаблицу, в гуи помоему будет udg_H , если создавать хт с названием H
call FlushChildHashtable(H, h) // вместо H ставишь свою хештаблицу, в гуи помоему будет udg_H , если создавать хт с названием H
call PauseTimer(GetExpiredTimer())
call DestroyTimer(GetExpiredTimer())
endfunction
function CriticalStike takes unit source, unit target, real dmg returns nothing
local timer t = CreateTimer()
call SaveBoolean(H, GetHandleId(source), 'csCD', true) // вместо H ставишь свою хештаблицу, в гуи помоему будет udg_H , если создавать хт с названием H
call SaveAgentHandle(H, GetHandleId(t), 'srcU', source) // вместо H ставишь свою хештаблицу, в гуи помоему будет udg_H , если создавать хт с названием H
call DestroyEffect(AddSpecialEffect("Damnation Orange.mdx", GetUnitX(target), GetUnitY(target)))
call DestroyEffect(AddSpecialEffect("Abilities\\Spells\\Other\\Volcano\\VolcanoDeath.mdl", GetUnitX(target), GetUnitY(target))) // тут с эффектами отрегулируешь сам, впадлу вчитываться в ту помойку что ты кинул
call DestroyEffect(AddSpecialEffectTarget("Damnation Orange.mdx", target, "chest"))
call DestroyEffect(AddSpecialEffectTarget("Abilities\\Spells\\Other\\Volcano\\VolcanoDeath.mdl", target, "chest"))
call UnitDamageTarget(source , target, 40 * GetUnitAbilityLevel(source, 'Aimp') , true, false, ATTACK_TYPE_HERO, DAMAGE_TYPE_NORMAL, WEAPON_TYPE_WHOKNOWS)
call UnitDamageTarget(source , target, 0.06 * GetUnitState(target, UNIT_STATE_MAX_LIFE) , true, false, ATTACK_TYPE_MAGIC, DAMAGE_TYPE_NORMAL, WEAPON_TYPE_WHOKNOWS)
call TimerStart(t, 5, false, function CriticalStike_CD) // тут вместо 5 ставишь свое кд
set t = null
endfunction
вот код самого спелла, просто проверяешь if not LoadBoolean(H, GetHandleId(source), 'csCD') then и тд в своей системе урона и вызываешь функцию.
Вот твой спелл с готовой системой урона на чистом джассе.
globals
hashtable H = InitHashtable()
rect SysRect = null
unit uTemp = null
group gTemp = CreateGroup()
endglobals
function CriticalStike_CD takes nothing returns nothing
local integer h = GetHandleId(GetExpiredTimer())
call RemoveSavedBoolean(H, GetHandleId(LoadUnitHandle(H, h, 'srcU')), 'csCD') // вместо H ставишь свою хештаблицу, в гуи помоему будет udg_H , если создавать хт с названием H
call FlushChildHashtable(H, h) // вместо H ставишь свою хештаблицу, в гуи помоему будет udg_H , если создавать хт с названием H
call PauseTimer(GetExpiredTimer())
call DestroyTimer(GetExpiredTimer())
endfunction
function CriticalStike takes unit source, unit target, real dmg returns nothing
local timer t = CreateTimer()
call SaveBoolean(H, GetHandleId(source), 'csCD', true) // вместо H ставишь свою хештаблицу, в гуи помоему будет udg_H , если создавать хт с названием H
call SaveAgentHandle(H, GetHandleId(t), 'srcU', source) // вместо H ставишь свою хештаблицу, в гуи помоему будет udg_H , если создавать хт с названием H
call DestroyEffect(AddSpecialEffect("Damnation Orange.mdx", GetUnitX(target), GetUnitY(target)))
call DestroyEffect(AddSpecialEffect("Abilities\\Spells\\Other\\Volcano\\VolcanoDeath.mdl", GetUnitX(target), GetUnitY(target))) // тут с эффектами отрегулируешь сам, впадлу вчитываться в ту помойку что ты кинул
call DestroyEffect(AddSpecialEffectTarget("Damnation Orange.mdx", target, "chest"))
call DestroyEffect(AddSpecialEffectTarget("Abilities\\Spells\\Other\\Volcano\\VolcanoDeath.mdl", target, "chest"))
call UnitDamageTarget(source , target, 40 * GetUnitAbilityLevel(source, 'Aimp') , true, false, ATTACK_TYPE_HERO, DAMAGE_TYPE_NORMAL, WEAPON_TYPE_WHOKNOWS)
call UnitDamageTarget(source , target, 0.06 * GetUnitState(target, UNIT_STATE_MAX_LIFE) , true, false, ATTACK_TYPE_MAGIC, DAMAGE_TYPE_NORMAL, WEAPON_TYPE_WHOKNOWS)
call TimerStart(t, 5, false, function CriticalStike_CD) // тут вместо 5 ставишь свое кд
set t = null
endfunction
function UnitEvent takes trigger trig, playerunitevent whichEvent, code act returns trigger
local integer index = 0
loop
call TriggerRegisterPlayerUnitEvent( trig, Player( index ), whichEvent, null )
set index = index + 1
exitwhen index == bj_MAX_PLAYER_SLOTS
endloop
if act != null then
call TriggerAddAction( trig, act )
endif
return trig
endfunction
function Rect_Enter_Event takes trigger trig, real minX, real minY, real maxX, real maxY, code act returns trigger
local region rectRegion = CreateRegion( )
call SetRect( SysRect, minX, minY, maxX, maxY )
call RegionAddRect( rectRegion, SysRect )
call TriggerRegisterEnterRegion( trig, rectRegion, null )
if act != null then
call TriggerAddAction( trig, act )
endif
set rectRegion = null
return trig
endfunction
function Damaged_Handler takes unit source, unit target, real dmg returns nothing
if not LoadBoolean(H, GetHandleId(source), 'csCD') and GetUnitAbilityLevel(source, 'Aimt') > 0 and not IsUnitType(target, UNIT_TYPE_STRUCTURE) and IsUnitEnemy(target, GetOwningPlayer(source)) and GetUnitState(target, UNIT_STATE_LIFE) > 0 then // вместо H ставишь свою хештаблицу, в гуи помоему будет udg_H , если создавать хт с названием H
call CriticalStike(source, target, dmg)
endif
endfunction
function Damaged_Event takes nothing returns nothing
local real DMG = GetEventDamage( )
if DMG > 0 then
call DisableTrigger( GetTriggeringTrigger( ) )
call Damaged_Handler( GetEventDamageSource( ), GetTriggerUnit( ), DMG )
call EnableTrigger( GetTriggeringTrigger( ) )
endif
endfunction
function LoadTrig takes integer trig returns trigger
if LoadTriggerHandle( H, 'glob', trig ) == null then
call SaveTriggerHandle( H, 'glob', trig, CreateTrigger( ) )
endif
return LoadTriggerHandle( H, 'glob', trig)
endfunction
function Init_Unit_Damaged takes unit target returns nothing
if not IsUnitInGroup(target, LoadGroupHandle(H, 'glob', 'dmgG')) and GetUnitAbilityLevel( target, 'Aloc' ) <= 0 then
call GroupAddUnit(LoadGroupHandle(H, 'glob', 'dmgG'), target )
call TriggerRegisterUnitEvent(LoadTrig('dmgT'), target, EVENT_UNIT_DAMAGED )
endif
endfunction
function Attacked_Handler takes unit source, unit target returns nothing
call Init_Unit_Damaged( target )
endfunction
function Attacked_Event takes nothing returns nothing
call DisableTrigger( GetTriggeringTrigger( ) )
call Attacked_Handler( GetAttacker( ), GetTriggerUnit( ) )
call EnableTrigger( GetTriggeringTrigger( ) )
endfunction
function Unit_Enters_Handler takes unit entering returns nothing
call Init_Unit_Damaged( entering )
endfunction
function Unit_Enters_Event takes nothing returns nothing
call Unit_Enters_Handler( GetEnteringUnit( ) )
endfunction
function InitDamageSystem takes nothing returns nothing
local real minX = GetRectMinX( GetWorldBounds( ) )
local real maxX = GetRectMaxX( GetWorldBounds( ) )
local real minY = GetRectMinY( GetWorldBounds( ) )
local real maxY = GetRectMaxY( GetWorldBounds( ) )
set SysRect = Rect( 0, 0, 0, 0 )
call TriggerAddAction( LoadTrig('dmgT'), function Damaged_Event )
call SaveGroupHandle( H, 'glob', 'dmgG', CreateGroup( ) )
call UnitEvent( CreateTrigger( ), EVENT_PLAYER_UNIT_ATTACKED, function Attacked_Event )
call Rect_Enter_Event( CreateTrigger( ), minX, minY, maxX, maxY, function Unit_Enters_Event )
call GroupEnumUnitsInRect(gTemp, GetWorldBounds( ), null )
loop
set uTemp = FirstOfGroup(gTemp)
exitwhen uTemp == null
call Init_Unit_Damaged(uTemp)
call GroupRemoveUnit(gTemp, uTemp)
endloop
endfunction
function main takes nothing returns nothing
call ExecuteFunc("InitDamageSystem")
endfunction
Тебе нужно будет скопировать себе глобалки и инициализировать InitDamageSystem , не ебу как это на гуи делается, удачи😀
`
ОЖИДАНИЕ РЕКЛАМЫ...
Чтобы оставить комментарий, пожалуйста, войдите на сайт.
Без орба, создать всем игрокам таймер и при получении урона, наличии абилки и таймер меньше равно 0 выполнить тействия