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

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

Закрытая тема
 
Ninbous
Jass progress >>>>>35/100
offline
Опыт: 5,674
Активность:
Неработает код
Почему то юнит не изменяет масштаб в таймере каждые 0.05 сек и в таймере if не срабатывает... немогу понять подскажите, вроде сохранял и загружал хеш правильно
» код
function Trig_PirosAddsJass_Conditions takes nothing returns boolean
    return (GetUnitAbilityLevel(GetTriggerUnit(),'A028') != 0 )
endfunction

function move takes nothing returns nothing
    local unit u = LoadUnitHandle(ht, 'A028', 1)
    local timer t = LoadTimerHandle(ht,'A028',2)
    local integer i = 1
    call SetUnitScale(u, 1+i*0.01, 1+i*0.01, 1+i*0.01)
    set i = i+1
if i==120 then
    call UnitDamagePoint(u,0,250,GetUnitX(u),GetUnitY(u),40000, true, false,ATTACK_TYPE_NORMAL,DAMAGE_TYPE_NORMAL, WEAPON_TYPE_WHOKNOWS)    
    call DestroyEffect(AddSpecialEffect("Abilities\\Spells\\Other\\Incinerate\\FireLordDeathExplode.mdl&​quot;,GetUnitX(u),GetUnitY(u)))
    call RemoveUnit(u)
    call DestroyTimer(t)
    set u = null
    set t = null
endif
endfunction
 
function Trig_PirosAddsJass_Actions takes nothing returns nothing
local unit u = GetTriggerUnit()
local real x = GetUnitX(u)
local real y = GetUnitY(u)
local unit dummy = CreateUnit(GetOwningPlayer(u),'n00D',x,y,0)
local timer t = CreateTimer()
call SaveUnitHandle(ht, 'A028', 1,dummy)
call SaveTimerHandle(ht, 'A028', 2, t)
    call UnitApplyTimedLife (dummy,'BTLF',6)
    call SetUnitState(dummy, UNIT_STATE_LIFE, 1)
    call SetUnitAnimation( dummy, "stand alternate" )
    call TimerStart (t,0.05,true,function move)
    set u = null
    set dummy = null
    set t = null
endfunction

//===========================================================================
function InitTrig_PirosAddsJass takes nothing returns nothing
    set gg_trg_PirosAddsJass = CreateTrigger(  )
    call TriggerRegisterAnyUnitEventBJ( gg_trg_PirosAddsJass, EVENT_PLAYER_UNIT_DEATH )
    call TriggerAddCondition( gg_trg_PirosAddsJass, Condition( function Trig_PirosAddsJass_Conditions ) )
    call TriggerAddAction( gg_trg_PirosAddsJass, function Trig_PirosAddsJass_Actions )
endfunction
Старый 17.10.2009, 00:47
Enein
Silenced by ZlaYa1000
offline
Опыт: 43,453
Активность:
оригинально
local integer i = 1
у тебя ведь i не изменяется
call SetUnitScale(u, 1+i*0.01, 1+i*0.01, 1+i*0.01)
задание по y и z никчему
call SetUnitScale(u, 1.+i*.01, 0., 0.)
Enein добавил:
да и весь код вцелом ужасный
Старый 17.10.2009, 01:02
Ninbous
Jass progress >>>>>35/100
offline
Опыт: 5,674
Активность:
у тебя ведь i не изменяется
Непонял почему не изменяется? С таймерами плохо работаю.
 call TimerStart (t,0.05,true,function move)
Функция должна запускать таймер каждые 0.05 сек и поидее он когда запускается должен с каждой долей 0.05 изменять переменную i
 set i = i+1
и когда она достигает 120 должен удалять таймер
if i==120 then
...
 call DestroyTimer(t)
Или каждый раз запускается новый таймер, в котором свои локалки?
Лучше бы я использовал циклы и вейты, но понимаю что это не модно
задание по y и z никчему
Буду знать
Старый 17.10.2009, 15:35
SRes
1110101000
offline
Опыт: 9,997
Активность:
Как-бы i создается каждый раз заного, после окончания функции удаляется. Она никогда не станет 120 при таком коде. Сделай ее как глобалку - то запашет, если остальное правильно.
Старый 17.10.2009, 16:55
Enein
Silenced by ZlaYa1000
offline
Опыт: 43,453
Активность:
ты можеш не качать себе экспу
нет, немогу, иначе моя жизнь лишится смысла
прчем тут локалки??
а притом что надо читать статьи (в том случае, если человек сам неможет понять как это работает, а это именно тот случай)
Старый 17.10.2009, 16:56
ShadoW DaemoN

offline
Опыт: 37,078
Активность:
function Trig_PirosAddsJass_Conditions takes nothing returns boolean
    return (GetUnitAbilityLevel(GetTriggerUnit(),'A028') != 0 )
endfunction

function move takes nothing returns nothing
  local unit    u = LoadUnitHandle (ht, 'A028', 1)
  local timer   t = LoadTimerHandle(ht, 'A028',2)
  local integer i = LoadInteger    (ht, 'A028', 3)

  call SetUnitScale(u, 1+i*0.01, 1+i*0.01, 1+i*0.01)
  set i = i + 1
  call SaveInteger(ht, 'A028', 3, i)

  if i == 120 then
    call UnitDamagePoint(u, 0, 250, GetUnitX(u), GetUnitY(u), 40000, true, false, ATTACK_TYPE_NORMAL, DAMAGE_TYPE_NORMAL, WEAPON_TYPE_WHOKNOWS)    
    // call DestroyEffect(AddSpecialEffect("Abilities\\Spells\\Other\\Incinerate\\FireLordDeathExplode.mdl&​quot;, GetUnitX(u), GetUnitY(u)))
    call RemoveUnit(u)
    call DestroyTimer(t)
    set u = null
    set t = null
  endif
endfunction
 
function Trig_PirosAddsJass_Actions takes nothing returns nothing
  local unit u = GetTriggerUnit()
  local real x = GetUnitX(u)
  local real y = GetUnitY(u)
  local unit dummy = CreateUnit(GetOwningPlayer(u), 'n00D', x, y, 0)
  local timer t = CreateTimer()

  call SaveUnitHandle (ht, 'A028', 1, dummy)
  call SaveTimerHandle(ht, 'A028', 2, t)
  call SaveInteger    (ht, 'A028', 3, 1)

  call UnitApplyTimedLife (dummy, 'BTLF', 6)
  call SetUnitState(dummy, UNIT_STATE_LIFE, 1)
  call SetUnitAnimation(dummy, "stand alternate")
  call TimerStart (t, 0.05, true, function move)

  set u = null
  set dummy = null
  set t = null
endfunction

//===========================================================================
function InitTrig_PirosAddsJass takes nothing returns nothing
  local trigger tr = CreateTrigger()
  call TriggerRegisterAnyUnitEventBJ(tr, EVENT_PLAYER_UNIT_DEATH)
  call TriggerAddCondition(tr, Condition( function Trig_PirosAddsJass_Conditions))
  call TriggerAddAction(tr, function Trig_PirosAddsJass_Actions)
endfunction
Старый 17.10.2009, 18:28
Ninbous
Jass progress >>>>>35/100
offline
Опыт: 5,674
Активность:
Enein, я повторю локалку тут не причем, я знаю что они создаются в каждой функции свой набор локалок, я незнал что таймер будет создаватся заново, я думал что он будет действовать как цикл...
Ninbous добавил:
ShadoW_DaemoN, SRes, спс, клоуз тему
Старый 17.10.2009, 19:38
Enein
Silenced by ZlaYa1000
offline
Опыт: 43,453
Активность:
заново будет запускаться только функция, но никак не таймер, хотя можно и поизвращатся:
function move takes nothing returns nothing
  ...
  if i < 120 then
      set bj_lastStartedTimer = CreateTimer()
      call TimerStart(bj_lastStartedTimer,.05,false,function move)
      set bj_lastStartedTimer = null
  else
      call UnitDamagePoint(u, 0., 250., GetUnitX(u), GetUnitY(u), 40000., true, false, ATTACK_TYPE_NORMAL, DAMAGE_TYPE_NORMAL, null)
  endif

  set bj_lastStartedTimer = GetExpiredTimer()
  call PauseTimer(bj_lastStartedTimer)
  call DestroyTimer(bj_lastStartedTimer)
  set bj_lastStartedTimer = null

  set u = null

endfunction
только незачем...
Старый 17.10.2009, 19:44
Закрытая тема

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

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

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

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



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