Сейчас 19:27:02 Пятница, 19 апреля, 2024 год
[ x ] Главная ⇒ Форум ⇐ RSS Файлы Cтатьи Картинки В о й т и   или   з а р е г и с т р и р о в а т ь с я


[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Модератор форума: PUVer, SirNikolas, Ty3uK  
Форум о Warcraft 3 » Раздел для картостроителей » Вопросы по картостроению » Помогите со скиллом воскрешения пожалуйста
Помогите со скиллом воскрешения пожалуйста
AkcmДата: Среда, 06 Июня 2012, 21:03:34 | Сообщение # 1
5 уровень
Группа: Проверенные
Сообщений: 132
Награды: 0
Репутация: 11
Блокировки:
Многие знают скилл у паладина в мили карте воскрешение, как его переделать, чтобы он и героев мог воскрешать? поставил в разрешённые цели герои, не помогло, пишет рядом нету допустимых целей для реса. юзанул поиск но тем по воскрешению слишком много, и все в основном про простой рес после смерти, а мне именно спел нужен.
 

Arthur_666_Дата: Среда, 06 Июня 2012, 21:10:08 | Сообщение # 2
8 уровень
Группа: Проверенные
Сообщений: 632
Награды: 0
Репутация: 238
Блокировки:
это надо у героя менять в РО Бой - Тип смерти
вроде так


Beetops
 

AkcmДата: Среда, 06 Июня 2012, 21:24:26 | Сообщение # 3
5 уровень
Группа: Проверенные
Сообщений: 132
Награды: 0
Репутация: 11
Блокировки:
ну у меня стоит можно оживить, а толку от этого нету (
 

ZabeiДата: Среда, 06 Июня 2012, 21:31:27 | Сообщение # 4
7 уровень
Группа: Проверенные
Сообщений: 479
Награды: 0
Репутация: 125
Блокировки:
Как ты хочешь воскресить героев, если как только они дохнут их тело исчезает? Для воскрешения нужно тело.
 

kapa6acvlkДата: Среда, 06 Июня 2012, 21:41:50 | Сообщение # 5
Группа: Проверенные
Сообщений: 612
Награды: 0
Репутация: 361
Блокировки:
Вот триггер, если нужна карта пример с комментариями, пиши, распишу по максимуму.
Code
function Resurrection_filter takes nothing returns boolean
     return IsUnitType(GetFilterUnit(), UNIT_TYPE_HERO)
endfunction

function Trig_Resurrection_Conditions takes nothing returns boolean
     return GetSpellAbilityId() == 'AHre'
endfunction

function Trig_Resurrection_Actions takes nothing returns nothing
     local group g = CreateGroup()
     local unit c = GetSpellAbilityUnit()
     local boolexpr b = Condition(function Resurrection_filter)
     local unit u = null
     call GroupEnumUnitsInRange(g, GetUnitX(c), GetUnitX(c), 600.0, b)
     loop
         set u = FirstOfGroup(g)
         exitwhen u == null
         call GroupRemoveUnit(g, u)
         if(IsPlayerAlly(GetOwningPlayer(u), GetOwningPlayer(c)))then
             call ReviveHero( u, GetUnitX(u), GetUnitY(u), true )
         endif
     endloop
     call DestroyBoolExpr(b)
     call DestroyGroup(g)
     set b = null
     set g = null
     set u = null
     set c = null
endfunction

//===========================================================================
function InitTrig_Resurrection takes nothing returns nothing
     set gg_trg_Resurrection = CreateTrigger(  )
     call TriggerRegisterAnyUnitEventBJ( gg_trg_Resurrection, EVENT_PLAYER_UNIT_SPELL_EFFECT )
     call TriggerAddCondition( gg_trg_Resurrection, Condition( function Trig_Resurrection_Conditions ) )
     call TriggerAddAction( gg_trg_Resurrection, function Trig_Resurrection_Actions )
endfunction



Как говориться, не обязательно есть всю кучу говна, чтобы понять, что она однородна.
© Александр Зорич
 

pomogiДата: Среда, 06 Июня 2012, 21:45:36 | Сообщение # 6
6 уровень
Группа: Проверенные
Сообщений: 247
Награды: 0
Репутация: 7
Блокировки:
сделай триггерно

 

BorodachДата: Среда, 06 Июня 2012, 21:57:19 | Сообщение # 7
9 уровень
Группа: Проверенные
Сообщений: 930
Награды: 0
Репутация: 422
Блокировки:
kapa6acvlk, Триггер не сработает если пройдет анимация смерти ~5секунд
Правильней будет это ловить событие Умер, заносить героя в переменную, после если он в радиусе то ресать


Karamba


Сообщение отредактировал Borodach - Среда, 06 Июня 2012, 21:58:56
 

kapa6acvlkДата: Среда, 06 Июня 2012, 22:32:52 | Сообщение # 8
Группа: Проверенные
Сообщений: 612
Награды: 0
Репутация: 361
Блокировки:
Borodach
Кстати, да. Что-то я об этом не подумал. Тогда так, проверил работает, только придется отказаться от стандартного Возрождения, ибо если обычные юниты разложатся, то и скилл не будет срабатывать.

Добавляем юнита в группу:
Code
function Trig_AddUnit_Conditions takes nothing returns boolean
     return IsUnitType(GetDyingUnit(), UNIT_TYPE_HERO)
endfunction

function Trig_AddUnit_Actions takes nothing returns nothing
     call GroupAddUnit(udg_DH, GetDyingUnit())
endfunction

//===========================================================================
function InitTrig_AddUnit takes nothing returns nothing
     set gg_trg_AddUnit = CreateTrigger(  )
     call TriggerRegisterAnyUnitEventBJ( gg_trg_AddUnit, EVENT_PLAYER_UNIT_DEATH )
     call TriggerAddCondition( gg_trg_AddUnit, Condition( function Trig_AddUnit_Conditions ) )
     call TriggerAddAction( gg_trg_AddUnit, function Trig_AddUnit_Actions )
endfunction


Ресаем юнита:
Code
function DistanceBetweenUnits takes unit A, unit B returns real
     local real dx = GetUnitX(B) - GetUnitX(A)
     local real dy = GetUnitY(B) - GetUnitY(A)
     return SquareRoot(dx * dx + dy * dy)
endfunction

function Trig_Resurrection_Conditions takes nothing returns boolean
     return GetSpellAbilityId() == 'A000'
endfunction

function Trig_Resurrection_Actions takes nothing returns nothing
     local group g = CreateGroup()
     local unit c = GetSpellAbilityUnit()
     local unit u = null
     call GroupAddGroup(udg_DH,g)
     loop
         set u = FirstOfGroup(g)
         exitwhen u == null
         call GroupRemoveUnit(g, u)
         if(IsPlayerAlly(GetOwningPlayer(u), GetOwningPlayer(c)) and DistanceBetweenUnits(u,c) <= 600.0)then
             call ReviveHero( u, GetUnitX(u), GetUnitY(u), true )
         endif
     endloop
     call DestroyGroup(g)
     set g = null
     set u = null
     set c = null
endfunction

//===========================================================================
function InitTrig_Resurrection takes nothing returns nothing
     set gg_trg_Resurrection = CreateTrigger(  )
     call TriggerRegisterAnyUnitEventBJ( gg_trg_Resurrection, EVENT_PLAYER_UNIT_SPELL_EFFECT )
     call TriggerAddCondition( gg_trg_Resurrection, Condition( function Trig_Resurrection_Conditions ) )
     call TriggerAddAction( gg_trg_Resurrection, function Trig_Resurrection_Actions )
endfunction

Добавлено (06 Июнь 2012, 22:32:52)
---------------------------------------------
Вот только забыл возрожденных юнитов убирать из DH группы.



Как говориться, не обязательно есть всю кучу говна, чтобы понять, что она однородна.
© Александр Зорич
 

Lucky_EleVeNДата: Среда, 06 Июня 2012, 22:46:26 | Сообщение # 9
6 уровень
Группа: Проверенные
Сообщений: 201
Награды: 0
Репутация: 62
Блокировки:
Зделай героям тип смерти Можно воскресить, разлагаеться тогда должно сработать
 

AkcmДата: Среда, 06 Июня 2012, 22:53:44 | Сообщение # 10
5 уровень
Группа: Проверенные
Сообщений: 132
Награды: 0
Репутация: 11
Блокировки:
Quote (Lucky_EleVeN)
Зделай героям тип смерти Можно воскресить, разлагаеться тогда должно сработать

Лол, говорили уже об этом, я это в самом начале и сделал, но нифига. Я смог сделать так что тело героя остаётся после смерти, но даже при имеющемся теле всё равно не пашет, что странно как-то, буду пытаться делать как kapa6acvlk написал, хотя я тут хер разбери чё как вообще в его триггере)

Добавлено (06 Июнь 2012, 22:52:32)
---------------------------------------------
Фак 55 ошибок компиляции, тут видимо вставлять надо всего дофига.... It's so sad

Добавлено (06 Июнь 2012, 22:53:44)
---------------------------------------------
А я так понимаю никак нельзя это обычными тригами , да ?

 

kapa6acvlkДата: Среда, 06 Июня 2012, 22:53:56 | Сообщение # 11
Группа: Проверенные
Сообщений: 612
Награды: 0
Репутация: 361
Блокировки:
Akcm, Ща сделаю наработку с комментами


Как говориться, не обязательно есть всю кучу говна, чтобы понять, что она однородна.
© Александр Зорич
 

AkcmДата: Среда, 06 Июня 2012, 22:59:33 | Сообщение # 12
5 уровень
Группа: Проверенные
Сообщений: 132
Награды: 0
Репутация: 11
Блокировки:
Премного благодарен, блин неужели нет стандартного скила или итема который героев ресает, ппц
 

kapa6acvlkДата: Среда, 06 Июня 2012, 23:12:41 | Сообщение # 13
Группа: Проверенные
Сообщений: 612
Награды: 0
Репутация: 361
Блокировки:
Akcm,
Вот ссылка на наработку с коментариями: http://narod.ru/disk/51997968001.9fdab1335768fbe4ed4f55d795b6f591/Resurrection.w3x.html

Триггер AddUnit добавляет в группу юнитов (отряд) каждого умершего героя

Вот код из наработки с коментариями:
Code
// Данная функция считает расстояние между юнитами А и Б
function DistanceBetweenUnits takes unit A, unit B returns real
     local real dx = GetUnitX(B) - GetUnitX(A)
     local real dy = GetUnitY(B) - GetUnitY(A)
     return SquareRoot(dx * dx + dy * dy)
endfunction
//Проверка, какой скилл был скастован
function Trig_Resurrection_Conditions takes nothing returns boolean
     return GetSpellAbilityId() == 'A000'        // RAW код абилы возродения героев
endfunction

function Trig_Resurrection_Actions takes nothing returns nothing
     local group g = CreateGroup()     // Создаем пустую группу юнитов
     local unit c = GetSpellAbilityUnit()    // Присваиваем переменной с, ссылку на юнита скастовавшего абилу
     local unit u = null                     // Пока пустая переменная
     call GroupAddGroup(udg_DH,g)            // Добавляем юнитов из группы DH в созданную нами группу g
     loop                    // Запускаем цикл
         set u = FirstOfGroup(g)             // Присваиваем переменной u, ссылку на первого юнита в группе
         exitwhen u == null                  // если u равно null, то прерываем цикл (если в группе не осталось юнитов)
         call GroupRemoveUnit(g, u)          // убираем юнита u из группы g, иначе цикл будет работать до бесконечности
         if(IsPlayerAlly(GetOwningPlayer(u), GetOwningPlayer(c)) and DistanceBetweenUnits(u,c) <= 600.0)then  //проверяем является ли герой u, нашим союзником и находится ли он в радиусе 600 от нашего героя, есди да то далее
             call GroupRemoveUnit(udg_DH,u)  //убираем героя u из группы с мертвыми героями
             call ReviveHero( u, GetUnitX(u), GetUnitY(u), true ) // возраждаем героя u  в той точке, где он помер
         endif                    //конец проверки
     endloop                    //конец цикла
     call DestroyGroup(g)                     //уничтожаем группу, дабы избежать утечек памяти
     set g = null                             //обнуляем переменные, дабы избежать утечек памяти  
     set u = null
     set c = null
endfunction

//===========================================================================
function InitTrig_Resurrection takes nothing returns nothing
     set gg_trg_Resurrection = CreateTrigger(  )
     call TriggerRegisterAnyUnitEventBJ( gg_trg_Resurrection, EVENT_PLAYER_UNIT_SPELL_EFFECT )
     call TriggerAddCondition( gg_trg_Resurrection, Condition( function Trig_Resurrection_Conditions ) )
     call TriggerAddAction( gg_trg_Resurrection, function Trig_Resurrection_Actions )
endfunction



Как говориться, не обязательно есть всю кучу говна, чтобы понять, что она однородна.
© Александр Зорич
 

AkcmДата: Четверг, 07 Июня 2012, 01:04:08 | Сообщение # 14
5 уровень
Группа: Проверенные
Сообщений: 132
Награды: 0
Репутация: 11
Блокировки:
kapa6acvlk, наверное слишком многого прошу, но я в текстовых тригах ниочём, к сожалению, не мог бы ты подсказать что именно мне надо поменять и вставить. Я вот нашёл рав код поменять во втором триге, а ещё что найти не могу, заранее спасибо
 

kapa6acvlkДата: Четверг, 07 Июня 2012, 20:40:16 | Сообщение # 15
Группа: Проверенные
Сообщений: 612
Награды: 0
Репутация: 361
Блокировки:
Значит так, Сначала создаешь абилу пустышку, на которую можно кликать, я взял "Безумие", убрал все эффекты на 0, время действия поставил 0,01. потом идешь в редактор триггеров (F4), открываешь редактор переменных, создаешь переменную DH тип переменной отряд. потом копируешь 2 триггера из карты примера в свою карту. триггер AddUnit не трогаешь он такой и будет всегда, в триггере Resurrection, RAW код абилы A000, меняешь на код своей абилы. В строке:
Code
if(IsPlayerAlly(GetOwningPlayer(u), GetOwningPlayer(c)) and DistanceBetweenUnits(u,c) <= 600.0)then

можно поменять значение 600 на любое другое, это радиус (АОЕ) действия воскрешения. Вот и собственно все.



Как говориться, не обязательно есть всю кучу говна, чтобы понять, что она однородна.
© Александр Зорич
 

Форум о Warcraft 3 » Раздел для картостроителей » Вопросы по картостроению » Помогите со скиллом воскрешения пожалуйста
  • Страница 1 из 1
  • 1
Поиск:

Copyright © 2006 - 2024 Warcraft3FT.info При копировании материалов c сайта ставьте, пожалуйста, активную обратную ссылку на нас • Design by gReeB04ki ©
Хостинг от uCoz