XGM Forum
Сайт - Статьи - Проекты - Ресурсы - Блоги

Форуме в режиме ТОЛЬКО ЧТЕНИЕ. Вы можете задать вопросы в Q/A на сайте, либо создать свой проект или ресурс.
Вернуться   XGM Forum > Warcraft> Академия: форум для вопросов
Ник
Пароль
Войти через VK в один клик
Сайт использует только имя.

Ответ
 
Cosonic5
Моймозггоритогнем
offline
Опыт: 13,584
Активность:
Нужна помощь с проверкой координат
Ребят нужно небольшое наставление столкнулся с проблемой,
Делаю способность, там каст на область 250.
После каста любой юнит который начнет двигаться должен получать дмг каждые там 0.50 сек.
Ну примерно в 1 сек 60 дмг.
Проверка каждые 0.50 сек я думаю хватает чтоб отследить что юнит сдвинулся.?
Сам пробую не получается код приложил снизу.
» код
function Bone_trap_Conditions takes nothing returns boolean
    return GetSpellAbilityId() == 'A02L'
endfunction


function Bone_trap_Periodic takes nothing returns nothing
local timer t  = GetExpiredTimer()
local integer h = GetHandleId(t)
local unit cast = LoadUnitHandle(udg_hash,h,45) // юнит что двигается
local real x2 = LoadReal(udg_hash,h,48)
local real y2 = LoadReal(udg_hash,h,49)
local group g = CreateGroup()
local unit Picked 
local player p = GetOwningPlayer(cast)
local integer wait = LoadInteger(udg_hash,h,50)
local effect f 
local integer i = 0
local real x3
local real y3
local real x4
local real y4
local real dx //= x2 - x
local real dy //= y2 - y
local real dist //= SquareRoot(dx * dx + dy * dy)
call GroupEnumUnitsInRange(g,x2,y2,250.00,null)
 loop
    set Picked = FirstOfGroup(g)
    exitwhen Picked == null
 if IsUnitEnemy(Picked,p) and GetUnitState(Picked, UNIT_STATE_LIFE) > 0.00 and IsUnitType(Picked, UNIT_TYPE_STRUCTURE) == false and IsUnitType(Picked, UNIT_TYPE_MAGIC_IMMUNE) == false then
// Тут нужно отследить движение юнитов в отряде..
   set x3 = GetUnitX(Picked)
   set y3 = GetUnitY(Picked)
   set dx = x2 - x3
   set dy = x2 - x3
   set dist = SquareRoot(dx * dx + dy * dy)
   call SaveReal(udg_hash,GetHandleId(Picked),3,GetUnitX(Picked))
   call SaveReal(udg_hash,GetHandleId(Picked),4,GetUnitY(Picked))
   call BJDebugMsg(R2S(x3)+"Позиция юнита действующие1 координаты X")
   call BJDebugMsg(R2S(y3)+"Позиция юнита действующие1 координаты Y")
   call BJDebugMsg(R2S(LoadReal(udg_hash,GetHandleId(Picked),3))+"Позиция юнита загруженные2 координаты X")
   call BJDebugMsg(R2S(LoadReal(udg_hash,GetHandleId(Picked),4))+"Позиция юнита загруженные2 координаты Y")
   if LoadReal(udg_hash,GetHandleId(Picked),3)!= x3 or LoadReal(udg_hash,GetHandleId(Picked),4) !=y3 then
   call UnitDamageTarget(cast,Picked,30*GetUnitAbilityLevel(cast,'A02L'),false,false,ATTACK_TYPE_NORMAL, DAMAGE_TYPE_UNKNOWN,WEAPON_TYPE_WHOKNOWS)
   call BJDebugMsg("Юнит двинулся получил дмг")
   endif
 endif
   call GroupRemoveUnit(g, Picked)
 endloop
   call DestroyGroup(g)
   set g = null
   set Picked = null
   if wait < 1 then
loop
   set f = LoadEffectHandle(udg_hash,h,40+i)
   call DestroyEffect(f)
   exitwhen i == 24
   set i = i+1
