В данной теме вы можете задавать любые вопросы касательно 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 по основным вопросам моддинга - обращаемся в ЛС.
Ребята, как сделать предмет так что бы не выходил в окошки для быстро использование ( ЗП ) , ну , я сделал предмет, и надо делать маленькую иконку что бы можно было туда его засунуть, ну что бы вылета не было... так, может есть другой вариант ?? ну, сделать так что бы можно было закинуть и итем размером более 1х1 ?? либо сделать так что бы не использовался в окно быстро действия ...ну ф1,ф2,ф3,ф4 ... помогите плииизз.. с меня + )
ColR_iT, в том то и дело, что в скриптах не очень разбираюсь, поэтому не знаю куда вписывать.
А вот как я сделал то что на видео: Делал по этой статье
Зарегистрируем нашу функцию в файле bind_stalker.script: Ищем:
function actor_binder:use_inventory_item(obj)
после второго end функции вставляем:
if obj~=nil then новый_скрипт.on_use_item(obj) end
(в конце должно получиться два end)
Далее создаем новый_скрипт.script и вставляем в него такую функцию: function on_use_item(sect) --Тут идет описнаие переменных local actor=db.actor local item_name=sect:section() local actor_pos=db.actor:position() local active_slot=db.actor:active_slot() local active_item=db.actor:active_item() local pistol_in_slot=db.actor:item_in_slot(2) local rifle_in_slot=db.actor:item_in_slot(3) local outfit_in_slot=db.actor:item_in_slot(7) local helm_in_slot=db.actor:item_in_slot(12)
--C переменными закончено, дальше пишем наши колбеки на предметы if item_name=="money_10" then dialogs.relocate_money_to_actor(first_speaker, second_speaker, 100) elseif item_name=="money_50" then dialogs.relocate_money_to_actor(first_speaker, second_speaker, 500) end end
Мой скрипт называется my_havchik.script И вот один из коллбеков оттуда
if item_name=="bread" then if db.actor:item_in_slot(12) then alife():create("bread",db.actor:position(),db.actor:level_vertex_id(),db.actor:game_vertex_id(),db.actor:id()) --возвращаем жратву в инвентарь news_manager.send_tip(db.actor, "st_remove_helm_eat_tip", nil, nil, 5000) else alife():create("bread_75",db.actor:position(),db.actor:level_vertex_id(),db.actor:game_vertex_id(),db.actor:id()) --спавним неполную alife():create("bread_eat",db.actor:position(),db.actor:level_vertex_id(),db.actor:game_vertex_id(),db.actor:id()) --спавним съедобный хлеб local time = time_global() local timer = time+100 level.add_call( function () if time_global() > timer then return true end end, function () db.actor:eat(db.actor:object("bread_eat")) end) end end
Насколько я понимаю и насколько мне объяснили, при использовании "хлеба" идёт проверка на наличие/отсутствие противогаза в слоте. Если есть противогаз в слоте, то "хлеб" спавним обратно и выдаём сообщение. Если нет противогаза, то спавним "надкушенный_хлеб", потом спавним "съедобный_хлеб" и через долю секунды его съедаем. Естественно, то что мы съедаем в инвентаре является фейком - предмет без эффектов и звуков при использовании. Если же нет противогаза, то при использовании фейка спавнится "настоящий" хлеб и через долю секунды съедается.
Делал это по образцам (разве только саму изощрённую схему сам придумал, только оформление подсматривал). Так вот, к чему я веду... Короче, ColR_iT, не знаю как твою функцию вызвать. Или просто понять не могу, потому что в универе экзамены и мозги и так плавятся...
Сообщение отредактировал Wo1fRam - Вторник, 28.05.2013, 14:21
Wo1fRam, Вызывать её надо из bind_stalker.script В функции function actor_binder:update(delta) имя_скрипта.SyncOutfitAndHelmet ()
Но, сдаётся мне она не много не корректна. Т.К. если не будет броника, то будет вылет. Да и в целом ,что то в ней не так. ColR_iT,
Проверь это:
function drop_second_slot() -- в function actor_binder:update(delta) local actor = db.actor local outfit_in_slot = db.actor:item_in_slot(7) local shlem_in_slot = db.actor:item_in_slot(12) if shlem_in_slot == nil then return end if outfit_in_slot == nil or outfit_in_slot:section() ~= "scientific_outfit" or shlem_in_slot:section() ~= "helm_protective" then db.actor:drop_item(shlem_in_slot)--:id()) local fake_item = alife():create("любой_другой_шлем",db.actor:position(),db.actor:level_vertex_id(),db.actor:game_vertex_id(),db.actor:id()) actor:transfer_item(shlem_in_slot, actor) alife():release(fake_item,true) end end
Я сделал бы в место "любой_другой_шлем" фейковый шлем. Хотя...
Добавлено (28.05.2013, 15:44) --------------------------------------------- Точно! Фейк не нужен. пропиши так: local fake_item = alife():create(shlem_in_slot:section(),db.actor:position(),db.actor:level_vertex_id(),db.actor:game_vertex_id(),db.actor:id())
Сори она в обратку работает, сейчас исправлю.
Сообщение отредактировал ins33 - Вторник, 28.05.2013, 15:52
Т.К. если не будет броника, то будет вылет. Да и в целом ,что то в ней не так.
Обоснуй.
И чем твоя функция отличается от моей, кроме как по другому названными переменными и убранными комментариями, да ещё и логически не правильной проверкой?
Сообщение отредактировал ColR_iT - Вторник, 28.05.2013, 15:50
mmihaill, можно через alife():create Я в таких случаях создаю отдельный скрипт. В нем пишу
Код
function spawn_all() local level_name=level.name() if level_name=="zaton" then if has_alife_info("первая инфа") and not has_alife_info("вторая инфа") then alife():create("id_нпс",vector():set(x,y,z),lvid,gvid) db.actor:give_info_portion("вторая инфа") end end end
Надо этот скрипт зарегистрировать в bind_stalker.script Где-нибудь в actor_binder:update(delta) нужно пристроить
Код
мой_скрипт.spawn_all()
Сообщение отредактировал FantomICW - Вторник, 28.05.2013, 15:57
И чем твоя функция отличается от моей, кроме как по другому названными переменными и убранными комментариями, да ещё и логически не правильной проверкой?
Она у меня не работала, поэтому и переписал. Согласен отличие минимально. И в чём отсутствие логики? Хотя ф-ция ещё не полная.
function drop_second_slot() local actor = db.actor local outfit_in_slot = db.actor:item_in_slot(6) local shlem_in_slot = db.actor:item_in_slot(2) if shlem_in_slot == nil then return end if outfit_in_slot == nil or outfit_in_slot:section() ~= "protection_outfit" and shlem_in_slot:section() ~= "wpn_vintorez" then db.actor:drop_item(shlem_in_slot) local fake_item = alife():create(shlem_in_slot:section(),db.actor:position(),db.actor:level_vertex_id(),db.actor:game_vertex_id(),db.actor:id()) actor:transfer_item(shlem_in_slot, actor) alife():release(fake_item,true) end end
работает как надо. Правда на ТЧ. Если прописывал if (not outfin or outfit:section() ~= "scientific_outfit") and helmet:section() == "helm_protective" then то получал вылет.
Сообщение отредактировал ins33 - Вторник, 28.05.2013, 16:03
Камрады, помогите. Захотел подправить Lost world, а там все конфиги находятся в db* файлах, которые не окрываются блокнотом ( он зависает ). Чем их можно открыть?
Сообщение отредактировал kot0797 - Вторник, 28.05.2013, 16:06
В функции function actor_binder:update(delta) имя_скрипта.SyncOutfitAndHelmet ()
Вот что мне надо было
ins33, протестил твою функцию. Шлем одевается только с научным комбезом и не одевается с другими, как и надо. Зато, другой противогаз не одевается, если слот брони вообще пустой. Ладно, с этим постараюсь разобраться.
ColR_iT, попробовал твою функцию вызвать из bind_stalker.script как показал ins33, но в игре почему-то никакого эффекта.