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

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

Тема для обсуждения скриптов всего и всех в серии игр STALKER.


Задавая вопрос (!):
1. Внимательно изучите суть вопроса. Вопрос должен соответствовать выбранной Вами темы. Это поможет сохранить порядок и читабельность темы, а также облегчит поиск и понимание сего;
2. Изучите то, что уже есть в теме (пролистайте "руками", воспользуйтесь поиском на форуме);
3. Изучите информацию которая может вам помочь:

 
 

Stalkerin. Там есть много хороших статей касательно данной темы.
Уроки по модостроению. Есть рабочие примеры готовых скриптов различного назначения.

 

Справочное руководство по языку Lua 5.1
https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/ru
Справочник по функциям и классам. Собрано много информации по функциям и классам, не всем, но по основные сведения предоставлены.

4. Дабы не превращать обсуждение в "кашу" разной информативной направленности, задавайте несколько вопросов по порядку (в разных постах) после того, как получите ответ на предыдущий вопрос;
5. "Спасибо" и тому подобное - будьте так любезны в ПМ. Если не любите писать в ПМ, в конце вопроса напишите фразу: "Заранее спасибо!" - или что-то в этом духе;
6. ПОЖАЛУЙСТА! Указывайте, для какой игры Вам необходима информация (ТЧ, ЧН, ЗП), если стоит мод - укажите название мода;
7. Если Вы что-то сделали и результат не такой, какой Вами задумывался, то, пожалуйста, приводите коды которые Вы изменяли/писали целиком! Это поможет другим правильно ответить на Ваш вопрос, а также оградит Вас от лишней писанины.
8. Оформляйте сообщение. Пользуйтесь тегами для того, чтобы отделить код от текста. Пишите грамотно - ПОЛЬЗУЙТЕСЬ ЗНАКАМИ ПРЕПИНАНИЯ.
9. И помните: «Правильно заданный вопрос – половина ответа».

 

Какие вопросы следует задавать, а какие нет...

 

Задавайте вопросы, которые касаются непосредственно скриптов и их работы, т.е. Вы что-то делаете, а у Вас что-то не получается, при этом у Вас на руках должен быть хотя бы какой-то код, свидетельствующий о Вашей причастности к вопросу.

 

Вопросы которые будут удалятся, следовательно их задавать не нужно:
-- Где находится та или иная функция?
Для ответа используем поиск по словам среди файлов оригинальной игры или мода, если объект поиска относится к нему, при помощью программы, которая Вам наиболее симпатизирует;
-- Как сделать что-то/то-то?
С подобными вопросами, либо в "ковырялки", где Вам вероятнее всего так же не ответят, либо выдвигаем мысли, подкреплённые теорией, практикой (идеальный вариант) и здравым рассудком;
-- Вопросы со смыслом: "сделайте", "совместите" и подобными глаголами повелительного наклонения.
-- К тому же удалению будут подвергаться вопросы, в которых масштабно не используются теги, для отделения кода и цитат от основного текста, а также не вписан в спойлер код размером превышающие семь строк.
Ответ на возможно возникший вопрос: В какую тему можно обратиться по поводу логики и спавна объектов?
В тему "ковырялок" соответствующей версии игры, для которой Вы задаёте вопрос.

И последнее: очень рекомендовано к прочтению Правила форума
 


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

Здравствуйте, заметил что в повелителе зоны во вкладке "локации" прописаны все смарты сталкеров и их описания написаны как сталкеры в диалоге пишут, захотел сделать так что бы в списке локации были только сами локации: скадовск, янов, внз круг и тд...

нашёл функцию которая за это отвечает

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

-- Локации
if n=="2" then
mode = "level"

local tbl
local name
tbl = god_tbl.god_smart_table

if db.actor~=nil then
for i=1, 65535 do
    local obj = alife():object(i)
          if obj~=nil then
          if obj:section_name()=="smart_terrain" then
             local s_name = game.translate_string("st_stalker_"..obj:name())

             if s_table[s_name]~=nil then s_name = s_table[s_name] end

           self:AddItemToList(s_name, i)
            end
          end
end
end

end

 

путём логических размышлений я понял что эта функция берёт все секции смартов из алайфов и переводит он их соответственно 

изменил строчку перевода 

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

 local s_name = game.translate_string("st_"..obj:name().."_name")

теперь переводит нормально основные места, но в списке есть и другие места которые попросту не переводятся, а ещё заметил что есть таблица с этими основными местами, но как я понял она не используется(точнее их две)

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

