Циклы можно регулировать целочисленной (integer), которую лучше сделать локальной переменной. Я описывал в лекции 2, как задавать локальные переменные. Циклы бесконечны, если не написать в них следующую строку: exitwhen ваше условие. Циклы выполняют действия последовательно, wait в циклах нежелателен. Поэтому подумайте, нужен ли вам цикл или вам нужен таймер. Пример цикла:
local integer i = 1 loop exitwhen i > 7 // Цикл делается 6 раз. call DisplayTextToForce(GetPlayersAll(),(( "Высвечиваюсь" + I2S(i) ) + ( "-й раз" ))) set i = i + 1 endloop
Просто, неправда ли?
Задания: 1) Максимально оптимизировать код 2) Поиграть на JASS с Траллом и "Цепью молний". Вашего опыта хватает, чтобы разукрасить спеллы. 3) Выслать карту в тему.
local integer i = 1 loop exitwhen i > 7 // Цикл делается 6 раз. call DisplayTextToForce(GetPlayersAll(),(( "Высвечиваюсь" + I2S(i) ) + ( "-й раз" ))) set i = i + 1 endloop
как я понел цикл повторяется до тех пор пока не будет собледенно условие ))
local integer i = 1 loop exitwhen i > 7 // Цикл делается 6 раз. call DisplayTextToForce(GetPlayersAll(),(( "Высвечиваюсь" + I2S(i) ) + ( "-й раз" ))) set i = i + 1 endloop
Quote (|DUОS|)
1) Максимально оптимизировать код
я плогаю , что call DisplayTextToForce(GetPlayersAll(),(( "Высвечиваюсь" + I2S(i) ) + ( "-й раз" ))) можно убрать )) впринципе нафик оно
проклятье ляжет на любого кто дочитает до конца нет не дочитывай не надо остановись ну всё капец
я плогаю , что call DisplayTextToForce(GetPlayersAll(),(( "Высвечиваюсь" + I2S(i) ) + ( "-й раз" ))) можно убрать )) впринципе нафик оно
Сразу видно, что пропустил первый урок Там статья замечательная была и обсуждали много.
Code
local integer i = 1 local player p=GetLocalPlayer() loop exitwhen i > 7 call DisplayTextToPlayer(p,0,0, "Высвечиваюсь" + I2S(i) + "-й раз" ) set i = i + 1 endloop set p=null
function Trig_JASS_Conditions takes nothing returns boolean if ( not ( GetSpellAbilityId() == 'AOcl' ) ) then return false endif return true endfunction
function Trig_JASS_Actions takes nothing returns nothing local unit un Set un = GetSpellAbilityUnit() loop exitwhen un != GetSpellAbilityUnit() // Цикл делается 6 раз. call AddSpecialEffectTargetUnit( "origin", GroupPickRandomUnit(GetUnitsInRangeOfLocAll(512, GetUnitLoc(udg_u[0]))), "Abilities\\Spells\\Items\\TomeOfRetraining\\TomeOfRetrainingCaster.mdl" ) endloop endfunction
//=========================================================================== function InitTrig_JASS takes nothing returns nothing set gg_trg_JASS = CreateTrigger( ) call TriggerRegisterAnyUnitEvent( gg_trg_JASS, EVENT_PLAYER_UNIT_SPELL_CAST ) call TriggerAddCondition( gg_trg_JASS, Condition( function Trig_JASS_Conditions ) ) call TriggerAddAction( gg_trg_JASS, function Trig_JASS_Actions ) endfunction
В чём здесь ошибка не пойму(( но пишит что якобы ошибка здесь
Code
exitwhen un != GetSpellAbilityUnit()
проклятье ляжет на любого кто дочитает до конца нет не дочитывай не надо остановись ну всё капец
присвоение идёт сразу-же после обьявления и считываеться парсером как ошибка
Это я считаю такое присвоение ошибкой, а парсеру не нравится set с большой буквы и TriggerRegisterAnyUnitEvent, AddSpecialEffectTargetUnit вместо TriggerRegisterAnyUnitEventBJ, AddSpecialEffectTargetUnitBJ или AddSpecialEffectTarget. В цикле перепутаны переменные и он алгоритмически бессмысленен. Должно быть: local unit un = GetSpellAbilityUnit() local unit uTz local integer lAz = 0 local group gAz = CreateGroup() call GroupEnumUnitsInRange(gAz, GetUnitX(un), GetUnitX(un),512, null) set bj_wantDestroyGroup = false //can optimize loop set uTz = GroupPickRandomUnit(gAz) //can optimize if uTz!= null and uTz != un then set lAz = lAz + 1 set bj_lastCreatedEffect = AddSpecialEffectTarget("Abilities\\Spells\\Items\\TomeOfRetraining\\TomeOfRetrainingCaster.mdl" , uTz, "origin") endif exitwhen uTz == null or lAz > 6 endloop call DestroyGroup(gAz) set gAz = null И наверное с другой моделькой.
Я регалась чтобы его перегнать по минусам. Ничего не вышло. Ладно, все минусы мне ставьте сюда, а все плюсы - Alice.
function Trig_JASS_Conditions takes nothing returns boolean if ( not ( GetSpellAbilityId() == 'AOcl' ) ) then return false endif return true endfunction
function Trig_JASS_Actions takes nothing returns nothing local unit u = GetSpellAbilityUnit() local unit u1 local integer i = 0 local group gr = CreateGroup() call GroupEnumUnitsInRange(gr, GetUnitX(u), GetUnitX(u),512, null) set bj_wantDestroyGroup = false loop set u1 = GroupPickRandomUnit(gr) if u1 != null and u1 != u then set i = i + 1 set bj_lastCreatedEffect = AddSpecialEffectTarget("Abilities\\Spells\\NightElf\\Blink\\BlinkTarget.mdl" , u1, "origin") endif exitwhen u1 == null or i > 6 endloop call DestroyGroup(gr) set gr = null endfunction
//=========================================================================== function InitTrig_JASS takes nothing returns nothing set gg_trg_JASS = CreateTrigger( ) call TriggerRegisterAnyUnitEventBJ( gg_trg_JASS, EVENT_PLAYER_UNIT_SPELL_EFFECT ) call TriggerAddCondition( gg_trg_JASS, Condition( function Trig_JASS_Conditions ) ) call TriggerAddAction( gg_trg_JASS, function Trig_JASS_Actions ) endfunction
Но 1 баг. Эффект создается на рандум юнитах а не на именно тех в кого молния попала
Сообщение отредактировал Akvarium - Воскресенье, 29 Ноября 2009, 14:00:29