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

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

Ответ
 
sleepw

offline
Опыт: 8,449
Активность:
Регистр урона
Хелп плиз.. не спал,голова совсем шото отключилась)
накрутил тут хрен знает что..
короче принцип должен быть такой:
У юнита есть такойто баф,он получил дамагу,сет х=х+полученная дамага..
когда х=100 например,делать действия...
Код:
function Trig_AR_Conditions takes nothing returns boolean
    if ( not ( UnitHasBuffBJ(GetAttackedUnitBJ(), 'B00C') == true ) ) then
        return false
    endif
    return true
endfunction

function trAct takes nothing returns nothing
local unit u=GetAttackedUnitBJ()
local real lvlp=50 //local real lvlp=200+300/GetUnitAbilityLevel( u, 'A01W' )//
if udg_ARdmg>=lvlp then
call DisplayTextToForce(GetPlayersAll(),"sss")
else
endif
endfunction

function Trig_AR_Actions takes nothing returns nothing
local trigger tr=CreateTrigger()
ser udg_Autorager=GetAttackedUnitBJ()
set udg_ARdmg=udg_ARdmg+GetEventDamage()
call TriggerRegisterTimerEvent(tr,1.,true)
call TriggerAddAction(tr,function trAct)
endfunction

//===========================================================================
function InitTrig_AR takes nothing returns nothing
    set gg_trg_AR = CreateTrigger(  )
    call TriggerRegisterAnyUnitEventBJ( gg_trg_AR, EVENT_PLAYER_UNIT_ATTACKED )
    call TriggerAddCondition( gg_trg_AR, Condition( function Trig_AR_Conditions ) )
    call TriggerAddAction( gg_trg_AR, function Trig_AR_Actions )
endfunction


sleepw добавил:
я нешарю как туда проверку на количество урона затыкнуть=\
Старый 10.03.2008, 11:37
DFlyer
<3 MJ
offline
Опыт: 42,879
Активность:
» Some optimized code
Код:
function Trig_AR_Conditions takes nothing returns boolean
  return GetUnitAbilityLevel(GetTriggerUnit(), 'B00C') > 0
endfunction

function trAct takes nothing returns nothing
  local unit u=GetTriggerUnit()
  if udg_ARdmg>=50.00 then // зачем тут lvlp, если используется один раз?
    call DisplayTextToForce(GetPlayersAll(),"Text!")
  endif
endfunction

function Trig_AR_Actions takes nothing returns nothing
  local trigger tr=CreateTrigger()
  ser udg_Autorager=GetTriggerUnit()
  set udg_ARdmg=udg_ARdmg+GetEventDamage()
  call TriggerRegisterTimerEvent(tr,1.00,true)
  call TriggerAddAction(tr,function trAct)
endfunction

//===========================================================================
function InitTrig_AR takes nothing returns nothing
    set gg_trg_AR = CreateTrigger()
    call TriggerRegisterAnyUnitEventBJ(gg_trg_AR,EVENT_PLAYER_UNIT_ATTACKED)
    call TriggerAddCondition(gg_trg_AR,Condition(function Trig_AR_Conditions))
    call TriggerAddAction(gg_trg_AR,function Trig_AR_Actions)
endfunction

// + все GetAttackedUnitBJ заменил на GetTriggerUnit(),
// ибо ГетАттакедЮнит - БЖ-функция, и возвращает
// как раз ТриггерЮнита

В смыле? GetEventDamage() возвращает урон. Какая проблема?
Старый 10.03.2008, 11:55
adic3x

offline
Опыт: 108,439
Активность:
Код:
call TriggerRegisterAnyUnitEventBJ( gg_trg_AR, EVENT_PLAYER_UNIT_ATTACKED )

регистрирует тригер на начало атаки
Код:
function Trig_AR_Conditions takes nothing returns boolean
    if ( not ( UnitHasBuffBJ(GetAttackedUnitBJ(), 'B00C') == true ) ) then
        return false
    endif
    return true
endfunction

правильно
Код:
function Trig_AR_Conditions takes nothing returns boolean
return UnitHasBuffBJ(GetAttackedUnitBJ(), 'B00C') == true
endfunction


по сабжу, нужно проверять не по времени, а создавать новый тригер на атакованого с событием юнит получил урон...

ADOLF добавил:
Цитата:
GetEventDamage() возвращает урон

при срабатывании тригера зарегестрированного на событие получения урона, а не атаки
Старый 10.03.2008, 11:56
sleepw

offline
Опыт: 8,449
Активность:
ADOLF
ну эд я шарю я там просто перекрутил немного..
ну вод именно как присвоить евент юнит получил урон какомуто юниту(переменная)?Вод в этом собсно и трабл.
DFlyer
тот код недоделаный то я так для теста фигни понатыкал.. а вообще будующий спелл)
ыдк а смысл с твоей оптимизации) код неправельный абсолютно..
Старый 10.03.2008, 12:11
adic3x

offline
Опыт: 108,439
Активность:
http://www.wc3campaigns.net/showthread.php?t=98231

наверное вот, конечно пример сложный, ноесть шанс что хоть что то ты оттуда выцепишь)

ADOLF добавил:
зы там походу вЖасс, так что обычным эдитором не сейвь
Старый 10.03.2008, 12:18
sleepw

offline
Опыт: 8,449
Активность:
ADOLF
обычных не юзаем:)

sleepw добавил:
ADOLF
та ну зочем оно.. тут способ лёгкий я просто никогда с ним не сталкивалсо. Кароче тут нужен Джон:)
Старый 10.03.2008, 12:51
ZLOBICH
Kicked by XimikS
offline
Опыт: 4,727
Активность:
Код:
call TriggerRegisterUnitEvent(tr,GetTriggerUnit(),EVENT_UNIT_DAMAGED)

