Рома
11.05.2018
13:40:19
Объясните, плз, почему разные последовательности получаются при выводе таблицы у этих вариантов?
тут, setAssay через table.insert добавляет элементы и у него, есдинственного, на выводе Assay правильная последовательность
Assay = lib_probability.setAssay({[2] = 5, [3] = 10, [4] = 1})
Assay = {["2"] = 5, ["3"] = 10, ["4"] = 1}
Assay = {[2] = 5, [3] = 10, [4] = 1}
table.insert делает массив, а {[2] = 5, [3] = 10, [4] = 1} это типа хеш
Particle
11.05.2018
13:41:30
Рома
11.05.2018
13:41:52
{1, 2, 3} так массив
https://learnxinyminutes.com/docs/lua/
Google
Philipp
11.05.2018
13:43:59
Таблица не массив
Particle
11.05.2018
13:44:05
Philipp
11.05.2018
13:44:14
Particle
11.05.2018
13:44:34
угу, спасибо, только у меня не доступен сайт =(
Рома
11.05.2018
13:44:47
роскомнадзор?
Philipp
11.05.2018
13:45:07
Ага
Particle
11.05.2018
13:45:12
нет
ничё не пишет, пишет что каннт риач
Насибуллин
11.05.2018
13:46:02
Рома
11.05.2018
13:48:20
кароч есть такой умный человек Роберту Иерусалимски
он подумал: вот в других языках есть массивы и хеши
а чтобы сделать самый няшный язык, нужно выкинуть все лишнее
по этому таблица: если есть первый элемент - значит массив и может быть хеш, если нет - хеш
и дырки среди эелементов это признак что массив закончился
Particle
11.05.2018
13:49:43
ясно, благодарю!
Philipp
11.05.2018
13:50:12
Карочи, массив – это хэш с последовательными цифровыми индексами без дырок в Луа
Google
Snusmumriken
11.05.2018
13:50:16
Держите массивы без дырок, используйте table.insert/table.remove.
Particle
11.05.2018
13:50:36
мне как раз дырявый ннада
Snusmumriken
11.05.2018
13:50:41
Зачем?
Если тебе действительно нужны дырявые массивы - ты скорее всего делаешь что-то не то.
Particle
11.05.2018
13:51:01
для определения loaded dice
Philipp
11.05.2018
13:51:13
Particle
11.05.2018
13:51:18
то
Philipp
11.05.2018
13:51:29
Зачем тебе массивы с дырками?
Snusmumriken
11.05.2018
13:51:34
Конкретно.
Particle
11.05.2018
13:51:38
для определения loaded dice
Snusmumriken
11.05.2018
13:51:41
Конкретно.
Particle
11.05.2018
13:51:56
эмитировать кость со смещенным центром
Snusmumriken
11.05.2018
13:51:56
Код приведи, обрамлённый тремя "`" с обеих сторон.
В каком смысле, и зачем тут таблицы, если "кость со смещённым центром" - это, как правило, функция?
Particle
11.05.2018
13:53:09
мне нужна возможность задавать вероятности для выпадения конкретных значений
Snusmumriken
11.05.2018
13:53:14
Возьми какую-нибудь косинусоиду, наложи её на прямую, кидай рандом от 0 до 1 со смещением, прогоняй через функцию и умножай на 6 с округлением.
Particle
11.05.2018
13:53:17
{[2] = 5, [3] = 10, [4] = 1}
Рома
11.05.2018
13:53:43
тогда можно остальным 0 поставить
Philipp
11.05.2018
13:54:45
Попробуй вот это
https://github.com/kennyledet/Algorithm-Implementations/blob/master/Weighted_Random_Distribution/Lua/Yonaba/weighted_random.lua
https://gist.github.com/TeoTwawki/87d5dab7e4515f4a2981df7ea8e0a798
Sergey
11.05.2018
13:55:29
я не знаю есть ли такая функция
local r = assert(xmlreader.from_string(xml))
while (r:read()) do
local leadingws = (' '):rep(r:depth())
if (r:node_type() == "element") then
io.write(("%s%s:"):format(leadingws, r:name(),r:next_node()))
while (r:move_to_next_attribute()) do
io.write((' %s=%q'):format(r:name(), r:value()))
end
io.write('\n')
end
end http://asbradbury.org/projects/lua-xmlreader/doc/ в либе не могу понять какая функция отвечает за чтение внутри блока ошибка выходит
Google
Particle
11.05.2018
13:55:55
Насибуллин
11.05.2018
13:56:30
reader:read()
Moves the position of reader to the next node in the stream. Returns true if the node was read successfully, false if there are no more nodes to be read.
@sergey_voip
Philipp
11.05.2018
13:57:59
Particle
11.05.2018
13:58:38
игру пытаюсь сделать =/
Snusmumriken
11.05.2018
14:00:04
ИЛИ есть ещё один способ который я напишу минут через десять-двадцать.
Philipp
11.05.2018
14:00:45
Snusmumriken
11.05.2018
14:00:52
Настольную
Насибуллин
11.05.2018
14:01:00
О, снус, а чо за тема рисовать функции через кривые безье
это типа удобно?
Dadaskis
11.05.2018
14:01:38
TextureManager = {
textures = {},
loadTexture = function(fileName, textureName, isOpaque)
print("loadTexture")
print(fileName .. " | " .. textureName .. " | " .. isOpaque)
local textureID = Engine.loadTexture(fileName, isOpaque)
textures[textureName] = textureID
print("loaded")
end,
getTexture = function(textureName)
return textures[textureName]
end
}
Почему textures[textureName] - ошибка? textureName = "Stone"
Snusmumriken
11.05.2018
14:02:07
Particle
11.05.2018
14:04:56
чёт я и это не понимаю. Надо про кривые почитать.
Sergey
11.05.2018
14:05:47
Насибуллин
11.05.2018
14:06:08
кто он?\
ты же сам сказал '''Можешь заюзать кривые безье для функции.'''
Dadaskis
11.05.2018
14:06:57
В моем коде ошибка или опять аномалии? ._.
TextureManager = {
textures = {},
loadTexture = function(fileName, textureName, isOpaque)
print("loadTexture")
print(fileName .. " | " .. textureName .. " | " .. isOpaque)
local textureID = Engine.loadTexture(fileName, isOpaque)
textures[textureName] = textureID
print("loaded")
end,
getTexture = function(textureName)
return textures[textureName]
end
}
Почему textures[textureName] - ошибка? textureName = "Stone"
Philipp
11.05.2018
14:09:16
Нихера не понял
Google
Philipp
11.05.2018
14:09:28
Давай всё с начала
И плюс я не уверен что так можно делать
У тебя textures находится внутри TextureManager
В функцию нужно либо явно передавать TextureManager.textures, либо вынести textures из TextureManager
Dadaskis
11.05.2018
14:11:34
Если его сделать local в файле то он исчезнет после исполнения файла?
Philipp
11.05.2018
14:11:47
TextureManager = {}
TextureManager.textures = {}
TextureManager.loadTexture = function(fileName, textureName, isOpaque)
print("loadTexture")
print(fileName .. " | " .. textureName .. " | " .. isOpaque)
local textureID = Engine.loadTexture(fileName, isOpaque)
TextureManager. textures[textureName] = textureID
print("loaded")
end,
TextureManager.getTexture = function(textureName)
return TextureManager.texture[textureName]
end
Чет типа такого
Короче, кури области видимости
Dadaskis
11.05.2018
14:14:07
Всё, благодарю за починку.
Philipp
11.05.2018
14:14:17
Да не за что
Насибуллин
11.05.2018
14:15:24
область видимости это
scope
Чтобы проще было в гугле вбить
Philipp
11.05.2018
14:15:25
Так делать не стоит
Лучше огранизовать в качестве класса (прототипа) с передачей через self
типа manager:getTexture(name)
И внутри уже self.textures[textureName]
@Dadaskis
Dadaskis
11.05.2018
14:16:39
Ок, перепишу позже.
Particle
11.05.2018
14:20:29
вкурил картинку, вроде. Но тут работает только с правильной последовательностью чисел?
Snusmumriken
11.05.2018
14:21:52
чёт я и это не понимаю. Надо про кривые почитать.
Карочи, альтернатива:
Готовишь таблицу типа
dices = {
[1] = 3,
[2] = 1,
[6] = 2,
[3] = 2
}
Преобразуешь её в равномерную таблицу:
function normalize(dices)
local res = {}
for k, v in pairs(dices) do
for i = 1, v do
res[#res + 1] = k
end
end
return res
end
В результате, нормализованная таблица начинает выглядеть вот так:
foo = normalize(dices) ==>
foo = {1, 1, 1, 2, 6, 6, 3, 3}
Берёшь из неё случайное число.
Google
Snusmumriken
11.05.2018
14:21:53
Всё.
Ну там,
function roll(dices)
return dices[math.random(#dices)]
end
Particle
11.05.2018
14:23:09
спасибо!)
Sergey
11.05.2018
14:23:12
local r = assert(xmlreader.from_string(xml))
while (r:read()) do
local leadingws = (' '):rep(r:depth())
if (r:node_type() == "element") then
— io.write(("%s%s:"):format(leadingws, r:name()))
while (r:move_to_next_attribute()) do
— io.write((' %s=%q'):format(r:nme(), r:value()))
— print("text",r:read("variant"))
print("DATA",r:name(),r:value(),"text",r:read_string("variant"),r:read())
end
— io.write('\n')
end
end
Philipp
11.05.2018
14:23:37
Карочи, альтернатива:
Готовишь таблицу типа
dices = {
[1] = 3,
[2] = 1,
[6] = 2,
[3] = 2
}
Преобразуешь её в равномерную таблицу:
function normalize(dices)
local res = {}
for k, v in pairs(dices) do
for i = 1, v do
res[#res + 1] = k
end
end
return res
end
В результате, нормализованная таблица начинает выглядеть вот так:
foo = normalize(dices) ==>
foo = {1, 1, 1, 2, 6, 6, 3, 3}
Берёшь из неё случайное число.
Какие умные слова
Насибуллин
11.05.2018
14:28:45
Sergey Kletsov, [11.05.18 17:23]
local r = assert(xmlreader.from_string(xml))
while (r:read()) do
local leadingws = (' '):rep(r:depth())
if (r:node_type() == "element") then
— io.write(("%s%s:"):format(leadingws, r:name()))
while (r:move_to_next_attribute()) do
— io.write((' %s=%q'):format(r:nme(), r:value()))
— print("text",r:read("variant"))
print("DATA",r:name(),r:value(),"text",r:read_string("variant"),r:read())
end
— io.write('\n')
end
end
вот так пеши
всмысле в `
три бектика
может поможет кто
Влад
11.05.2018
17:46:10
Да, я вот это нашёл и оно вполне подходит!
Dadaskis
11.05.2018
18:49:05
В Lua аналогов continue кроме goto нет?
Рома
11.05.2018
18:49:54
в Lua есть goto??
Tverd
11.05.2018
18:50:28
в 5.2 вроде появилась
Lucky
11.05.2018
18:56:19
используй goto, ничего другого нет.
работает в luajit и в Lua свежее 5.1
Philipp
11.05.2018
18:59:44
Можно костылём
Каким-нибудь условием
Типа if i == 1 then skip = true end