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

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

Закрытая тема
 
Sie7eN
Feel what's real
offline
Опыт: 2,550
Активность:
Daemonik:
как карта вообще сохранилась? Эдитор должен был выругаться
Ну JNGP не ругается.
Ramazanoff добавил:
В очередной раз выкладываю код, он поднимает и не опускает можете даже проверить
function Condition_1 takes nothing returns boolean
return GetSpellAbilityId() == 'A01M'
endfunction
function Cond takes nothing returns boolean
local unit u = GetFilterUnit()
return not (GetUnitState(u, UNIT_STATE_LIFE) <= 0)
endfunction
function op takes nothing returns nothing
local timer t = GetExpiredTimer()
local unit u = GetEnumUnit()
call SetUnitFlyHeight( u, 0.00, 500.00 )
call PauseUnit(u, false )
set t = null
set u = null
endfunction
function F takes nothing returns nothing
local unit u2 = GetSpellAbilityUnit()
local timer t = CreateTimer()
call UnitAddAbilityBJ( 'Aave', GetEnumUnit())
call UnitRemoveAbilityBJ( 'Aave', GetEnumUnit())
call UnitDamageTargetBJ( u2, GetEnumUnit(), ( 40.00 * I2R(GetUnitAbilityLevelSwapped('A01M', u2)) ), ATTACK_TYPE_NORMAL, DAMAGE_TYPE_UNIVERSAL )
call PauseUnit( GetEnumUnit(), true )
call SetUnitFlyHeight( GetEnumUnit(), 700.00, 500.00 )
call TimerStart(t,1.4,true,function op)
endfunction
function bl takes nothing returns nothing
local location l = GetSpellTargetLoc()
local group g = CreateGroup()
local real x = GetLocationX(l)
local real y = GetLocationY(l)
local real i = I2R(GetUnitAbilityLevel(GetTriggerUnit(), 'A01M'))
local real radius = 300 + (20*i)
local boolexpr bol = Condition(function Cond)
call GroupEnumUnitsInRange(g,x,y,radius,bol)
call ForGroup(g, function F)
call RemoveLocation (l)
endfunction
===========================================================================
function InitTrig_Podriv_Copy takes nothing returns nothing
set gg_trg_Podriv_Copy = CreateTrigger( )
call TriggerAddCondition( gg_trg_Podriv_Copy, Condition( function Condition_1 ) )
call TriggerAddAction( gg_trg_Podriv_Copy, function bl )
call TriggerRegisterAnyUnitEventBJ( gg_trg_Podriv_Copy, EVENT_PLAYER_UNIT_SPELL_EFFECT )
endfunction
Старый 13.04.2010, 17:08
NoSilence
Случайный прохожий
offline
Опыт: 1,927
Активность:
Manhant, где фигня? :) всё супер
Старый 13.04.2010, 17:09
Daemonik

offline
Опыт: 5,084
Активность:
function op takes nothing returns nothing
local timer t = GetExpiredTimer()
local unit u = GetEnumUnit()
call SetUnitFlyHeight( u, 0.00, 500.00 )
call PauseUnit(u, false )
set t = null
set u = null
endfunction

call TimerStart(t,1.4,true,function op)
Ну нет у тебя в таймере EnumUnit.. Нету.
Daemonik добавил:
NoSilence, Не учи людей гадостям типа SleepAction, тем более в заклинаниях
Daemonik добавил:
Ramazanoff, Про утечки я вообще молчу
Старый 13.04.2010, 17:13
StoneHeartis
Kicked by ScorpioT1002
offline
Опыт: 1,009
Активность:
Опасносте! Бальфой кодэ:

Код:
function Podriv_Conditions takes nothing returns boolean
    return GetSpellAbilityId() == 'A01M' 
endfunction

function Podriv_T takes nothing returns nothing
    local timer t=GetExpiredTimer()
    local group g=LoadGroupHandle(udg_Hash, GetHandleId(t), 0)
    local unit eu
    
     loop
        set eu = FirstOfGroup(g)
        exitwhen eu == null
            if IsUnitDeadBJ(eu) == false then
                call SetUnitFlyHeight( eu, 0.00, 500.00 )
                call PauseUnit(eu, false)
            endif
        call GroupRemoveUnit(g, eu)
    endloop
    call DestroyGroup(g)
    call FlushChildHashtable(udg_Hash, GetHandleId(t))
    call DestroyTimer(t)
    set t=null
    set eu=null
endfunction

