Сейчас 23:17:38 Четверг, 26 декабря, 2024 год
[ x ] Главная ⇒ Форум ⇐ RSS Файлы Cтатьи Картинки В о й т и   или   з а р е г и с т р и р о в а т ь с я


[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 2
  • 1
  • 2
  • »
Модератор форума: PUVer, SirNikolas, Ty3uK  
[JASSфак] Лекция 4. Циклы.
[DUОS]Дата: Четверг, 26 Ноября 2009, 23:03:14 | Сообщение # 1
Группа: Заблокированные
Сообщений: 6279
Награды: 9
Репутация: 1708
Блокировки:
Циклы в Jass имеют следующую структуру:

loop
  //Действия цикла
endloop

Циклы можно регулировать целочисленной (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) Выслать карту в тему.


НУ И ЧТО ТЕПЕРЬ?


Кликайте на дракошку ;)


Сообщение отредактировал [DUОS] - Четверг, 26 Ноября 2009, 23:06:57
 

H_A_PKДата: Пятница, 27 Ноября 2009, 01:52:03 | Сообщение # 2
Быдлокодер
Группа: Проверенные
Сообщений: 2605
Награды: 1
Репутация: 822
Блокировки:
[DUОS],
Quote (|DUОS|)
local integer i = 1 loop   exitwhen i > 7 // Цикл делается 6 раз.   call DisplayTextToForce(GetPlayersAll(),(( "Высвечиваюсь" + I2S(i) ) + ( "-й раз" )))   set i = i + 1 endloop

как я понел цикл повторяется до тех пор пока не будет собледенно условие ))

Добавлено (27-11-2009, 01:52)
---------------------------------------------

Code
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) ) + ( "-й раз" ))) можно убрать ))
впринципе нафик оно :) :)


проклятье ляжет на любого
кто дочитает до конца
нет не дочитывай не надо
остановись ну всё капец
 

DjimmДата: Пятница, 27 Ноября 2009, 09:07:31 | Сообщение # 3
5 уровень
Группа: Проверенные
Сообщений: 117
Награды: 0
Репутация: 20
Блокировки:
Quote (H_A_PK)
я плогаю , что call DisplayTextToForce(GetPlayersAll(),(( "Высвечиваюсь" + I2S(i) ) + ( "-й раз" ))) можно убрать )) впринципе нафик оно

Сразу видно, что пропустил первый урок :) Там статья замечательная была и обсуждали много.
И кстати, цикл повторяется 7 раз, а не 6 :D
 

DragoNДата: Пятница, 27 Ноября 2009, 13:02:35 | Сообщение # 4
Инквизитор
Группа: Стримеры
Сообщений: 4348
Награды: 7
Репутация: 2776
Блокировки:
Djimm, 6,первый шаг пропускаться...

El Psy Congroo
 

DjimmДата: Пятница, 27 Ноября 2009, 13:36:06 | Сообщение # 5
5 уровень
Группа: Проверенные
Сообщений: 117
Награды: 0
Репутация: 20
Блокировки:
Quote (Dragon93)
6,первый шаг пропускаться...

Все таки 7. При i=1,2,3,4,5,6,7, ведь выход когда i>7 . Да и я проверял :D
 

AkvariumДата: Пятница, 27 Ноября 2009, 14:50:39 | Сообщение # 6
8 уровень
Группа: Проверенные
Сообщений: 581
Награды: 1
Репутация: 87
Блокировки:
Quote (|DUОS|)
Поиграть на JASS с Траллом и "Цепью молний". Вашего опыта хватает, чтобы разукрасить спеллы.

О_о непонял.... Что ли скопиастить цепь токо на JASS?


 

[DUОS]Дата: Пятница, 27 Ноября 2009, 15:52:01 | Сообщение # 7
Группа: Заблокированные
Сообщений: 6279
Награды: 9
Репутация: 1708
Блокировки:
H_A_PK,
Да.
Quote (Akvarium)
скопиастить цепь токо на JASS?
Нет, дополнить попадания спецэффектами.


НУ И ЧТО ТЕПЕРЬ?


Кликайте на дракошку ;)
 

H_A_PKДата: Пятница, 27 Ноября 2009, 18:14:39 | Сообщение # 8
Быдлокодер
Группа: Проверенные
Сообщений: 2605
Награды: 1
Репутация: 822
Блокировки:
[DUОS], На джаз ТАК ))
Quote (|DUОS|)
Нет, дополнить попадания спецэффектами.

Ведь и В РО моно


проклятье ляжет на любого
кто дочитает до конца
нет не дочитывай не надо
остановись ну всё капец
 

AkvariumДата: Пятница, 27 Ноября 2009, 18:42:45 | Сообщение # 9
8 уровень
Группа: Проверенные
Сообщений: 581
Награды: 1
Репутация: 87
Блокировки:
[DUОS], непонял) Я :crazy:. Обьясни подробнее)

 

[DUОS]Дата: Пятница, 27 Ноября 2009, 19:42:21 | Сообщение # 10
Группа: Заблокированные
Сообщений: 6279
Награды: 9
Репутация: 1708
Блокировки:
Quote (H_A_PK)
Ведь и В РО моно

Я прошу их и ремувать.
Quote (Akvarium)
[DUОS], непонял) Я :crazy:. Обьясни подробнее)

Akvarium,
Циклы используют для повторения какого-либо действия.
Модифицируйте цепь молний джассом с юзанием циклов...


НУ И ЧТО ТЕПЕРЬ?


Кликайте на дракошку ;)
 

