ShineLight
offline
Опыт:
723Активность: |
Respawn, и кое что еще.
Помогите! Делаю карту, мне необходимо сделать так, чтобы убиваемая боевая единица воскрешалась и переходила на сторону того, кто ее убил. Мне просто необходимо хотя бы просто воскресить его. Пробовал сделать через свои переменные - не работает, а когда писал, используя генерируемые, то получалось, что триггер работал только один раз. Заранее, спасибо! |
15.01.2007, 12:54 | #1
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
exAres
I love magic :)
offline
Опыт:
7,788Активность: |
ShineLight - сначала меняешь владельца(вроде бы работает когда юнит мёртв, если чесно то я не пробовал), потом тебе нужен дамми кастер который будет кастовать "Воскрешение"(воскрешение нужно настроить так чтобы область воздействия была 1) прямо "на" мертвом юните. И всё !
ЗЫ Или у тебя какие-то другие проблемы ? |
15.01.2007, 13:44 | #2
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
MariK
offline
Опыт:
1,181Активность: |
Респавн дело простое. Сначало если тебе надо чтобы юнит респавнился тут же то там есть триггер Revive(Instantly) и в параметрах указываешь убитого юнита и где тебе его возрадить. Если через некоторое время, то записываешь убитого в переменную и Revive переменную.Только вот я не помню Revive помоему работает тока на героя но это не беда. Затем просто передаешь контроль убитого на обладателя убившего. Если же надо возрадить не героя можно просто его создать для владельца убийцы и никакого гемороя со всякими спелами. Да и чтобы тригер не работал только один раз пропиши событие "Юнит умирает" |
15.01.2007, 14:44 | #3
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
exAres
I love magic :)
offline
Опыт:
7,788Активность: |
MariK - "Только вот я не помню Revive помоему работает тока на героя" - вот именно !
|
15.01.2007, 15:28 | #4
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
MariK
offline
Опыт:
1,181Активность: |
я предложил же второй вариант просто закриэйтить нового юнита для игрока обладателя убийцы. И вообще может ему и надо воскресить героя он же об этом ничего не написал. |
15.01.2007, 15:41 | #5
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
exAres
I love magic :)
offline
Опыт:
7,788Активность: |
MariK - можно и так но тогда надо ремувить мертвого и плевать на оптимизацию т.к. Варкрафт не очень "любит" создавать новых юнитов, так что лучше пользоватся "старыми" , тем более если на старом юните какие-то ещё абилы висят, хотя в принципе это не в его случае :), так что можно и создавать нового.
|
15.01.2007, 15:49 | #6
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
ShineLight
offline
Опыт:
723Активность: |
Это все я и сам сделал. Во-первых: и использовал событие "Юнит умирает", с ним-то и работало только один раз, потом поменял простого юнита на героя, воспользовался revive, да только работает она почему-то лишь когда юнит этот принадлежит мне, если это - юнит противника, то тогда ничего не срабатывает. И еще вопрос, а как мне узнать какой игрок убил данного юнита? Да, пометка, карта для мультиплеера. Раз уж начал задавать дополнительные вопросы, то тогда вот еще: как создать внешний архив, не зависящий от карты, а потом использовать из него модели, триггеры и т.д.. |
16.01.2007, 12:50 | #7
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
adic3x
offline
Опыт:
108,439Активность: |
ShineLight, насчет убийцы юзай Игрок - Овнер оф а киллинг юнит.
|
16.01.2007, 13:10 | #8
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
exAres
I love magic :)
offline
Опыт:
7,788Активность: |
ShineLight - насчёт проверки на игрока : GetOwningPlayer(GetKillingUnit())
а насчёт архива : разве что в какой варовский архив впихнуть(в случае моделей), а в случае триггеров вроде накак. |
16.01.2007, 13:12 | #9
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
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 | #10
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
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 | #11
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
ShineLight
offline
Опыт:
723Активность: |
Спасибо, я уже кое-что уже сам сделал, но другие вопросы:
|
17.01.2007, 11:47 | #12
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
exAres
I love magic :)
offline
Опыт:
7,788Активность: |
|
17.01.2007, 12:00 | #13
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
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 | #14
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
ShineLight
offline
Опыт:
723Активность: |
Большое СПАСИБО, сейчас попробую, а как сделать такое же окошко статистики, как в DoTA? Для меня это довольно важно. |
19.01.2007, 09:19 | #15
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
VBSniper
Ёк макарёк
offline
Опыт:
3,486Активность: |
Так ты имеешь в виду окошко статистики в конце карты?? |
19.01.2007, 13:16 | #16
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
ShadoW DaemoN
offline
Опыт:
37,078Активность: |
ShineLight, это называется мультиборд. В триггерах категория "Меню паузы".
Алгоритм: 1) Создаешь 2) Заполняешь ячейки 3) Показываешь |
19.01.2007, 14:46 | #17
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
VBSniper
Ёк макарёк
offline
Опыт:
3,486Активность: |
ShadoW DaemoN
Тебе легко сказать, это мультиборд согласен, но такая статистика как в доте не селать при помощи тригшеров. её мона сделать токак при помощи джас! |
19.01.2007, 14:55 | #18
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
ShineLight
offline
Опыт:
723Активность: |
Это все равно, у меня и так половина триггеров на jass. Только отследить покупку героя в таверне я так и не смог. Если есть варианты, то, пожалуйста напишите. И еще один вопрос: Можно ли узнать - какой текущий уровень у некоторой способности героя? |
21.01.2007, 14:34 | #19
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
FellGuard
Losyash
offline
Опыт:
39,547Активность: |
Цитата:
Цитата:
Отредактировано FellGuard, 21.01.2007 в 15:00. |
||
21.01.2007, 14:55 | #20
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|