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

Внимание. На форуме проводятся технические работы с боковым меню.

_Val_ _Val_

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

Тема для обсуждения скриптов всего и всех в серии игр 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
Ссылка на комментарий
https://www.amk-team.ru/forum/topic/6185-skriptovanie/

@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

 

 

Мини-моды: ТЧ ЧН ЗП

Шпаргалка

35 минут назад, Space.Marine сказал:

@Firestarter, а прописать броню в death_items_....ltx не проще ???

@Space.Marine, Нет, не проще. Я как сам таким промышлял, так и видел наподобие моды.
Потому что:
1)Нельзя будет точно указать, у кого что из сталкеров будет выпадать (например, есть несколько внешних видов бандитов, но в данном файле нельзя будет так расписать. Можно будет конкретно группировке Бандиты расписать, что у них будет выпадать броня, но, опять же, нельзя будет подвязать её к кому-либо конкретному;
2)И, возвращаясь к моему основному вопросу, в этом файле нельзя устанавливать рандомное значение прочности предмета, хотя бы потому, что данные файлы созданы для посмертного спавна всякой мелочёвки по типу - артов, амуниции, лекарств. Но никак не брони и оружия.

Изменено пользователем Firestarter
  • Согласен 1
4 часа назад, Firestarter сказал:

local outfit_classes = {}

@Firestarter, теперь надо в эту табличку добавить клсиды классов брони. Если она пустая, то isOutfit для любого предмета вернет false, и скрипт не найдет в луте нпс тех вещей, к которым надо применять set_outfit_drop_condition.

  • Спасибо 1
  • Полезно 1

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

Я понял что моя старая подпись что-то нарушает. Удалил все ссылки.

@Norman Eisenherz

Непонятно, зачем Вам четкий порядок чтения строк из конфига, если есть точный признак для каждой группы предметов - "st_", "_outfit_" и остальное. Собирайте эти группы каждую в свою таблицу, а затем формируйте строку из этих таблиц в нужном порядке.

  • Согласен 1

@AndreySol Ну ведь не это я спрашивал. Хочу сделать так, чтобы оружие было перечислено в порядке возрастания "полезности": пистолеты, ПП, дробовики, автоматы, снайперки. При этом не хочу вручную задавать алфавитный порядок через имена string_id.

Мини-моды: ТЧ ЧН ЗП

Шпаргалка

@AndreySol Подозреваю, что как раз правками движка можно добиться нужного порядка чтения, а вот в обычных скриптах возможности ограничены… Разве что список с числовыми ключами в отдельном файле создавать, чтобы читать его по порядку.

Мини-моды: ТЧ ЧН ЗП

Шпаргалка

В движке порядок чтения конфигов и так есть, почитайте xr_ini.cpp

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

Я понял что моя старая подпись что-то нарушает. Удалил все ссылки.

@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)

 

 

Изменено пользователем WinCap
  • Нравится 1
  • Полезно 1

S.T.A.L.K.E.R. CoP Objects  >200 шт  (upd 21.05.26) - Скачать  (Яндекс-диск)

@WinCap

Это не совсем то, что нужно вопрошавшему, точнее не до конца то..

@Norman Eisenherz

Если уж так приперло, то вводить дополнительный ключ идентификации, типа "st_1", "_outfit_1", "st_2", "_outfit_2", ну и затем строить список в соответствии с номерами строк.

А вообще это по нашему: поставить себе сомнительной полезности задачу, а затем героически ее решать. Лично мне кажется, что игрокам будет совсем наплевать в каком порядке будут перечисляться объекты в пределах группы.

  • Согласен 1
Только что, AndreySol сказал:

Это не совсем то, что нужно вопрошавшему,

Если я таки верно понял вопрошавшего, ему хотелось "в правильном порядке" вывести определенные текстовые элементы.

И во первых да, сложно придумать ситуацию где это было бы действительно важно, но допустим они бывают.

