Добавлен doctal
Как сделать это на gui.С переменными понятно,но как дальше?
Local integer i = случайное число от 1 до 3
Local integer h = случайное число от 1 до 3
Local integer j = 0
Local integer k = взять кол-во юнитов в области locations[h]
Local location p
If k < 1 then
Set p = GetRectCenter( locations[h] )
Call createUnitAtLoc( buildings[i], player(0), p )
Loop
Exitwhen j > 3
Call createUnitAtLoc( units[i], player(0), p )
Set j = j + 1
Endloop
Call removeLocation(p)
Set p = null
Endif
Local integer h = случайное число от 1 до 3
Local integer j = 0
Local integer k = взять кол-во юнитов в области locations[h]
Local location p
If k < 1 then
Set p = GetRectCenter( locations[h] )
Call createUnitAtLoc( buildings[i], player(0), p )
Loop
Exitwhen j > 3
Call createUnitAtLoc( units[i], player(0), p )
Set j = j + 1
Endloop
Call removeLocation(p)
Set p = null
Endif
Принятый ответ
Sumert, хорошая идея
код
native UnitAlive takes unit id returns boolean
function CountAliveUnitsInGroupEnum takes nothing returns nothing
if UnitAlive(GetEnumUnit()) then
set bj_groupCountUnits = bj_groupCountUnits + 1
endif
endfunction
function CreateUnitsForPlayer takes player p returns nothing
local integer first = 1 //первый элемент массива
local integer last = 3 //последний элемент
local integer random = GetRandomInt(first, last) //случайное число от первого элемента до последнего, т.е. от 1 до 3
local integer units_index = GetRandomInt(1, 3) //случайное число от 1 до 3
local group g = CreateGroup() //создаем группу
local integer i = random //счетчик цикла
loop
call GroupEnumUnitsInRect(g, udg_locations[i], null) //добавляем в группу всех юнитов из области
set bj_groupCountUnits = 0 //обнуляем счетчик
call ForGroup(g, function CountAliveUnitsInGroupEnum) // считаем юнитов в группе
if bj_groupCountUnits == 0 then //проверяем сколько вышло
call CreateUnit(p, udg_buildings[units_index], GetRectCenterX(udg_locations[i]), GetRectCenterY(udg_locations[i]), 270.)
call CreateUnit(p, udg_units[units_index], GetRectCenterX(udg_locations[i]), GetRectCenterY(udg_locations[i]), 0.)
call CreateUnit(p, udg_units[units_index], GetRectCenterX(udg_locations[i]), GetRectCenterY(udg_locations[i]), 0.)
call CreateUnit(p, udg_units[units_index], GetRectCenterX(udg_locations[i]), GetRectCenterY(udg_locations[i]), 0.)
call CreateUnit(p, udg_units[units_index], GetRectCenterX(udg_locations[i]), GetRectCenterY(udg_locations[i]), 0.)
exitwhen true
else // если юнитов больше 0, тогда
call GroupClear(g) // очищаем группу
endif
set i = i + 1
if i > last then
set i = first
endif
exitwhen i == random
endloop
//избавляемся от утечек
call GroupClear(g)
call DestroyGroup(g)
set g = null
endfunction
Загруженные файлы
`
ОЖИДАНИЕ РЕКЛАМЫ...
Чтобы оставить комментарий, пожалуйста, войдите на сайт.
\\Ошибки
Ред. Кет
мне кажется зайти на какой-нибудь sourceforge и посмотреть как правильно функции пишутся не тяжело.
Sumert:
doctal, как советует Sumert, юзай "custom script" в GUI и вписывай туда мой код (каждую строку в новую функцию "custom scrip").
при создании юнитов впиши нужного игрока (для которого они создаются)
также я использовал переменные udg_locations, udg_buildings и udg_units - это твои массивы регионов, зданий и юнитов соответственно.
Ред. Ige
Ред. SсRealm
Ред. Ige
Ред. Sumert
а я лишь на пару дней пропал
Ige, а нафига нативку добавлять?
есть же обычная проверка на хп
она намного быстрее и лучше чем эта нативка
на будущее
вопросы из разряда "как использовать функцию" или "как печатать на клавиатуре" не принимаются