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

Скриптование


Svoboда

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

(изменено)

Добрый день. Как изменить логику(двери) скриптом? То есть есть файл enc_door и надо его заменить на enc_door_1. А точнее мне нужно скриптом дверь у Сидора открыть.

 

И: вот вызываю я функцию из функции(например:      Kober.outfit()  ). Но вызывать мне ее надо не из файла Kober.script, а из этого же файла в котором я вызываю. Например я вызываю из none.script. Мне тогда так и писать none.outfit()?


Правильно ли я создал таблицу?

 

 

T = {ammo_9x18_fmj

ammo_5.45x39_fmj

ammo_5.7x28_fmj}

 

function none ()
alife():create("T",db.actor:position(),db.actor:level_vertex_id(),db.actor:game_vertex_id(),db.actor:id())
end

 

 

Изменено пользователем Kober(BRUC)

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


Ссылка на сообщение
(изменено)

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


local pos_tbl={
set_01 = {lvid=261995, gvid=187, pos = -15.300880,5.824976,292.832062},
set_02 = {lvid=261995, gvid=187, pos = -13.200880,3.716976,292.832062},
set_03 = {lvid=261995, gvid=187, pos = -11.400880,1.908976,292.832062},
set_04 = {lvid=261995, gvid=187, pos = -19.100880,7.600976,292.832062}
}



function spawn_z_escape_1(section)
 local lv = math.random(pos_tbl[set_0 .. math.random(1,4)]["lvid"]) --Левел вертекс
 local gv = pos_tbl[set_0 .. math.random(1,4)]["gvid"] --Гэйм вертекс
 local ps = pos_tbl[set_0 .. math.random(1,4)]["pos"] --Position
  return alife():create(section, vector():set(ps),lv,gv) --Около фермы
end

function r_zombie_1()
  spawn_z_escape_1("zombie_new_k_1")
  spawn_z_escape_1("zombie_new_k_1")
end 

 

 

 

Ловлю такой вылет:

 

Expression : fatal error
Function : CScriptEngine::lua_error
File : E:\stalker\sources\trunk\xr_3da\xrGame\script_engine.cpp
Line : 73
Description :
Arguments : LUA error: ...adow of chernobyl\gamedata\scripts\new_script.script:13: attempt to concatenate global 'set_0' (a nil value)

 

 

Не знаю как это собственно исправлять. Как я понимаю вылет из-за того, что он не может рандомно вызвать одно из четырех "set_0*". Значит ошибка здесь: [set_0 .. math.random(1,4)]. Но вот как мне по-другому вызывать? :russian_ru: 

Изменено пользователем Kober(BRUC)

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


Ссылка на сообщение
(изменено)

@CRAZY_STALKER666, проблема то в том, что пользоваться мне этим не особо то и надо. А ваш велосипед я в интернете находил(иль похожий). А свой писать начал, так как интересно сделать что-то свое... Хоть это уже и есть, и даже лучше... но это то свое! :D

Изменено пользователем Kober(BRUC)

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


Ссылка на сообщение
(изменено)
Разберись, какие значения операндов

Как я понял нужно всего навсего изменить

set_0 

на:

"set_0"
Изменено пользователем Kober(BRUC)
  • Согласен 2

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


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

@Nazgool, т.е. между "x" "y" "z" нужно поставить”;”, так как если будет запятая, то он выберет только "x".

З.ы. я себя чувствую дураком... Как я сразу это не заметил составляя таблицу координат?..

 

@Zander_driver, а гейм-вертекс и левел-вертекс во всех четырех вариантах совпадают. :)

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


Ссылка на сообщение
(изменено)

@Nazgool, то есть это должно выглядеть так:

  return alife():create(section, vector():set(ps,ps[1],ps[2]),lv,gv) --Около фермы
Изменено пользователем Kober(BRUC)

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


Ссылка на сообщение
(изменено)

@Nazgool, координаты, левел и гейм-вертексы

Изменено пользователем Kober(BRUC)

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


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

@Nazgool, я когда говорил координаты я подразумевал ps - x; ps[1] - y; ps[2] - z. Но как я понял это не правильно. То есть нужно изменить таблицу на такую?: ...

 

А вот на какую что бы, я со своими скудными познаниями смог вызвать из этой таблицы и "x", и "y", и "z", из этой строки вызывались сразу три:

 local ps = pos_tbl["set_0" .. math.random(1,4)]["pos"] --Position

Значит нужно сделать так:

local pos_tbl={
set_01 = {lvid=261995, gvid=187, pos = -15.300880, pos[1] = 5.824976, pos[2] = 292.832062},
set_02 = {lvid=261995, gvid=187, pos = -13.200880, pos[1] = 3.716976, pos[2] = 292.832062},
set_03 = {lvid=261995, gvid=187, pos = -11.400880, pos[1] = 1.908976, pos[2] = 292.832062},
set_04 = {lvid=261995, gvid=187, pos = -19.100880, pos[1] = 7.600976, pos[2] = 292.832062}
}


