Сейчас 13:51:04 Пятница, 27 января, 2023 год
[ x ] Главная ⇒ Форум ⇐ RSS Файлы Cтатьи Картинки В о й т и   или   з а р е г и с т р и р о в а т ь с я


[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Модератор форума: PUVer, SirNikolas, Ty3uK  
Форум о Warcraft 3 » Раздел для картостроителей » GUI / Jass » Случайный юнит из группы. (как...)
Случайный юнит из группы.
HexingДата: Четверг, 11 Августа 2011, 17:45:28 | Сообщение # 1
10 уровень
Группа: Проверенные
Сообщений: 1645
Награды: 1
Репутация: 432
Блокировки:
Помогите, не могу написать функция возвращающую случайного юнита из группы. Всё что вышло - какаята каша из bj_ переменных и прочей фигни с ForGroup. Есть ли native-ка делающая это? Если нет, то как оптимально решить эту задачу?

 

Igni2012Дата: Четверг, 11 Августа 2011, 18:31:16 | Сообщение # 2
3 уровень
Группа: Проверенные
Сообщений: 61
Награды: 0
Репутация: 3
Блокировки:
Убивает случайного юнита из ранее созданной группы юнитов.
call KillUnit( GroupPickRandomUnit(GetLastCreatedGroup()) )
 

HexingДата: Четверг, 11 Августа 2011, 18:39:13 | Сообщение # 3
10 уровень
Группа: Проверенные
Сообщений: 1645
Награды: 1
Репутация: 432
Блокировки:
GroupPickRandomUnit - бужажешечка с кучай лишнего хлама... Вот мой предел:





 

[DS]Дата: Четверг, 11 Августа 2011, 21:36:38 | Сообщение # 4
9 уровень
Группа: Проверенные
Сообщений: 1116
Награды: 0
Репутация: 527
Блокировки:
мб лупом?

 

FaionДата: Четверг, 11 Августа 2011, 22:11:27 | Сообщение # 5
10 уровень
Группа: Проверенные
Сообщений: 1894
Награды: 0
Репутация: 430
Блокировки:
Вот:

Code
library GetRndUnit
{
     private unit array unit_array
     private int index = 0

     private void rnd()
     {
         unit_array[index] = GetEnumUnit()
         index++
     }

     unit GetRndUnit(group g)
     {
         index = 0
         ForGroup(g, function rnd)     
         return unit_array[GetRandomInt(0,index)]
     }
}


О нас думают плохо лишь те, кто хуже нас, а те кто лучше нас... Им просто не до нас.
My Project: Nindogatari
MAL
 

lawsonДата: Четверг, 11 Августа 2011, 22:43:06 | Сообщение # 6
Группа: Проверенные
Сообщений: 3482
Награды: 0
Репутация: 974
Блокировки:
А что так нельзя
set unit = FristOfGroup(group)


Nic nie wiem bo mam chuj.
редактирую посты! ВСЕ!
 

[DS]Дата: Четверг, 11 Августа 2011, 22:45:53 | Сообщение # 7
9 уровень
Группа: Проверенные
Сообщений: 1116
Награды: 0
Репутация: 527
Блокировки:
"А что так нельзя set unit = FristOfGroup(group)"
он берет первого юнита из группы, а не рандомно


 

lawsonДата: Четверг, 11 Августа 2011, 22:51:54 | Сообщение # 8
Группа: Проверенные
Сообщений: 3482
Награды: 0
Репутация: 974
Блокировки:
Quote (|DS|)
он берет первого юнита из группы

А ты знаешь кто будет первый?


Nic nie wiem bo mam chuj.
редактирую посты! ВСЕ!
 

[DS]Дата: Четверг, 11 Августа 2011, 22:53:25 | Сообщение # 9
9 уровень
Группа: Проверенные
Сообщений: 1116
Награды: 0
Репутация: 527
Блокировки:
первый попавщыйся

 

lawsonДата: Четверг, 11 Августа 2011, 22:56:21 | Сообщение # 10
Группа: Проверенные
Сообщений: 3482
Награды: 0
Репутация: 974
Блокировки:
Quote (|DS|)
первый попавщыйся

А это не рандом?

Добавлено (11-08-2011, 22:56)
---------------------------------------------
Можешь проверить: поставь в линию 10 юнитов выдели их в группу и убей первого попавщегося из нее с помощью KillUnit(FristOfGroup(group))


Nic nie wiem bo mam chuj.
редактирую посты! ВСЕ!


Сообщение отредактировал lawson - Четверг, 11 Августа 2011, 22:59:45
 

[DS]Дата: Четверг, 11 Августа 2011, 23:01:56 | Сообщение # 11
9 уровень
Группа: Проверенные
Сообщений: 1116
Награды: 0
Репутация: 527
Блокировки:
незнаю, но думаю будут умерать по очереди, хотя это догадки, у мя ве нет под рукой

 

lawsonДата: Четверг, 11 Августа 2011, 23:04:32 | Сообщение # 12
Группа: Проверенные
Сообщений: 3482
Награды: 0
Репутация: 974
Блокировки:
[DS], Ты прав эта функция не подходит для рандомного выбора, она по каким то критериям выбирает юнита.

Nic nie wiem bo mam chuj.
редактирую посты! ВСЕ!


Сообщение отредактировал lawson - Пятница, 12 Августа 2011, 00:14:56
 

[DS]Дата: Четверг, 11 Августа 2011, 23:08:58 | Сообщение # 13
9 уровень
Группа: Проверенные
Сообщений: 1116
Награды: 0
Репутация: 527
Блокировки:
ну дык, точно, просто выбирает юнита из группы, потом делается действия, и удаляет этого юнита из группы, потом переходит к другому юниту

 

lawsonДата: Четверг, 11 Августа 2011, 23:19:56 | Сообщение # 14
Группа: Проверенные
Сообщений: 3482
Награды: 0
Репутация: 974
Блокировки:
[DS], Кароче сейчас тест проведу сделаю скрины. Хочу узнать как выбирает эта функция юнита из группы.

Nic nie wiem bo mam chuj.
редактирую посты! ВСЕ!
 

FaionДата: Четверг, 11 Августа 2011, 23:31:57 | Сообщение # 15
10 уровень
Группа: Проверенные
Сообщений: 1894
Награды: 0
Репутация: 430
Блокировки:
Quote (lawson)
FristOfGroup()


Нет. Группа == нативный массив юнитов. Пик юнитов начинается от координат 0.0, и первыми идут герои, потом все остальное.


О нас думают плохо лишь те, кто хуже нас, а те кто лучше нас... Им просто не до нас.
My Project: Nindogatari
MAL
 

[DS]Дата: Четверг, 11 Августа 2011, 23:44:30 | Сообщение # 16
9 уровень
Группа: Проверенные
Сообщений: 1116
Награды: 0
Репутация: 527
Блокировки:
По уровню юнита?

 

FaionДата: Четверг, 11 Августа 2011, 23:49:50 | Сообщение # 17
10 уровень
Группа: Проверенные
Сообщений: 1894
Награды: 0
Репутация: 430
Блокировки:
мб, прост факт есть факт, там рандомизацией и не пахнет.

О нас думают плохо лишь те, кто хуже нас, а те кто лучше нас... Им просто не до нас.
My Project: Nindogatari
MAL
 

[DS]Дата: Четверг, 11 Августа 2011, 23:51:02 | Сообщение # 18
9 уровень
Группа: Проверенные
Сообщений: 1116
Награды: 0
Репутация: 527
Блокировки:
ну, я о чем

 

HexingДата: Пятница, 12 Августа 2011, 09:54:20 | Сообщение # 19
10 уровень
Группа: Проверенные
Сообщений: 1645
Награды: 1
Репутация: 432
Блокировки:
Quote (Faion)
Вот:

Code
library GetRndUnit
{
private unit array unit_array
private int index = 0

private void rnd()
{
unit_array[index] = GetEnumUnit()
index++
}

unit GetRndUnit(group g)
{
index = 0
ForGroup(g, function rnd)
return unit_array[GetRandomInt(0,index)]
}
}

Вауууу cJass :D спс


 

Igni2012Дата: Воскресенье, 14 Августа 2011, 00:13:17 | Сообщение # 20
3 уровень
Группа: Проверенные
Сообщений: 61
Награды: 0
Репутация: 3
Блокировки:
Quote (Faion)
library GetRndUnit
{
private unit array unit_array
private int index = 0

private void rnd()
{
unit_array[index] = GetEnumUnit()
index++
}

unit GetRndUnit(group g)
{
index = 0
ForGroup(g, function rnd)
return unit_array[GetRandomInt(0,index)]
}
}

Прошу перевести на простой JASS
 

lawsonДата: Воскресенье, 14 Августа 2011, 00:32:52 | Сообщение # 21
Группа: Проверенные
Сообщений: 3482
Награды: 0
Репутация: 974
Блокировки:
Quote (Igni2012)
Прошу перевести на простой JASS

Словами можно, берешь всех юнитов в группу потом перещелкиваешь по одному и каждого записываешь в перменную с индексом(номером юнита), и далее просто выбираешь методом тыка.

Добавлено (14-08-2011, 00:32)
---------------------------------------------
Faion, А мне нравится как выглядит cJASS, напоминает AS, но уже привык к обычному жассу.


Nic nie wiem bo mam chuj.
редактирую посты! ВСЕ!


Сообщение отредактировал lawson - Воскресенье, 14 Августа 2011, 00:33:09
 

Igni2012Дата: Воскресенье, 14 Августа 2011, 06:08:42 | Сообщение # 22
3 уровень
Группа: Проверенные
Сообщений: 61
Награды: 0
Репутация: 3
Блокировки:
Quote (lawson)
Словами можно, берешь всех юнитов в группу потом перещелкиваешь по одному и каждого записываешь в перменную с индексом(номером юнита), и далее просто выбираешь методом тыка.


Саму суть кода я понял, но не могу сделать в обычном JASS что бы переменные были только для Library... могу сделать только с глобальными...
 

FkoFFДата: Воскресенье, 14 Августа 2011, 07:36:08 | Сообщение # 23
Группа: Заблокированные
Сообщений: 4356
Награды: 1
Репутация: 1413
Блокировки:
Quote (Igni2012)
Саму суть кода я понял, но не могу сделать в обычном JASS что бы переменные были только для Library... могу сделать только с глобальными...

эээ

function GetRandUnit takes group g returns unit
local unit array u
local integer i=1
local group f=udg_Temp_Group

call GroupAddGroup(g,f)

loop
set u[i]=FirstOfGroup(g)
exitwhen u[i]==null
set i=i+1
call GroupRemoveUnit(u[i],f)
endloop

set bj_groupRandomCurrentPick=u[GetRandomInt(1,i)]
loop
exitwhen i==0
set u[i]==null
endloop
set f=null
return bj_groupRandomCurrentPick
endfunction


 

Форум о Warcraft 3 » Раздел для картостроителей » GUI / Jass » Случайный юнит из группы. (как...)
  • Страница 1 из 1
  • 1
Поиск:

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