god_smart_table = {
["zat_b100"]  =  "st_zat_b100_name",
["zat_b104"]  =  "st_zat_b104_name",
["zat_b38"]  =   "st_zat_b38_name",
["zat_b40"]  =   "st_zat_b40_name",
["zat_b56"]  =   "st_zat_b56_name",
["zat_b5"]  =    "st_zat_b5_name",
["zat_a2"]  =    "st_zat_a2_name",
["zat_b20"]  =   "st_zat_b20_name",
["zat_b53"]  =   "st_zat_b53_name",
["zat_b101"]  =  "st_zat_b101_name",
["zat_b106"]  =  "st_zat_b106_name",
["zat_b7"]  =    "st_zat_b7_name",
["zat_b14"]  =   "st_zat_b14_name",
["zat_b52"]  =   "st_zat_b52_name",
["zat_b39"]  =   "st_zat_b39_name",
["zat_b33"]  =   "st_zat_b33_name",
["zat_b18"]  =   "st_zat_b18_name",
["zat_b54"]  =   "st_zat_b54_name",
["zat_b12"]  =   "st_zat_b12_name",
["zat_b28"]  =   "st_zat_b28_name",
["zat_b103"]  =  "st_zat_b103_name",
["jup_b1"]  =    "st_jup_b1_name",
["jup_b46"]  =   "st_jup_b46_name",
["jup_b202"]  =  "st_jup_b202_name",
["jup_b211"]  =  "st_jup_b211_name",
["jup_b200"]  =  "st_jup_b200_name",
["jup_b19"]  =   "st_jup_b19_name",
["jup_a6"]  =    "st_jup_a6_name",
["jup_b25"]  =   "st_jup_b25_name",
["jup_b6"]  =    "st_jup_b6_name",
["jup_b205"]  =  "st_jup_b205_name",
["jup_b206"]  =  "st_jup_b206_name",
["jup_b32"]  =   "st_jup_b32_name",
["jup_a10"]  =   "st_jup_a10_name",
["jup_b209"]  =  "st_jup_b209_name",
["jup_b208"]  =  "st_jup_b208_name",
["jup_a12"]  =   "st_jup_a12_name",
["jup_b212"]  =  "st_jup_b212_name",
["jup_b9"]  =    "st_jup_b9_name",
["jup_b201"]  =  "st_jup_b201_name",
["jup_a9"]  =    "st_jup_a9_name",
["pri_a28"]  =   "st_pri_a28_name",
["pri_b36"]  =   "st_pri_b36_name",
["pri_b303"]  =  "st_pri_b303_name",
["pri_b301"]  =  "st_pri_b301_name",
["pri_a17"]  =   "st_pri_a17_name",
["pri_b306"]  =  "st_pri_b306_name",
["pri_a16"]  =   "st_pri_a16_name",
["pri_a25"]  =   "st_pri_a25_name",
["pri_b35"]  =   "st_pri_b35_name",
["pri_a21"]  =   "st_pri_a21_name",
["pri_b304"]  =  "st_pri_b304_name",
["pri_a18"]  =   "st_pri_a18_name"
}

 

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


god_smart_table_full = {
{"zat_b55",   "st_zat_b55_name"},
{"zat_b100",  "st_zat_b100_name"},
{"zat_b104",  "st_zat_b104_name"},
{"zat_b38",   "st_zat_b38_name"},
{"zat_b40",   "st_zat_b40_name"},
{"zat_b56",   "st_zat_b56_name"},
{"zat_b5",    "st_zat_b5_name"},
{"zat_a2",    "st_zat_a2_name"},
{"zat_b20",   "st_zat_b20_name"},
{"zat_b53",   "st_zat_b53_name"},
{"zat_b101",  "st_zat_b101_name"},
{"zat_b106",  "st_zat_b106_name"},
{"zat_b7",    "st_zat_b7_name"},
{"zat_b14",   "st_zat_b14_name"},
{"zat_b52",   "st_zat_b52_name"},
{"zat_b39",   "st_zat_b39_name"},
{"zat_b33",   "st_zat_b33_name"},
{"zat_b18",   "st_zat_b18_name"},
{"zat_b54",   "st_zat_b54_name"},
{"zat_b12",   "st_zat_b12_name"},
{"zat_b28",   "st_zat_b28_name"},
{"zat_b103",  "st_zat_b103_name"},
{"jup_b1",    "st_jup_b1_name"},
{"jup_b46",   "st_jup_b46_name"},
{"jup_b202",  "st_jup_b202_name"},
{"jup_b211",  "st_jup_b211_name"},
{"jup_b200",  "st_jup_b200_name"},
{"jup_b19",   "st_jup_b19_name"},
{"jup_a6",    "st_jup_a6_name"},
{"jup_b25",   "st_jup_b25_name"},
{"jup_b6",    "st_jup_b6_name"},
{"jup_b205",  "st_jup_b205_name"},
{"jup_b206",  "st_jup_b206_name"},
{"jup_b32",   "st_jup_b32_name"},
{"jup_a10",   "st_jup_a10_name"},
{"jup_b209",  "st_jup_b209_name"},
{"jup_b208",  "st_jup_b208_name"},
{"jup_a12",   "st_jup_a12_name"},
{"jup_b212",  "st_jup_b212_name"},
{"jup_b9",    "st_jup_b9_name"},
{"jup_b201",  "st_jup_b201_name"},
{"jup_a9",    "st_jup_a9_name"},
{"pri_a28",   "st_pri_a28_name"},
{"pri_b36",   "st_pri_b36_name"},
{"pri_b303",  "st_pri_b303_name"},
{"pri_b301",  "st_pri_b301_name"},
{"pri_a17",   "st_pri_a17_name"},
{"pri_b306",  "st_pri_b306_name"},
{"pri_a16",   "st_pri_a16_name"},
{"pri_a25",   "st_pri_a25_name"},
{"pri_b35",   "st_pri_b35_name"},
{"pri_a21",   "st_pri_a21_name"},
{"pri_b304",  "st_pri_b304_name"},
{"pri_a18",   "st_pri_a18_name"}
}
 

