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

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

Shredder, Да, я только учусь. Это прописывал. Но вылет мешает, опять бинд.

И если убрать :

if note and type(note) == "number" then

if not level.object_by_id(note) then

Тот-же вылет.

Ссылка на комментарий

ins33, может перестать уже биться о стену и принять то что дают? :)

Выше Shredder тебе дал абсолютно рабочую функцию, используй ее и все заработает как ты хотел без всяких вылетов.

Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на X-Ray) На базе модифицированного движка OGSR Engine.

Бывший мододел на X-Ray / Начинающий игродел на Unreal Engine. Программист.

AMD Ryzen 9 7950X (16 ядер, 5.7ГГц); RTX 3080; 128 ГБ DDR5; Arctic Liquid Freezer II-420; 3 ТБ SSD PCIe 4.0; 4ТБ HDD.

Ссылка на комментарий

Zander_driver, Согласен, но вылет стабилен!

\s.t.a.l.k.e.r\gamedata\scripts\bind_stalker.script:240: attempt to index global 'repair' (a nil value)

В строчке 240: repair.use_repkit().

 

Если к коду добавить:

if note and type(note) == "number" then

if not level.object_by_id(note) then

 

Девайс пропадает из инвентаря, а диалоговое окно ремонта не появляется.

Изменено пользователем ins33
Ссылка на комментарий
ins33, смешно уже смотреть на твои попытки что то сделать. У нас нету твоего кода и мы не экстрасенсы. Этот вылет связан с тем. что в скрипте есть ошибка синтаксиса, так что либо выкладывай весь код, который там написан, либо иди учи луа, хотя это как раз и надо было сделать с самого начала.

ТЧ 1.0004. SAP и Trans mod

github

Ссылка на комментарий
ins33, ты создал файл repair.script, содержащий твою функцию use_repkit()? Проверь все внимательно, где-то ошибка
Ссылка на комментарий

ins33, открываешь спойлер, выделяешь всё что там есть, делаешь Ctrl+C, потом в у себя в файле repair.script нажимаешь Ctrl+A, затем Ctrl+V.

И вообще там код нужно переделывать, т.к. можно напрямую заюзать колбэк на использование предмета, а не проверять после дропа, исчез ли предмет. Но тебе до этого, как до Луны пешком...

local note = nil

function use_repkit()
    if note and type(note) == "number" then
        if not level.object_by_id(note) then
            if db.actor:object("key") then
                level.start_stop_menu(interfase.ui_repair(), true) --запускаем меню
            end
            alife():create("repair_kit", db.actor:position(), db.actor:level_vertex_id(), db.actor:game_vertex_id(), db.actor:id())
        end
    note = nil
    end
    if note and type(note) == "userdata" then
        note = note:id()
    else
        note = nil
    end
end

function DeleteItem(iId) --добавляем функцию удаления предмета из инвентаря
    if iId then
        local seObj=alife():object(iId)
        if seObj then alife():release(seObj,true) 
        end
    end
end

function repair_wpn_1()
    local item_in_slot = db.actor:item_in_slot(1)
    local medusa = db.actor:object("af_medusa") --и везде добавим проверку на медузу
    if item_in_slot ~= nil and 1 > item_in_slot:condition() and medusa then 
       item_in_slot:set_condition(1)
       DeleteItem(medusa:id()) --удаляем артефакт после ремонта
    end    
end

function repair_wpn_2()
    local item_in_slot = db.actor:item_in_slot(2)
    local medusa = db.actor:object("af_medusa")
    if item_in_slot ~= nil and 1 > item_in_slot:condition() and medusa then 
    item_in_slot:set_condition(1)
    DeleteItem(medusa:id())
    end
end

function repair_armora()
    local item_in_slot = db.actor:item_in_slot(6)
    if item_in_slot ~= nil and 1 > item_in_slot:condition() then 
       item_in_slot:set_condition(1)
    end
end

--/ спавн предметов в инвентори
function spawn_item_in_inv(section,npc)
    if npc == nil then npc = db.actor end
    return alife():create(section, npc:position(), npc:level_vertex_id(), npc:game_vertex_id(), npc:id())
end


--функция вызываемая из дропа
function use_repair(obj)
if obj:section() == "repair_kit" then
note = obj --если наша вещь, то запомнить его userdata
end
end

 

 

Ссылка на комментарий