СорнемусДата: Пятница, 27 Ноября 2009, 21:44:45 | Сообщение # 11
9 уровень
Группа: Проверенные
Сообщений: 854
Награды: 0
Репутация: 120
Блокировки:
Блин, ну не пишите ДЗ в тему. Всё должно идти в карте, а не всем на вид -_-
Quote (Djimm)
Все таки 7. При i=1,2,3,4,5,6,7, ведь выход когда i>7 . Да и я проверял

Кстати да, 7 раз, это если написать i == 7 тогда 6 раз.
 

HAPKOMAHДата: Пятница, 27 Ноября 2009, 22:11:34 | Сообщение # 12
5 уровень
Группа: Проверенные
Сообщений: 111
Награды: 0
Репутация: 58
Блокировки:
Да пусть смотрят. Все равно не идеально.
 

AkvariumДата: Суббота, 28 Ноября 2009, 16:33:49 | Сообщение # 13
8 уровень
Группа: Проверенные
Сообщений: 581
Награды: 1
Репутация: 87
Блокировки:
[DUОS], сорки конешн но я до сих пор ничего не понял!! Толи я тупой то ли че....

 

СорнемусДата: Суббота, 28 Ноября 2009, 16:42:07 | Сообщение # 14
9 уровень
Группа: Проверенные
Сообщений: 854
Награды: 0
Репутация: 120
Блокировки:
Akvarium, надо разукрасить Цепь молний. Но не в РО, а джассом.
 

H_A_PKДата: Суббота, 28 Ноября 2009, 17:51:40 | Сообщение # 15
Быдлокодер
Группа: Проверенные
Сообщений: 2605
Награды: 1
Репутация: 822
Блокировки:
[DUОS], помоги у мя фигня какакаето
Code
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()


проклятье ляжет на любого
кто дочитает до конца
нет не дочитывай не надо
остановись ну всё капец
 

СорнемусДата: Суббота, 28 Ноября 2009, 18:25:55 | Сообщение # 16
9 уровень
Группа: Проверенные
Сообщений: 854
Награды: 0
Репутация: 120
Блокировки:
H_A_PK, должно быть так:
Code
exitwhen (un != GetSpellAbilityUnit())

Но вобще... Как это так, сравнивать юнита с юнитом? И при том одного и того-же? В "exitwhen" обычно должны быть real'ы и integer'ы.
 

H_A_PKДата: Суббота, 28 Ноября 2009, 18:27:35 | Сообщение # 17
Быдлокодер
Группа: Проверенные
Сообщений: 2605
Награды: 1
Репутация: 822
Блокировки:
Сорнемус, Да)) незнал

проклятье ляжет на любого
кто дочитает до конца
нет не дочитывай не надо
остановись ну всё капец
 

СорнемусДата: Суббота, 28 Ноября 2009, 18:30:11 | Сообщение # 18
9 уровень
Группа: Проверенные
Сообщений: 854
Награды: 0
Репутация: 120
Блокировки:
H_A_PK, в функции условия напиши это:
Code
    return GetSpellAbilityId() == 'AOcl'
 

H_A_PKДата: Суббота, 28 Ноября 2009, 18:33:15 | Сообщение # 19
Быдлокодер
Группа: Проверенные
Сообщений: 2605
Награды: 1
Репутация: 822
Блокировки:
Сорнемус, плз помоги )) у мя щас в етом ошибка , а ту я иправил
Code
Set un = GetSpellAbilityUnit()


проклятье ляжет на любого
кто дочитает до конца
нет не дочитывай не надо
остановись ну всё капец
 

СорнемусДата: Суббота, 28 Ноября 2009, 18:34:24 | Сообщение # 20
9 уровень
Группа: Проверенные
Сообщений: 854
Награды: 0
Репутация: 120
Блокировки:
H_A_PK, присвоение идёт сразу-же после обьявления и считываеться парсером как ошибка. Сделай так:
Code
  local unit un = GetSpellAbilityUnit()


Сообщение отредактировал Сорнемус - Суббота, 28 Ноября 2009, 18:34:48
 

H_A_PKДата: Суббота, 28 Ноября 2009, 18:35:27 | Сообщение # 21
Быдлокодер
Группа: Проверенные
Сообщений: 2605
Награды: 1
Репутация: 822
Блокировки:
Сорнемус, спс )) + Сорнемус,

проклятье ляжет на любого
кто дочитает до конца
нет не дочитывай не надо
остановись ну всё капец
 

[DUОS]Дата: Суббота, 28 Ноября 2009, 20:46:06 | Сообщение # 22
Группа: Заблокированные
Сообщений: 6279
Награды: 9
Репутация: 1708
Блокировки:
Сорнемус,
Спасибо, что подменил ^_^

Молодец, усвоил урок. :) Тебе пятёрка.
Akvarium,
Жду задания.


НУ И ЧТО ТЕПЕРЬ?


Кликайте на дракошку ;)
 

ВыфаДата: Суббота, 28 Ноября 2009, 21:00:01 | Сообщение # 23
1 уровень
Группа: Заблокированные
Сообщений: 3
Награды: 0
Репутация: -265
Блокировки:
Quote (Сорнемус)
присвоение идёт сразу-же после обьявления и считываеться парсером как ошибка

Это я считаю такое присвоение ошибкой, а парсеру не нравится 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.
 

HAPKOMAHДата: Суббота, 28 Ноября 2009, 21:01:38 | Сообщение # 24
5 уровень
Группа: Проверенные
Сообщений: 111
Награды: 0
Репутация: 58
Блокировки:
А что правильного варианта от учителя не будет?
 

AkvariumДата: Воскресенье, 29 Ноября 2009, 13:59:13 | Сообщение # 25
8 уровень
Группа: Проверенные
Сообщений: 581
Награды: 1
Репутация: 87
Блокировки:
Кажись так.....
Code

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
 

  • Страница 1 из 2
  • 1
  • 2
  • »
Поиск:

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