
Рома
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