Кароче не люблю я тему огня,ниче в голову не идет я нуб вот мое нубо заклинание Название:Месть Огня Описание:5 ударов наносящие 2х интеллект героя урон, в 750 ярдах и при этом повышает скорость передвижения и атаки героя. Также имеет небольшой шанс захватить навсегда 1 ед. интеллекта у юнита, попавшего под это заклинание. Уровни:Заклинание универсальное теость с повышением уровня увеличчиваетсья урон и т.д Сцылко
Code
function Trig_fire_Timer takes nothing returns nothing local timer t=GetExpiredTimer() local group g=CreateGroup() local integer ID=GetHandleId(t) local unit e local unit u=LoadUnitHandle(udg_Hash,ID,0) local integer c=LoadInteger(udg_Hash,ID,1)-1 local integer random=GetRandomInt(1,100) local real dmg=GetHeroInt(u,true)*GetUnitAbilityLevel(u,'A001')*2 local texttag txt local player p=GetOwningPlayer(u) call GroupEnumUnitsInRange(g,GetUnitX(u),GetUnitY(u),750,null) loop set e=FirstOfGroup(g) exitwhen e == null if IsUnitEnemy(e,p)==true and GetWidgetLife(e)>.0 then call UnitDamageTarget(u,e,dmg,true,false,ATTACK_TYPE_HERO,DAMAGE_TYPE_FIRE,WEAPON_TYPE_WHOKNOWS) set txt = CreateTextTag() call SetTextTagText(txt,"|c00C80000" +I2S(R2I(dmg)),.023) call SetTextTagPosUnit(txt,e,0.) call SetTextTagColor(txt,255,0,0,255) call SetTextTagVelocity(txt,.001,.03) call SetTextTagFadepoint(txt,.75) call SetTextTagLifespan(txt,1.5) call SetTextTagPermanent(txt,false) call DestroyEffect(AddSpecialEffectTarget("Abilities\\Spells\\Other\\Doom\\DoomDeath.mdl",e,"chest")) call DestroyEffect(AddSpecialEffectTarget("Abilities\\Spells\\Human\\FlameStrike\\FlameStrikeTarget.mdl",e,"orign")) endif if c<=0 or GetWidgetLife(e)<=.0 then call PauseTimer(t) call DestroyTimer(t) call FlushChildHashtable(udg_Hash,ID) else call SaveInteger(udg_Hash,ID,1,c) if random==15 then call SetHeroInt(u,GetHeroInt(u,true)+1,true) call SetHeroInt(e,GetHeroInt(e,true)-1,true) endif endif call GroupRemoveUnit(g,e) endloop call DestroyGroup(g) set g=null set e=null set u=null set t=null set p=null call DestroyTextTag(txt) set txt=null endfunction function Trig_fire_Actions takes nothing returns nothing local timer t local integer ID if GetSpellAbilityId()=='A001' then set t=CreateTimer() set ID=GetHandleId(t) call SaveUnitHandle(udg_Hash,ID,0,GetTriggerUnit()) call SaveInteger(udg_Hash,ID,1,5) call TimerStart(t, 1., true, function Trig_fire_Timer) endif set t = null endfunction function InitTrig_fire takes nothing returns nothing local integer i=0 set gg_trg_fire=CreateTrigger() loop call TriggerRegisterPlayerUnitEvent(gg_trg_fire,Player(i),EVENT_PLAYER_UNIT_SPELL_EFFECT,null) set i= i+1 exitwhen i==11 endloop set udg_Hash=InitHashtable() call TriggerAddAction(gg_trg_fire, function Trig_fire_Actions ) endfunction
З.Ы Заклинание не чем не отличаеть не крассивое,код скорее всего ужасен и т.д.
Kartoha, Просто тоже хочу поучавствовать. Что тут такого? Если Dreii и Youngtree против могу не учавствовать. Да и победа тут не нужна мне не каким образом. Долго над ним даже работать не буду.Всё равно хрень зделаю эе
эффекты выглядят довольно неплохо, только 1 но - в описании написано 5 пульсов, 5 происходит только в первый раз, далее по одному.
с точки зрения кода:
Code
LoadInteger(udg_Hash,ID,1)-1
честно скажу, такое в первый раз вижу, обычно после всех произведеных действий изменяют счетчик
Code
if c<=0 or GetWidgetLife(e)<=.0 then call PauseTimer(t) call DestroyTimer(t) call FlushChildHashtable(udg_Hash,ID) else call SaveInteger(udg_Hash,ID,1,c) if random==15 then call SetHeroInt(u,GetHeroInt(u,true)+1,true) call SetHeroInt(e,GetHeroInt(e,true)-1,true) endif endif
зачем всё это пихать в цикл, когда вот
Code
if random==15 then call SetHeroInt(u,GetHeroInt(u,true)+1,true) call SetHeroInt(e,GetHeroInt(e,true)-1,true) endif
этого вполне будет достаточно.
Code
if random==15 then
странно как-то считать рендом лишь 1 раз, будет забавно, если попадется 100 юнитов и рендом будет равен 15, шанс 1 из 100 маловато как-то
Code
if c<=0 or GetWidgetLife(e)<=.0 then
такие вещи обычно проверяют перед тем как делать какие-нибудь действия.
ну, а так + за отсутсвие bj, утечек тоже не заметил.
если б не досадный баг с 1 пульсом, было б 4, а так 3/5
Не ошибается только тот, кто ничего не делает
Сообщение отредактировал income - Суббота, 15 Января 2011, 23:03:34
Герой мчится спералью на большой скорости.Сшибая на своём пути деревья.От скорости земля под ним нагревается и загорается.Все юниты попавшие под огонь теряют урон 10\15\30 ур в сек.По завершению спирали герой выпрыгивает из огня.Огненный покров длится ещё 40 сек.
Уровни:3 Кодэ!!11
[spoiler]Слабонервным не смотреть!
Code
function Dest takes nothing returns nothing local destructable d = GetEnumDestructable() call KillDestructable( d ) set d = null endfunction //=========================================================================== function Effect takes nothing returns nothing local timer ef=GetExpiredTimer() local effect e = LoadEffectHandle(udg_Hash,GetHandleId(ef),1) // call FlushChildHashtable(udg_Hash,GetHandleId(ef)) call DestroyTimer(ef) call DestroyEffect(e) // set e = null endfunction //=========================================================================== function Jump takes nothing returns nothing local timer r=GetExpiredTimer() local unit u=LoadUnitHandle(udg_Hash,GetHandleId(r),1) local integer i=LoadInteger(udg_Hash,GetHandleId(r),2)+1 local integer fly=LoadInteger(udg_Hash,GetHandleId(r),3) local real a = LoadReal(udg_Hash,GetHandleId(r),4) // call SetUnitFacingTimed(u,a, 0.0 ) call SetUnitX(u,GetUnitX(u)+25*Cos(a)) call SetUnitY(u,GetUnitY(u)+25*Sin(a)) // if i < 16 then set fly = fly + 5 call SetUnitFlyHeight( u, fly, 0.00 ) else set fly = fly - 5 call SetUnitFlyHeight( u, fly, 0.00 ) endif // if i == 32 then call SetUnitTimeScalePercent( u, 100 ) call PauseTimer(r) call FlushChildHashtable(udg_Hash,GetHandleId(r)) call DestroyTimer(r) else call SaveInteger(udg_Hash,GetHandleId(r),2,i) call SaveInteger(udg_Hash,GetHandleId(r),3,fly) endif // set r = null set u = null endfunction //=========================================================================== function PowerGO takes nothing returns nothing local timer t=GetExpiredTimer() local timer r local timer ef = CreateTimer() local effect e local integer i=LoadInteger(udg_Hash,GetHandleId(t),2)+1 local unit u=LoadUnitHandle(udg_Hash,GetHandleId(t),1) local integer dis=LoadInteger(udg_Hash,GetHandleId(t),3)-2 local real x=LoadReal(udg_Hash,GetHandleId(t),4) local real y=LoadReal(udg_Hash,GetHandleId(t),5) local unit d local player p = GetOwningPlayer(u) local location k = Location(GetUnitX(u),GetUnitY(u)) local rect m = Rect(GetUnitX(u) - 100, GetUnitY(u) - 100, GetUnitX(u) + 100, GetUnitY(u) + 100) // set x = x+dis*Cos(10*i*0.017453292) set y = y+dis*Sin(10*i*0.017453292) call SetUnitFacingTimed(u,10*i+90, 0.0 ) // set e =AddSpecialEffect("Abilities\\Spells\\Other\\BreathOfFire\\BreathOfFireDamage.mdx",x,y) call DestroyEffect(AddSpecialEffectTarget("Abilities\\Weapons\\PhoenixMissile\\Phoenix_Missile_mini.mdl",u,"chest"))
if i == 100 then set d = CreateUnit(p,'e000',x,y,0) call SetUnitAbilityLevelSwapped( 'A001', d, GetUnitAbilityLevelSwapped('A000', u) ) call IssueImmediateOrder( d, "immolation" ) call UnitApplyTimedLife( d, 'BTLF',60 ) endif // if i == 250 then // set r = CreateTimer() call SaveUnitHandle(udg_Hash,GetHandleId(r),1,u) call SaveInteger(udg_Hash,GetHandleId(r),2,0) call SaveInteger(udg_Hash,GetHandleId(r),3,0) call SaveReal(udg_Hash,GetHandleId(t),4,GetUnitFacing(u)*0.017453292) call TimerStart(r,0.04,true,function Jump) call DestroyEffect(AddSpecialEffectTarget("Abilities\\Spells\\Human\\Banish\\BanishTarget.mdx",u,"chest")) // call PauseTimer(t) call FlushChildHashtable(udg_Hash,GetHandleId(t)) call DestroyTimer(t) else call SaveInteger(udg_Hash,GetHandleId(t),2,i) call SaveInteger(udg_Hash,GetHandleId(t),3,dis) endif // set bj_enumDestructableCenter = k set bj_enumDestructableRadius = 100 call EnumDestructablesInRect(m,null,function Dest) // call RemoveRect(m) call RemoveLocation(k) // set m = null set k = null set r = null set t = null set e = null set ef = null set u = null set d = null set p = null endfunction
//=========================================================================== function PowerSpeed takes nothing returns nothing local timer t = CreateTimer() local unit u = GetSpellAbilityUnit() local real x = GetUnitX(u) local real y = GetUnitY(u) // if GetSpellAbilityId()=='A000' then
call SetUnitTimeScalePercent( u, 300 ) call SetUnitAnimationByIndex(u,6) call UnitAddAbility( u,'Aave' ) call UnitRemoveAbility( u,'Aave' ) call SaveUnitHandle(udg_Hash,GetHandleId(t),1,u) call SaveInteger(udg_Hash,GetHandleId(t),2,0) call SaveInteger(udg_Hash,GetHandleId(t),3,500) call SaveReal(udg_Hash,GetHandleId(t),4,x) call SaveReal(udg_Hash,GetHandleId(t),5,y) call TimerStart(t,0.04,true,function PowerGO) // endif set t = null set u = null
endfunction //=========================================================================== function InitTrig_Power_speed takes nothing returns nothing local integer i=0 local trigger trg = CreateTrigger() loop call TriggerRegisterPlayerUnitEvent(trg,Player(i),EVENT_PLAYER_UNIT_SPELL_EFFECT,null) set i= i+1 exitwhen i==11 endloop set udg_Hash=InitHashtable() call TriggerAddAction(trg,function PowerSpeed) set trg = null endfunction