Сделал таймер воскрешения и вроде правильно указал, что должно отображаться только для локальной u, владелец умирающего юнита, и работает, но таймер воскрешения все - равно отображается у всех игроков. Подскажите, где я ошибся?
function Trig_____________________________________007_Conditions takes nothing returns boolean
if ( not ( IsUnitType(GetDyingUnit(), UNIT_TYPE_HERO) == true ) ) then
return false
endif
if ( not ( GetOwningPlayer(GetDyingUnit()) != Player(11) ) ) then
return false
endif
return true
endfunction
function Trig_____________________________________007_Actions takes nothing returns nothing
local real tm
local timer t
local timerdialog IvanWindow
local unit u
set u = GetDyingUnit()
set tm = 20.00
set t = CreateTimer()
call StartTimerBJ( t, false, tm )
t=bj_lastStartedTimer
call CreateTimerDialogBJ( t, ( "Герой воскресится через :" + R2S(tm) ) )
set IvanWindow = bj_lastCreatedTimerDialog
call TimerDialogDisplayForPlayerBJ( true,IvanWindow, GetOwningPlayer(u) )
call TimerDialogDisplayBJ( true,IvanWindow )
call WAIT_EX(20.)
call PanCameraToTimedLocForPlayer( GetOwningPlayer(u), GetRectCenter(gg_rct________________002), 1.00 )
call ReviveHeroLoc( u, GetRectCenter(gg_rct________________002), true )
call TimerDialogDisplay(IvanWindow,false )
call DestroyTimerDialog( IvanWindow )
set u=null
set t =null
set IvanWindow=null
endfunction
===========================================================================
function InitTrig_____________________________________007 takes nothing returns nothing
set gg_trg_____________________________________007 = CreateTrigger( )
call TriggerRegisterAnyUnitEventBJ( gg_trg_____________________________________007, EVENT_PLAYER_UNIT_DEATH )
call TriggerAddCondition( gg_trg_____________________________________007, Condition( function Trig_____________________________________007_Conditions ) )
call TriggerAddAction( gg_trg_____________________________________007, function Trig_____________________________________007_Actions )
endfunction

Принятый ответ

konvan5, У меня лишняя строчка была в коде, после показать конкретному юниту, было еще показать вообще. Сам нашел и исправил
`
ОЖИДАНИЕ РЕКЛАМЫ...
0
23
2 месяца назад
0
Ну раз показываешь для игрока u. то спрячь для остальных :D
(мб по умолчанию у тебя оно открыто уже)
Ответы (2)
0
20
2 месяца назад
0
konvan5, А вот как спрятать и зачем прятать, если я по умолчанию показывал только для одного?
0
23
2 месяца назад
Отредактирован konvan5
0
SсRealm, ты когда создаешь окно таймера, оно в каком состоянии находится? В спрятанном или показанном?
Вот удали показ таймера и посмотри, будет ли он. Если да - значит при создании он уже виден всем, а значит надо спрятать для всех кроме нужного игрока.
0
23
2 месяца назад
0
И только не говори, что не найдешь, *как спрятать* :D

Просто прячешь окно для всех а потом показываешь для конкретного игрока. Все готово.
Загруженные файлы
Ответы (11)
0
20
2 месяца назад
0
konvan5, А ничего не будет, всмысле у меня локальные и это один триггер на всех героев для воскрешения. Так это локальные они же создают свой отдельный поток для каждого героя. То есть, если я напишу "закрыть" то у кого то уже начался отчет, у кого то появился. Там путаница не начнется?
0
23
2 месяца назад
0
SсRealm, о чем ты? Ты же прячешь конкретное окно. Переменные локальные это да, но работают они у всех игроков на всех компах. Даже если 10 геров умрут и запустится 10 локальных таймеров для 10 игроков, у тебя будет 10 РАЗНЫХ окон таймеров, где каждый таймер спрятан для всех и открыт только для 1 игрока.
0
23
2 месяца назад
0
напишу "закрыть"
Ты закрываешь локально а не глобально, значит на другие таймеры никак не повлияешь.
0
20
2 месяца назад
0
konvan5, Хорошо, попробую
0
20
2 месяца назад
0
Не получается. Делаю создать для игрока u ниже скрыть для игрока 1( который я по умолчанию)
Убиваю синего, который герой и союзник. Таймер отчета все- равно появляется видим у меня
set IvanWindow = bj_lastCreatedTimerDialog
call TimerDialogDisplayForPlayerBJ( true,IvanWindow, GetOwningPlayer(u) )
call TimerDialogDisplayForPlayerBJ( false, GetLastCreatedTimerDialogBJ(), Player(0) )
call TimerDialogDisplayBJ( true,IvanWindow )
call WAIT_EX(20.)
0
23
2 месяца назад
0
SсRealm, эмм... Ты точно прочитал что написал в коде до конца?
Прочитай еще раз предпоследнюю строку своего кода и осмысли его :)
0
23
2 месяца назад
0
Если сам не осмыслишь то...
Создаем окно (оно открыто для всех по умолчанию), прячем ее для всех, потом показываем для нужного игрока. Все готово.
set IvanWindow = bj_lastCreatedTimerDialog
call TimerDialogDisplayBJ( false,IvanWindow )
call TimerDialogDisplayForPlayerBJ( true,IvanWindow, GetOwningPlayer(u) )
0
20
2 месяца назад
0
konvan5, У меня лишняя строчка была в коде, после показать конкретному юниту, было еще показать вообще. Сам нашел и исправил
Принятый ответ
0
23
2 месяца назад
0
SсRealm, именно о ней я и написал, ура :D
0
23
2 месяца назад
Отредактирован konvan5
0
SсRealm,
кстати, если у тебя в карте больше 2 игроков, надеюсь ты не оставишь код в таком виде, иначе таймер все равно будет виден, но другим игрокам кроме 0 игрока. Если все-же прячешь. Так что протести на других игроках, что все в порядке.
0
20
2 месяца назад
0
konvan5, Да, спасибо, я исправил код и проверил. Когда умирает, то виден только умирающему.
Таймер отсчета сделал отдельно.
Решил довести до ума свою самую простую и самую первую карту, оставил только ладншафт и код решил заново переписать. Столько лет прошло, пора ее привести в порядок!))
Чтобы оставить комментарий, пожалуйста, войдите на сайт.