короче проблема такая пришло в голову мысль создать такой спелл герой создает в указанной точке 5 огненных шаров которые создают круговорот после того как они соединились происходит взрыв начал делать спелл но не тут то было я никогда не двигал больше одного даммика и я хз как это сотворить, помогите пожалуйста
Принятый ответ
Я так понимаю то что я расписывал выше не помогло, поэтому закидываю карту с примером
раскрыть
library mylib
globals
constant hashtable H = InitHashtable()
private constant group TempG = CreateGroup()
private real TempX
private real TempY
private real TempReal
private real TempReal1
private real TempReal2
private real MaxX
private real MinX
private real MaxY
private real MinY
endglobals
private struct mys
unit caster
group g
real x
real y
real dist
real speed
real speedr
real angle
integer count
endstruct
private function SetUnitPositionEx takes unit u, real x, real y returns nothing
if x > MaxX then
set x = MaxX
elseif x < MinX then
set x = MinX
endif
if y > MaxY then
set y = MaxY
elseif y < MinY then
set y = MinY
endif
call SetUnitX(u,x)
call SetUnitY(u,y)
endfunction
private function move1 takes nothing returns nothing
call SetUnitPositionEx(GetEnumUnit(),TempX+TempReal2*Cos(TempReal*bj_DEGTORAD),TempY+TempReal2*Sin(TempReal*bj_DEGTORAD))
set TempReal = TempReal+TempReal1
endfunction
private function move takes nothing returns nothing
local mys A = LoadInteger(H,GetHandleId(GetExpiredTimer()),0)
local unit u
set A.angle = A.angle+A.speedr
set A.dist = A.dist-A.speed
set TempX = A.x
set TempY = A.y
set TempReal = A.angle
set TempReal1 = 360/A.count
set TempReal2 = A.dist
call ForGroup(A.g,function move1)
if A.dist <= 50. then
loop
set u = FirstOfGroup(A.g)
exitwhen u == null
call KillUnit(u)
call GroupRemoveUnit(A.g,u)
endloop
call DestroyGroup(A.g)
call FlushChildHashtable(H,GetHandleId(GetExpiredTimer()))
call PauseTimer(GetExpiredTimer())
call DestroyTimer(GetExpiredTimer())
set A.caster = null
set A.g = null
call A.destroy()
endif
endfunction
private function Spell_Actions takes nothing returns nothing
local timer t = CreateTimer()
local mys A = mys.create()
local real a
local real x
local real y
set A.caster = GetTriggerUnit()
set A.g = CreateGroup()
set A.x = GetSpellTargetX()
set A.y = GetSpellTargetY()
set A.dist = 500.
set A.speed = 10.
set A.speedr = 3.
set A.angle = GetRandomReal(0,360)
set A.count = 6
set bj_forLoopAIndex = 0
set a = A.angle
set bj_groupEnumOwningPlayer = GetOwningPlayer(A.caster)
loop
exitwhen bj_forLoopAIndex == A.count
set x = A.x+A.dist*Cos(a*bj_DEGTORAD)
set y = A.y+A.dist*Sin(a*bj_DEGTORAD)
set bj_lastCreatedUnit = CreateUnit(bj_groupEnumOwningPlayer,'u000',x,y,a)
call UnitAddAbility(bj_lastCreatedUnit,'Arav')
call SetUnitFlyHeight(bj_lastCreatedUnit,50,0)
call SetUnitScale(bj_lastCreatedUnit,.5,.5,.5)
call SetUnitPathing(bj_lastCreatedUnit,false)
call GroupAddUnit(A.g,bj_lastCreatedUnit)
set a = a+360/A.count
set bj_forLoopAIndex = bj_forLoopAIndex+1
endloop
set bj_groupEnumOwningPlayer = null
set bj_lastCreatedUnit = null
call SaveInteger(H,GetHandleId(t),0,A)
call TimerStart(t,.03125,true,function move)
set t = null
endfunction
//===========================================================================
private function mycond takes nothing returns boolean
if GetSpellAbilityId() == 'A000' then
call Spell_Actions()
endif
return false
endfunction
function InitTrig_Spell takes nothing returns nothing
local rect r = GetWorldBounds()
set gg_trg_Spell = CreateTrigger( )
call TriggerRegisterPlayerUnitEvent(gg_trg_Spell, Player(0x00), EVENT_PLAYER_UNIT_SPELL_EFFECT, null)
call TriggerAddCondition( gg_trg_Spell, Condition(function mycond) )
set MaxX = GetRectMaxX(r)
set MinX = GetRectMinX(r)
set MaxY = GetRectMaxY(r)
set MinY = GetRectMinY(r)
call RemoveRect(r)
set r = null
endfunction
endlibrary
`
ОЖИДАНИЕ РЕКЛАМЫ...
Чтобы оставить комментарий, пожалуйста, войдите на сайт.
Ред. rsfghd
Ред. rsfghd
Ред. rsfghd