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

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

Ответ
 
Xoniks

offline
Опыт: 1,858
Активность:
Выбор и перемещение камеры к юниту после таймера
Добавьте пожалуйста в мой код чтобы после того как Герой реснулся камера в течение 0.5 переместилась к нему(ну или можно в локацию) игрок которому принадлежит реснувшийся герой мгновенно был выбран, все нужно сделать без BJ функций и если где увидите утечку исправьте пжл
» код
((код Jass
function Trig_Hero_Revive_Conditions takes nothing returns boolean
return IsUnitType(GetDyingUnit(), UNIT_TYPE_HERO) == true
endfunction
function Hero_Resp takes nothing returns nothing
local timer t2 = GetExpiredTimer( )
local integer tkey = GetHandleId( t2 )
local unit u = GetRevivingUnit( )
call ReviveHero(LoadUnitHandle(Hash, tkey, 0),GetLocationX(resp),GetLocationY(resp), true)
call FlushChildHashtable(Hash, tkey)
call DestroyTimer( t2 )
set t2 = null
set u = null
endfunction
function TD_Destroy takes nothing returns nothing
local timer t = GetExpiredTimer( )
local integer tkey = GetHandleId( t )
call DestroyTimerDialog(LoadTimerDialogHandle(Hash, tkey, 0))
call FlushChildHashtable(Hash, tkey)
call DestroyTimer( t )
set t = null
endfunction
function Trig_Hero_Revive_Actions takes nothing returns nothing
local unit u = GetDyingUnit( )
local timer t = CreateTimer()
local timer t2 = CreateTimer()
local timerdialog td = CreateTimerDialog(t)
local real f = 3.
local real r = ( ( I2R(GetHeroLevel(u)) * f ) + 4.)

call SaveUnitHandle(Hash, GetHandleId(t), 0, u)
call SaveTimerDialogHandle(Hash, GetHandleId(t2), 0, td)
call TimerStart(t, r, false, function Hero_Resp)
call TimerStart(t2, r, false, function TD_Destroy)
call TimerDialogSetTitle(td,GetPlayerName(GetOwningPlayer(u)))


if GetLocalPlayer() == GetOwningPlayer(u) then
call TimerDialogDisplay(td, true)
endif

set u = null
set t = null
set t2 = null


endfunction
===========================================================================
function InitTrig_Hero_Revive takes nothing returns nothing
set gg_trg_Hero_Revive = CreateTrigger( )
call TriggerRegisterAnyUnitEventBJ( gg_trg_Hero_Revive, EVENT_PLAYER_UNIT_DEATH )
call TriggerAddCondition( gg_trg_Hero_Revive,Condition(function Trig_Hero_Revive_Conditions ) )
call TriggerAddAction( gg_trg_Hero_Revive, function Trig_Hero_Revive_Actions )
endfunction
))
Старый 02.03.2012, 09:32
Ty3uK

offline
Опыт: 2,469
Активность:
» Code
Код:
function Trig_Hero_Revive_Timer takes nothing returns nothing
    local timer t = GetExpiredTimer()
    local integer hid = GetHandleId(t)
    call ReviveHero(LoadUnitHandle(Hash, hid, 0), GetLocationX(resp), GetLocationY(resp), true)
    call DestroyTimerDialog(LoadTimerDialogHandle(Hash, hid, 2))
    call FlushChildHashtable(Hash, hid)
    call DestroyTimer(t)
    set t = null
endfunction

function Trig_Hero_Revive_Conditions takes nothing returns boolean
    local timer t
    local integer hid
    local timerdialog td
    local unit u
    if IsUnitType(GetTriggerUnit(), UNIT_TYPE_HERO) == true then
        set t = CreateTimer()
        set hid = GetHandleId(t)
        set td = CreateTimerDialog(t)
        set u = GetTriggerUnit()
        call TimerDialogSetTitle(td, GetPlayerName(GetTriggerPlayer()))
        if GetLocalPlayer() == GetTriggerPlayer() then
            call TimerDialogDisplay(td, true)
        endif
        call SaveAgentHandle(Hash, hid, 0, u)
        call SaveTimerDialogHandle(Hash, hid, 1, td)
        call TimerStart(t, GetHeroLevel(u) * 3. + 4, false, function Trig_Hero_Revive_Timer)
    endif
    set t = null
    set td = null
    set u = null
    return false
