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

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

Ответ
 
KPOKODIL
В разработке
offline
Опыт: 10,262
Активность:
Оптимизация кода
Я вот начал изучать потихоньку jass. Создал для начала способность Roots , обладатель которой имеет 10% шанс опутать противника в корни на 3 сек (без дамми).Можете плз написать оптимизированый.
function Trig_Roots_Conditions takes nothing returns boolean
    if ( not ( GetUnitAbilityLevelSwapped('A000', GetAttacker()) > 0 ) ) then
        return false
    endif
    return true
endfunction

function Trig_Chance_Func001C takes nothing returns boolean
    if ( not ( GetRandomReal(0, 100.00) <= 10.00 ) ) then
        return false
    endif
    return true
endfunction

function Trig_Roots_Actions takes nothing returns nothing
 if ( Trig_Chance_Func001C() ) then
    local effect e
    local unit t = GetAttackedUnitBJ()
    call PauseUnitBJ( true, t )
    call AddSpecialEffectTargetUnitBJ( "origin",t , "Abilities\\Spells\\NightElf\\EntanglingRoots\\EntanglingRootsTarget.mdl" )
    set e = GetLastCreatedEffectBJ()
    call PolledWait( 3.00 )
    call PauseUnitBJ( false, t )
    call DestroyEffectBJ( e )
    else
        call DoNothing(  )
 endif
endfunction

//===========================================================================
function InitTrig_Roots takes nothing returns nothing
    set gg_trg_Roots = CreateTrigger(  )
    call TriggerRegisterAnyUnitEventBJ( gg_trg_Roots, EVENT_PLAYER_UNIT_ATTACKED )
    call TriggerAddCondition( gg_trg_Roots, Condition( function Trig_Roots_Conditions ) )
    call TriggerAddAction( gg_trg_Roots, function Trig_Roots_Actions )
    call TriggerAddAction( gg_trg_Roots, function Trig_Chance_Func001C)
endfunction

Отредактировано alexkill, 18.06.2010 в 18:16.
Старый 18.06.2010, 18:05
16GB
GhostOne User
offline
Опыт: 60,317
Активность:
KPOKODIL,
совет делай лучше через кс пока не разберёшся с устройством триггеров в джаззе
Старый 18.06.2010, 18:07
KPOKODIL
В разработке
offline
Опыт: 10,262
Активность:
16GB, да читал я все это, и вот я пытаюсь разобраться.
Старый 18.06.2010, 18:10
16GB
GhostOne User
offline
Опыт: 60,317
Активность:
вот но вобще вейт надо заменять таймером но для этого в основном нужен хэш (пока не будем это трогать)
local unit t =GetTriggerUnit()
local effect e = AddSpecialEffectTarget("Abilities\\Spells\\NightElf\\EntanglingRoots\\EntanglingRootsTarget.mdl​", t, "origin")
call PauseUnit( t, true )
call TriggerSleepAction( 3.00 )
call PauseUnit( t, false )
call DestroyEffect( e )
else
call DoNothing( )
endif
endfunction
Старый 18.06.2010, 18:13
Doc

offline
Опыт: 63,163
Активность:
function Trig_Roots_Conditions takes nothing returns boolean
if ( not ( GetUnitAbilityLevelSwapped('A000', GetAttacker()) > 0 ) ) then
return false
endif
return true
endfunction
function Trig_Roots_Conditions takes nothing returns boolean
return GetUnitAbilityLevel(GetAttacker(), 'A000') > 0
endfunction
function Trig_Chance_Func001C takes nothing returns boolean
return GetRandomReal(0., 100.) <= 10.
endfunction
call PauseUnitBJ( true, t )
call PauseUnitBJ( false, t )
call DestroyEffectBJ( e )
call PauseUnit(t, true)
call PauseUnit(t, false)
call DestroyEffect(e)
call AddSpecialEffectTargetUnitBJ( "origin",t , "Abilities\\Spells\\NightElf\\EntanglingRoots\\EntanglingRootsTarget.mdl" )
set e = GetLastCreatedEffectBJ()
set e = AddSpecialEffectTarget(t, "Abilities\\Spells\\NightElf\\EntanglingRoots\\EntanglingRootsTarget.mdl", "origin" )
local unit t = GetAttackedUnitBJ()
local unit t = GetTriggerUnit()
call DoNothing( )
убрать вообще
call TriggerAddAction( gg_trg_Roots, function Trig_Roots_Actions )
call TriggerAddAction( gg_trg_Roots, function Trig_Chance_Func001C)
wtf O_O
call TriggerAddAction( gg_trg_Roots, function Trig_Roots_Actions )
Обнуления локалок не увидел.

