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

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

Закрытая тема
 
ShineLight

offline
Опыт: 723
Активность:
Respawn, и кое что еще.
Помогите! Делаю карту, мне необходимо сделать так, чтобы убиваемая боевая единица воскрешалась и переходила на сторону того, кто ее убил. Мне просто необходимо хотя бы просто воскресить его. Пробовал сделать через свои переменные - не работает, а когда писал, используя генерируемые, то получалось, что триггер работал только один раз. Заранее, спасибо!
Старый 15.01.2007, 12:54
exAres
I love magic :)
offline
Опыт: 7,788
Активность:
ShineLight - сначала меняешь владельца(вроде бы работает когда юнит мёртв, если чесно то я не пробовал), потом тебе нужен дамми кастер который будет кастовать "Воскрешение"(воскрешение нужно настроить так чтобы область воздействия была 1) прямо "на" мертвом юните. И всё !

ЗЫ Или у тебя какие-то другие проблемы ?
Старый 15.01.2007, 13:44
MariK

offline
Опыт: 1,181
Активность:
Респавн дело простое. Сначало если тебе надо чтобы юнит респавнился тут же то там есть триггер Revive(Instantly) и в параметрах указываешь убитого юнита и где тебе его возрадить. Если через некоторое время, то записываешь убитого в переменную и Revive переменную.Только вот я не помню Revive помоему работает тока на героя но это не беда. Затем просто передаешь контроль убитого на обладателя убившего. Если же надо возрадить не героя можно просто его создать для владельца убийцы и никакого гемороя со всякими спелами. Да и чтобы тригер не работал только один раз пропиши событие "Юнит умирает"
Старый 15.01.2007, 14:44
exAres
I love magic :)
offline
Опыт: 7,788
Активность:
MariK - "Только вот я не помню Revive помоему работает тока на героя" - вот именно !
Старый 15.01.2007, 15:28
MariK

offline
Опыт: 1,181
Активность:
я предложил же второй вариант просто закриэйтить нового юнита для игрока обладателя убийцы. И вообще может ему и надо воскресить героя он же об этом ничего не написал.
Старый 15.01.2007, 15:41
exAres
I love magic :)
offline
Опыт: 7,788
Активность:
MariK - можно и так но тогда надо ремувить мертвого и плевать на оптимизацию т.к. Варкрафт не очень "любит" создавать новых юнитов, так что лучше пользоватся "старыми" , тем более если на старом юните какие-то ещё абилы висят, хотя в принципе это не в его случае :), так что можно и создавать нового.
Старый 15.01.2007, 15:49
ShineLight

offline
Опыт: 723
Активность:
Это все я и сам сделал. Во-первых: и использовал событие "Юнит умирает", с ним-то и работало только один раз, потом поменял простого юнита на героя, воспользовался revive, да только работает она почему-то лишь когда юнит этот принадлежит мне, если это - юнит противника, то тогда ничего не срабатывает. И еще вопрос, а как мне узнать какой игрок убил данного юнита? Да, пометка, карта для мультиплеера. Раз уж начал задавать дополнительные вопросы, то тогда вот еще: как создать внешний архив, не зависящий от карты, а потом использовать из него модели, триггеры и т.д..
Старый 16.01.2007, 12:50
adic3x

offline
Опыт: 108,439
Активность:
ShineLight, насчет убийцы юзай Игрок - Овнер оф а киллинг юнит.
Старый 16.01.2007, 13:10
exAres
I love magic :)
offline
Опыт: 7,788
Активность:
ShineLight - насчёт проверки на игрока : GetOwningPlayer(GetKillingUnit())
а насчёт архива : разве что в какой варовский архив впихнуть(в случае моделей), а в случае триггеров вроде накак.
Старый 16.01.2007, 13:12
vbpotrashitel

