Svoboда 3 Опубликовано 23 Апреля 2009 Поделиться Опубликовано 23 Апреля 2009 Тема для обсуждения скриптов всего и всех в серии игр STALKER. Задавая вопрос (!): 1. Внимательно изучите суть вопроса. Вопрос должен соответствовать выбранной Вами темы. Это поможет сохранить порядок и читабельность темы, а также облегчит поиск и понимание сего; 2. Изучите то, что уже есть в теме (пролистайте "руками", воспользуйтесь поиском на форуме); 3. Изучите информацию которая может вам помочь: Stalkerin. Там есть много хороших статей касательно данной темы.Уроки по модостроению. Есть рабочие примеры готовых скриптов различного назначения. Справочное руководство по языку Lua 5.1https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/ruСправочник по функциям и классам. Собрано много информации по функциям и классам, не всем, но по основные сведения предоставлены. Логика со вступлением и четырьмя частями: ВступлениеЧасть перваяЧасть втораяЧасть третьяЧасть четвертая. Smart_terrain (в простонароде - гулаг)Интересный способ настроики логики для гулаговСкриптовая часть игровой логики 4. Дабы не превращать обсуждение в "кашу" разной информативной направленности, задавайте несколько вопросов по порядку (в разных постах) после того, как получите ответ на предыдущий вопрос; 5. "Спасибо" и тому подобное - будьте так любезны в ПМ. Если не любите писать в ПМ, в конце вопроса напишите фразу: "Заранее спасибо!" - или что-то в этом духе; 6. ПОЖАЛУЙСТА! Указывайте, для какой игры Вам необходима информация (ТЧ, ЧН, ЗП), если стоит мод - укажите название мода; 7. Если Вы что-то сделали и результат не такой, какой Вами задумывался, то, пожалуйста, приводите коды которые Вы изменяли/писали целиком! Это поможет другим правильно ответить на Ваш вопрос, а также оградит Вас от лишней писанины. 8. Оформляйте сообщение. Пользуйтесь тегами для того, чтобы отделить код от текста. Пишите грамотно - ПОЛЬЗУЙТЕСЬ ЗНАКАМИ ПРЕПИНАНИЯ. 9. И помните: «Правильно заданный вопрос – половина ответа». Какие вопросы следует задавать, а какие нет... Задавайте вопросы, которые касаются непосредственно скриптов и их работы, т.е. Вы что-то делаете, а у Вас что-то не получается, при этом у Вас на руках должен быть хотя бы какой-то код, свидетельствующий о Вашей причастности к вопросу. Вопросы которые будут удалятся, следовательно их задавать не нужно:-- Где находится та или иная функция? Для ответа используем поиск по словам среди файлов оригинальной игры или мода, если объект поиска относится к нему, при помощью программы, которая Вам наиболее симпатизирует;-- Как сделать что-то/то-то? С подобными вопросами, либо в "ковырялки", где Вам вероятнее всего так же не ответят, либо выдвигаем мысли, подкреплённые теорией, практикой (идеальный вариант) и здравым рассудком;-- Вопросы со смыслом: "сделайте", "совместите" и подобными глаголами повелительного наклонения.-- К тому же удалению будут подвергаться вопросы, в которых масштабно не используются теги, для отделения кода и цитат от основного текста, а также не вписан в спойлер код размером превышающие семь строк.Ответ на возможно возникший вопрос: В какую тему можно обратиться по поводу логики и спавна объектов? В тему "ковырялок" соответствующей версии игры, для которой Вы задаёте вопрос. И последнее: очень рекомендовано к прочтению Правила форума 1 2 Ссылка на комментарий
Это популярное сообщение. Zander_driver 10 342 Опубликовано 18 Февраля 2024 Это популярное сообщение. Поделиться Опубликовано 18 Февраля 2024 22 часа назад, kenguru сказал: они способствуют этому переполнению, не так ли? Переполнению стека? НЕТ Конечно. Вообще никаким образом не связано. 22 часа назад, kenguru сказал: Это с великой долей вероятности указывает, что накопление статической инфы виновато. Вот поэтому я решил вычислить масштабы проблемы древних инфопоршней Вы это блин серьезно? ВЕСЬ объем инфопоршней от силы потянет несколько килобайт. И вы думаете что вот именно они, будут причиной каких-то вылетов по недостатку чего-то, на 64-битном движке способном использовать десятки гигабайт памяти, при необходимости. Бред сивой кобылы. 8 часов назад, kenguru сказал: Вот мне и хотелось бы убедиться на фактах, так сказать.. Ну, а вдруг? Ну а вдруг, если отрезать себе руки, то зрение восстановится? Примерно такая у вас логика... Вместо решения проблемы, а займемся-ка мы беспощадно чем-нибудь совершенно бессмысленным и не относящимся к нашей проблеме. 5 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. Ссылка на комментарий
Pavel_2000 5 Опубликовано 19 Февраля 2024 Поделиться Опубликовано 19 Февраля 2024 Здравствуйте, заметил что в повелителе зоны во вкладке "локации" прописаны все смарты сталкеров и их описания написаны как сталкеры в диалоге пишут, захотел сделать так что бы в списке локации были только сами локации: скадовск, янов, внз круг и тд... нашёл функцию которая за это отвечает Скрытый текст -- Локации 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 Ссылка на комментарий
AndrewMor 530 Опубликовано 19 Февраля 2024 Поделиться Опубликовано 19 Февраля 2024 (изменено) 18.02.2024 в 00:17, kenguru сказал: Да, это конечно понятно, однако трабла в том, что АФФТары игры в большинстве случаев не предусмотрели очистку от ненужных использованных инфопоршней Представляю, сколько сюжетных диалогов по новой появятся! Большинство диалогов на инфопорциях завязано. Рус, неужели у тебя все вылеты на переполнение стека завязаны? Битье сейвов четко говорит о переполнении стоража актора. Изменено 19 Февраля 2024 пользователем AndrewMor 1 1 Сталкер - наше всё! Ссылка на комментарий
Zander_driver 10 342 Опубликовано 19 Февраля 2024 Поделиться Опубликовано 19 Февраля 2024 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. Ссылка на комментарий
Pavel_2000 5 Опубликовано 19 Февраля 2024 Поделиться Опубликовано 19 Февраля 2024 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 Ссылка на комментарий
kenguru 418 Опубликовано 20 Февраля 2024 Поделиться Опубликовано 20 Февраля 2024 (изменено) Привет всем! 12 часов назад, Zander_driver сказал: переполнение стека и переполнение "стоража" (нетпакета?) актора - как бы тоже совершенно разные и никак не связанные вещи... Да, это я сдуру их в одну кучу валю. Конечно речь всё время шла о pstor Звиняйте - мы академиев не кончали 12 часов назад, Zander_driver сказал: script_vars_storage вот с этого места можно немного поподробней? А то ни сном, ни духом.. Изменено 20 Февраля 2024 пользователем kenguru С уважением, КенГуру Пилим S.T.A.L.K.E.R UZI Ссылка на комментарий
Zander_driver 10 342 Опубликовано 20 Февраля 2024 Поделиться Опубликовано 20 Февраля 2024 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. Ссылка на комментарий
AndrewMor 530 Опубликовано 20 Февраля 2024 Поделиться Опубликовано 20 Февраля 2024 11 часов назад, kenguru сказал: Конечно речь всё время шла о pstor О том и речь. Сталкер - наше всё! Ссылка на комментарий
Капрал Хикс 541 Опубликовано 24 Февраля 2024 Поделиться Опубликовано 24 Февраля 2024 Согласно этой вот статье: https://stalker.fandom.com/ru/wiki/Ранг Есть баг с точностью НПС... И вот вопрос - этот баг в формуле в движке править надо? Или оно зарыто где-то в скриптах? Можно, конечно, порезать всем ранг в 10 раз в конфигах, но проблему полностью это не решит... 2 Ссылка на комментарий
Купер 2 985 Опубликовано 24 Февраля 2024 Поделиться Опубликовано 24 Февраля 2024 @Капрал Хикс , в движке, похоже. 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 Ссылка на комментарий
Pavel_2000 5 Опубликовано 25 Февраля 2024 Поделиться Опубликовано 25 Февраля 2024 потихоньку изучаю модинг появилась идея заставить эту штуку выстрелить при опускании рычага(типо чтоб последовательно появились например эффекты элекрты ну и звук) https://disk.yandex.ru/i/6bf1M-KjrKliQQ но появилась загвоздка я даже понятия не имею куда лезть что бы посмотреть как это можно реализовать и возможно ли это вообще если есть кто знает где смотреть и что курить, подскажите пожалуйста «Если долго мучиться, что-нибудь получится»Охотник за артефактами|Crow Game Killer Ссылка на комментарий
Капрал Хикс 541 Опубликовано 25 Февраля 2024 Поделиться Опубликовано 25 Февраля 2024 Ищу скрипт, позволяющий НПС игнорировать определённые виды мутантов. Наверняка есть где подсмотреть. Нужно для целого гулага вояк на Кордоне. Ссылка на комментарий
Norman Eisenherz 322 Опубликовано 25 Февраля 2024 Поделиться Опубликовано 25 Февраля 2024 @Капрал Хикс Может, это подойдет: Мини-моды: ТЧ ЧН ЗП Шпаргалка Ссылка на комментарий
Капрал Хикс 541 Опубликовано 25 Февраля 2024 Поделиться Опубликовано 25 Февраля 2024 @Norman Eisenherz , это я помню, писал там. Не то, там так решение и не нашли. Ссылка на комментарий
imcrazyhoudini 210 Опубликовано 25 Февраля 2024 Поделиться Опубликовано 25 Февраля 2024 @Капрал Хикс ну впихни этих мутантов в гулаг и пускай этот гулаг твои вояки и игнорят. ищу человека, который смог бы заняться разработкой погоды на OGSR. кто может помочь - пишите в ЛС. Ссылка на комментарий
dsh 3 824 Опубликовано 26 Февраля 2024 Поделиться Опубликовано 26 Февраля 2024 22 hours ago, Капрал Хикс said: Нужно для целого гулага вояк на Кордоне. Ну угадай с одного раза - где: https://github.com/dsh2dsh/op2ogse/blob/5a01f59d220b7808dbb68cce0af42ce333bb85d4/gamedata/scripts/dsh/dsh_enemies.script#L50 И вот прямо таки как раз для целого гулага вояк на Кордоне. 1 dsh mod: https://github.com/dsh2dsh/op2ogse Ссылка на комментарий
Pavel_2000 5 Опубликовано 26 Февраля 2024 Поделиться Опубликовано 26 Февраля 2024 (изменено) Интересно, а есть проверка на наличие определённого предмета в inventory box? Пытался гуглить ничего не нашёл. Может какие то костыли есть? Изменено 27 Февраля 2024 пользователем Опричник «Если долго мучиться, что-нибудь получится»Охотник за артефактами|Crow Game Killer Ссылка на комментарий
Norman Eisenherz 322 Опубликовано 27 Февраля 2024 Поделиться Опубликовано 27 Февраля 2024 Перебрать сервер с проверками "существующий объект + наличие родителя + id родителя = id коробки". 1 Мини-моды: ТЧ ЧН ЗП Шпаргалка Ссылка на комментарий
imcrazyhoudini 210 Опубликовано 27 Февраля 2024 Поделиться Опубликовано 27 Февраля 2024 @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. кто может помочь - пишите в ЛС. Ссылка на комментарий
Kirgudu 1 250 Опубликовано 27 Февраля 2024 Поделиться Опубликовано 27 Февраля 2024 @Pavel_2000 зависит от версии игры. В ЧН и ЗП есть вполне себе работающий итератор iterate_inventory_box, аналогичный по действию итератору iterate_inventory, но предназначенный, как можно догадаться, как раз для ящиков. В ТЧ - см. совет выше по перебору серверных объектов. 1 1 Инструмент Ссылка на комментарий
Рекомендуемые сообщения
Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий
Комментарии могут оставлять только зарегистрированные пользователи
Создать аккаунт
Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!
Зарегистрировать новый аккаунтВойти
Есть аккаунт? Войти.
Войти