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

[SoC] Ковыряемся в файлах


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

@Stalkersof , ага. Поэтому и полез уточнять, спрашивать. Наличие звука или партикла в игре можно отследить. Для постпроцесса, похоже, подобного функционала нет.

@Zander_driver , полезно. Мощная штука. Но в данном случае субъективное ощущение, что "из пушки по воробьям" - "городить огородами", чтобы просто отследить активность постпроцесса? Проще уж по старинке, level.add_pp_effector() -> trigger=true, level.remove_pp_effector() -> trigger=false, с проверкой по значению trigger.

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

Можно ли заспавнить предмет в инвентарь ГГ рандомно по классу?

Мне нужно что-то типо:

local misc = {
    [clsid.obj_medkit] = true,
    [clsid.obj_antirad] = true
}

function misc_test(obj)
    if misc[obj:clsid()] then

....

end

 

Или как-то так.

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

@Colder 

Ф-ции движка, которые спавнят объекты, принимают секцию конфига, а явной связи между движковым clsid и конфиговой секцией нет. А в чем собственно смысл, спавнить аптечку по clsid, а не по секции?

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

Да бы не перечислять все предметы которые надо заспавнить,получиться длинющий список! Я хотел сделать это по классу что бы по короче. Ну раз нельзя.... спасибо!

Другой вопрос спавню предметы и хочу получить сообщение о полученых, делаю так:

Скрытый текст

local partn = {
    "grenade_rgd5",
    "ammo_9x18_fmj",
    "bandage",
    "antirad",
    "stim_bad",
    "medkit"
}

 

function random_item(obj)

    for i = 1, 2 do

    local a = partn[math.random(table.getn(partn))]

    local sect = obj:section()
    local name = tostring(system_ini():r_string(obj:section(),"inv_name_short"))

    local text = "\\n%c[white]"..game.translate_string(tostring(name))

    alife():create(a, db.actor:position(), db.actor:level_vertex_id(), db.actor:game_vertex_id(), db.actor:id())
    db.actor:give_game_news(text, "ui_libery\\ui_coal_air_iconstotal", Frect():set(415,94,83,47), 0, 6000)
end
end

Но игра вылетает...

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

@Colder 

В конфигах есть три разных аптечки, но движковый clsid у них одинаковый. И так с оружием и многими другими предметами. Как будешь выбирать, что именно спавнить? Проще сделать таблицу секций, чем городить нехилый скриптовый огород, тем более, что удобной движковой ф-ции, которая может сопоставить clsid с секцией конфига - нет.

Насчет вылета - что пишет-то в логе?

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

@AndreySol

Скрытый текст

Expression    : fatal error
Function      : CInifile::r_string
File          : E:\stalker\sources\trunk\xrCore\Xr_ini.cpp
Line          : 352
Description   : <no expression>
Arguments     : Can't find variable inv_name_short in [dog_weak]

Пытаюсь доспавнить некоторые предметы Актору при срезании трофеев с мутантов!

А он почему то считает секцию самого мутанта

24 минуты назад, AndreySol сказал(а):

@Colder 

В конфигах есть три разных аптечки, но движковый clsid у них одинаковый. И так с оружием и многими другими предметами. Как будешь выбирать, что именно спавнить? Проще сделать таблицу секций, чем городить нехилый скриптовый огород, тем более, что удобной движковой ф-ции, которая может сопоставить clsid с секцией конфига - нет.

Насчет вылета - что пишет-то в логе?

А можешь пж привести пример как сделать таблицу секций или можно где то подглядеть?

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

@Colder 

Ну так уже есть твой-же пример:

local partn = {"grenade_rgd5",
    "ammo_9x18_fmj",
    "bandage",
    "antirad",
    "stim_bad",
    "medkit"}

 

function random_item(obj)

    local sect = partn[math.random(table.getn(partn))]
    local name = system_ini():r_string(sect, "inv_name_short")
    local text = "%c[white]" .. name
    alife():create(sect, db.actor:position(), db.actor:level_vertex_id(), db.actor:game_vertex_id(), db.actor:id())
    db.actor:give_game_news(text, "ui_libery\\ui_coal_air_iconstotal", Frect():set(415,94,83,47), 0, 6000)
