В данной теме вы можете задавать любые вопросы касательно S.T.A.L.K.E.R. моддинга.
Не флудить
Предварительно просматривайте раздел. Ответ на ваш вопрос может быть там.
В своем вопросе указывайте платформу моддинга - Тень Чернобыля, Чистое небо или Зов Припяти.
1. Какая стоит игра, с каким патчем? 2. Какой мод, версия мода? 3. Что правили своими ручками? 4. Конфиг компа. 5. Лог вылета и последние 25 строк (помещать под спойлер).
Структура папок и файлов в корневом каталоге игры:
...\S.T.A.L.K.E.R\gamedata\anims – папка содержит исполнительные файлы эффектов (например от ПНВ).
...\S.T.A.L.K.E.R\gamedata\config – папка содержит основные конфигурационные файлы (т. е. большинство настроек игры)
...\S.T.A.L.K.E.R\gamedata\meshes – содержит модели игровых предметов и персонажей...
...\S.T.A.L.K.E.R\gamedata\scripts – папка со скриптами (рабочими файлами содержащими в себе наборы функций) – основная папка, отвечающая за ответные действия игры и действия производимых игроком в игре.
...\S.T.A.L.K.E.R\gamedata\shaders – папка содержит в себе конфигурационные файлы шейдеров.
...\S.T.A.L.K.E.R\gamedata\sounds – здесь находятся все звуки игры (разложены по своим каталогам и папкам)
...\S.T.A.L.K.E.R\gamedata\spawns – содержит файл спавна – очень важный файл – не трогать без нужды!!!
...\S.T.A.L.K.E.R\gamedata\textures – содержит разложенные по каталогам и папкам текстуры используемые в игре.
Теперь разберем папки в каталоге «config»
...\S.T.A.L.K.E.R\gamedata\config\creatures - содержит массу конфигурационных файлов, в основном отвечающих за взаимодействие Главного героя игры (в дальнейшем ГГ) и прочего окружения в игре и ТТХ самого ГГ.
...\S.T.A.L.K.E.R\gamedata\config\gameplay – содержит конфиг. файлы персонажей игры (НПС) отвечающие за внешний вид, статус, снаряжение. Файлы: character_desc_ххх (где ххх – название локации) и character_desc_general (отвечает за зомбированного персонажа). Также содержит файлы диалогов и профилей НПС.
…\S.T.A.L.K.E.R\gamedata\config\misc – конфиг.файлы торговцев (папки с именами торговцев), артефактов, брони, квестовых предметов, уникальных предметов, файл отвечающий за награды за автозадания, файл эффектов (алкоголизма, ранения, ПНВ и прочих)...
…\S.T.A.L.K.E.R\gamedata\config\mp – среди прочих содержит важный файл mp_ranks – отвечающий за выпадение оружия и патронов из рук ГГ и НПС – без прописывания добавляемого в игру оружия в этот файл при выпадении нового оружия из рук ГГ\НПС будут следовать вылеты.
…\S.T.A.L.K.E.R\gamedata\config\text\rus – содержит файлы описаний всего и вся находящегося в игре (брони, артефактов, оружия, предметов и прочего).
…\S.T.A.L.K.E.R\gamedata\config\weapons – содержит конфиг.файлы оружия и боеприпасов используемых в игре.
…\S.T.A.L.K.E.R\gamedata\config\weathers – содержит конфиг.файлы настройки погоды на локациях.
Теперь немного подробнее о файлах.
...\S.T.A.L.K.E.R\gamedata\config\misc:
Папка shop_ххх (ххх – имя торговца) – содержит конфиг.файлы ассортимента торговца.
outfits – содержит секции конфигов костюмов.
artefacts - содержит секции конфигов артефактов.
items - содержит секции конфигов предметов.
monster_items - содержит секции конфигов частей монстров
postprocess - содержит секции конфигов пост. процессов (например: ПНВ).
quest_items - содержит секции конфигов квестовых предметов.
task_manager - содержит секции наград за автоквесты.
unique_items - содержит секции конфигов уникального оружия и костюмов.
У кого есть желание, создать FAQ по основным вопросам моддинга - обращаемся в ЛС.
ColR_iT, это уже простая опечатка, не придирайся. С вылетом погоречился, хотя это точно есть.
function drop_second_slot() local actor = db.actor --# Хешируем объект костюма. local outfit = actor:item_in_slot(6) --# Хешируем объект шлема. local helmet = actor:item_in_slot(2) --# А есть ли что сравнивать? if not helmet then --# Если шлем не надет - выйдем. return end --# Если нет костюма или НЕ надет нужный нам костюм, но шлем пытаемся "напялить", то сбросим шлем в инвентарь. if (not outfin or outfit:section() ~= "protection_outfit") and helmet:section() == "wpn_vintorez" then --# Выбросим наш шлем из инвентаря. actor:drop_item(helmet) --# Заспавним в инвентарь такой же шлем. --# Т.к. слот путой, то в него автоматом поместиться только что заспавненый шлем. local _tmpHelmet = alife():create(helmet:section(), vector(),0,0,actor:id()) --# Подберём назад выброшенный шлем. --# Поскольку слот уже занят, то наш шлем будет в самом инвентаре. actor:transfer_item(helmet, actor) --# Удалим дублирующий шлем из слота, предварительно выбросив его. actor:drop_item(level.object_by_id(_tmpHelmet.id)) if _tmpHelmet then alife():release(_tmpHelmet,true) end end end
FantomICW, да... это я знаю... сделал я иконку маленькой .... но вообще не красиво как то... вот лучше сделать предмет что бы не заходил в слот быстрого действия ... но как?
функция из вот этого поста рабочая на 100%: >>ClicK Me<<.
Не знаю, у меня она неправильно работает. Если у меня в слоте научный комбез и шлем, и я снимаю комбез, то в инвентарь спавнится ещё один шлем. А тот, что был в слоте, так там и остаётся (а может это новый в слот лезет). А потом можно что угодно и куда угодно надевать. То же самое если попытаться этот шлем надеть с другим костюмом: в инвентаре появится второй шлем и всё то же самое.
Wo1fRam, ins33, ребята извините - был не прав, функция не работает должным образом. Выбрасывать второй только что заспавненный предмет не нужно, а точнее нельзя, т.к. на одном апдейте, клиентской части быть не может. В целом работает и без неё, я думал несколько подстраховаться, но вышло наоборот. Wo1fRam, вот то, что тебе нужно:
Код
--# Функция для синхронизации надетого костюма для конкретного шлема. function SyncOutfitAndHelmet () local actor = db.actor --# Хешируем объект костюма. local outfit = actor:item_in_slot(7) --# Хешируем объект шлема. local helmet = actor:item_in_slot(12) --# А есть ли что сравнивать? if not helmet then --# Если шлем не надет - выйдем. return end --# Если нет костюма или НЕ надет нужный нам костюм, но шлем пытаемся "напялить", то сбросим шлем в инвентарь. if (not outfit or outfit:section() ~= "scientific_outfit") and helmet:section() == "helm_protective" then --# Выбросим наш шлем из инвентаря. actor:drop_item(helmet) --# Заспавним в инвентарь такой же шлем. --# Т.к. слот путой, то в него автоматом поместиться только что заспавненый шлем. local _tmpHelmet = alife():create(helmet:section(), vector(),0,0,actor:id()) --# Подберём назад выброшенный шлем. --# Поскольку слот уже занят, то наш шлем будет в самом инвентаре. actor:transfer_item(helmet, actor) --# Удалим дублирующий шлем из слота. alife():release(_tmpHelmet,true) end end --# Все эти махинации нужны для того, чтобы в случае, когда наш шлем не целый или он апгрейжен, --# то в результате он же и останется в инвентаре, а не будет заспавнен новенький.
Надеть шлем нельзя без научного костюма. При этом другие шлемы надеваются как с, так и без костюмов. P.S. Т.к. это только часть задачи - позже поколдую над всей затеей.
FantomICW, если он скопи-пастит твою функцию, то получит вылет.
ColR_iT, разумеется, что получит вылет, если тупо скопипастит. Рассчитано на то, что человек поймет, что такое x,y,z,lvid,gvid и что вместо этого вписывать
FantomICW, Сдаётся мне, что не только тут трабла. Да и вопрос был про схему sr_idle. Причём тут апдейт? mmihaill, если будешь делать через [sr_idle] то: on_actor_inside = {+/-поршень} nil %-/+поршень% в поршень пропиши <action>имя_скрипта.имя_функции</action> или on_actor_inside = {+/-поршень} nil %=имя_функции -/+поршень% ; функция должна быть в xr_effects.script или если используешь xr_effects.script от АМК то можно прописать и в свой скрипт: on_actor_inside = {+/-поршень} nil %=имя_скрипта.имя_функции -/+поршень% Тут поршень нужен, как условие при котором произойдёт событие.
Сообщение отредактировал ins33 - Вторник, 28.05.2013, 19:24