Добавлен scopterectus
Написал код для спауна волн крипов. Особенностью системы является то, что каждый раз на одних и тех же раундах могут спавнится разные типы крипов.
раскрыть
if math.random(1, 2) == 1 then
name [1] = 'L O B S T R O K K S'
tip [1] = ''
prepare [1] = 15.0
count [1] = 300
limit [1] = 60
spawnCamp [1] = {SpawnCircle.getWaterCamp()}
startSound[1] = CreateSound('Units\\Creeps\\Lobstrokkblue\\LobstrokkWhat1.wav', false, false, false, 10, 10, 'DefaultEAXON')
endSound [1] = CreateSound('Units\\Creeps\\Lobstrokkblue\\LobstrokkDeath1.wav', false, false, false, 10, 10, 'DefaultEAXON')
pool [1] = CreateUnitPool()
UnitPoolAddUnitType(pool[1], FourCC('nlpr'), 60.0)
UnitPoolAddUnitType(pool[1], FourCC('nlpd'), 50.0)
UnitPoolAddUnitType(pool[1], FourCC('nltc'), 40.0)
UnitPoolAddUnitType(pool[1], FourCC('nlds'), 30.0)
UnitPoolAddUnitType(pool[1], FourCC('nlsn'), 20.0)
UnitPoolAddUnitType(pool[1], FourCC('nlkl'), 10.0)
else
name [1] = 'W O L V E S'
tip [1] = ''
prepare [1] = 15.0
count [1] = 300
limit [1] = 120
spawnCamp [1] = {SpawnCircle.getLeftCamp(), SpawnCircle.getMainCamp(), SpawnCircle.getRightCamp()}
startSound[1] = CreateSound('Units\\Orc\\Spiritwolf\\SpiritWolfYes3.wav', false, false, false, 10, 10, 'DefaultEAXON')
endSound [1] = CreateSound('Units\\Creeps\\Direwolf\\DireWolfDeath1.wav', false, false, false, 10, 10, 'DefaultEAXON')
pool [1] = CreateUnitPool()
UnitPoolAddUnitType(pool[1], FourCC('nwlt'), 30.0)
UnitPoolAddUnitType(pool[1], FourCC('nwlg'), 20.0)
UnitPoolAddUnitType(pool[1], FourCC('nwld'), 10.0)
end
if math.random(1, 2) == 1 then
name [2] = 'T R O L L S'
tip [2] = ''
prepare [2] = 15.0
count [2] = 300
limit [2] = 120
spawnCamp[2] = {SpawnCircle.getLeftCamp(), SpawnCircle.getMainCamp(), SpawnCircle.getRightCamp()}
startSound[2] = nil
endSound [2] = nil
pool [2] = CreateUnitPool()
UnitPoolAddUnitType(pool[2], FourCC('nftr'), 60.0)
UnitPoolAddUnitType(pool[2], FourCC('nftb'), 50.0)
UnitPoolAddUnitType(pool[2], FourCC('nfsp'), 40.0)
UnitPoolAddUnitType(pool[2], FourCC('nftt'), 30.0)
UnitPoolAddUnitType(pool[2], FourCC('nftk'), 20.0)
UnitPoolAddUnitType(pool[2], FourCC('nfsh'), 10.0)
else
name [2] = 'O G R E S'
tip [2] = 'Огры спокойно могут надавать пиздю*ей неосторожному игроку, так что будьте керифул.'
prepare [2] = 15.0
count [2] = 50
limit [2] = 120
spawnCamp[2] = {SpawnCircle.getLeftCamp(), SpawnCircle.getMainCamp(), SpawnCircle.getRightCamp()}
startSound[2] = nil
endSound [2] = nil
pool [2] = CreateUnitPool()
UnitPoolAddUnitType(pool[2], FourCC('nogr'), 40.0)
UnitPoolAddUnitType(pool[2], FourCC('nomg'), 30.0)
UnitPoolAddUnitType(pool[2], FourCC('nogm'), 20.0)
UnitPoolAddUnitType(pool[2], FourCC('nogl'), 10.0)
end
Но такой код абсолютно не читабелен. Я его хочу переделать на следующий вариант:
раскрыть
do
Creep = {}
local name = {}
local tip = {}
local prepare = {}
local count = {}
local limit = {}
local spawnCamp = {}
local startSound = {}
local endSound = {}
local pool = {}
Creep.wolves = {}
function Creep.wolves.initialize()
Creep.wolves.round = 1
Creep.wolves.name = 'W O L V E S'
Creep.wolves.tip = ''
Creep.wolves.prepare = 15.0
Creep.wolves.count = 300
Creep.wolves.limit = 120
Creep.wolves.spawnCamp = {SpawnCircle.getLeftCamp(), SpawnCircle.getMainCamp(), SpawnCircle.getRightCamp()}
Creep.wolves.startSound = CreateSound('Units\\Orc\\Spiritwolf\\SpiritWolfYes3.wav', false, false, false, 10, 10, 'DefaultEAXON')
Creep.wolves.endSound = CreateSound('Units\\Creeps\\Direwolf\\DireWolfDeath1.wav', false, false, false, 10, 10, 'DefaultEAXON')
Creep.wolves.pool = CreateUnitPool()
UnitPoolAddUnitType(Creep.wolves.pool, FourCC('nwlt'), 30.0)
UnitPoolAddUnitType(Creep.wolves.pool, FourCC('nwlg'), 20.0)
UnitPoolAddUnitType(Creep.wolves.pool, FourCC('nwld'), 10.0)
end
function Creep.initialize()
for _, value in pairs(Creep) do
if type(value) == "table" then
end
end
end
end
Но я никак не могу придумать инициализацию подобного кода. Нужно, чтобы в переменных name[1], tip[1], count[1], limit[1] был записано рандомное значение из Creep.wolves или Creep.lobstrokks. А в name[2], tip[2] ... было записано рандомное значение из Creep.trolls или Creep.lobstrokks.
Принятый ответ
quq_CCCP, у меня крипы спавнятся не из одной точки. Крипы спавнятся в лагерях. В каждом лагере есть несколько точек спавна. При каждом спавне выбирается рандомная точка спавна из рандомного лагеря. Так что с реалистичностью у меня нет проблем.
local data = {}
for _, value in pairs(Creep) do
if type(value) == "table" and value.round ~= nil then
if data[value.round] == nil then
data[value.round] = {}
end
table.insert( data[value.round], value )
end
end
for key, value in pairs(data) do
local i = math.random(1, #value)
name [key] = value[i].name
stylizedName[key] = value[i].stylizedName
tip [key] = value[i].tip
prepare [key] = value[i].prepare
count [key] = value[i].count
limit [key] = value[i].limit
spawnCamp [key] = value[i].spawnCamp
startSound [key] = value[i].startSound
endSound [key] = value[i].endSound
pool [key] = value[i].pool
BJDebugMsg('Round ' .. key .. ': ' ..name[key])
end
`
ОЖИДАНИЕ РЕКЛАМЫ...
Чтобы оставить комментарий, пожалуйста, войдите на сайт.
Так же самый читайбельный и настраиваемый вариант - ГУИ ) Смотрим конфетные войны близзардов.
Ред. scopterectus