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

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

Ответ
 
Vampirrr
O_o
offline
Опыт: 19,286
Активность:
Просьба проверить на наличие утечек и по возможности оптимизировать
» Код
Код:
function Trig_Thorns_Conditions takes nothing returns boolean
return GetSpellAbilityId() == 'ADdf' 
endfunction

function Stop takes nothing returns nothing
    call PauseTimer(udg_periodic[udg_PlayerNumber])
endfunction

function Verification takes nothing returns boolean
    return IsUnitEnemy(GetFilterUnit(), Player(0)) and not(GetUnitState(GetFilterUnit(), UNIT_STATE_LIFE) <= 0)
endfunction

function Damage takes nothing returns nothing
local group g = CreateGroup()
local effect e1 
local effect e2 
local effect e3
local unit target 
local real x = GetUnitX(udg_Hero[udg_PlayerNumber])
local real y = GetUnitY(udg_Hero[udg_PlayerNumber])
    call GroupEnumUnitsInRangeOfLoc(g, Location(x+GetRandomReal(-500.00, 500.00), y+GetRandomReal(-500.00, 500.00)), 500, Condition(function Verification))
    call GroupAddUnit(g, GetEnumUnit())
    set target = GroupPickRandomUnit(g)
    set e1 = AddSpecialEffectLoc("эффект", GetUnitLoc(target)) //- там где "эффект", у меня прописан путь
    set e2 = AddSpecialEffectLoc("эффект", GetUnitLoc(target))
    set e3 = AddSpecialEffectTarget("эффект", target, "origin")
    call UnitDamageTarget(udg_Hero[udg_PlayerNumber], target, 50, true, false, ATTACK_TYPE_NORMAL, DAMAGE_TYPE_NORMAL, WEAPON_TYPE_WHOKNOWS) 
call DestroyGroup(g)
set g = null
call DestroyEffect(e1)
set e1 = null
call DestroyEffect(e2)
set e2 = null
call DestroyEffect(e3)
set e3 = null
set target = null
endfunction

function Trig_Thorns_Actions takes nothing returns nothing
local timer t = CreateTimer()
set udg_PlayerNumber = GetPlayerId(GetOwningPlayer(GetSpellAbilityUnit()))
set udg_Hero[udg_PlayerNumber] = GetSpellAbilityUnit()
    call TimerStart(t, 0.01, false, function Stop)
    call TimerStart(udg_periodic[udg_PlayerNumber], 0.01, true, function Damage)
endfunction

//===========================================================================
function InitTrig_Thorns takes nothing returns nothing
    set gg_trg_Thorns = CreateTrigger(  )
    call TriggerRegisterAnyUnitEventBJ( gg_trg_Thorns, EVENT_PLAYER_UNIT_SPELL_CAST )
    call TriggerAddCondition( gg_trg_Thorns, Condition( function Trig_Thorns_Conditions ) )
    call TriggerAddAction( gg_trg_Thorns, function Trig_Thorns_Actions )
endfunction
Старый 27.01.2009, 23:27
alexkill

offline
Опыт: 18,872
Активность:
Код:
function Trig_Thorns_Conditions takes nothing returns boolean
    return GetSpellAbilityId() == 'ADdf' 
endfunction

function Stop takes nothing returns nothing
    call PauseTimer(udg_periodic[udg_PlayerNumber])
endfunction

function Verification takes nothing returns boolean
    return IsUnitEnemy(GetFilterUnit(), Player(0)) and GetUnitState(GetFilterUnit(), UNIT_STATE_LIFE) > 0
endfunction

function Damage takes nothing returns nothing
    local group g = CreateGroup()
    local unit target 
    local real x = GetUnitX(udg_Hero[udg_PlayerNumber]) 
    local real y = GetUnitY(udg_Hero[udg_PlayerNumber])
    call GroupEnumUnitsInRange(g, x+GetRandomReal(-500.00, 500.00), y+GetRandomReal(-500.00, 500.00), 500, Condition(function Verification))
    set target = GroupPickRandomUnit(g)
    call DestroyEffect(AddSpecialEffect("эффект", GetUnitX(target),GetUnitY(target)))
    call DestroyEffect(AddSpecialEffect("эффект", GetUnitX(target),GetUnitY(target)))
    call DestroyEffect(AddSpecialEffectTarget("эффект", target, "origin"))
    call UnitDamageTarget(udg_Hero[udg_PlayerNumber], target, 50, true, false, ATTACK_TYPE_NORMAL, DAMAGE_TYPE_NORMAL, WEAPON_TYPE_WHOKNOWS) 
    call DestroyGroup(g)
    set g = null
    set target = null
endfunction

function Trig_Thorns_Actions takes nothing returns nothing
    local timer t = CreateTimer()
    set udg_PlayerNumber = GetPlayerId(GetTriggerPlayer())
    set udg_Hero[udg_PlayerNumber] = GetTriggerUnit()
    call TimerStart(t, 0.01, false, function Stop)
    call TimerStart(udg_periodic[udg_PlayerNumber], 0.01, true, function Damage)
    set t = null
endfunction

//===========================================================================
function InitTrig_Thorns takes nothing returns nothing
    set gg_trg_Thorns = CreateTrigger(  )
    call TriggerRegisterAnyUnitEventBJ( gg_trg_Thorns, EVENT_PLAYER_UNIT_SPELL_CAST )
    call TriggerAddCondition( gg_trg_Thorns, Condition( function Trig_Thorns_Conditions ) )
    call TriggerAddAction( gg_trg_Thorns, function Trig_Thorns_Actions )
endfunction

Вопрос об оптимизации:
- Для чего нужны 2 таймера?
- Какие эффекты используются (ибо не для всех сработает то, что я написал)
Ну и стандартный вопрос: что хочешь получить в итоге?
Старый 28.01.2009, 10:44
Vampirrr
O_o
offline
Опыт: 19,286
Активность:
alexkill, получить я хочу спелл (который впринципе работает при моей функции, но как я заметил вызывает утечки, которые я уже устранил). 2 таймера нужня для: один отключает второй таймер, второй таймер каждые Х сек вызывает функцию. По поводу эффектов - скажи пожалуйста, для какого типа эффектов не уместен твой код?
Старый 28.01.2009, 20:28
alexkill

offline
Опыт: 18,872
Активность:
Цитата:
Сообщение от Vampirrr
По поводу эффектов - скажи пожалуйста, для какого типа эффектов не уместен твой код?


Ну это уж ты сам проверишь, добавив их в код. Если же с каким-либо эффектом не получится - нужно создавать переменную типа effect и аттачить ее к таймеру. Интервал таймера - время, через которое нужно удалить эффект.
Старый 29.01.2009, 15:01
Vampirrr
O_o
offline
Опыт: 19,286
Активность:
alexkill, вот как это делать (всмысле аттачить что-то к таймеру)?
Старый 30.01.2009, 21:27
Ответ

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

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

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

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



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