и вот то в чём вопрос как сделать так чтоб этот скрипт использовал эту таблицу?  что бы не было вот этих лишних мест

https://disk.yandex.ru/i/mK-Tbn7hWt_a2A - скрин

«Если долго мучиться, что-нибудь получится»
Охотник за артефактами|Crow Game Killer
img.php?nick=Pavel2000&sert=2&text=t0

Ссылка на комментарий
18.02.2024 в 00:17, kenguru сказал:

Да, это конечно понятно, однако трабла в том, что АФФТары игры в большинстве случаев не предусмотрели очистку от ненужных использованных инфопоршней

Представляю, сколько сюжетных диалогов по новой появятся! Большинство диалогов на инфопорциях завязано.

 

Рус, неужели у тебя все вылеты на переполнение стека завязаны? Битье сейвов четко говорит о переполнении стоража актора.

Изменено пользователем AndrewMor
  • Нравится 1
  • Согласен 1

Сталкер - наше всё!

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

Битье сейвов четко говорит о переполнении стоража актора.

Используйте script_vars_storage OGSR, и будет вам счастье. Оно не переполняется никогда.

А вообще-то смешались в кучу кони, люди... переполнение стека и переполнение "стоража" (нетпакета?) актора - как бы тоже совершенно разные и никак не связанные вещи...

Шайтан вас разберет, а я больше без конкретных логов и/или конкретного кода, зря писать ничего не буду.

8 часов назад, Pavel_2000 сказал:

как сделать так чтоб этот скрипт использовал эту таблицу?

Использовать переменную tbl в коде.

  • Согласен 1

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

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

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

Ссылка на комментарий
8 минут назад, Zander_driver сказал:

Использовать переменную tbl в коде.

я понимаю, но не понимаю как её использовать куда вставить или как, гуглил про таблицы курил lua но так и не понял

в итоге я сам разобрался) 

нашёл в инете функцию проверки есть ли в массиве определенное значение

Скрытый текст
function check_table(arg, table, mode)
    if mode == 1 then -- Если нужен поиск по ключу
        for k, v in pairs(table) do
            if k == arg then
                return true
            end
        end
    else -- Если нужен поиск по значению
        for k, v in pairs(table) do
            if v == arg then
                return true
            end
        end
    end
    return false
end

ну и сами проверки

Скрытый текст
-- Проверка ключа:
if check_table('First', red, 1) then -- 1 аргумент - Слово для поиска, 2 аргумент - Твоя таблица, 3 аргумент - режим.
    print('Найден ключ!')
end

-- Проверка значения:
if check_table('Hello', blue, 2) then -- 1 аргумент - Слово для поиска, 2 аргумент - Твоя таблица, 3 аргумент - Режим.
    print('Найдено значение!')
end

ну и сделал вот так

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

if obj:section_name()=="smart_terrain" and check_table(obj:name(), tbl, 1) then

и всё получилось. 

https://disk.yandex.ru/i/92E8xUoaHDYU9w - скрин

 

  • Нравится 1

«Если долго мучиться, что-нибудь получится»
Охотник за артефактами|Crow Game Killer
img.php?nick=Pavel2000&sert=2&text=t0

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

Привет всем!

 

12 часов назад, Zander_driver сказал:

переполнение стека и переполнение "стоража" (нетпакета?) актора - как бы тоже совершенно разные и никак не связанные вещи...

Да, это я сдуру их в одну кучу валю. Конечно речь всё время шла о pstor

Звиняйте - мы академиев не кончали :biggrin:

12 часов назад, Zander_driver сказал:

script_vars_storage

вот с этого места можно немного поподробней? А то ни сном, ни духом..:unknw:

Изменено пользователем kenguru

С уважением, КенГуру ;)

Пилим S.T.A.L.K.E.R UZI

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

