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

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

Ответ
 
Enein
Silenced by ZlaYa1000
offline
Опыт: 43,681
Активность:
Smooth Remove Unit System
http://xgm.guru/forum/showthread.php?t=25438
Они пока решают: делать систему или нет, я ее уже сделал. Зачем - хз. Сам понимаю, что реального применения ей нет. Но все же может кто-нибудь и возьмет себе ее в карту, просто как украшение.
Старый 02.06.2009, 02:06
J
expert
offline
Опыт: 48,747
Активность:
» code
Код:
globals
    integer array dualpha
    unit array dunit
endglobals

function UDSysTimerAction takes integer i returns nothing
    set dualpha[ i ] = dualpha[ i ] + 20
    call SetUnitVertexColor(dunit[ i ], 255, 255, 255, 255 - dualpha[ i ])
    call TriggerSleepAction(.01)
    if dualpha[ i ] < 255 then
        call UDSysTimerAction(i)
    else
        if not(IsUnitType( dunit[ i ] , UNIT_TYPE_HERO )) then
            call RemoveUnit( dunit[ i ] )
        endif
        set dunit[ i ]   = null
    endif
endfunction

function UDSysAction takes nothing returns nothing
    local unit    u = GetTriggerUnit( )
    local integer i = 0
    call SetUnitTimeScale( u, 0 )
    call SetUnitPathing( u, false )
    loop
        exitwhen dunit[ i ] == null
        set i = i + 1
    endloop
    set dunit[ i ]   = u
    set dualpha[ i ] = 0
    call UDSysTimerAction(i)
    set u = null
endfunction

function InitTrig_UDSys takes nothing returns nothing
    local trigger t = CreateTrigger( )
    local integer i = 0
    loop
        call TriggerRegisterPlayerUnitEvent( t, Player( i ), EVENT_PLAYER_UNIT_DEATH, null )
        set i = i + 1
        exitwhen i == 15
    endloop
    call TriggerAddAction( t, function UDSysAction )
endfunction
Код:
local integer i = 0
loop
    exitwhen udg_DU_Unit[ i ] == null
    set i = i + 1
endloop
set udg_DU_Unit[ i ]   = u
set udg_DU_Alpha[ i ] = 0
call UDSysTimerAction(i)
...
этим все сказано...

J добавил:
о боже, я думал хоть через таймер, а там через вейт o_O
да и еще рекурсию засунул бог знает куда =| зачем она вообще нужна?

ну а вариант для JNPG-овцев и не для не JNPG, где от jnpg используется только обьявление 2 глобалков конешно позабавил...

J добавил:
вот тебе образец, возми и посмотри, и пытайся делать хоть чтото напоминающее
одна библиотека для того чтобы делать юнита невидимым постепено, другая для применения первой во время смерти, просто суем в нестандартный код и работает само по себе
» code
Код:
library UNITALPHA initializer Init

globals
    constant real g_Period = 0.012
    constant integer g_Speed = 2
    timer g_durimer = CreateTimer()
                        
    integer g_count = 0
    AU array g_All
    code g_FuncTimer
endglobals

struct AU  
    private integer index
    private integer alpha
    private unit un
           
    private method Add takes nothing returns nothing
        if (g_count == 0) then
            call TimerStart(g_durimer, g_Period, true, g_FuncTimer)
        endif
        set g_All[g_count] = this
        set .index = g_count
        set g_count = g_count + 1
    endmethod
  
    private method Delete takes nothing returns nothing
        set g_count = g_count - 1
        set g_All[.index] = g_All[g_count]
        set g_All[.index].index = .index
        if (g_count == 0) then
            call PauseTimer(g_durimer)
        endif
    endmethod                                        
   
    method AddAlpha takes nothing returns nothing 
        set .alpha = .alpha - g_Speed
        call SetUnitVertexColor(.un, 255, 255, 255, .alpha)
        if (.alpha <= 0) then
            call .Delete()
            call .destroy()
        endif
    endmethod
    
    static method AlphaUnit takes unit u returns nothing 
        local AU this = AU.create()
        set .un = u
        set .alpha = 256
        call .Add()
    endmethod
    
endstruct

private function Timer_Func takes nothing returns nothing
    local integer i = g_count - 1
    loop
        call g_All[i].AddAlpha()
        exitwhen i == 0
        set i = i - 1    
    endloop
endfunction 
 
private function Init takes nothing returns nothing
    set g_FuncTimer = function Timer_Func
endfunction

endlibrary

library UNITDEADALPHA initializer Init requires UNITALPHA
       
private function SysAction takes nothing returns nothing
    local unit u = GetTriggerUnit()
    call AU.AlphaUnit(u)
    set u = null
endfunction
     
private function Init takes nothing returns nothing
    local trigger t = CreateTrigger()
    local integer i = 0
    loop
        call TriggerRegisterPlayerUnitEvent(t, Player(i), EVENT_PLAYER_UNIT_DEATH, null) 
        exitwhen i == 15
        set i = i + 1
    endloop
    call TriggerAddAction(t, function SysAction)
endfunction 
         
endlibrary

Отредактировано J, 02.06.2009 в 03:17.
Старый 02.06.2009, 03:19
SwuJe
aka Sakh_badboy
offline
Опыт: 15,248
Активность:
Enein круто выглядит,зачёт.Но я бы систему использовал для призваных животных.
Старый 02.06.2009, 05:05
DeKs

offline
Опыт: 735
Активность:
Enein красиво =) Можно использовать как эффект смерти духов
Старый 02.06.2009, 05:42
SRes
1110101000
offline
Опыт: 9,997
Активность:
Имхо - ерунда... Не юзабельно, звук смерти из неоткуда проигрывается, в общем бестолковая "система".
SRus... плагиат на лицо ! :)
Старый 02.06.2009, 09:35
Enein
Silenced by ZlaYa1000
offline
Опыт: 43,681
Активность:
J, я сначала пытался сделать что-то вроде того, что у тебя. ясн дело, что ничего не вышло. потом сделал на кеше - понял, что это очень тупо. потом сделал еще тупее, но в разы проще, т.е. так, как есть сейчас
зы: а помоему в твоем примере что-то недоработано, т.к. при большом количестве юнитов после длительной игры начинает весело лагать, пока не убьешь еще одного юнита (тогда разлагивает)
Старый 21.06.2009, 01:56
J
expert
offline
Опыт: 48,747
Активность:
Цитата:
зы: а помоему в твоем примере что-то недоработано, т.к. при большом количестве юнитов после длительной игры начинает весело лагать, пока не убьешь еще одного юнита (тогда разлагивает)
ты уверен что это не что-то другое в карте лагает?

Отредактировано J, 21.06.2009 в 05:42.
Старый 21.06.2009, 05:32
Monoroh
Don't look at me!
offline
Опыт: 2,777
Активность:
Если честно полный бред, выглядит тупо...
Старый 21.06.2009, 09:26
LordSerga

offline
Опыт: 3,809
Активность:
Ну в общем наработка норм. Но я бы не ставил мёртвых на паузу, а сразу делал исчезновение =)
Старый 02.07.2009, 07:38
Hanabishi
COOL STATUS
offline
Опыт: отключен
для RPG какой-нить пойдёт
и дай юнитам сначала нормально Death проиграть, а то нереально как-то, что они просто в воздухе стоя растворяются
Старый 03.07.2009, 13:20
Ответ

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

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

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

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



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