|
|
|
|
Помогите со скиллом воскрешения пожалуйста
|
|
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 на любое другое, это радиус (АОЕ) действия воскрешения. Вот и собственно все.
Как говориться, не обязательно есть всю кучу говна, чтобы понять, что она однородна. © Александр Зорич
|
|
|
|
|
|
|
|
|
|
|