Доброго всем времени суток! Есть таймер который выводит на монитор сообщение. Собственно вопрос можно ли как то реализовать в реал-тайме (в самой игре находясь) обновление инфы выводимой на экран? К примеру я сворачиваю игру в файле пишу другую инфу получаемую а он её подгружает? Думал сделать INCLUDE но ничего так и не нашел по этому поводу. Или я путаю? в LUA вообще есть функция INCLUDE? И будет ли правильно если таймер будет каждый 10 секунд подгружать другой файл? и будет ли вообще подгружать? Заранее благодарен!

Изменено пользователем Z3oM
Ссылка на комментарий

Я хочу чтобы у меня была запущена игра и крутился так сказать цикл непосредственной в игре. (ОН уже крутит месагу в игре каждые 10 секунд) Что я хочу. Я хочу чтобы у меня При включенной игре обновлялась эта месага к прмеру у меня

 

local sactor = alife():actor()
local cactor = level.object_by_id(sactor.id)
cactor:give_game_news(
"Тест Сообщение\\nЯ вывожу его!!!1", 
"",
Frect():set(0,0,0,0),
1000,
8000
)

 

А получить пытаюсь не "Тест Сообщение\\nЯ вывожу его!!!1", а "Тест Сообщение я обновил сейчас!\\nЯ обновил его!!!1", НЕ выходя из игры. Такое возможно?

Ссылка на комментарий

Смотрите! Есть ТАЙМер =) зашел в игру, начало появляться сообщение с рисуночком и выводит текст как будто я получил задание, ну или тайник нашел, что та вроде этого. Оно вылазиет каждые 10 секунд со словами "Тест Сообщение\\nЯ вывожу его!!!1". Теперь, чтобы его поменять (текст) мне нужно изменить файл скрипта с этой строкой, сохранить и перезагрузить игру либо загрузиться. Вопрос собственно =) Возможно ли изменить сообщение не ПЕРЕЗАГРУЖАЯ ИГРУ? тоесть в РЕАЛ-ТАЙМЕ =) Какая функция отвечает за ПОДГРУЗКУ скрипта? Тоесть как в C++ мать его =) Есть inckude она подгружает в твой исходник функции. Есть такая же в LUA? Я хочу подгрузить в тело Таймера мессагу. И чтобы она подгружала её каждый раз? ) Или есть функция на подобе как у MEMO в obj pascal LoadFromFile +))) Я очень надеюсь что поможете =)

 

Добавлено через 1 мин.:

Shredder, В том та и прикол всего =) Нужно его подгружать динамически =)

Изменено пользователем Z3oM
Ссылка на комментарий

Делаешь файлик с сообщениями.

Парсишь его.

Набиваешь строки в таблицу.

Дальше крутишь в апдейте таблицу меняя индекс время от времени.

problem?

МЯСО!
Ссылка на комментарий

Кактус_523, loadfile или file:read()? Это не функции которые просто читают строки? Опа =) Сообразил =) Что если в переменную загнуть строки которые находятся в отдельном файле? И обновлять переменную в таймере.?

Все сообразил. Можно пример небольшой по использованию file:read()? Или ссылку на пост. Заранее спасибо!

 

C file:read() обращаться как с массивом строк или сплошной текст и Парс?

Изменено пользователем Z3oM
Ссылка на комментарий

Тебе не нужна никакая переменная.

Тебе не нужны всякие функции чтения файлов.

Это не те дроиды, которых вы ищите.

function Parser()
local hndl = io.open("bla_bla.file",'r')
local tab = {}
local rline
local i = 1
while true do
rline = hndl:read()
if rline== nil then
break
end
tab[i] = rline
i=i+1
end
return tab
end

Изменено пользователем Кактус_523
МЯСО!
Ссылка на комментарий

Новичок я в этом деле всмысле в LUA =) Описание функции данной есть? function _parser()

 

Спасибо +)

Изменено пользователем Z3oM
Ссылка на комментарий

ЭТО тебе поможет.

Ну просто не может не помочь. ;)

Изменено пользователем Кактус_523
МЯСО!
Ссылка на комментарий

Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий

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

Создать аккаунт

Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!

Зарегистрировать новый аккаунт

Войти

Есть аккаунт? Войти.

Войти
  • Недавно просматривали   0 пользователей

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

AMK-Team.ru

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