endloop
    call DestroyEffect(f)
    call FlushChildHashtable(udg_hash, h)
    call DestroyTimer(t)
    else
    set wait = wait-1
    call SaveInteger(udg_hash,h,50,wait)
    endif
    set t = null
    set cast = null
    set f = null
    set p = null
endfunction


function Bone_trap_Actions takes nothing returns nothing
local unit cast = GetSpellAbilityUnit()
local timer t = CreateTimer()
local integer h = GetHandleId(t)
local real x2 = GetSpellTargetX()
local real y2 = GetSpellTargetY()
local integer lvl = GetUnitAbilityLevel(cast,'A02L')
local integer wait = 10
local group g = CreateGroup()
local unit Picked
local player p = GetOwningPlayer(cast)
local unit dammi2 //= CreateUnit(GetOwningPlayer(cast), 'h007', x2, y2, 0)
local effect f //= AddSpecialEffectTarget("war3mapImported\\EffectReinforcedTrollBurrowTarget.mdx",dammi2,&qu​ot;origin")
local integer i = 0
local real x3 
local real y3
loop
   set dammi2 = CreateUnit(p, 'h007', x2+250.*Cos(bj_DEGTORAD*i*15.), y2+250.*Sin(bj_DEGTORAD*i*15.), 0.)
   call UnitApplyTimedLife( dammi2, 'BTLF', 5.00)
   call SaveUnitHandle(udg_hash,h,20+i,dammi2)
   set f = AddSpecialEffectTarget("Abilities\\Spells\\Undead\\Graveyard\\GraveMarker.mdl",dammi2,&quo​t;origin")
   call SaveEffectHandle(udg_hash,h,40+i,f)
   set dammi2 = null
   exitwhen i == 24
   set i = i+1
endloop
//call SetUnitScale(dammi2, 140 * 0.01, 140 * 0.01, 140 * 0.01)
//call SetUnitFlyHeight( dammi2, -70.00, 4550.00  )
//call SetUnitPathing(dammi2,false)
call GroupEnumUnitsInRange(g,x2,y2,250.00,null)
 loop
      set Picked = FirstOfGroup(g)
      exitwhen Picked == null
    if IsUnitEnemy(Picked,p) and GetUnitState(Picked, UNIT_STATE_LIFE) > 0.00 and IsUnitType(Picked, UNIT_TYPE_STRUCTURE) == false and IsUnitType(Picked,    
      UNIT_TYPE_MAGIC_IMMUNE) == false then
     set x3 = GetUnitX(Picked)
     set y3 = GetUnitY(Picked)
     //call SaveReal(udg_hash,h,1,x3)
     //call SaveReal(udg_hash,h,2,y3)
     //call BJDebugMsg(R2S(x3+y3)+"Позиция юнита на сохранение")
     //call UnitDamageTarget(cast,Picked,220+60*GetUnitAbilityLevel(cast,'A02A'),false,false,ATTACK_TYPE_NORMAL,​ DAMAGE_TYPE_UNKNOWN,WEAPON_TYPE_WHOKNOWS)
   endif
     call GroupRemoveUnit(g, Picked)
 endloop
     call DestroyGroup(g)
     set g = null
     set Picked = null
call SaveUnitHandle(udg_hash,h,45,cast)
call SaveReal(udg_hash, h, 48, x2)
call SaveReal(udg_hash, h, 49, y2)
call SaveInteger(udg_hash,h,50,wait)
call TimerStart(t,0.50,true, function Bone_trap_Periodic)
set cast = null
set p = null
set g = null
set f = null
set dammi2 = null
set t = null
endfunction

//===========================================================================
function InitTrig_Bone_trap takes nothing returns nothing
local integer index = 0
    set gg_trg_Bone_trap = CreateTrigger(  )
    loop
        call TriggerRegisterPlayerUnitEvent(gg_trg_Bone_trap, Player(index), EVENT_PLAYER_UNIT_SPELL_EFFECT, null)
        set index = index + 1
        exitwhen index == bj_MAX_PLAYER_SLOTS
    endloop
    call TriggerAddCondition( gg_trg_Bone_trap, Condition( function Bone_trap_Conditions ) )
    call TriggerAddAction( gg_trg_Bone_trap, function Bone_trap_Actions )
endfunction

Отредактировано Cosonic5, 31.10.2013 в 08:22.
Старый 31.10.2013, 07:52
Borodach

offline
Опыт: 6,328
Активность:
Cosonic5, Ты должен сохранять координаты в конце, а загружать в начале.
Старый 31.10.2013, 08:15
Cosonic5
Моймозггоритогнем
offline
Опыт: 13,584
Активность:
Borodach, можешь в коде мне это исправить а то я чето запарился.
Старый 31.10.2013, 08:21
Borodach

offline
Опыт: 6,328
Активность:
Попробуй так.... просто там много не понятного
>>
function Bone_trap_Conditions takes nothing returns boolean
    return GetSpellAbilityId() == 'A02L'
endfunction


function Bone_trap_Periodic takes nothing returns nothing
local timer t  = GetExpiredTimer()
local integer h = GetHandleId(t)
local unit cast = LoadUnitHandle(udg_hash,h,45) // юнит что двигается
local real x2 = LoadReal(udg_hash,h,48)
local real y2 = LoadReal(udg_hash,h,49)
local group g = CreateGroup()
local unit Picked 
local player p = GetOwningPlayer(cast)
local integer wait = LoadInteger(udg_hash,h,50)
local effect f 
local integer i = 0
local real x3
local real y3
local real x4
local real y4
local real dx //= x2 - x
local real dy //= y2 - y
local real dist //= SquareRoot(dx * dx + dy * dy)
call GroupEnumUnitsInRange(g,x2,y2,250.00,null)
 loop
    set Picked = FirstOfGroup(g)
    exitwhen Picked == null
 if IsUnitEnemy(Picked,p) and GetUnitState(Picked, UNIT_STATE_LIFE) > 0.00 and IsUnitType(Picked, UNIT_TYPE_STRUCTURE) == false and IsUnitType(Picked, UNIT_TYPE_MAGIC_IMMUNE) == false then
// Тут нужно отследить движение юнитов в отряде..
   set x3 = GetUnitX(Picked)
   set y3 = GetUnitY(Picked)
   set dx = x2 - x3
   set dy = x2 - x3
   set dist = SquareRoot(dx * dx + dy * dy)
   call BJDebugMsg(R2S(x3)+"Позиция юнита действующие1 координаты X")
   call BJDebugMsg(R2S(y3)+"Позиция юнита действующие1 координаты Y")
   call LoadReal(udg_hash,GetHandleId(Picked),3))
   call LoadReal(udg_hash,GetHandleId(Picked),4))
   if LoadReal(udg_hash,GetHandleId(Picked),3)!= x3 or LoadReal(udg_hash,GetHandleId(Picked),4) !=y3 then
   call UnitDamageTarget(cast,Picked,30*GetUnitAbilityLevel(cast,'A02L'),false,false,ATTACK_TYPE_NORMAL, DAMAGE_TYPE_UNKNOWN,WEAPON_TYPE_WHOKNOWS)
   call BJDebugMsg("Юнит двинулся получил дмг")
   call SaveReal(udg_hash,GetHandleId(Picked),3,x3)
   call SaveReal(udg_hash,GetHandleId(Picked),4,y3)
   endif
 endif
   call GroupRemoveUnit(g, Picked)
 endloop
   call DestroyGroup(g)
   set g = null
   set Picked = null
   if wait < 1 then