А во вторых, для организации такого, существует 1001 способ на любой вкус, и метод предложенный @WinCap, ничем не хуже любого другого.

Добиваться же выяснения номера строки в конфиге, для этой цели так же "нужно" как собаке пятая нога.

Не говоря уж о том, что привязка вывода к номеру строки, если таки ее реализовать тем или иным способом, чревата проблемами в будущем при необходимости правки конфигов. Добавится потом какая-то новая строка в эту секцию - и вся "верстка" "поедет".

  • Согласен 1

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

Я понял что моя старая подпись что-то нарушает. Удалил все ссылки.

Господа, а есть в двигле огср способ рандомизировать в диалоге НПС с ГГ скриптовые фразы? Именно скриптовые. В ванильке фразы меняются только после сейв/лоада

@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, "сталкер". Главное, строчкой ниже шлемы и названы шлемами.:biggrin: ну чёрт знает, "я разработчик, я так вижу".

Вот его добавление и проба игрой наконец-то позволила реализовать разброс прочности брони... Оооооох.

Ещё раз спасибо. 

Я так подробно расписываю, дабы себе сохранить + мб кому это пригодится (хотя, если мне уже посоветовали...значит, и так знают).

 

  • Нравится 1
6 hours ago, Zander_driver said:

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

Не к номеру – к порядку. Пять строк, десять – главное, чтобы они были выведены в подсказку в том же порядке, в котором перечислены. Про вариант со списком и я сам упоминал.

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

Мини-моды: ТЧ ЧН ЗП

Шпаргалка

Доброго времени!

Вопрос - в ТЧ за ограничения по количеству одновременного спавна "живности" на локации отвечает файл se_respawn.script, а что отвечает за то же самое в ЗП? В некоторых модах на ЗП есть файл mod_params.ltx, в котором можно прописать много чего полезного. Но какие ещё файлы отвечают за количество и ограничения спавна?

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

@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.

 

Изменено пользователем Jurok
  • Нравится 1
  • Полезно 3

⠀

@Jurok, Благодарю, очень полезная информация! Правда, меня интересовало немного другое. Ведь судя по содержимому файла mod_params.ltx, информацию он берёт не из смартов локаций, а откуда-то ещё. Может быть, это движковые функции, которыми управляет данный файл?

Ведь по сути я могу (в разумных пределах) задать в каждом смарте какое-то конкретное количество сквадов, также я могу в каждом скваде задать, кажется, до 20 неписей без проблем. А мне требуется, к примеру, задать вполне определённое максимальное количество всех видов "живности" на локации, не больше не меньше. Как это делается в ТЧ, я написал выше, а вот в ЗП есть что-то аналогичное или нет? Только через смарты? Но тогда повторю вопрос - откуда берёт данные mod_params.ltx? Сомнительно, что сканирует все смарты в игре... Или я что-то упускаю из виду...

И небольшой подвопрос - есть ли смысл создавать симуляционные сквады, если для всех существующих сквадов группировки (например) уже заданы все необходимые их действия и логика?

И сюда же - есть ли принципиальные различия между [simulation_stalker]:online_offline_group и [stalker_sim_squad_novice]:online_offline_group (к примеру) - структура этих секций практически одинакова?

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

@mdm64, 

Цитата

в ЗП есть что-то аналогичное или нет?

В оригинальном ЗП подобное не предусмотрено.

 

Цитата

mod_params.ltx

Речь о SGM? Могу ошибаться, но вроде бы в их sim_squad_scripted.script добавлен подсчёт сквадов, если больше того количества, что указано в mod_params.ltx - запускается принудительное удаление лишних.

  • Полезно 1

⠀

@Jurok, Благодарю, именно это меня  и интересовало! Жаль, конечно, что не предусмотрено. И да, этот файл в основном из модов на SGM и из самого этого мода. Но я видел его и в других модах на ЗП, потому и спросил.

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

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

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

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

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

Войти

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

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

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