Всем привет. Вот решил попробовать поработать с Jass. Начал.. грубо говоря, "изучать" его буквально вчера. Так что можете называть нубом, крабом и т.д. хоть 100500 раз. Но всё же нужна помощь, ибо хочу понять в чём проблема. Решил попробовать сделать спелл: Мнгновенный каст; во всех инитов в радиусе 500 летит сопля. Сделал через Dummу которому даётся предмет(сопля) и тот кастует его в одну из целей. И того создаётся столько Dummy-ков, сколько врагов в радиусе поражения. В общем по идее простой спелл. Знаю, что у меня там 100500 лишних строк или ошибок. Прошу, по возможности, и их справить.
function Trig_Scouch2_Actions takes nothing returns nothing local unit target = IsUnitInRangeLoc(GetTriggerUnit(), GetUnitLoc(GetTriggerUnit()), 500.00 ) local real y = GetLocationY(GetUnitLoc(GetTriggerUnit())) local real x = GetLocationX(GetUnitLoc(GetTriggerUnit())) local unit cast = CreateUnit( GetOwningPlayer(GetTriggerUnit()), 'n006', x, y, bj_UNIT_FACING ) local item spell = UnitAddItemById( cast, 'I00H' ) if ( Trig_Scouch2_Func004C() ) then call UnitUseItemTarget( cast, spell, target ) call TriggerSleepAction( 0.02 ) call RemoveUnit( cast ) set cast = null set target = null set spell = null else endif endfunction
//=========================================================================== function InitTrig_Scouch2 takes nothing returns nothing set gg_trg_Scouch2 = CreateTrigger( ) call TriggerRegisterAnyUnitEventBJ( gg_trg_Scouch2, EVENT_PLAYER_UNIT_SPELL_CAST ) call TriggerAddCondition( gg_trg_Scouch2, Condition( function Trig_Scouch2_Conditions ) ) call TriggerAddAction( gg_trg_Scouch2, function Trig_Scouch2_Actions ) endfunction
Ошибка "cannot convert boolean to unit" возникает в строках:
function Trig_Scouch2_Actions takes nothing returns nothing //Кастер local unit u = GetTriggerUnit() //Его координаты local real x = GetWidgetX(u) local real y = GetWidgetY(u) //Владелец local player p = GetOwningPlayer(u) //Юнит для перебора группы local unit u2 //Его координаты local real x2 local real y2 //Дамми local unit dummy
call GroupEnumUnitsInRange(udg_Group, x, y, Trig_Scouch2_Range(), null) loop //Цикл, пока в группе есть юниты set u2 = FirstOfGroup(udg_Group) exitwhen u2 == null call GroupRemoveUnit(udg_Group, u2)
//Задаем координаты set x2 = GetWidgetX(u2) set y2 = GetWidgetY(u2) //Из геометрии - расстояние между точками на плоскости if IsUnitEnemy(u2, p) and x2 * x2 + y2 * y2 <= Trig_Scouch2_SquareRange() then //Создать дамми смотрящим в сторону цели set dummy = CreateUnit(p, Trig_Scouch2_Dummy(), x, y, Atan2(y2 - y, x2 - x)) //Задать ему время жизни call UnitApplyTimedLife(dummy, 'BTLF', 1.) //Удалить сразу после смерти call SetUnitExploded(dummy, true) //Дать предмет и заставить использовать call UnitUseItemTarget(dummy, UnitAddItemById(dummy, Trig_Scouch2_Item()), u2) endif endloop
set u = null set p = null set dummy = null endfunction
//=========================================================================== function InitTrig_Scouch2 takes nothing returns nothing local trigger trig = CreateTrigger() local integer i = 0 loop call TriggerRegisterPlayerUnitEvent(trig, Player(i), EVENT_PLAYER_UNIT_SPELL_EFFECT, null) exitwhen i == 15 set i = i + 1 endloop call TriggerAddCondition(trig, Condition(function Trig_Scouch2_Conditions)) call TriggerAddAction(trig, function Trig_Scouch2_Actions) set trig = null endfunction
Для человека, который только вчера начал писать, это очень достойная попытка. Советую почитать вот эти статьи: Теория скриптописания на языке JASS Хэш-таблицы Также рекомендую скачать редакторы кода: JNGP и/или JassCraft. Ну и, разумеется, нужно смотреть код других людей и экспериментировать самому.
Для человека, который только вчера начал писать, это очень достойная попытка. Советую почитать вот эти статьи:
Хех, спасибо) Честно говоря я просто пытался логически представить себе эту цепочку дейтвий и пытался подбирать подходящие функции. Но, как видно, не получилось)
Quote (SirNikolas)
Также рекомендую скачать редакторы кода: JNGP и/или JassCraft.
jngp у меня стоит уже очень долго, я раньше скачивал зачем-то. А джаскрафт ещё вчера скачал и пытался с помощью него ошибки исправлять.
Quote (SirNikolas)
Ну и, разумеется, нужно смотреть код других людей и экспериментировать самому.
Ну, вот я и эксперементировал) Да, и пытался посмотреть примеры, только как-то сразу не нашёл, потому сам попробовал написать. А так спасибо большое=) Буду читать твои статьи и попытаюсь найти свои ошибки. Надеюсь не возникнет проблем) Хотя в это верится с трудом.