Правила игры: Первый игрок дает задачу, следующий игрок ее решает, если он решил ее правильно, то задает свою задачу. И так по цепочке. Решение задачи можно выкладывать скринами, кидать ссылки на карты или понятным для других триггерщиков языком описать как решить ту или иную задачу.
Пример:
Игрок1:Задача. Боевая единица является оборотнем. Ночью принимает облик волка, а днем человека. Сделайте превращение, зависящее от времени суток.
Игрок2:Решение. Событие: Игра - The in-game time of day becomes равно 6.00 Действия: Функция: Отряд - Pick every unit in (Units of type Облик1) and do (Actions) Цикл: Боевая единица - Replace (PickedUnit) with a Облик2 using Старая связь боевой единицы Life and Mana Аналогично для второго времени суток Задача: "бла бла бла"
Игрок3:Решение: "....." Задача "..."
И так далее.... Вообщем Начинаем
Моя задача первая, будет не очень сложной. Сделать легкий спелл, которые будет менять кастера местами с целью заклинания.
Событие: Боевая единица - A unit Начинает применять способность
Условие: Ability Comparison - (Ability being cast) равно Первый спелл
Действие: Set variable - Caster = (Position of (Casting unit)) Set variable - Target = (Position of (Targeted unit of ability beign cast)) Боевая единица - Move (Casting Unit) instantly to (Target) Боевая единица - Move (Targeted unit of ability beign cast) instantly to (Caster)
Задача: Сделать спелл, (АОЕ) с радиусом в 300 единиц так, чтобы в месте каста произошло 8 водных взрывов (одновременно с эффектом Abilities\Spells\Other\Drain\ManaDrainTarget.mdl)
function fun003 takes nothing returns boolean local trigger trigger01=GetTriggeringTrigger() local integer integer01=GetHandleId(trigger01) local real real01=LoadReal(udg_Hashtable,integer01,1) local real real02=LoadReal(udg_Hashtable,integer01,2) local integer integer02=GetTriggerEvalCount(trigger01) if (integer02==8) then call FlushChildHashtable(udg_Hashtable,integer01) call TriggerDeleteFromGame(trigger01) else call DestroyEffect(AddSpecialEffect("Abilities\Spells\Other\Drain\ManaDrainTarget.mdl",real01,real02)) endif set trigger01=null return false endfunction
function fun002 takes nothing returns nothing local real real01=GetSpellTargetX() local real real02=GetSpellTargetY() local trigger trigger01=CreateTrigger() call TriggerRegisterTimerEvent(trigger01,0.7,true) call TriggerAddCondition(trigger01,Condition(function fun003)) call SaveReal(udg_Hashtable,GetHandleId(trigger01),1,real01) call SaveReal(udg_Hashtable,GetHandleId(trigger01),2,real02) set trigger01=null endfunction
function fun001 takes nothing returns boolean if (GetSpellAbilityId()=='A000') then call fun002() endif return false endfunction
function fun000 takes nothing returns nothing local trigger trigger01=CreateTrigger() call TriggerRegisterAnyUnitEventBJ(trigger01,EVENT_PLAYER_UNIT_SPELL_EFFECT) call TriggerAddCondition(trigger01,Condition(function fun001)) set trigger01=null endfunction
Code
function fun003 takes nothing returns boolean local trigger trigger01=GetTriggeringTrigger() local integer integer01=GetHandleId(trigger01) local real real01=LoadReal(udg_Hashtable,integer01,1) local real real02=LoadReal(udg_Hashtable,integer01,2) local real real03 local real real04 local integer integer02=GetTriggerEvalCount(trigger01) if (integer02==8) then call FlushChildHashtable(udg_Hashtable,integer01) call TriggerDeleteFromGame(trigger01) else set real03=real01+GetRandomReal(0,300)*Cos(GetRandomReal(0,360)*bj_DEGTORAD) set real04=real02+GetRandomReal(0,300)*Sin (GetRandomReal(0,360)*bj_DEGTORAD) call DestroyEffect(AddSpecialEffect("Abilities\Spells\Other\Drain\ManaDrainTarget.mdl",real03,real04)) endif set trigger01=null return false endfunction
function fun002 takes nothing returns nothing local real real01=GetSpellTargetX() local real real02=GetSpellTargetY() local trigger trigger01=CreateTrigger() call TriggerRegisterTimerEvent(trigger01,0.7,true) call TriggerAddCondition(trigger01,Condition(function fun003)) call SaveReal(udg_Hashtable,GetHandleId(trigger01),1,real01) call SaveReal(udg_Hashtable,GetHandleId(trigger01),2,real02) set trigger01=null endfunction
function fun001 takes nothing returns boolean if (GetSpellAbilityId()=='A000') then call fun002() endif return false endfunction
function fun000 takes nothing returns nothing local trigger trigger01=CreateTrigger() call TriggerRegisterAnyUnitEventBJ(trigger01,EVENT_PLAYER_UNIT_SPELL_EFFECT) call TriggerAddCondition(trigger01,Condition(function fun001)) set trigger01=null endfunction
Задача: Способность - приказ точка. Заставить двигать юнитов в радиусе 500, углом юнита до точки. Что бы юниты во время триггерного движения могли бегать/атаковать/отдавать приказы.Мои статьи: 1. http://wc3-maps.ru/forum/78-1507-1 Школа тригеростроения, ГУИ. http://wc3-maps.ru/forum/99-1471-1