pstor

В OGSR вообще не надо использовать.

2 часа назад, kenguru сказал:

А то ни сном, ни духом

А как же вы мод на движок OGSR пересаживали, OGSR-Wiki не читая? И, если не читали - то зачем пересаживали? :) (Там же в вики все реальные резоны и причины для этого написаны...)

Всегда, когда я даю подсказки людям в виде пары слов, то это именно ключевые слова, по которым уже можно найти то что надо. Т.е. заходим в OGSR-Wiki, там вводим в поиск то самое, заветное слово script_vars_storage, и радуемся :)

2 часа назад, kenguru сказал:

поподробней

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


function get(var_name, default) -- чтение
	local s = get_stored_vars()
	if s[var_name] ~= nil then return s[var_name] end
	return default
end
function set(var_name, value) -- запись
	local s = get_stored_vars()
	s[var_name] = value
end

 

И ничего не переполнится никогда. Я сотни тысяч var_name так храню.

 

 

  • Нравится 1
  • Согласен 3
  • Полезно 1

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

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

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

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

Согласно этой вот статье:

https://stalker.fandom.com/ru/wiki/Ранг

Есть баг с точностью НПС... И вот вопрос - этот баг в формуле в движке править надо? Или оно зарыто где-то в скриптах? Можно, конечно, порезать всем ранг в 10 раз в конфигах, но проблему полностью это не решит...

  • Полезно 2
Ссылка на комментарий

@Капрал Хикс , в движке, похоже. ai_stalker.cpp:

Скрытый текст
    static float novice_rank_dispersion            = pSettings->r_float("ranks_properties", "dispersion_novice_k");
    static float expirienced_rank_dispersion    = pSettings->r_float("ranks_properties", "dispersion_experienced_k");

    CHARACTER_RANK_VALUE rank = Rank();
    clamp(rank, 0, 100);
    float rank_k = float(rank)/100.f;
    m_fRankImmunity = novice_rank_immunity + (expirienced_rank_immunity - novice_rank_immunity) * rank_k;
    m_fRankVisibility = novice_rank_visibility + (expirienced_rank_visibility - novice_rank_visibility) * rank_k;
    m_fRankDisperison = expirienced_rank_dispersion + (expirienced_rank_dispersion - novice_rank_dispersion) * (1-rank_k);

 

 

  • Полезно 2
Ссылка на комментарий

потихоньку изучаю модинг

появилась идея заставить эту штуку выстрелить при опускании рычага(типо чтоб последовательно появились например эффекты элекрты ну и звук)

https://disk.yandex.ru/i/6bf1M-KjrKliQQ

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

если есть кто знает где смотреть и что курить, подскажите пожалуйста

«Если долго мучиться, что-нибудь получится»
Охотник за артефактами|Crow Game Killer
img.php?nick=Pavel2000&sert=2&text=t0

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

Ищу скрипт, позволяющий НПС игнорировать определённые виды мутантов. Наверняка есть где подсмотреть. Нужно для целого гулага вояк на Кордоне.

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

@Капрал Хикс ну впихни этих мутантов в гулаг и пускай этот гулаг твои вояки и игнорят.

ищу человека, который смог бы заняться разработкой погоды на OGSR.
кто может помочь - пишите в ЛС.

Ссылка на комментарий
22 hours ago, Капрал Хикс said:

Нужно для целого гулага вояк на Кордоне.

Ну угадай с одного раза - где:

https://github.com/dsh2dsh/op2ogse/blob/5a01f59d220b7808dbb68cce0af42ce333bb85d4/gamedata/scripts/dsh/dsh_enemies.script#L50

 

И вот прямо таки как раз для целого гулага вояк на Кордоне.

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

Интересно, а есть проверка на наличие определённого предмета в inventory box? Пытался гуглить ничего не нашёл.

Может какие то костыли есть?

Изменено пользователем Опричник

«Если долго мучиться, что-нибудь получится»
Охотник за артефактами|Crow Game Killer
img.php?nick=Pavel2000&sert=2&text=t0

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

@Pavel_2000 можно в bind_stalker.script в actor_binder:take_item_from_box:

    if box:story_id() == 47 and item:section() == "af_ice" then
        db.actor:give_info_portion("yan_have_snezhinka")
    end

Как пример. Правда, надо стори ид назначать.

  • Не согласен 1

ищу человека, который смог бы заняться разработкой погоды на OGSR.
кто может помочь - пишите в ЛС.

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

@Pavel_2000 зависит от версии игры.
В ЧН и ЗП есть вполне себе работающий итератор iterate_inventory_box, аналогичный по действию итератору iterate_inventory, но предназначенный, как можно догадаться, как раз для ящиков.
В ТЧ - см. совет выше по перебору серверных объектов.

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

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

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

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

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

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

Войти

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

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

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