end

В таком виде ф-ция будет спавнить один объект из таблицы partn и выводить сообщение с коротким названием этого объекта.

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

Пытаюсь создать тайник через скрипт с присвоением Сида

 

Скрытый текст

local id_inv_box_1 = 48802
function yashik_habar()
local soObj = alife():create("esc_tainik_ferma",vector():set(-421.03182983398,1.2585370540619,40.20238494873),152517,3660)                                                           
if soObj then
id_inv_box_1 = soObj.id
end
end

Тайник то спаунится, а вот сид не работает. Не пойму в чем ошибка?

Ссылка на комментарий
2 часа назад, Colder сказал(а):

Да все работает, только когда приходит смс то там вот что)

Посмотри что у тебя в конфигах предметов. А Именно в секции inv_name_short. Походу у тебя там строковые переменные. Варианта два либо в этой секции прописать нормальное название предмета либо по аналогии с остальными предметами внести строковый индификатор в конфиги.

Ссылка на комментарий
6 минут назад, Colder сказал(а):

@Stalkersof В том то и проблема что в конфингах все у меня нормально!

@Stalkersof Я так понимаю по другому ни как?

Почему все должно работать. У Тебя в скрипте берется название предмета из секции inv_name_short предмета. Что в этой секции то и выводиться в сообщении. Не знаю в чем проблема должно все работать.

Добавлено  Опричник,

Изучите "Правила цитирования". https://www.amk-team.ru/forum/topic/13514-obyavleniya/

Устное предупреждение.

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

@WinCap Заработало:

Скрытый текст

Вместо:

function random_partn_monsters_item(obj)
    local sect = partn[math.random(table.getn(partn))]
    local name = system_ini():r_string(sect, "inv_name_short")
    local text = "%c[ui_white]"..game.translate_string("st_body_knife_parts").."\\n"..name
    alife():create(sect, db.actor:position(), db.actor:level_vertex_id(), db.actor:game_vertex_id(), db.actor:id())
    db.actor:give_game_news(text, "ui\\ui_coal_air_iconstotal", Frect():set(166,517,83,47), 0, 5000)
end

 

Сделал так:

function random_partn_monsters_item(obj)
    local sect = partn[math.random(table.getn(partn))]
    local name = game.translate_string(system_ini():r_string(sect, "inv_name_short"))
    local text = "%c[ui_white]"..game.translate_string("st_body_knife_parts").."\\n"..name
    alife():create(sect, db.actor:position(), db.actor:level_vertex_id(), db.actor:game_vertex_id(), db.actor:id())
    db.actor:give_game_news(text, "ui\\ui_coal_air_iconstotal", Frect():set(166,517,83,47), 0, 5000)
end

 

Результат: https://yadi.sk/i/0agThJHHTEN5Wg

 

  • Нравится 2
Ссылка на комментарий

@yurv3, устойчивое ощущение, что так оно не взлетит. Тут либо с нетпакетами баловаться, наподобие такого или такого (там дальше есть про нюансы и подводные камни) + соответствующие модули обработки нетпакетов. Либо переползать на что-то модернизированное в плане бинарей (в X-Ray Extensions, например, добавлен метод прямой записи sid'а - assign_story_id()).

p.s: нужен всё-таки story_id или id? Несколько разные вещи.

Изменено пользователем Купер
  • Спасибо 1
Ссылка на комментарий

@yurv3 

Во первых, StoryID(sid) - свойство объекта "только для чтения", изменить его просто так не получится.

Во вторых, в примере кода явная белиберда - зачем объявлять переменную, а потом присваивать ей значение ID созданного объекта? Каким боком это относится к sid?

  • Спасибо 1
  • Согласен 1
Ссылка на комментарий

@AndreySol Я в скриптах полный ноль, использовал найденный на форумах.   Мне нужно не изменить а присвоить StoryID(sid) созданному через скрипт тайнику на Затоне.  Есть скрипты с присвоением sid НПС, монстрам или трупу. А вот к тайникам я такого не нашел.

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

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

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

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

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

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

Войти

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

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

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