endfunction

function InitTrig_Hero_Revive takes nothing returns nothing
    set gg_trg_Hero_Revive = CreateTrigger()
    call TriggerRegisterAnyUnitEventBJ(gg_trg_Hero_Revive, EVENT_PLAYER_UNIT_DEATH)
    call TriggerAddCondition(gg_trg_Hero_Revive,Condition(function Trig_Hero_Revive_Conditions))
endfunction
Старый 02.03.2012, 13:22
Xoniks

offline
Опыт: 1,858
Активность:
Ty3uK, не работает(((
мне нужно в этот код добавить
((код Jass
call PanCameraToTimed()
call ClearSelection
call SelectUnit
))
и чтобы в мультиплеере для каждого игрока отдельно было а не у всех вместе перемещалась камера и юнит был выделен
P.S.
извеняюсь за синтаксис

Отредактировано Xoniks, 02.03.2012 в 14:44.
Старый 02.03.2012, 14:34
Ty3uK

offline
Опыт: 2,469
Активность:
Xoniks, вообще ничего не происходит?
Старый 02.03.2012, 14:40
Xoniks

offline
Опыт: 1,858
Активность:
Ty3uK, почему герой ресается , создается окно таймера , не убирается кстати , камеры и выделения нет((
вот сделал сам и то не все попрежнему не выделяется юнит после воскрешения и так же БЖ функции используются от них надо избавиться как то))
» code
((код Jass
function Trig_Hero_Revive_Conditions takes nothing returns boolean
return IsUnitType(GetDyingUnit(), UNIT_TYPE_HERO) == true
endfunction
function Hero_Resp takes nothing returns nothing
local timer t2 = GetExpiredTimer( )
local integer tkey = GetHandleId( t2 )
local unit u = GetRevivingUnit( )
call ReviveHero(LoadUnitHandle(Hash, tkey, 0),GetLocationX(resp),GetLocationY(resp), true)
call FlushChildHashtable(Hash, tkey)
call DestroyTimer( t2 )
set t2 = null
set u = null
endfunction
function TD_Destroy takes nothing returns nothing
local timer t = GetExpiredTimer( )
local integer tkey = GetHandleId( t )
call DestroyTimerDialog(LoadTimerDialogHandle(Hash, tkey, 0))
call FlushChildHashtable(Hash, tkey)
call DestroyTimer( t )
set t = null
endfunction
function Camera_Resp takes nothing returns nothing
local timer t3 = GetExpiredTimer( )
local timer t4 = GetExpiredTimer( )
local integer tkey = GetHandleId( t3 )
local integer hid = GetHandleId( t4 )
call PanCameraToTimedForPlayer(LoadPlayerHandle(Hash, tkey, 0), GetLocationX(resp), GetLocationY(resp), 0.5 )
call ClearSelectionForPlayer(LoadPlayerHandle(Hash, hid, 0) )

call FlushChildHashtable(Hash, tkey)
call FlushChildHashtable(Hash, hid)
call DestroyTimer( t3 )
call DestroyTimer( t4 )
set t3 = null
set t4 = null
endfunction
function Trig_Hero_Revive_Actions takes nothing returns nothing
local unit u = GetDyingUnit( )
local player p = GetLocalPlayer( )
local timer t = CreateTimer()
local timer t2 = CreateTimer()
local timer t3 = CreateTimer()
local timerdialog td = CreateTimerDialog(t)
local real r = ( ( I2R(GetHeroLevel(u)) * 3. ) + 4.)

call SaveUnitHandle(Hash, GetHandleId(t), 0, u)
call SaveTimerDialogHandle(Hash, GetHandleId(t2), 0, td)
call SavePlayerHandle(Hash, GetHandleId(t3), 0, GetOwningPlayer( u ) )
call TimerStart(t, r, false, function Hero_Resp)
call TimerStart(t2, r, false, function TD_Destroy)
call TimerStart(t3, r, false, function Camera_Resp)
call TimerDialogSetTitle(td,GetPlayerName(GetOwningPlayer(u)))
if p == GetOwningPlayer( u ) then
call TimerDialogDisplay(td, true)
endif

set u = null
set t = null
set t2 = null


endfunction
===========================================================================
function InitTrig_Hero_Revive takes nothing returns nothing
set gg_trg_Hero_Revive = CreateTrigger( )
call TriggerRegisterAnyUnitEventBJ( gg_trg_Hero_Revive, EVENT_PLAYER_UNIT_DEATH )
call TriggerAddCondition( gg_trg_Hero_Revive,Condition(function Trig_Hero_Revive_Conditions ) )
call TriggerAddAction( gg_trg_Hero_Revive, function Trig_Hero_Revive_Actions )
endfunction
))

Отредактировано Xoniks, 02.03.2012 в 14:47.
Старый 02.03.2012, 14:42
Ty3uK

offline
Опыт: 2,469
Активность:
» code
Код:
function Trig_Hero_Revive_Timer takes nothing returns nothing
    local timer t = GetExpiredTimer()
    local integer hid = GetHandleId(t)
    local unit u = LoadUnitHandle(Hash, hid, 0)
    local timerdialog td = LoadTimerDialogHandle(Hash, hid, 2)
    call ReviveHero(LoadUnitHandle(Hash, hid, 0), GetLocationX(resp), GetLocationY(resp), true)
    if GetLocalPlayer() == GetOwningPlayer(u) then
        call PanCameraTo(GetLocationX(resp), GetLocationY(resp))
        call ClearSelection()
        call SelectUnit(u, true)
    endif
    call TimerDialogDisplay(td, false)
    call DestroyTimerDialog(td)
    call FlushChildHashtable(Hash, hid)
    call DestroyTimer(t)
    set t = null
    set u = null
    set td = null
endfunction

function Trig_Hero_Revive_Conditions takes nothing returns boolean
    local timer t
    local integer hid
    local timerdialog td
    local unit u
    if IsUnitType(GetTriggerUnit(), UNIT_TYPE_HERO) == true then
        set t = CreateTimer()
        set hid = GetHandleId(t)
        set td = CreateTimerDialog(t)
        set u = GetTriggerUnit()
        call TimerDialogSetTitle(td, GetPlayerName(GetTriggerPlayer()))
        if GetLocalPlayer() == GetTriggerPlayer() then
            call TimerDialogDisplay(td, true)
        endif
        call SaveAgentHandle(Hash, hid, 0, u)
        call SaveTimerDialogHandle(Hash, hid, 1, td)
        call TimerStart(t, GetHeroLevel(u) * 3. + 4, false, function Trig_Hero_Revive_Timer)
    endif
    set t = null
    set td = null
    set u = null
    return false
endfunction

function InitTrig_Hero_Revive takes nothing returns nothing
    set gg_trg_Hero_Revive = CreateTrigger()
    call TriggerRegisterAnyUnitEventBJ(gg_trg_Hero_Revive, EVENT_PLAYER_UNIT_DEATH)
    call TriggerAddCondition(gg_trg_Hero_Revive,Condition(function Trig_Hero_Revive_Conditions))
endfunction
Старый 02.03.2012, 14:59
Xoniks

offline
Опыт: 1,858
Активность:
Во то что нужно только окно таймера не удаляется ну его сам поправлю
Старый 02.03.2012, 15:36
Ответ

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

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

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

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



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