offline
Опыт: 594
Активность:
function Trig_Aliance_Death_all_lvl_Func001Func001Func008C takes nothing returns boolean
if ( not ( IsUnitDeadBJ(GetTriggerUnit()) == true ) ) then
return false
endif
return true
endfunction
function Trig_Aliance_Death_all_lvl_Func001Func001C takes nothing returns boolean
if ( not ( GetUnitAbilityLevelSwapped('A012', GetTriggerUnit()) > 0 ) ) then
return false
endif
return true
endfunction
function Trig_Aliance_Death_all_lvl_Func001C takes nothing returns boolean
if ( not ( GetOwningPlayer(GetTriggerUnit()) != Player(11) ) ) then
return false
endif
if ( not ( GetOwningPlayer(GetTriggerUnit()) != Player(7) ) ) then
return false
endif
if ( not ( GetOwningPlayer(GetTriggerUnit()) != Player(8) ) ) then
return false
endif
if ( not ( GetOwningPlayer(GetTriggerUnit()) != Player(9) ) ) then
return false
endif
if ( not ( GetOwningPlayer(GetTriggerUnit()) != Player(10) ) ) then
return false
endif
if ( not ( GetOwningPlayer(GetTriggerUnit()) != Player(6) ) ) then
return false
endif
if ( not ( IsUnitType(GetTriggerUnit(), UNIT_TYPE_HERO) == true ) ) then
return false
endif
return true
endfunction
function Trig_Aliance_Death_all_lvl_Actions takes nothing returns nothing
if ( Trig_Aliance_Death_all_lvl_Func001C() ) then
if ( Trig_Aliance_Death_all_lvl_Func001Func001C() ) then
set udg_IntegerMultiplier = R2I(udg_ReviveMultiplier)
call DisplayTimedTextToForce( GetPlayersAll(), 10.00, ( "|cffff0000 Óðîâåíü ãåðîÿ " + ( I2S(GetHeroLevel(GetDyingUnit())) + ( "Ãåðîé âîñêðåñèòñ​ÿ ÷åðåç " + ( I2S(( udg_IntegerMultiplier * GetHeroLevel(GetTriggerUnit()) )) + " ñåêóíä." ) ) ) ) )
call AdjustPlayerStateBJ( ( GetHeroLevel(GetDyingUnit()) * -30 ), GetTriggerPlayer(), PLAYER_STATE_RESOURCE_GOLD )
call StartTimerBJ( udg_PlayerTimer[GetConvertedPlayerId(GetOwningPlayer(GetDyingUnit()))], false, ( I2R(GetHeroLevel(GetDyingUnit())) * udg_ReviveMultiplier ) )
call PolledWait( ( I2R(GetHeroLevel(GetDyingUnit())) * udg_ReviveMultiplier ) )
call ReviveHeroLoc( GetTriggerUnit(), GetRectCenter(klan), false )
if ( Trig_Aliance_Death_all_lvl_Func001Func001Func008C() ) then
call PanCameraToTimedLocForPlayer( GetOwningPlayer(GetTriggerUnit()), GetRectCenter(gg_rct_O), 1.00 )
else
call DoNothing( )
endif
else
endif
else
endif
endfunction
function InitTrig_Aliance_Death_all_lvl takes nothing returns nothing
set gg_trg_Aliance_Death_all_lvl = CreateTrigger( )
call TriggerRegisterAnyUnitEventBJ( gg_trg_Aliance_Death_all_lvl, EVENT_PLAYER_UNIT_DEATH )
call TriggerAddAction( gg_trg_Aliance_Death_all_lvl, function Trig_Aliance_Death_all_lvl_Actions )
endfunction
Вот вроде так что б он вокрешался через несколько секунд! Для этого нужно нанести две области!

Отредактировано vbpotrashitel, 16.01.2007 в 15:52.
Старый 16.01.2007, 15:44
VBSniper
Ёк макарёк
offline
Опыт: 3,486
Активность:
function Trig_WS_Actions takes nothing returns nothing
call ReviveHeroLoc( GetTriggerUnit(), GetRectCenter(gg_rct_WS), false )
call StartTimerBJ( udg_PlayerTimer[GetConvertedPlayerId(GetOwningPlayer(GetDyingUnit()))], false, 30.00 )
endfunction
function InitTrig_WS takes nothing returns nothing
set gg_trg_WS = CreateTrigger( )
call TriggerRegisterAnyUnitEventBJ( gg_trg_WS, EVENT_PLAYER_UNIT_DEATH )
call TriggerAddAction( gg_trg_WS, function Trig_WS_Actions )
endfunction
Вот так лучше будет, но тут будет такое: герой воскрешается через каждые 30 секунд в определённой области, подожди немного я сделаю что б было он переходил на сторону убийцы!
Старый 16.01.2007, 16:02
ShineLight