всё О.о зачем там юзается таймер вообще не понятно
Старый 10.03.2008, 13:38
sleepw

offline
Опыт: 8,449
Активность:
собсно кофе помогло моему моску думать:)
приятно осознавать что ещё не окончательно туп:)
Код:
function Trig_AR_Conditions takes nothing returns boolean
if GetUnitAbilityLevel(GetTriggerUnit(), 'A01X') >= 1 then
   return true
endif
   return false
endfunction

function trAct takes nothing returns nothing
   local unit u
   local real lvlp=100+300/GetUnitAbilityLevel( udg_Autorager, 'A01X' )
   set udg_ARdmg=udg_ARdmg+GetEventDamage()
if udg_ARdmg>=lvlp then
   set u=CreateUnit(GetOwningPlayer(udg_Autorager),'h00E',GetUnitX(udg_Autorager),GetUn  itY(udg_Autorager),bj_UNIT_FACING)
   call UnitApplyTimedLife( u, 'BTLF', 1 )
   call UnitAddAbility(u,'A01V')
   call SetUnitAbilityLevel(u,'A01V',GetUnitAbilityLevel(udg_Autorager,'A01X'))
   call IssueTargetOrder(u,"bloodlust",udg_Autorager)
   set u=null
   set udg_ARdmg=0.
elseif udg_ARdmg>=lvlp/2 then
   call DisplayTextToForce(GetForceOfPlayer(GetOwningPlayer(udg_Autorager)),"Rage: "+"|cffffcc00"+I2S(R2I(udg_ARdmg))+"/"+I2S(R2I(lvlp))+"|r")
endif
endfunction

function Trig_AR_Actions takes nothing returns nothing
   local trigger tr
   set udg_Autorager=GetTriggerUnit()
if udg_ARb != true then
   set udg_ARb = true
   set tr=CreateTrigger()
   call TriggerRegisterUnitEvent(tr,udg_Autorager,EVENT_UNIT_DAMAGED)
   call TriggerAddAction(tr,function trAct)
endif
endfunction

//===========================================================================
function InitTrig_AR takes nothing returns nothing
    set gg_trg_AR = CreateTrigger(  )
    call TriggerRegisterAnyUnitEventBJ( gg_trg_AR, EVENT_PLAYER_UNIT_ATTACKED )
    call TriggerAddCondition( gg_trg_AR, Condition( function Trig_AR_Conditions ) )
    call TriggerAddAction( gg_trg_AR, function Trig_AR_Actions )
endfunction


sleepw добавил:
ZLOBICH
я просто начал смотреть на то как устроена с-ма отображения демаги. Оно мну совсем с толку сбило.. оказалось всё намного проще)

+я запутался так как всё время сидел на триггерах.. а там кроме существующих на мапе юнитов добавить в евент немона =\

sleepw добавил:
тут я так понял моно и без атак ивента обойтись) впадла переписывать)

Отредактировано sleepw, 10.03.2008 в 14:11.
Старый 10.03.2008, 13:46
DFlyer
<3 MJ
offline
Опыт: 42,879
Активность:
Чуть-чуть не праавильно тока условие. Т.е. правильно, но так будет правильнее:
Код:
// твоё:
function Trig_AR_Conditions takes nothing returns boolean
if GetUnitAbilityLevel(GetTriggerUnit(), 'A01X') >= 1 then
   return true
endif
   return false
endfunction

// правильнее:
function Trig_AR_Conditions takes nothing returns boolean
  return GetUnitAbilityLevel(GetTriggerUnit(), 'A01X') >= 1
endfunction
Старый 10.03.2008, 14:21
sleepw

offline
Опыт: 8,449
Активность:
DFlyer
а разница?) имхо тут просто кому как удобней)
Старый 10.03.2008, 14:24
ZLOBICH
Kicked by XimikS
offline
Опыт: 4,727
Активность:
большая разница в оптимизации..
Старый 10.03.2008, 14:33
DFlyer
<3 MJ
offline
Опыт: 42,879
Активность:
sleepw
Раница есть. Так быстрее работает.
И скажи, неужели тебе удобнее писать так?
Старый 10.03.2008, 14:43
sleepw

offline
Опыт: 8,449
Активность:
DFlyer
я и на такую скорость не жалуюсь
удобнее)
Старый 10.03.2008, 14:46
Toadcop

offline
Опыт: 54,313
Активность:
sleepw
Цитата:
function Trig_AR_Conditions takes nothing returns boolean
return GetUnitAbilityLevel(GetTriggerUnit(), 'A01X') >= 1
endfunction
-> это удобней лол... т.к. меньше текста писать надо.
+ разница в лишних действиях.
Старый 10.03.2008, 14:47
sleepw

offline
Опыт: 8,449
Активность:
пишу просто как думаецо.. если .. значит .. ну х3.. привык так..
Старый 10.03.2008, 14:48
DFlyer
<3 MJ
offline
Опыт: 42,879
Активность:
Привыкай теперь так.
Старый 10.03.2008, 15:10
J
expert
offline
Опыт: 48,447
Активность:
Цитата:
Кароче тут нужен Джон:)

Джон пришел
http://xgm.guru/forum/showthread.php?t=6246

Jon добавил:
и пля не приставайте ко мне что я там полед вайд написал, это было событие полутора годовой давности
Старый 11.03.2008, 18:43
Ответ

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

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

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

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



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