...
 local ps = pos_tbl["set_0" .. math.random(1,4)]["pos"] --Position
 local ps[1] = pos_tbl["set_0" .. math.random(1,4)]["pos[1]"] --Position
 local ps[2] = pos_tbl["set_0" .. math.random(1,4)]["pos[2]"] --Position

Но вот проблема тогда появляется. Тогда рандомно из всех четырех "set_0*" будет вызываться разные координаты "x", "y" и "z".

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


Ссылка на сообщение
(изменено)

@Nazgool, а у меня ведь была идея сделать из pos еще одну таблицу... :(

Что я понял из вашего кода:

1) Вы гениальны.

2) благодаря этой строчке:

    local data = math.random(#pos_tbl) -- Один раз получить таблицу с координатами 

можно решить проблему вызова левел-вертексов, гейм-вертексов и координат x, y,z  из разных set_0*

3)  То что в вашем коде pos является таблицей, а pos[1] - x и т.д.

Изменено пользователем Kober(BRUC)

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


Ссылка на сообщение
(изменено)

@Nazgool, а чем же окончательный отличается? Вроде бы и этот прекрасно должен работать.

Я кажется понял отличие. Нет числа рандомного спавна. Точнее от сколки и до сколки зомби заспавнятся.

Изменено пользователем Kober(BRUC)

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


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

Добрый вечер. Есть у меня скрипт который можно включить и выключить. Делается это так:

lvidgvid		= false --true -включен; false - выключен

Как мне скриптом менять его значения? Т.е. как в настройках. Отключить или включить данный параметр всего лишь нажав на определенную область экрана. Область есть, а вот функции нет. 

 

А так же, как изменить параметр если он находится не в скрипте, а в .ltx файле? Например:

cheat_enable 	= 1 -- 1 включено; 0 выключено

Все так же как и в первом варианте. Нужно нажать на определенную область.

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


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

Добрый вечер. Был заспавнен предмет через скрипт, самым обычным способом:

alife():create(section,position,lv,gm)

Предмет в игре один. То есть не как хлеб или колбаса, которых много, а один. 

Как мне удалить этот предмет из игры?

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


Ссылка на сообщение
(изменено)

Добрый день. Могут ли скрипты взаимодействовать с инфо поршнями? Например(извиняюсь что в таком виде, с телефона сижу):

function функция_1()

if инфо_поршень then

функция_2()

else

функция_3()

end

 

function функция_3()

инфо_поршень

print("это пример")

end

 

function функция_2()

print("еще пример действия")

end

 

Или можно переменные выдавать за место инфо поршней?

 

Я пробовал в функции выдавать локальную переменную, но она работала только в этой функции.

 

З.ы. Модераторы, исправьте пожалуйста вид сообщения, если не сложно..

Изменено пользователем Kober(BRUC)

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


Ссылка на сообщение
@CRAZY_STALKER666, а без инфо поршней все таки можно? С помощью переменных например? Что бы не только в Сталкере работало.

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


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

А как заставить Lua работать с Русскими буквами? Вот код и он не работает:

local say = "Гора" -- Текст на Русском языке

local say = say:match("(.)$")

function as()
if say == "а" then
print(say)
end
end

as()

print(say)

Выдает вот такой символ: "�". А сама функция не работает

  • Согласен 1

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


Ссылка на сообщение
(изменено)

Добрый день. Где же я упустил ошибку?:

local number = 10
say_tbl_one_ru = {  -- Таблица с русскими ответами. 'Угадай число';
"Не верно. Чуть больше.",
"Не верно. Чуть меньше.",
"Вы угадали! Число равно:"
}
local complexity = 'esay' -- 'esay' - Легко; 'normal' - Срдне; 'hard' - Хардкор; 'random' - Рандомное число от 100, до 10000

function gl()
if complexity == 'esay' then
local cly = 25
elseif complexity == 'normal' then
local cly = 100
elseif complexity == 'hard' then
local cly = 1000
elseif complexity == 'random' then
local ran_data = math.randomseed(os.time())
local ran_data = math.random(100, 10000)
local cly = ran_data
local num = math.random(1, cly)
if number < num then
print(say_tbl_one_ru[1])
elseif number > num then
print(say_tbl_one_ru[2])
elseif number == num then
print(say_tbl_one_ru[3])
end
end
end

gl()
Изменено пользователем Kober(BRUC)

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


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

@Kirgudu, то что math.randomseed результат не возвращает - я знал. Но вот не знал что она действует только для следующей math.random. Вот и добовлял её в локальную переменную.

А отступ обще принятый? Или можно хоть сколько пробелов ставить? А навыков у меня не только в чтении мало...

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


Ссылка на сообщение
(изменено)

Добрый день. Есть у меня файл item.ltx. В нем есть секция: [New_eat]:bread. В секции есть значение item_create = перечисление, любых_секций, например, bread.

Так же есть скрипт. И в нем пустая таблица. Допустим local item_tbl = {}

 

Как мне заполнять эту таблицу значениями из item_create?

Изменено пользователем Kober(BRUC)

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


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

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

AMK-Team.ru

×
×
  • Создать...