В данной теме вы можете задавать любые вопросы касательно S.T.A.L.K.E.R. моддинга
• Не флудить • Предварительно просматривайте раздел, ведь ответ на ваш вопрос может быть там • В своем вопросе указывайте платформу моддинга — Тень Чернобыля, Чистое небо или Зов Припяти
1. Какая стоит игра, с каким патчем? 2. Какой мод, версия мода? 3. Что правили своими ручками? 4. Лог вылета и последние 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 - содержит секции конфигов уникального оружия и костюмов.
ins33, без проблем. Это не что иное, как паттер шаблона регулярного выражения. (%a[%w_]+),(%d+%.?%d*) Скобки определяют группу захвата. Т.е. весь шаблон находящийся внутри скобок будет помещён в так называемую группу. Функция gmatch как раз и возвращает все найденные группы либо всё совпадение, если групп в паттерне нет. То, что в квадратных скобках - определяет набор возможных символов, которые должны быть найдены. Из набора будет выбран только один символ. %a - любой символ латинского алфавита. По сути это набор символов: [a-zA-Z]; %d - любая арабская цифра. Тоже самое, это замена набора символов: [0-9]; %w - это комбинация %a и %d плюс символ нижнего подчёркивания: [a-zA-Z0-9_]; + - это модификатор, который захватит предыдущий символ (или один из символов в наборе) один или больше раз, но как можно большее количество. Это так называемый "жадный" модификатор. * - модификатор, который захватит предыдущий символ (или один из символов в наборе) ноль или большее раз, но как можно меньшее количество. Этот модификатор называют "не жадным". ? - модификатор, который захватит предыдущий символ (или один из символов в наборе) ноль или один раз. Это "ленивый" модификатор. %. - это экранирование точки в регулярном выражении, нужно для того, чтобы найти эту самую точку. Дело в том, что если просто указать точку (не экранируя её, т.е. не ставя знак процентов в начале), то это будет означать один любой символ. Запятая между группами в данном случае означает саму себя.
На словах смотрится диковато, если не сталкивался с шаблонами, но как-то же нужно начинать понимать, правильно?
Сообщение отредактировал BozKurt - Четверг, 30.06.2016, 00:04
Krachkovskii, без движковых правок, кажется никак. Разве что сделать несколько секций того, что съедаешь, с разным весом и при использовании переспавнивать в рюкзак с меньшим.
Сообщение отредактировал BozKurt - Четверг, 30.06.2016, 00:15
BozKurt, Какие люди))) Ну привет, давно я вас здесь не видел. Повторю свой вопрос : Такую штуку заметил, напрягать стало: когда ГГ в присяде обыскивает труп, тайник или начинает диалог с НПС, он сам поднимается. Вот на видео видно:
Можно как-то это отключить? А то есть ситуации, где эта фишка очень мешает(например спрятался за что-то, хп на 0, в приседе идешь к трупу, обыскиваешь - а ГГ в этот момент сам встает и открывается для противника получая маслину).
Может знаете ?
Сообщение отредактировал TIGER_VLAD - Четверг, 30.06.2016, 00:17
Насчет дубликатов, я понял в чем дело, но в этой ситуации - затуп. Если уникальному оружию дописать спавн, то пишет, что этот спавн - дубликат. Проверил, нигде нету. Убрать секцию нельзя - тогда пулемет вообще не спавнится. Вот основной спавн:
[wpn_m249]:identity_immunities,weapon_probability,default_weapon_params GroupControlSection = spawn_group $spawn = "weapons\m249" ; option for Level Editor $npc = on ; option for Level Editor $prefetch = 8 scheduled = off ; option for ALife Simulator cform = skeleton class = WP_AK74 description = st_wpn_m249_descr
Файл sim_squad_scripted.script функция sim_squad_scripted:show(): Код if not(is_squad_monster[self.player_id]) then local relation = game_relations.get_squad_relation_to_actor_by_id(self.id) if(relation=="friends") then spot = "alife_presentation_squad_friend" elseif(relation=="neutral") then spot = "alife_presentation_squad_neutral" elseif(relation=="enemy") then spot = "alife_presentation_squad_enemy" end else spot = "alife_presentation_squad_monster" end
Файл game_relations.script функция get_squad_relation_to_actor_by_id(squad_id) в самом конце вместо Код return "enemy"
писать Код return get_squad_goodwill_to_actor_by_id(squad_id)
Добавлено (30.06.2016, 14:11) --------------------------------------------- Такая проблема: написал скрипт - если у ГГ есть какой-то из предметов - действие, и поставил на апдейт в биндер. Но даже если у ГГ есть какой-то из айтемов - ничего не происходит. Вот сам скрипт
Код
function has_any_arts() local timeact = time_global() local particle = particles_object("anomaly2\\gravity_idle") local pos = db.actor.position() local x = pos.x local y = pos.y + 3.0 local z = pos.z if db.actor:object("af_medusa_act") ~= nil then news_manager.send_tip(db.actor, "Внимание, пробуждение артефакта прошло успешно!", nil, nil, 5000) particle:play_at_pos(vector():set(x,y,z)) if timeact >= timeact + 20 then xr_effects.remove_item(nil, nil, {"af_medusa_act"}) give_object_to_actor("af_medusa_off") end elseif db.actor:object("af_cristall_flower_act") ~= nil then news_manager.send_tip(db.actor, "Внимание, пробуждение артефакта прошло успешно!", nil, nil, 5000) particle:play_at_pos(vector():set(x,y,z)) if timeact >= timeact + 20 then xr_effects.remove_item(nil, nil, {"af_cristall_flower_act"}) give_object_to_actor("af_cristall_flower_off") end elseif db.actor:object("af_night_star_act") ~= nil then news_manager.send_tip(db.actor, "Внимание, пробуждение артефакта прошло успешно!", nil, nil, 5000) particle:play_at_pos(vector():set(x,y,z)) if timeact >= timeact + 20 then xr_effects.remove_item(nil, nil, {"af_night_star_act"}) give_object_to_actor("af_night_star_off") end end end
Спавню тайник скриптом, пакетами меняю визуал, в итоге спавнится рюкзак (именно модель рюкзака) с текстурой модели которую передаёт пакет. Короче фигово выходит.
Код
local obj = alife():create(spawn_section, p,lv,gv) if obj then local pk = get_netpk(obj) if pk:isOk() then local data = pk:get() data.visual_name = visual pk:set(data) if obj.online == true then db.do_switchings(obj.id) end end end
tbl = {} local str = system_ini():r_string("zone_witches_galantine", "artefacts"); for art, rpob in string.gmatch(str, "(%a[%w_]+),(%d+%.?%d*)") do tbl[art] = rpob; end
Что то могу понять, как будет выглядеть это "artefacts = af_electra_sparkler,0.7, af_electra_flash, 0.25, af_electra_moonlight, 0.05" на выходе.
Такая ерунда: написал в xr_motivator скрипт, который, если ГГ убил НПС с помощью РПГ, Бульдога или М79, запускает партиклы и удаляет тело
Код
local act_slot = db.actor:active_slot() local act_item = db.actor:active_item() local weapon = act_item:section() local particle = particles_object("anomaly2\\body_tear_01") local npos = npc:position() local x = npos.x local y = npos.y + 2 local z = npos.z if act_slot and act_item and db.actor:alive() then if weapon == "wpn_rpg7" or weapon == "wpn_rg-6" or weapon == "wpn_m79" then alife():release(alife():object(npc:id()), true) particle:play_at_pos(vector():set(x,y,z)) end end
Но иногда при смерти ГГ происходит вылет, ругаясь на локальную act_item Уже кучу проверок поставил, но все равно не помогает. Может еще где ошибся? Зараннее спасибо!
Добавлено (30.06.2016, 22:17) --------------------------------------------- Похоже проблему решил - поставил в самом начале проверку на то что ГГ жив.
ins33, во-первых, в str попадёт только "af_electra_sparkler,0.7, af_electra_flash, 0.25, af_electra_moonlight, 0.05". А результатом будет таблица следующего вида:
Добавлено (30.06.2016, 22:26) --------------------------------------------- _S_k_i_F_, так попробуй:
Код
local actor = db.actor local weapons = { "wpn_rpg7" = true, "wpn_rg-6" = true, "wpn_m79" = true } local weapon = actor:active_item() and actor:active_item():section() if actor:alive() and actor:active_slot() and weapon and weapons[weapon] then local particle = particles_object("anomaly2\\body_tear_01") local npos = npc:position() local x = npos.x local y = npos.y + 2 local z = npos.z particle:play_at_pos(vector():set(x,y,z)) alife():release(alife():object(npc:id()), true) end
Сообщение отредактировал BozKurt - Четверг, 30.06.2016, 22:27
BozKurt, спасибо, на заметку возьму. Я уже решил проблему
Код
if db.actor:alive() then local act_slot = db.actor:active_slot() local act_item = db.actor:active_item() local weapon = act_item:section() local particle = particles_object("anomaly2\\body_tear_01") local npos = npc:position() local x = npos.x local y = npos.y + 2 local z = npos.z if act_slot and act_item then if weapon == "wpn_rpg7" or weapon == "wpn_rg-6" or weapon == "wpn_m79" or act_slot == 4 then alife():release(alife():object(npc:id()), true) particle:play_at_pos(vector():set(x,y,z)) end end end