Отредактировано alexkill, 18.06.2010 в 19:13.
Старый 18.06.2010, 18:22
Master_chan
Полуночный командир
offline
Опыт: 15,660
Активность:
с учетом вышеперечисленного и хеша в том числе
» разбирайся
Код:
globals
    hashtable gg_roots_hash = InitHashtable()
endglobals

function Trig_Roots_Conditions takes nothing returns boolean
    return GetUnitAbilityLevel(GetAttacker(), 'A000') > 0
endfunction

function Roots_Timer takes nothing returns nothing
local timer t = GetExpiredTimer()
local integer i = GetHandleId(t)
local effect e = LoadEffectHandle(gg_roots_hash,i,0)
local unit u = LoadUnitHandle(gg_roots_hash,i,1)
call DestroyEffect(e)
call PauseUnit(u,false)
set e = null
set u = null
call FlushChildHashtable(gg_roots_hash,i)
call DestroyTimer(t)
set t = null
endfunction

function Trig_Roots_Actions takes nothing returns nothing
local unit u = GetTriggerUnit()
local effect e
local timer t
 if (GetRandomInt(1,10) == 5 ) then
    set t = CreateTimer()
    call PauseUnit(u,true)
    set e = AddSpecialEffectTarget("Abilities\\Spells\\NightElf\\EntanglingRoots\\EntanglingRootsTarget.mdl",u,"origin")
    call SaveEffectHandle(gg_roots_hash,GetHandleId(t),0,e)
    call SaveUnitHandle(gg_roots_hash,GetHandleId(t),1,u)
    call TimerStart(t,3.,false,function Roots_Timer)
 endif
set e = null
set u = null
set t = null
endfunction

//===========================================================================
function InitTrig_Roots takes nothing returns nothing
    set gg_trg_Roots = CreateTrigger(  )
    call TriggerRegisterAnyUnitEventBJ( gg_trg_Roots, EVENT_PLAYER_UNIT_ATTACKED )
    call TriggerAddCondition( gg_trg_Roots, Condition( function Trig_Roots_Conditions ) )
    call TriggerAddAction( gg_trg_Roots, function Trig_Roots_Actions )
endfunction


абузится это кстати атакой и отменой

Отредактировано Master_chan, 18.06.2010 в 19:22.
Старый 18.06.2010, 19:11
Doc

offline
Опыт: 63,163
Активность:
Master_chan, таймер по вашему обнулять не нужно? И кстати тут шанс 50% а не 10%.
Старый 18.06.2010, 19:13
Master_chan
Полуночный командир
offline
Опыт: 15,660
Активность:
По-моему таймер обнулять не нужно. А в условии у меня стоит не <= 5 а ==5, прошу читать внимательнее.
Старый 18.06.2010, 19:14
silumin

offline
Опыт: 11,153
Активность:
DoctorGester, ну шанс тут не 50% и не 10%, а все 9%... xD
Старый 18.06.2010, 19:17
Master_chan
Полуночный командир
offline
Опыт: 15,660
Активность:
9% исправил >_<
Старый 18.06.2010, 19:17
silumin

offline
Опыт: 11,153
Активность:
Master_chan, шанс 10% - это:
Код:
GetRandomInt(0,9)
GetRandomInt(1,10)
но никак не
Код:
GetRandomInt(0,10)
Старый 18.06.2010, 19:19
Master_chan
Полуночный командир
offline
Опыт: 15,660
Активность:
говорю же что исправил
Старый 18.06.2010, 19:20
Doc

offline
Опыт: 63,163
Активность:
Master_chan, таймер это такой же объект как и остальные, его нужно обнулять.
Насчет шанса извиняюсь, недосмотрел.
Старый 18.06.2010, 19:21
KPOKODIL
В разработке
offline
Опыт: 10,262
Активность:
Master_chan:
call FlushChildHashtable(gg_roots_hash,i)
Что делает эта строчка?
Старый 18.06.2010, 19:23
Master_chan
Полуночный командир
offline
Опыт: 15,660
Активность:
Всё исправил, всё обнулил. Довольны?))

Код:
call FlushChildHashtable(gg_roots_hash,i)


Строчка чистит хештаблицу по ключу i (в данном случае это хендл таймера), чтобы не засорять память
Старый 18.06.2010, 19:23
KPOKODIL
В разработке
offline
Опыт: 10,262
Активность:
Master_chan:
call SaveEffectHandle(gg_roots_hash,GetHandleId(t),0,e)
call SaveUnitHandle(gg_roots_hash,GetHandleId(t),1,u)
Что значит 0 и 1 в этих двух строчках?
Старый 18.06.2010, 19:30
AlexKARASb
Learning cpp
offline
Опыт: 22,103
Активность:
KPOKODIL, ячейка памяти, ячейки при сохранении используються разные
Старый 18.06.2010, 19:39
Ответ

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

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

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

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



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