function Podriv_Actions takes nothing returns nothing
    local timer t=CreateTimer()
    local group g=CreateGroup()
    local group g2
    local unit u=GetTriggerUnit()
    local unit eu
    local real i = I2R(GetUnitAbilityLevel(u, 'A01M'))
    local real damage=40.00 * i
    local real radius = 300 + (20*i)
    local real x = GetSpellTargetX()
    local real y = GetSpellTargetY()
    
    call GroupEnumUnitsInRange( g, x, y, radius, null)
    call GroupRemoveUnit(g, u)
    loop
        set eu = FirstOfGroup(g)
        exitwhen eu == null
        if IsPlayerEnemy(GetOwningPlayer(eu), GetOwningPlayer(u)) == true and IsUnitDeadBJ(eu) == false and IsUnitType(eu, UNIT_TYPE_STRUCTURE) == false then
            //call UnitAddAbility(eu, 'Aave') ЗАЧЕМ!? (Но если надо, включить никогда не поздно)
            //call UnitRemoveAbility( eu, 'Aave') ЗАЧЕМ!? (Но если надо, включить никогда не поздно)
            call UnitDamageTarget(u,eu,damage,true,false,ATTACK_TYPE_NORMAL,DAMAGE_TYPE_UNIVERSAL   ,WEAPON_TYPE_WHOKNOWS)
            call PauseUnit( eu, true )
            call SetUnitFlyHeight( eu, 700.00, 500.00 )
            call GroupAddUnit(g2, eu)
        endif
        call GroupRemoveUnit(g, eu)
    endloop
    
    call SaveGroupHandle(udg_Hash, GetHandleId(t), 0, g2)
    call TimerStart(t, 1.40, false, function Podriv_T)
    
    call DestroyGroup(g)
    call DestroyGroup(g2)
    set t=null
    set u=null
    set eu=null
endfunction

//===========================================================================
function InitTrig_Podriv takes nothing returns nothing
    local trigger t = CreateTrigger(  )
    call TriggerRegisterAnyUnitEventBJ( t, EVENT_PLAYER_UNIT_SPELL_EFFECT )
    call TriggerAddCondition( t, Condition( function Podriv_Conditions ) )
    call TriggerAddAction( t, function Podriv_Actions )
    set t=null
endfunction


ЗЫ: Не забудьте иницилизировать хеш таблицу:
Или(при запуске мапы):
Код:
globals
hashtable=InitHashtable()
endglobals

Или: Создать перменную типа "хеш-таблица с именем "Hash".И:
С: Инициализация мапы
Д:
1)Создать Хеш-таблицу
2) set Hash = ласт критед хэштейбл.
Статья по хешу

Отредактировано StoneHeartis, 13.04.2010 в 17:47.
Старый 13.04.2010, 17:29
Sie7eN
Feel what's real
offline
Опыт: 2,550
Активность:
Условия частично не работают. Написал что-то вроде:
unction Cond takes nothing returns boolean
local unit u = GetFilterUnit()
return not (GetUnitState(u, UNIT_STATE_LIFE) <= 0)
return (IsUnitAlly(u, GetOwningPlayer(GetSpellAbilityUnit())))
endfunction
А она су** не фильтрует, что делать?
Надо чтобы враждебного, не мертвого хватало только.
Старый 13.04.2010, 17:45
StoneHeartis
Kicked by ScorpioT1002
offline
Опыт: 1,009
Активность:
Цитата:
Function Cond takes nothing returns boolean
local unit u = GetFilterUnit() //Зачем? условие на то и условие
return not (GetUnitState(u, UNIT_STATE_LIFE) <= 0)
return (IsUnitAlly(u, GetOwningPlayer(GetSpellAbilityUnit())))
endfunction


Условия делать по типу:
Либо сразу в функцию вставлять:
Код:
if IsUnitDeadBJ(GetFiltredUnit()) = false and IsUnitEnemy(GetOwningPlayer(GetFiltredUnit(), GetOwningPlayer(GetTriggerUnit()) then
//Твои действия начинаются тут Оо
//...
//...
endif


либо:
Код:
Function Cond takes nothing returns boolean
return IsUnitDeadBJ(GetFiltredUnit()) = false and IsUnitEnemy(GetOwningPlayer(GetFiltredUnit(), GetOwningPlayer(GetTriggerUnit())
endfunction


ЗЫ Ты брал союзника на проверку. А надо врага. Enemy - Враг:) Т.е. Фильтрованный юнит - это Враг Кастующего.
Старый 13.04.2010, 17:53
Manhant
Убежал
offline
Опыт: 14,787
Активность:
Ramazanoff, если ты пихал то условие GetUnitState(u, UNIT_STATE_LIFE) <= 0 в моем триге т.е твой фильтр не правильный нужно GetWidgetLife(GetFilterUnit())>0.45, тогда все будет пахать, а твой код неочень... Лучше поменяй фильтр в моем и пихни и желательно избавиться от BJ
Старый 13.04.2010, 18:17
Sie7eN
Feel what's real
offline
Опыт: 2,550
Активность:
Manhant, я сделал) спасибо.
Спасибо всем, вы очень хорошие и умные ребята.
Тему можно закрывать.
Старый 13.04.2010, 18:31
Закрытая тема

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

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

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

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



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