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 Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/
Norman Eisenherz 355 Опубликовано 24 Августа 2020 Поделиться Опубликовано 24 Августа 2020 @AndreySol ЧН 1.5.10, [configs\misc\technics_specialization.ltx]. В оригинале так: [mar_csky_tech] wpn_mp5 novice_outfit В моде так: Spoiler [mar_csky_tech] wpn_mp5 novice_outfit st_tech_pistols_ussr st_wpn_hpsa st_tech_shotguns st_tech_assault_all st_wpn_fn2000 st_wpn_groza st_wpn_rp tech_outfit_jackets stalker_outfit_name tech_outfit_csky Обработка измененной функцией из [scripts\inventory_upgrades.script]: Spoiler local gts = game.translate_string function get_technic_specialization(section) local ini = ini_file("misc\\technics_specialization.ltx") local sys_ini = system_ini() if ini:section_exist(section) then local str = game.translate_string("st_technic_specialization") local n = ini:line_count(section) local main = {} local other_wp = {} local other_am = {} for i = 0, n -1 do local temp1, id, temp2 = ini:r_line(section, i, "", "") if string.find(id, "^st_") then other_wp[#other_wp +1] = id elseif string.find(id, "_outfit_") then other_am[#other_am +1] = id else main[#main +1] = id end end if #main == 0 then -- только обычная прокачка str = str .. "\\n%c[default]" .. gts("st_technic_specialization_none") else table.sort(main) for i = 1, #main do str = str.."%c[default] \\n• "..gts(sys_ini:r_string(main[i], "inv_name")) end end table.sort(other_wp) -- сортировка, потом перевод table.sort(other_am) local other_st = {} for i = 1, #other_wp do other_st[i] = "• " .. gts(other_wp[i]) end for i = 1, #other_am do other_st[#other_wp + i] = "• " .. gts(other_am[i]) end local str_other = table.concat(other_st, "\\n") return str .. "\\n \\n%c[ui_4]" .. gts("st_technic_spec_other") .. "\\n%c[default]" .. str_other else return gts("st_technic_specialization") .. "\\n%c[default]" .. gts("st_technic_specialization_none") end end Мини-моды: ТЧ ЧН ЗП Шпаргалка Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/530/#findComment-1346419
Firestarter 3 Опубликовано 24 Августа 2020 Поделиться Опубликовано 24 Августа 2020 (изменено) 35 минут назад, Space.Marine сказал: @Firestarter, а прописать броню в death_items_....ltx не проще ??? @Space.Marine, Нет, не проще. Я как сам таким промышлял, так и видел наподобие моды. Потому что: 1)Нельзя будет точно указать, у кого что из сталкеров будет выпадать (например, есть несколько внешних видов бандитов, но в данном файле нельзя будет так расписать. Можно будет конкретно группировке Бандиты расписать, что у них будет выпадать броня, но, опять же, нельзя будет подвязать её к кому-либо конкретному; 2)И, возвращаясь к моему основному вопросу, в этом файле нельзя устанавливать рандомное значение прочности предмета, хотя бы потому, что данные файлы созданы для посмертного спавна всякой мелочёвки по типу - артов, амуниции, лекарств. Но никак не брони и оружия. Изменено 24 Августа 2020 пользователем Firestarter 1 Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/530/#findComment-1346424
Zander_driver 10 358 Опубликовано 24 Августа 2020 Поделиться Опубликовано 24 Августа 2020 4 часа назад, Firestarter сказал: local outfit_classes = {} @Firestarter, теперь надо в эту табличку добавить клсиды классов брони. Если она пустая, то isOutfit для любого предмета вернет false, и скрипт не найдет в луте нпс тех вещей, к которым надо применять set_outfit_drop_condition. 1 1 Бывший мододел на X-Ray / Начинающий игродел на Unreal Engine / Мимокрокодил. Я понял что моя старая подпись что-то нарушает. Удалил все ссылки. Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/530/#findComment-1346434
AndreySol 215 Опубликовано 25 Августа 2020 Поделиться Опубликовано 25 Августа 2020 @Norman Eisenherz Непонятно, зачем Вам четкий порядок чтения строк из конфига, если есть точный признак для каждой группы предметов - "st_", "_outfit_" и остальное. Собирайте эти группы каждую в свою таблицу, а затем формируйте строку из этих таблиц в нужном порядке. 1 Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/530/#findComment-1346442
Norman Eisenherz 355 Опубликовано 25 Августа 2020 Поделиться Опубликовано 25 Августа 2020 @AndreySol Ну ведь не это я спрашивал. Хочу сделать так, чтобы оружие было перечислено в порядке возрастания "полезности": пистолеты, ПП, дробовики, автоматы, снайперки. При этом не хочу вручную задавать алфавитный порядок через имена string_id. Мини-моды: ТЧ ЧН ЗП Шпаргалка Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/530/#findComment-1346443
AndreySol 215 Опубликовано 25 Августа 2020 Поделиться Опубликовано 25 Августа 2020 @Norman Eisenherz Не все что нам хочется может движок. 1 Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/530/#findComment-1346467
Norman Eisenherz 355 Опубликовано 25 Августа 2020 Поделиться Опубликовано 25 Августа 2020 @AndreySol Подозреваю, что как раз правками движка можно добиться нужного порядка чтения, а вот в обычных скриптах возможности ограничены… Разве что список с числовыми ключами в отдельном файле создавать, чтобы читать его по порядку. Мини-моды: ТЧ ЧН ЗП Шпаргалка Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/530/#findComment-1346470
Zander_driver 10 358 Опубликовано 25 Августа 2020 Поделиться Опубликовано 25 Августа 2020 В движке порядок чтения конфигов и так есть, почитайте xr_ini.cpp Бывший мододел на X-Ray / Начинающий игродел на Unreal Engine / Мимокрокодил. Я понял что моя старая подпись что-то нарушает. Удалил все ссылки. Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/530/#findComment-1346475
WinCap 324 Опубликовано 25 Августа 2020 Поделиться Опубликовано 25 Августа 2020 (изменено) @Norman Eisenherz, в LUA-функции table.sort есть необязательный второй аргумент - функция сортировки: function functor_sort(a,b) return (a < b) end В ней можно реализовать любые условия сортировки. В самом "тупом" случае - сделать таблицу с ключами: Скрытый текст key_table = { ["st_tech_pistols_ussr"] = 1, ["st_wpn_hpsa"] = 2, ["st_tech_shotguns"] = 3, ["st_tech_assault_all"] = 4, ["st_wpn_fn2000"] = 5, ["st_wpn_groz"] = 6, ["st_wpn_rp tech_outfit_jackets"] = 7, ["stalker_outfit_name"] = 8, ["tech_outfit_csky"] = 9 } function functor_sort(a,b) return (key_table[a] < key_table[b]) end table.sort(main, functor_sort) Изменено 25 Августа 2020 пользователем WinCap 1 1 S.T.A.L.K.E.R. CoP Objects >200 шт (upd 21.05.26) - Скачать (Яндекс-диск) Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/530/#findComment-1346498
AndreySol 215 Опубликовано 25 Августа 2020 Поделиться Опубликовано 25 Августа 2020 @WinCap Это не совсем то, что нужно вопрошавшему, точнее не до конца то.. @Norman Eisenherz Если уж так приперло, то вводить дополнительный ключ идентификации, типа "st_1", "_outfit_1", "st_2", "_outfit_2", ну и затем строить список в соответствии с номерами строк. А вообще это по нашему: поставить себе сомнительной полезности задачу, а затем героически ее решать. Лично мне кажется, что игрокам будет совсем наплевать в каком порядке будут перечисляться объекты в пределах группы. 1 Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/530/#findComment-1346506
Zander_driver 10 358 Опубликовано 25 Августа 2020 Поделиться Опубликовано 25 Августа 2020 Только что, AndreySol сказал: Это не совсем то, что нужно вопрошавшему, Если я таки верно понял вопрошавшего, ему хотелось "в правильном порядке" вывести определенные текстовые элементы. И во первых да, сложно придумать ситуацию где это было бы действительно важно, но допустим они бывают. А во вторых, для организации такого, существует 1001 способ на любой вкус, и метод предложенный @WinCap, ничем не хуже любого другого. Добиваться же выяснения номера строки в конфиге, для этой цели так же "нужно" как собаке пятая нога. Не говоря уж о том, что привязка вывода к номеру строки, если таки ее реализовать тем или иным способом, чревата проблемами в будущем при необходимости правки конфигов. Добавится потом какая-то новая строка в эту секцию - и вся "верстка" "поедет". 1 Бывший мододел на X-Ray / Начинающий игродел на Unreal Engine / Мимокрокодил. Я понял что моя старая подпись что-то нарушает. Удалил все ссылки. Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/530/#findComment-1346510
_Sk8_AsTeR_ 122 Опубликовано 25 Августа 2020 Поделиться Опубликовано 25 Августа 2020 Господа, а есть в двигле огср способ рандомизировать в диалоге НПС с ГГ скриптовые фразы? Именно скриптовые. В ванильке фразы меняются только после сейв/лоада Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/530/#findComment-1346535
Firestarter 3 Опубликовано 25 Августа 2020 Поделиться Опубликовано 25 Августа 2020 @Zander_driver, Большое спасибо!!! После такого количества времени, всё же - получилось. Скрытый текст Я вначале не особо понял, про какую табличку шла речь. Однако поиском local outfit_classes = {} в данном же файле как нашёл данную место, где должна была быть данная табличка, так и допёр, о чём шла речь. monster_classes = { [clsid.bloodsucker_s] = true, [clsid.boar_s] = true, [clsid.dog_s] = true, [clsid.flesh_s] = true, [clsid.pseudodog_s] = true, [clsid.burer_s] = true, -- [clsid.cat_s] = true, [clsid.chimera_s] = true, [clsid.controller_s] = true, -- [clsid.fracture_s] = true, [clsid.poltergeist_s] = true, [clsid.gigant_s] = true, -- [clsid.zombie_s] = true, [clsid.snork_s] = true, [clsid.tushkano_s] = true, [clsid.psy_dog_s] = true, [clsid.psy_dog_phantom_s] = true} stalker_classes = { [clsid.script_actor] = true, [clsid.script_stalker] = true} weapon_classes = { [clsid.wpn_vintorez_s] = true, [clsid.wpn_ak74_s] = true, [clsid.wpn_lr300_s] = true, [clsid.wpn_hpsa_s] = true, [clsid.wpn_pm_s] = true, [clsid.wpn_shotgun_s] = true, [clsid.wpn_auto_shotgun_s] = true, [clsid.wpn_bm16_s] = true, [clsid.wpn_svd_s] = true, [clsid.wpn_svu_s] = true, [clsid.wpn_rg6_s] = true, [clsid.wpn_rpg7_s] = true, [clsid.wpn_val_s] = true, [clsid.wpn_walther_s] = true, [clsid.wpn_usp45_s] = true, [clsid.wpn_groza_s] = true, [clsid.wpn_knife_s] = true, [clsid.wpn_grenade_f1_s] = true, [clsid.wpn_grenade_rgd5_s] = true, [clsid.wpn_grenade_launcher] = true, [clsid.wpn_grenade_fake] = true} artefact_classes = { [clsid.art_bast_artefact] = true, [clsid.art_black_drops] = true, [clsid.art_dummy] = true, [clsid.art_electric_ball] = true, [clsid.art_faded_ball] = true, [clsid.art_galantine] = true, [clsid.art_gravi] = true, [clsid.art_gravi_black] = true, [clsid.art_mercury_ball] = true, [clsid.art_needles] = true, [clsid.art_rusty_hair] = true, [clsid.art_thorn] = true, [clsid.art_zuda] = true, [clsid.artefact] = true, [clsid.artefact_s] = true} outfit_classes = { [clsid.equ_stalker_s] = true} Я с дуру просто добавил название брони, и получил вылет - я не глянул, что нужен именно класс. В файле outfit.ltx у всех броников единый класс - E_STLK, однако, и это добавление вызывало вылет. Поискав это слово Тотал Коммандером (Слава Тотал Коммандеру), откликнулся единственный файл - class_registrator.script, который как бы даёт расшифровку классам. Что интересно, броня почему-то названа... equ_stalker_s, "сталкер". Главное, строчкой ниже шлемы и названы шлемами. ну чёрт знает, "я разработчик, я так вижу". Вот его добавление и проба игрой наконец-то позволила реализовать разброс прочности брони... Оооооох. Ещё раз спасибо. Я так подробно расписываю, дабы себе сохранить + мб кому это пригодится (хотя, если мне уже посоветовали...значит, и так знают). 1 Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/530/#findComment-1346566
Norman Eisenherz 355 Опубликовано 25 Августа 2020 Поделиться Опубликовано 25 Августа 2020 6 hours ago, Zander_driver said: привязка вывода к номеру строки, если таки ее реализовать тем или иным способом, чревата проблемами в будущем Не к номеру – к порядку. Пять строк, десять – главное, чтобы они были выведены в подсказку в том же порядке, в котором перечислены. Про вариант со списком и я сам упоминал. Что касается задач сомнительной полезности, то именно из решения таких задач я получаю больше всего информации. Мини-моды: ТЧ ЧН ЗП Шпаргалка Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/530/#findComment-1346570
Это популярное сообщение. AndreySol 215 Опубликовано 27 Августа 2020 Это популярное сообщение. Поделиться Опубликовано 27 Августа 2020 25.08.2020 в 23:39, Norman Eisenherz сказал: я получаю больше всего информации. Не вопрос, всем понятно, что чем сложнее задачу ты решил, тем больше опыта\удовлетворения поимел с этого. Но Вы попробуйте мне, как потенциальному игроку в Ваш мод, объяснить, в чем разница для меня, если я буду видеть список доступных улучшений у техника в "правильном порядке"? А вдруг у меня иное понимание важности\правильности этих улучшений? 3 3 2 Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/530/#findComment-1346765
mdm64 586 Опубликовано 27 Августа 2020 Поделиться Опубликовано 27 Августа 2020 (изменено) Доброго времени! Вопрос - в ТЧ за ограничения по количеству одновременного спавна "живности" на локации отвечает файл se_respawn.script, а что отвечает за то же самое в ЗП? В некоторых модах на ЗП есть файл mod_params.ltx, в котором можно прописать много чего полезного. Но какие ещё файлы отвечают за количество и ограничения спавна? Изменено 27 Августа 2020 пользователем mdm64 Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/530/#findComment-1346776
Painter 3 591 Опубликовано 27 Августа 2020 Поделиться Опубликовано 27 Августа 2020 (изменено) @mdm64, В ЗП респавн сталкеров/мутантов настраивается для каждого смарта по отдельности. Необходимые файлы расположены здесь: gamedata/configs/scripts/zaton/smart/ gamedata/configs/scripts/jupiter/smart/ gamedata/configs/scripts/pripyat/smart/ Основные параметры: max_population - максимальное количество сквадов, которое может принять данный смарт. Определяет для скольких симуляционных сквадов в смарте найдётся работа. spawn_squads - наименования сквадов, которые будут респавниться. spawn_num - количество сквадов, которое будет респавниться в данном смарте. Время респавна задаётся в файле smart_terrain.script параметром RESPAWN_IDLE. Изменено 27 Августа 2020 пользователем Jurok 1 3 ⠀ Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/530/#findComment-1346783
mdm64 586 Опубликовано 27 Августа 2020 Поделиться Опубликовано 27 Августа 2020 (изменено) @Jurok, Благодарю, очень полезная информация! Правда, меня интересовало немного другое. Ведь судя по содержимому файла mod_params.ltx, информацию он берёт не из смартов локаций, а откуда-то ещё. Может быть, это движковые функции, которыми управляет данный файл? Ведь по сути я могу (в разумных пределах) задать в каждом смарте какое-то конкретное количество сквадов, также я могу в каждом скваде задать, кажется, до 20 неписей без проблем. А мне требуется, к примеру, задать вполне определённое максимальное количество всех видов "живности" на локации, не больше не меньше. Как это делается в ТЧ, я написал выше, а вот в ЗП есть что-то аналогичное или нет? Только через смарты? Но тогда повторю вопрос - откуда берёт данные mod_params.ltx? Сомнительно, что сканирует все смарты в игре... Или я что-то упускаю из виду... И небольшой подвопрос - есть ли смысл создавать симуляционные сквады, если для всех существующих сквадов группировки (например) уже заданы все необходимые их действия и логика? И сюда же - есть ли принципиальные различия между [simulation_stalker]:online_offline_group и [stalker_sim_squad_novice]:online_offline_group (к примеру) - структура этих секций практически одинакова? Изменено 27 Августа 2020 пользователем mdm64 Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/530/#findComment-1346790
Painter 3 591 Опубликовано 27 Августа 2020 Поделиться Опубликовано 27 Августа 2020 @mdm64, Цитата в ЗП есть что-то аналогичное или нет? В оригинальном ЗП подобное не предусмотрено. Цитата mod_params.ltx Речь о SGM? Могу ошибаться, но вроде бы в их sim_squad_scripted.script добавлен подсчёт сквадов, если больше того количества, что указано в mod_params.ltx - запускается принудительное удаление лишних. 1 ⠀ Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/530/#findComment-1346793
mdm64 586 Опубликовано 27 Августа 2020 Поделиться Опубликовано 27 Августа 2020 @Jurok, Благодарю, именно это меня и интересовало! Жаль, конечно, что не предусмотрено. И да, этот файл в основном из модов на SGM и из самого этого мода. Но я видел его и в других модах на ЗП, потому и спросил. Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/530/#findComment-1346795
Рекомендуемые сообщения
Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий
Комментарии могут оставлять только зарегистрированные пользователи
Создать аккаунт
Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!
Зарегистрировать новый аккаунтВойти
Есть аккаунт? Войти.
Войти