loop
   set f = LoadEffectHandle(udg_hash,h,40+i)
   call DestroyEffect(f)
   exitwhen i == 24
   set i = i+1
endloop
    call DestroyEffect(f)
    call FlushChildHashtable(udg_hash, h)
    call DestroyTimer(t)
    else
    set wait = wait-1
    call SaveInteger(udg_hash,h,50,wait)
    endif
    set t = null
    set cast = null
    set f = null
    set p = null
endfunction


function Bone_trap_Actions takes nothing returns nothing
local unit cast = GetSpellAbilityUnit()
local timer t = CreateTimer()
local integer h = GetHandleId(t)
local real x2 = GetSpellTargetX()
local real y2 = GetSpellTargetY()
local integer lvl = GetUnitAbilityLevel(cast,'A02L')
local integer wait = 10
local group g = CreateGroup()
local unit Picked
local player p = GetOwningPlayer(cast)
local unit dammi2 //= CreateUnit(GetOwningPlayer(cast), 'h007', x2, y2, 0)
local effect f //= AddSpecialEffectTarget("war3mapImported\\EffectReinforcedTrollBurrowTarget.mdx",dammi2,&am​p;qu&#8203;ot;origin")
local integer i = 0
local real x3 
local real y3
loop
   set dammi2 = CreateUnit(p, 'h007', x2+250.*Cos(bj_DEGTORAD*i*15.), y2+250.*Sin(bj_DEGTORAD*i*15.), 0.)
   call UnitApplyTimedLife( dammi2, 'BTLF', 5.00)
   call SaveUnitHandle(udg_hash,h,20+i,dammi2)
   set f = AddSpecialEffectTarget("Abilities\\Spells\\Undead\\Graveyard\\GraveMarker.mdl",dammi2,&​;quo&#8203;t;origin")
   call SaveEffectHandle(udg_hash,h,40+i,f)
   set dammi2 = null
   exitwhen i == 24
   set i = i+1
endloop
//call SetUnitScale(dammi2, 140 * 0.01, 140 * 0.01, 140 * 0.01)
//call SetUnitFlyHeight( dammi2, -70.00, 4550.00  )
//call SetUnitPathing(dammi2,false)
call GroupEnumUnitsInRange(g,x2,y2,250.00,null)
 loop
      set Picked = FirstOfGroup(g)
      exitwhen Picked == null
    if IsUnitEnemy(Picked,p) and GetUnitState(Picked, UNIT_STATE_LIFE) > 0.00 and IsUnitType(Picked, UNIT_TYPE_STRUCTURE) == false and IsUnitType(Picked,    
      UNIT_TYPE_MAGIC_IMMUNE) == false then
     set x3 = GetUnitX(Picked)
     set y3 = GetUnitY(Picked)
     //call SaveReal(udg_hash,h,1,x3)
     //call SaveReal(udg_hash,h,2,y3)
     //call BJDebugMsg(R2S(x3+y3)+"Позиция юнита на сохранение")
     //call UnitDamageTarget(cast,Picked,220+60*GetUnitAbilityLevel(cast,'A02A'),false,false,ATTACK_TYPE_NORMAL,​&#8203; DAMAGE_TYPE_UNKNOWN,WEAPON_TYPE_WHOKNOWS)
   endif
     call GroupRemoveUnit(g, Picked)
 endloop
     call DestroyGroup(g)
     set g = null
     set Picked = null
call SaveUnitHandle(udg_hash,h,45,cast)
call SaveReal(udg_hash, h, 48, x2)
call SaveReal(udg_hash, h, 49, y2)
call SaveInteger(udg_hash,h,50,wait)
call TimerStart(t,0.50,true, function Bone_trap_Periodic)
set cast = null
set p = null
set g = null
set f = null
set dammi2 = null
set t = null
endfunction

//===========================================================================
function InitTrig_Bone_trap takes nothing returns nothing
local integer index = 0
    set gg_trg_Bone_trap = CreateTrigger(  )
    loop
        call TriggerRegisterPlayerUnitEvent(gg_trg_Bone_trap, Player(index), EVENT_PLAYER_UNIT_SPELL_EFFECT, null)
        set index = index + 1
        exitwhen index == bj_MAX_PLAYER_SLOTS
    endloop
    call TriggerAddCondition( gg_trg_Bone_trap, Condition( function Bone_trap_Conditions ) )
    call TriggerAddAction( gg_trg_Bone_trap, function Bone_trap_Actions )
endfunction
<<
Старый 31.10.2013, 08:30
Cosonic5
Моймозггоритогнем
offline
Опыт: 13,584
Активность:
Borodach, Все работает спс за помощь!
Старый 31.10.2013, 09:03
Ответ

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы можете скачивать файлы

BB-коды Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход



Часовой пояс GMT +3, время: 03:31.