Перейти к контенту

Язык Lua. Общие вопросы программирования


Malandrinus

Рекомендуемые сообщения

Добрый вечер.

Я вот пытаюсь разобраться с nil.

Код(пример кода):

function my_function()
if (db.actor ~= nil) then
local obj = alife():create("предмет", db.actor:position(), db.actor:level_vertex_id(), db.actor:game_vertex_id(), db.actor:id()) 
end 

Как я понимаю вторая строка проверяет ГГ - это актор или нет? Если нет(я так решил потому что nil - это false), то спавним в инвентарь ГГ предмет. 

Вопросы:

1) Правильно ли я понял?

2) Зачем нужна эта проверка на nil?

Поделиться этим сообщением


Ссылка на сообщение

@dsh, а можно тогда пожалуйста объяснить в каких случаях нужна проверка на nil? Я вот понять все не могу.

Поделиться этим сообщением


Ссылка на сообщение

Добрый день.

Есть у меня допустим такой код:

function grenage ()
alife():create("grenade_f1",db.actor:position(),db.actor:level_vertex_id(),db.actor:game_vertex_id(),db.actor:id())
alife():create("grenade_rgd5",db.actor:position(),db.actor:level_vertex_id(),db.actor:game_vertex_id(),db.actor:id()) 
end

 И таких функций несколько. Только создается разные предметы. Например место гранат аптечки и бинты. Здесь как я понимаю переменная local не подойдет. Так как функций несколько, а local ставится только перед одной функцией(как я понял). В целом я хочу упростить эти функции. Т.е. вместо "db.actor:position(),db.actor:level_vertex_id(),db.actor:game_vertex_id(),db.actor:id())" написать так(в начале скрипта): 

position = db.actor:position(),db.actor:level_vertex_id(),db.actor:game_vertex_id(),db.actor:id())

Ну, а потом уже функции в которых заместо "db.actor:position(),db.actor:level_vertex_id(),db.actor:game_vertex_id(),db.actor:id())" будет писаться просто position. Вот так:

position = db.actor:position(),db.actor:level_vertex_id(),db.actor:game_vertex_id(),db.actor:id())


function grenage()
alife():create("grenade_f1",position
alife():create("grenade_rgd5",position
end

function med()
alife():create("bandage",position
alife():create("medkit",position
end

 Будет ли все это дело работать. И еще на последок. Если я сделаю отдельный скрипт где будут "тонны" этих сокращений, можно ли тогда их вызывать. Если да, то как?

Поделиться этим сообщением


Ссылка на сообщение

Добрый вечер. Потихоньку изучая lua столкнулся с такой проблемой:

при вызове этого(не в сталкере):

number_tbl = {
1,
2,
3,
4,
5,
6,
7,
8,
9}

data = math.random(#number_tbl)

print(data)

Всегда получается число "8". Мне интересно, почему?

Поделиться этим сообщением


Ссылка на сообщение

Есть "ужасный" код: 

random = true

say_tbl = {
"Текст1",
"Текст2",
"Текст3",
"Текст4",
"Текст5",
"Текст6",
"Текст7",
"Текст8",
"Текст9",
"Текст10"}

data = math.randomseed(os.time())
data = math.random(1,10)

if random and data == 1 then
print(say_tbl[1])
elseif random and data == 2 then
print(say_tbl[2])
elseif random and data == 3 then
print(say_tbl[3])
elseif random and data == 4 then
print(say_tbl[4])
elseif random and data == 5 then
print(say_tbl[5])
elseif random and data == 6 then
print(say_tbl[6])
elseif random and data == 7 then
print(say_tbl[7])
elseif random and data == 8 then
print(say_tbl[8])
elseif random and data == 9 then
print(say_tbl[9])
elseif random and data == 10 then
print(say_tbl[10])
end 

 

 

 

Хотел сделать его попроще и изменил вот на это:

random = true

say_tbl = {
"Текст1",
"Текст2",
"Текст3",
"Текст4",
"Текст5",
"Текст6",
"Текст7",
"Текст8",
"Текст9",
"Текст10"}

data = math.randomseed(os.time())
data = math.random(#say_tbl)

if random == true 
or random == nil then
print(data)
end 

 

 

 

Но вот беда. Вместо текста появляются числа от одного до десяти. Как это дело исправить? 

Поделиться этим сообщением


Ссылка на сообщение

Добрый день.

Есть такой код: 

language = eng -- ru or eng
random_shpare = true -- Шар вкл/выкл

say_tbl_ru = {  -- Таблица с русскими ответами
"да",
"нет",
"возможно",
"не знаю"}

say_tbl_eng = { -- Таблица с английскими ответами
"Yes",
"No",
"Possible",
"Don't know"}

function random_shpare_language() 
if language == ru then -- Если глобальная переменная language равна ru
sphare_ru() -- То вызываем эту функцию
elseif language == eng then -- Если глобальная переменная language равна eng
sphare_eng() -- То вызываем эту
end
end

data_ru = math.randomseed(os.time())
data_ru = math.random(#say_tbl_ru)

data_eng = math.randomseed(os.time())
data_eng = math.random(#say_tbl_eng)

function sphare_ru() 
if random_shpare == true -- Если Шар включен(true)
or random_shpare == nil then -- Или равен любому другому значению кроме false
print(say_tbl_ru[data_ru]) -- То выводим данный текст
end 
end

function sphare_eng() 
if random_shpare == true -- Если Шар включен(true)
or random_shpare == nil then -- Или равен любому другому значению кроме false
print(say_tbl_eng[data_eng]) -- То выводим данный текст
end 
end

random_shpare_language() 

 

 

 

Сам код работает, но вот смена языка нет. Всегда текст появляется на русском.

Поделиться этим сообщением


Ссылка на сообщение

Добрый день. Написал такой код:

 

all_tbl = {

q,

w,

e,

r,

t,

y,

u,

i,

o,

p,

a,

s,

d,

f,

g,

h,

j,

k,

l,

z,

x,

c,

v,

b,

n,

m,

1,

2,

3,

4,

5,

6,

7,

8,

9,

0}

 

local on = true

 

function zoz()

if on then

oz()

end

end

 

function oz()

for fg = 1, 15 do

math.randomseed(os.time())

random = math.random(#all_tbl)

print(all_tbl[random])

end

end

 

zoz()

 

Но значения берутся не из таблицы, а равны nil. В чем же проблема?

Поделиться этим сообщением


Ссылка на сообщение

Добрый день. Возможно ли узнать последнюю букву из:

local one = zero

 

В данном случае эта буква "o". Слово может быть любое. Соответственно и количество букв в слове может быть любое(относительно). Важна ли информация из последнего сообщениями или нет - не знаю. На всякий случай.

Поделиться этим сообщением


Ссылка на сообщение

Добрый день. Есть переменная и таблица заполненная значениями. Размер таблицы 26 элементов.
Мне нужно проверить равно ли значение переменной значению элементов таблицы. Проверить с помощью конструкции if. Элементов аж 26, мне нужно все элементы перебирать или есть какой-то более простой способ?
На ум приходит только это:
 

for i=1, #tbl_name do
  if (tbl_name[i] == variable_name) then
    -- Наши действия...
    -- Остановили цикл:
    break
  end
end
Изменено пользователем Kober(BRUC)

Поделиться этим сообщением


Ссылка на сообщение

Добрый день!

Можно ли силами Lua подключиться к процессу и в определённый адрес записать значение?

Поделиться этим сообщением


Ссылка на сообщение
  • Недавно просматривали   0 пользователей

    • Ни один зарегистрированный пользователь не просматривает эту страницу.
×
×
  • Создать...