offline
Опыт: 723
Активность:
Спасибо, я уже кое-что уже сам сделал, но другие вопросы:
  1. Как определить текущее местоположение юнита?
  2. Как с помощью полученных координат задать место воскрешения?
  3. Какое событие надо использовать, чтобы проследить за тем, куплен герой?
Старый 17.01.2007, 11:47
exAres
I love magic :)
offline
Опыт: 7,788
Активность:
  1. GetUnitLocation(GetTriggerUnit()) или GetUnitX( GetTriggerUnit()),GetUnitY( GetTriggerUnit())
  2. ReviveHeroLoc(GetTriggerUnit(),GetUnitLocation(GetTriggerUnit()) ,false)
  3. Что-то такого не припоминаю, можно сделать триггер который реагирует на вход в регион.
Старый 17.01.2007, 12:00
VBSniper
Ёк макарёк
offline
Опыт: 3,486
Активность:
function Trig_buy_hero_Conditions takes nothing returns boolean
if ( not ( GetUnitTypeId(GetTriggerUnit()) == 'Hblm' ) ) then
return false
endif
return true
endfunction
function Trig_buy_hero_Actions takes nothing returns nothing
call DisplayTextToForce( GetPlayersAll(), "TRIGSTR_001" )
endfunction
function InitTrig_buy_hero takes nothing returns nothing
set gg_trg_buy_hero = CreateTrigger( )
call TriggerRegisterPlayerUnitEventSimple( gg_trg_buy_hero, Player(0), EVENT_PLAYER_UNIT_SUMMON )
call TriggerAddCondition( gg_trg_buy_hero, Condition( function Trig_buy_hero_Conditions ) )
call TriggerAddAction( gg_trg_buy_hero, function Trig_buy_hero_Actions )
endfunction

Отредактировано VBSniper, 17.01.2007 в 17:58.
Старый 17.01.2007, 14:21
ShineLight

offline
Опыт: 723
Активность:
Большое СПАСИБО, сейчас попробую, а как сделать такое же окошко статистики, как в DoTA? Для меня это довольно важно.
Старый 19.01.2007, 09:19
VBSniper
Ёк макарёк
offline
Опыт: 3,486
Активность:
Так ты имеешь в виду окошко статистики в конце карты??
Старый 19.01.2007, 13:16
ShadoW DaemoN

offline
Опыт: 37,078
Активность:
ShineLight, это называется мультиборд. В триггерах категория "Меню паузы".
Алгоритм:
1) Создаешь
2) Заполняешь ячейки
3) Показываешь
Старый 19.01.2007, 14:46
VBSniper
Ёк макарёк
offline
Опыт: 3,486
Активность:
ShadoW DaemoN
Тебе легко сказать, это мультиборд согласен, но такая статистика как в доте не селать при помощи тригшеров. её мона сделать токак при помощи джас!
Старый 19.01.2007, 14:55
ShineLight

offline
Опыт: 723
Активность:
Это все равно, у меня и так половина триггеров на jass. Только отследить покупку героя в таверне я так и не смог. Если есть варианты, то, пожалуйста напишите. И еще один вопрос: Можно ли узнать - какой текущий уровень у некоторой способности героя?
Старый 21.01.2007, 14:34
FellGuard
Losyash
offline
Опыт: 39,547
Активность:
Цитата:
чтобы убиваемая боевая единица воскрешалась и переходила на сторону того, кто ее убил
Народ, я вам поражаюсь Помните свойство сферы тьмы? Единичная гальванизация, итп :) вот ее и надо юзать
Цитата:
GetUnitAbilityLevelSwapped('A. . .', GetTriggerUnit())
В триггерах - Level of Abil for unit.

Отредактировано FellGuard, 21.01.2007 в 15:00.
Старый 21.01.2007, 14:55
Закрытая тема

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

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

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

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



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