XGM Forum
Сайт - Статьи - Проекты - Ресурсы - Блоги

Форуме в режиме ТОЛЬКО ЧТЕНИЕ. Вы можете задать вопросы в Q/A на сайте, либо создать свой проект или ресурс.
Вернуться   XGM Forum > Warcraft> Академия: форум для вопросов> Jass
Ник
Пароль
Войти через VK в один клик
Сайт использует только имя.

Ответ
 
DimP

offline
Опыт: 1,741
Активность:
Перенос массивов
У меня вопрос(думаю тупой).
Как в системе SCV переносить массивы юнитов между функциями?
Старый 14.08.2008, 12:49
Strayiker
Warcraft Forever
offline
Опыт: 3,406
Активность:
Аттачить весь массив куда надо и потом вынемать из аттача
Старый 14.08.2008, 13:27
alexkill

offline
Опыт: 18,872
Активность:
Цитата:
Сообщение от DimP
У меня вопрос(думаю тупой).
Как в системе SCV переносить массивы юнитов между функциями?


В твоем случае массив юнитов == группа или нет?
Старый 14.08.2008, 13:33
PlayerDark
Coraline
offline
Опыт: 10,569
Активность:
Можно с помощью цикла кешировать весь массив.
Старый 14.08.2008, 14:27
DimP

offline
Опыт: 1,741
Активность:
Массив юнитов не равен группе, всмысле нужно выделить всех юнитов в радиусе, но применять к ним действия по отдельность(действия применяются во втором переодическом триггере).

DimP добавил:
PlayerDark\
Кэшировать массив циклом, но как его потом перемещать между функциями(с помощью SCV)?
Старый 14.08.2008, 14:54
alexkill

offline
Опыт: 18,872
Активность:
Цитата:
Сообщение от DimP
Массив юнитов не равен группе, всмысле нужно выделить всех юнитов в радиусе, но применять к ним действия по отдельность(действия применяются во втором переодическом триггере)


Хоть в пятом. Смотри, при чем здесь группа:

Код:
call GroupEnumUnitsInRange(gr, x, y, r, null)
 loop
   set u=FirstOfGroup(gr)
 exitwhen u=null
....
   call GroupRemoveUnit(gr, u)
 endloop
 call DestroyGroup()
 set gr=null


Чтоб к ней обратится сразу, а позже - в таймере, делай ее копию (хотя и не всегда это нужно).

Да, и аттачить к таймеру группу не забудь! И без массивов обойдешься.

Отредактировано alexkill, 14.08.2008 в 15:05.
Старый 14.08.2008, 15:00
DimP

offline
Опыт: 1,741
Активность:
Я новичек в Джассе
Объясни пожалуйста подробнее, что это дает?
u - переменная какого типа?

DimP добавил:
А то я по нубски через циклы делаю...
Старый 14.08.2008, 15:05
alexkill

offline
Опыт: 18,872
Активность:
Боевая единица

alexkill добавил:
Цитата:
Сообщение от DimP
через циклы делаю...

луп - тот же цикл.
Старый 14.08.2008, 15:07
adic3x

offline
Опыт: 108,439
Активность:
заносить юнитов в группу, а потом вызывать ForGroup для из перебора и действий над ними
Старый 14.08.2008, 15:09
alexkill

offline
Опыт: 18,872
Активность:
Опиши, что хочешь сделать - проще будет разобраться. Выделить всех и совершить сразу какое-то действие, а потом - периодически совершать еще действие?
Старый 14.08.2008, 15:10
DimP

offline
Опыт: 1,741
Активность:
Изв. Незаметил...

Просто я так делал:
Код:
function 1...
local trigger t
local unit array atack
loop (1-3)
   set atack[j] = GroupPickRandomUnit...
   call set_object_iparam(t, "atack", H2I(atack[j]))
   .....
endloop
function 2...
local trigger t
local unit array atack 
loop (1-3)
  set atack[j] = I2U(get_object_iparam(t, "atack"))
 .....
endloop
и т.д.


DimP добавил:
Хотел сделать чтобы от нескольких юнитов в определенном радиусе отлетали файрболлы

Отредактировано dk, 14.08.2008 в 16:41.
Старый 14.08.2008, 15:49
DimP

offline
Опыт: 1,741
Активность:
Можно ли сделать так:
Сначала:
Код:
.....
j = 1
loop
   exitwhen j > 3
   call set_object_iparam(t, "atack(I2S(set_object_iparam(t, "n", n)))", H2I(atack[j]))
   n = n+1
   j = j+1
endloop
.....

В следующем:
Код:
.....
j = 1
loop
   exitwhen j > 3
   set atack[j] = I2U(get_object_iparam(t, "atack(I2S(set_object_iparam(t, "n", n)")
endloop
.....
Старый 14.08.2008, 21:56
J
expert
offline
Опыт: 48,447
Активность:
DimP "atack" замени на "atack"+I2S(j)
Старый 14.08.2008, 23:17
DimP

offline
Опыт: 1,741
Активность:
Jon
Огр. спасибо!
Старый 15.08.2008, 10:07
DimP

offline
Опыт: 1,741
Активность:
Можно ли в условие вставить цикл или функцию с циклом?
Код:
loop 1-...
.....
if atack[j] != I2U(get_object_iparam(t, "atack" + I2S(j-1))) then...
.....
endif
endloop

Короче, надо чтоб каждый следующий юнит в массиве atack был неравен всем предыдущим.(j-1 делает каждого следующего юнита неравным 1 предыдущему, а нужно чтоб всем.)

Отредактировано ShadoW DaemoN, 15.08.2008 в 19:55.
Старый 15.08.2008, 18:21
Sebra

offline
Опыт: 5,603
Активность:
1. Цикл прямо в условие не вставишь.
2. Функцию в условие вставить легко, будет ли цикл в функции - неважно.
3. Ты хочешь все j проверить одной строкой? Юморист! Как намерен указывать диапазон, инкремент?
Старый 15.08.2008, 18:27
DimP

offline
Опыт: 1,741
Активность:
Циклом.
Мне надо чтоб:
loop 1-...
atack[1] != atack[0]
atack[2] != atack[1]
atack[3] != atack[1],[2]
atack[4] != atack[1],[2],[3]
atack[5] != atack[1],[2],[3],[4]
.....

DimP добавил:
А у меня получается только:
loop 1-...
atack[1] != atack[0]
atack[2] != atack[1]
atack[3] != atack[2]
atack[4] != atack[3]
atack[5] != atack[4]
.....
Старый 15.08.2008, 18:38
ScorpioT1000
Работаем
offline
Опыт: отключен
добавь n вобщем вспоминай математику
Старый 15.08.2008, 19:54
Dragon27

offline
Опыт: 6,779
Активность:
Цикл в цикле:
для А от 0 до 10
..для В от 0 до А-1
....если attack[A]!=attack[B]
Старый 15.08.2008, 20:11
DimP

offline
Опыт: 1,741
Активность:
Огромное спасибо!
Но можно код, либо как для дб.

DimP добавил:
Можно ли "цикл в цикле" запихать в функцию, чтоб цикл по А не мешал основному триггеру?

DimP добавил:
Типо надо, чтоб atack[A] был в основном триггере(функции), а atack[B] возвращала отдельная функция, вызванная в условии, либо что-то вроде этого...

DimP добавил:
Dragon27\
Впринципе твой способ помогает, но неболее чем с 3 юнитами, следующие перезаписываются.
Старый 15.08.2008, 21:54
Ответ

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы можете скачивать файлы

BB-коды Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход



Часовой пояс GMT +3, время: 13:55.