В данной теме вы можете задавать любые вопросы касательно 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 - содержит секции конфигов уникального оружия и костюмов.
Такая проблема: написал функцию для замены визуала НПС
Код
function wf_a3_set_npc_zombied(actor, npc, p) local visual = npc:get_visual_name() npc:set_character_community("zombied", 0, 0) npc:set_visual_name(tostring(visual.."_zombied")) end
Но при вызове НПС сворачиваются вот в это (то есть если я правильно понял - у них сбрасываются текущие анимации)
Как восстановить им нормальное состояние? Пробовал сразу после set_visual_name вызвать
Код
function stop_animation(actor, npc,p) local state_mgr = db.storage[npc:id()].state_mgr if state_mgr == nil then return end
Такая проблема: написал функцию для замены визуала НПС
Методы движка работают корректно при переходе НПС из OFFLINE в ONLINE Прописываются в скриптах в методах net_spawn(sobject)
Поэтому я делал по другому: НПС "ждал", когда ГГ "отвернется". Тогда быстрый перевод НПС в offline и возврат в online с заиеной визуала и группировки.
З.Ы. И не забывайте, что движковый метод set_visual_name "писался" разрабами под кат-сцены с ГГ. Поэтому такая смена визуала у НПС автоматом включает его бессмертие.
Сообщение отредактировал makdm - Вторник, 26.09.2017, 18:21
ЗП. Можно ли както получить информацию о деньгах НПС в ОФФЛАЙНЕ? Насколько я знаю инфа о деньгах НПС запакована в net packet, МБ есть способ получения денег нпс без нет пакета?
Сообщение отредактировал xr_Sanya - Вторник, 26.09.2017, 21:52
сделал с переводом в он/офф-лайн, вылетает без лога stack trace:
_S_k_i_F_, немного не так. Вот так пишите в xr_effects.script:
npc_id_tbl = {}
function wf_a3_set_npc_zombied( actor, npc ) local name = npc:name() local npc_id = npc:id() db.actor:give_info_portion( name ) npc_id_tbl[ name ] = npc:get_visual_name() local s_obj = alife():object( npc_id ) if s_obj.group_id ~= 65535 then npc_id = s_obj.group_id end npc:set_character_community( "zombied", 0, 0 ) alife ():set_switch_online ( npc_id, false ) alife ():set_switch_offline ( npc_id, true )
local make_offline = function() if not s_obj.online then return true end end local make_online = function() alife ():set_switch_online ( npc_id, true ) alife ():set_switch_offline ( npc_id, false ) end level.add_call( make_offline, make_online ) end
А в xr_motivator.script в метод motivator_binder:net_spawn(sobject) пишите:
local name = self.object:name() if has_alife_info( name ) then disable_info( name ) local old_visual = xr_effects.npc_id_tbl[ name ] local new_visual = old_visual.."_zombied" self.object:set_visual_name( new_visual ) end
Еще раз говорю, что метод set_visual_name написан для кат-сцен. Там ведь как, проспавнили чувака, поменяли его визуал на визуал ГГ, отыграли сцену и удалили чувака. Поэтому метод меняет только UPDATE часть нет-пакета. После сейв\лоад у чувака будет старый визуал. Для изменения визуала "навсегда" нужен другой подход : перевод НПС в оффлайн, перепаковка STATE части нет-пакета, возврат НПС в онлайн. Но... это совсем другие скрипты.
МБ есть способ получения денег нпс без нет пакета?
xr_Sanya, Нет такого способа. А вас что, смущает нет-пакет? Не нужно его бояться. Нужно просто приложить усилие и разобраться в нем. Получение денег у НПС по его story_id: Где-то в каком-то скрипте получаем количество денег у НПС со story_id = stalker_has_story_id :
local money = get_money_by_story_id("stalker_has_story_id ")
В _G.script пишем функцию:
function get_money_by_story_id( story_id ) local npc_id = get_story_object_id( story_id ) if npc_id == nil then abort( "There is no story object with id [%s]", story_id ) end local s_obj = alife():object( npc_id ) local packet = net_packet() packet:w_begin( 0 ) s_obj:STATE_Write( packet ) packet:r_seek( 2 ) return packet:r_s32() end
Вот и всех делов - то.
Сообщение отредактировал makdm - Среда, 27.09.2017, 14:04
Нашёл метод для тушения костра в зп, написал кое какой код, вставил в actor_binder:update и при заходе в игру ловлю вот такой вот вылет:
Код
Expression : !m_error_code Function : raii_guard::~raii_guard File : D:\prog_repository\sources\trunk\xrServerEntities\script_storage.cpp Line : 748 Description : No such operator defined
Вот, собственно, код:
Код
for i = 1, 65535 do local s = alife():object(i) if s then local o = level.object_by_id(s.id) if o then local cf = o:get_campfire() if cf and o:position():distance_to(db:actor():position()) < 5 then cf:turn_off() end end end end
buffy, Зачем писать настолько кривой код если достаточно в скрипте bind_campfire.script расскоментировать строки отвечающие за управление кострами? И сделать этот код таким каким тебе нужно.
Сообщение отредактировал denis2000 - Среда, 27.09.2017, 15:59
denis2000, Да я так для теста написал, ну ладно и на этом спасибо. Так в чём собственно была то ошибка, как я понял какого-то оператора нет.
Добавлено (27.09.2017, 16:07) --------------------------------------------- denis2000, И да, а где происходит инициализация этого метода campfire_binder:__init? ну а точнее есть ли экземпляр этого класса?
buffy, Всякий ли объект имеет такой метод: local cf = o:get_campfire()? Скорее всего не каждый. Что будет если вызвать отсутствующий метод? Правильно - вылет.