В данной теме вы можете задавать любые вопросы касательно 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 - содержит секции конфигов уникального оружия и костюмов.
Подскажите, как можно добавить новый режим стрельбы. у оружия есть верхний и нижний ствол как переключатся между ними? Например: fire_modes = 1, -1 ;режим стрельбы ammo_mag_size = 1 ////////РЕЖИМ_1////////// ammo_class = ammo (Например: 7,62x39) ////////Характеристика 1//////// дисперсия... отдача... звуки... анимация... ////////РЕЖИМ_2////////// ammo_class = ammo (Например: 5.45x39) ////////Характеристика 2//////// дисперсия... отдача... звуки... анимация...
Сообщение отредактировал evg - Четверг, 24.11.2016, 01:03
Доброго времени суток. Поставил себе фриплейную сборку Зов Чернобыля 1.4.16, настроил ее под "комфортное брожение" по зоне, решил поставить авторазрядку оружия добавлением скрипта ts_mod_cop.script со следующим содержанием:
Код
--TS MOD для COP-- накопировано и накнопано Tonny S. (aka Tonny на AMK-форуме) --часть функций или их частей выковыряна из AMK, скриптов SAK и др.
--[[-- для использования авторазряжалки следует: - в скрипте bind_stalker.script: - function actor_binder:net_spawn(data) в конец добавить ts_mod_cop.ts_on_net_spawn() --TS_MOD--
- function actor_binder:take_item_from_box(box, item) в конец добавить ts_mod_cop.ts_on_item_take(item) --TS_MOD--
- function actor_binder <img src="/.s/sm/23/surprised.gif" border="0" align="absmiddle" alt="surprised" /> n_item_take (obj) в конец добавить ts_mod_cop.ts_on_item_take(item) --TS_MOD--
- в скрипте _g.script - function start_game_callback() в конец добавить ts_mod_cop.ts_init_module() --TS_MOD--
Внимание! если будет ругаться, можно закомментить/удалить function ts_remove_stuff() она для удаления оружия, для SGM мода --]]--
local notest_time = 0
local weapon_classes_w_ammo = {}
--список аммо для каждой секции. по сути кэш local weapon_ammo = {}
local ts_weapon_remove_radius=280
local tmp_vint = 0 local ts_hud = nil local ts_hud_timeout = 0
--лог в текстовый файл function ts_log(src,msg)
local g_time = game.get_game_time() local t = game.CTime()
t:set(2012,1,1,0,0,1,1) local t_diff = g_time:diffSec(t)
local f=io.open("ts_log.txt","a") --local c_time = time_global() f:write(string.format("(%s)=%s=>%s" ,t_diff,src,msg),"\n" ) f:close()
--[[-- if get_console() then local msg_no_ws = string.gsub("=="..src.."==>"..msg, "%s", "_") get_console():execute(msg_no_ws) end --]]--
end
-- упрощённый вызов новости function ts_tip(news_caption, msg, showtime, timeout) --local news_caption = "Сообщение" local news_text local texture = "ui_iconsTotal_grouping"
if msg then news_text = msg else news_text = "#системная ошибка. перезагрузите ваш PDA" end
if timeout == nil then timeout = 0 end if showtime == nil then showtime = 5 end if timeout == 0 then xr_sound.set_sound_play(db.actor:id(),"pda_tips") end db.actor:give_game_news(news_caption, news_text, texture, timeout*1000, showtime*1000) end
function is_weapon_w_ammo(object) local id = get_clsid(object) if id then return weapon_classes_w_ammo[id] == true else ts_log("is_weapon_w_ammo","ERR.is_weapon_w_ammo:id=nil") return false end end
function ts_get_weapon_ammo_type(sobj) local stpk=net_packet() stpk:w_begin(0) sobj:STATE_Write(stpk) local size=stpk:w_tell()
stpk:r_seek(size-2)
return stpk:r_u8() end
--взято с OGSM function spawn_ammo_in_inv(spawn_item,number,npc) if npc==nil then npc=db.actor end if number > 0 then return create_ammo(spawn_item, npc <img src="/.s/sm/23/tongue.gif" border="0" align="absmiddle" alt="tongue" /> osition(), npc:level_vertex_id(), npc:game_vertex_id(), npc:id(), number) end end
function ts_ammo_discharge(wpn) local name = wpn:name() local ammo_count = wpn:get_ammo_in_magazine() if ammo_count>0 then local ammo_type = ts_get_weapon_ammo_type( alife() <img src="/.s/sm/23/surprised.gif" border="0" align="absmiddle" alt="surprised" /> bject(wpn:id()) ) --ts_log("ts_ammo_discharge", name.." => ammo_count="..ammo_count.." ammo_type="..ammo_type) local section_ammo = ts_ammo_by_num(wpn:section(),ammo_type) if section_ammo~=nil and string.find(section_ammo,"ammo") then local str1 = string.format("боеприпас %s (%d)",string.sub(section_ammo,6,30), ammo_count) --ts_log("ts_ammo_discharge",str1) ts_tip("Патроны",str1) --add_hud("hud_event","Патроны: "..str1) --ts_hud_msg(str1,3) spawn_ammo_in_inv(section_ammo, ammo_count, nil) wpn:unload_magazine() else if section_ammo == nil then section_ammo = "<nil>" end ts_log("ts_ammo_discharge","Ammo section fail: "..section_ammo) end
end end
function parse_names_mod( s ) local t = {}
--отсечка коментария local pos = string.find(s,";") local ps = "" if pos ~= nil and pos > 0 then ps = string.sub(s,1, pos - 1) else ps = s end
for name in string.gfind( ps, "([%w_.\\-]+)%p*" ) do table.insert( t, name ) end
return t end
--найти аммо по номеру function ts_ammo_by_num(section,num)
local ammo_list
if weapon_ammo[section] ~= nil and weapon_ammo[section] ~= "" then ammo_list = weapon_ammo[section] --ts_log("ts_ammo_by_num",section.." => Found: "..ammo_list) else local ltx = system_ini() ammo_list = ltx:r_string(section,"ammo_class") weapon_ammo[section] = ammo_list --ts_log("ts_ammo_by_num",section.." => Loaded: "..ammo_list) end
local t=parse_names_mod(ammo_list)
local cnt = table.getn(t)
if cnt == 0 then return nil elseif num >= cnt then return t[1] else return t[num+1] end
--for n,v in pairs(parse_names(ammo_list)) do -- ts_log("ts_ammo_by_num","....."..n.." -> "..v) --end
end
function ts_remove_weapons() local actorpos = db.actor <img src="/.s/sm/23/tongue.gif" border="0" align="absmiddle" alt="tongue" /> osition() local c_rem = 0 local c_all = 0 local dist = 0 local obj = 0 local sec_name = "" local obj_logic = 0 local names = " " for a=1,65534 do obj = alife() <img src="/.s/sm/23/surprised.gif" border="0" align="absmiddle" alt="surprised" /> bject(a)
if obj and isWeapon(obj) and obj.parent_id and obj.parent_id == 65535 and get_object_story_id(obj.id) == nil and (level.object_by_id(obj.id) == nil or level.object_by_id(obj.id) <img src="/.s/sm/23/tongue.gif" border="0" align="absmiddle" alt="tongue" /> arent() == nil) then
if sec_name and (string.find(sec_name,"wpn_") or string.find(sec_name,"gren") ) and (obj_logic == nil or (obj_logic ~= nil and not obj_logic:section_exist("secret"))) then dist = actorpos:distance_to(obj.position) local l_obj = level.object_by_id(obj.id) if (l_obj) and (l_obj:condition()<98) and (dist > ts_weapon_remove_radius) then names = names..sec_name.." " remove_item_by_id(obj.id) c_rem = c_rem + 1 end end end end ts_log("ts_remove_weapons","Removed: "..c_rem.." from "..c_all..names) --ts_tip("System.cleaner","Removed: "..c_rem.." from "..c_all) --ts_hud_msg("System.cleaner: Removed "..c_rem.." from "..c_all,3) end
function ts_remove_stuff()
ts_remove_weapons() ts_weapon_remove_radius = 350 end
function ts_on_net_spawn() --ts_log("ts_on_net_spawn","..") notest_time = 0
--ts_init_module() -- перенесено в _g.script
end
function test_discharge_weapon(ItemObj) --ts_log("test_discharge_weapon") if ItemObj == nil then return false end
if notest_time == 0 then notest_time = game.time()+6000 elseif notest_time>game.time() then return false elseif is_weapon_w_ammo(ItemObj) then local ItemId = ItemObj:id()
local PistolSlot = db.actor:item_in_slot(1) if PistolSlot then IdPistol = PistolSlot:id() end
local AutomaticSlot = db.actor:item_in_slot(2) if AutomaticSlot then IdAutomat = AutomaticSlot:id() end
if ItemId ~= IdPistol and ItemId ~= IdAutomat then ts_ammo_discharge(ItemObj) end end end
function ts_on_item_take(obj) if notest_time>game.time() then return false end
--ts_log("ts_on_item_take","...") if obj ~= nil then -- ts_log("ts_on_item_take",obj:name()) test_discharge_weapon(obj) end end
function ts_on_item_drop(obj) if notest_time>game.time() then return false end
--ts_log("ts_on_item_drop","...") if obj ~= nil then -- ts_log("ts_on_item_drop",obj:name()) test_discharge_weapon(obj) end end
и столкнулся с проблемами следующего характера: файла bind_stalker.script не существует в сборке (пробовал решить переносом файла со сборки 1.3.2), в перенесенном файле не оказалось функций function actor_binder:take_item_from_box(box, item), function actor_binder n_item_take (obj), function actor_binder n_item_drop (obj). Попробовал добавить их из оригинального файла - перестала запускаться игра. Помогите пожалуйста советом или поделитесь готовым файлом (папкой). Заранее благодарен.
Сообщение отредактировал Sanchess8 - Четверг, 24.11.2016, 11:22
Есть чистая локация с одним смартом. При попытке заспаунить на нем сквад, ловлю вылет
Создавал сквад по уроку с x-ray-sdk
создал смарт-террейн со смарт-каверами для трех сидящих у костра сталкеров, прописал все указанные в уроке конфиги)
Но не могу разобраться с вэйпоинтом. Он выступает в качестве точки спауна? И как его правильно разместить - выбрать удобное место для спауна и добавить точки пути до смарт-террейна? Или по-другому? И как правильно его обозвать? Допустим, у меня Кордон и я в Way name указываю esc_village_kampfire_kamp_1. Заранее спасибо за ответы.
Воспользуйся поиском по теме, ответ на твой вопрос тут есть. BoBaH_671
Сообщение отредактировал BoBaH_671 - Четверг, 24.11.2016, 16:02
Sanchess8, Если в моде нет ф-ла bind_stalker.script то его надо брать из оригинала.
ЦитатаSanchess8 ()
не оказалось функций function actor_binder:take_item_from_box(box, item), function actor_binder on_item_take (obj), function actor_binder on_item_drop (obj)
Такого быть не может!
ЦитатаSanchess8 ()
Попробовал добавить их из оригинального файла - перестала запускаться игра.
Тут бы лог не помешал. Да и покажите, как дописали нужные строчки.
self.weather_manager = level_weathers.get_weather_manager() --alun_utils.debug_write("actor init end") end
---------------------------------------------------------------------------------------------------------------------- function actor_binder:net_spawn(data) --printf("actor net spawn") --alun_utils.debug_write("actor net spawn start") level.show_indicators() self.bCheckStart = true self.weapon_hide = false -- спрятано или нет оружие при разговоре. self.weapon_hide_in_dialog = false if object_binder.net_spawn(self,data) == false then return false end db.add_actor(self.object) db.add_enemy(self.object) db.actor.deimos_intensity = self.deimos_intensity self.deimos_intensity = nil if self.st.disable_input_time == nil then level.enable_input() end death_manager.init_drop_settings() self.task_manager = task_manager.get_task_manager() self.spawn_frame = device().frame self.already_jumped = false self.loaded = false bind_stalker_ext.actor_on_net_spawn(self) self.weather_manager:reset() --alun_utils.debug_write("actor net spawn end")
return true end ---------------------------------------------------------------------------------------------------------------------- function actor_binder:net_destroy() --alun_utils.debug_write("actor net destroy start")
xr_sound.stop_sounds_by_id(self.object:id())
if(actor_stats.remove_from_ranking~=nil)then actor_stats.remove_from_ranking(self.object:id()) end
-- remove callbacks local t = { -- vanilla callback.inventory_info, callback.on_item_take, callback.on_item_drop, callback.task_state, callback.trade_sell_buy_item, callback.take_item_from_box, callback.use_object,
-- coc callback.hit, callback.key_press, callback.key_release, callback.key_hold, callback.actor_before_death, callback.on_attach_vehicle, callback.on_detach_vehicle, callback.on_use_vehicle, callback.weapon_jammed, callback.weapon_zoom_in, callback.weapon_zoom_out } for i=1,#t do if (t[i]) then self.object:set_callback(t[i]) end end
if(_G.amb_vol~=0) then get_console():execute("snd_volume_eff "..tostring(_G.amb_vol)) _G.amb_vol = 0 end if(_G.mus_vol~=0) then get_console():execute("snd_volume_music "..tostring(_G.mus_vol)) _G.mus_vol = 0 end if sr_psy_antenna.psy_antenna then sr_psy_antenna.psy_antenna:destroy() sr_psy_antenna.psy_antenna = false end
bind_stalker_ext.actor_on_net_destroy(self)
object_binder.net_destroy(self)
--alun_utils.debug_write("actor net destroy end") end ---------------------------------------------------------------------------------------------------------------------- function actor_binder:reinit() object_binder.reinit(self)
--alun_utils.debug_write("actor reinit")
local npc_id = self.object:id() db.storage[npc_id] = empty_table(db.storage[npc_id]) self.st = db.storage[npc_id]
function actor_binder:update(delta) object_binder.update(self, delta) --alun_utils.debug_write("actor update START") if not (db.actor:alive()) then return end
if self.bCheckStart then -- first update after netspawn bind_stalker_ext.actor_on_first_update(self,delta) --printf("SET DEFAULT INFOS") if not has_alife_info("global_dialogs") then self.object:give_info_portion("global_dialogs") end if not has_alife_info("level_changer_icons") then self.object:give_info_portion("level_changer_icons") end pda.fill_primary_objects() self.object:activate_slot(self.loaded_active_slot or 0) self.bCheckStart = nil db.actor.afterFirstUpdate = true end
-- Обновление отключения ввода с клавиатуры. if (self.st.disable_input_time ~= nil and game.get_game_time():diffSec(self.st.disable_input_time) >= self.st.disable_input_idle) then level.enable_input() self.st.disable_input_time = nil end
-- Апдейт прятание оружия игрока во время диалога if self.object:is_talking() then if self.weapon_hide_in_dialog == false then self.object:hide_weapon() --printf("hiding weapon!!!") self.weapon_hide_in_dialog = true end else if self.weapon_hide_in_dialog == true then --printf("restoring weapon!!!") self.object:restore_weapon() self.weapon_hide_in_dialog = false end end
-- обновление пси-антенны if sr_psy_antenna.psy_antenna then sr_psy_antenna.psy_antenna:update(delta) end
-- Апдейт доступности для симуляции. simulation_objects.get_sim_obj_registry():update_avaliability(alife():actor())
bind_stalker_ext.actor_on_update(self,delta)
local tg = time_global() if (self.last_update and tg < self.last_update) then --alun_utils.debug_write("actor update END") return end self.last_update = tg + 3000
pda.fill_sleep_zones() new_tasks.task_spec()
treasure_manager.get_treasure_manager():update()
--alun_utils.debug_write("actor update END") end ---------------------------------------------------------------------------------------------------------------------- function actor_binder:save(packet) set_save_marker(packet, "save", false, "actor_binder") object_binder.save(self, packet) set_save_marker(packet, "save", true, "actor_binder")
if (USE_MARSHAL) then if (utils.level_changing()) then alun_utils.save_var(db.actor,"heli_enemy_flag",false) SendScriptCallback("on_level_changing") end self:save_state(alife_storage_manager.get_state()) return end --alun_utils.debug_write("--------------- actor_binder:save -------- Start") set_save_marker(packet, "save", false, "actor_binder")
if (utils.level_changing()) then alun_utils.save_var(db.actor,"heli_enemy_flag",false) end
--alun_utils.debug_write("--------------- actor_binder:save -------- End") end
function actor_binder:load(reader) set_save_marker(reader, "load", false, "actor_binder") object_binder.load(self, reader) set_save_marker(reader, "load", true, "actor_binder") if (USE_MARSHAL) then self:load_state(alife_storage_manager.get_state()) bind_stalker_ext.actor_on_load(self,reader) return end --alun_utils.debug_write("actor_binder:load start")
local game_difficulty_by_num = { [0] = "gd_novice", [1] = "gd_stalker", [2] = "gd_veteran", [3] = "gd_master" } local dif = game_difficulty_by_num[reader:r_u8()] if not (dif) then abort("actor_binder:load save corrupted!") return end get_console():execute("g_game_difficulty "..dif) self.st.disable_input_time = utils.r_CTime(reader,"bind_stalker")
xr_sound.actor_load(reader) --[[ local n = reader:r_stringZ() if(n~="nil") then self.last_level_name = n end --]] xr_statistic.load(reader) treasure_manager.get_treasure_manager():load(reader) task_manager.get_task_manager():load(reader)
self.loaded_active_slot = reader:r_u8()
local stored_achievement_time = reader:r_bool() if stored_achievement_time == true then self.last_detective_achievement_spawn_time = utils.r_CTime(reader,"bind_stalker") end stored_achievement_time = reader:r_bool() if stored_achievement_time == true then self.last_mutant_hunter_achievement_spawn_time = utils.r_CTime(reader,"bind_stalker") end
--alun_utils.debug_write("actor_binder:load end") end
if (sr_psy_antenna.psy_antenna and sr_psy_antenna.psy_antenna.global_state ~= 0 and not utils.level_changing()) then sr_psy_antenna.psy_antenna:save_state(m_data) end
if (m_data.pstor_all and m_data.pstor_all[0]) then db.storage[0].pstor = m_data.pstor_all[0] m_data.pstor_all[0] = nil end
if (m_data.pstor_ctime and m_data.pstor_ctime[0]) then db.storage[0].pstor_ctime = m_data.pstor_ctime[0] m_data.pstor_ctime[0] = nil end
m_data.actor_binder = nil --alun_utils.debug_write(strformat("actor_binder:load_state %s AFTER",self.object:name())) end
добавил недостающие функции в конце скрипта
Код
---------------------------------------------------------------------------------------------------------------------- function actor_binder:take_item_from_box(box, item) local box_name = box:name() ts_mod_cop.ts_on_item_take(item) --TS_MOD-- end
function actor_binder <img src="/.s/sm/23/surprised.gif" border="0" align="absmiddle" alt="surprised" /> n_item_drop (obj) ts_mod_cop.ts_on_item_drop(obj) --TS_MOD-- end ----------------------------------------------------------------------------------------------------------------------
function actor_binder <img src="/.s/sm/23/surprised.gif" border="0" align="absmiddle" alt="surprised" /> n_item_take (obj) printf("on_item_take [%s]", obj:name()) if isArtefact(obj) then local anomal_zone = bind_anomaly_zone.parent_zones_by_artefact_id[obj:id()] if anomal_zone ~= nil then anomal_zone <img src="/.s/sm/23/surprised.gif" border="0" align="absmiddle" alt="surprised" /> n_artefact_take(obj) else bind_anomaly_zone.artefact_ways_by_id[obj:id()] = nil end local artefact = obj:get_artefact() artefact:FollowByPath("NULL",0,vector():set(500,500,500)) xr_statistic.inc_founded_artefacts_counter(obj:id()) --[[ local s_art = alife() <img src="/.s/sm/23/surprised.gif" border="0" align="absmiddle" alt="surprised" /> bject(obj:id()) if(s_art) then xr_statistic.inc_founded_artefacts_counter(s_art:section_name()) else xr_statistic.inc_founded_artefacts_counter() end ]] end treasure_manager.get_treasure_manager() <img src="/.s/sm/23/surprised.gif" border="0" align="absmiddle" alt="surprised" /> n_item_take(obj:id())
ts_mod_cop.ts_on_item_take(obj) --TS_MOD-- end
такой лог ошибки получил
FATAL ERROR [error]Expression : <no expression> [error]Function : CScriptEngine::lua_error [error]File : ..\xrServerEntities\script_engine.cpp [error]Line : 193 [error]Description : fatal error [error]Arguments : LUA error: ...r coll of chernobyl\gamedata\scripts\bind_stalker.script:190: attempt to index global 'game_stats' (a nil value)
удаляю файл и игра идет как ни в чем не бывало. Попробую в просторах нэта найти оригинальный файл, может в сборочной версии проблема или пару строк потерял пока редактировал.
Сообщение отредактировал Sanchess8 - Четверг, 24.11.2016, 18:52
Опять же такого скрипта - bind_stalker_ext.script. нет ни в одной сборке (1.3.2, 1.4.16) возможно они скрыты в ресурсных файлах с расширениями *.db0-5. Спасибо за помощь. Если не одолеет лень-матушка я туда еще доберусь))
Сообщение отредактировал Sanchess8 - Четверг, 24.11.2016, 19:49
Всем привет! У меня вопрос концептуального характера: могу ли я из какого либо готового мода, куда вшит определенный оружейный пак, вытянуть модель и анимации для конкретного ствола и заменить им такой же ствол в другом моде? Понимаю, что для завсегдатаев темы вопрос может звучать глупо, но в моддинге я совершенно не разбираюсь, однако если такое возможно, то охотно возьмусь осваивать. Спасибо.
Сообщение отредактировал Shdow_Runner - Пятница, 25.11.2016, 11:00
Shdow_Runner, да конечно можно, только конфиг придётся немного переработать в плане того, как будет смотреться на худе оружия. Придётся так же посмотреть какие модели подствольника/глушителя/прицела используются, если стандарт то придётся только худ, партиклы и анимацию оружия смотреть/править. Если нет то переносить и их.
Сообщение отредактировал Hoperise - Пятница, 25.11.2016, 11:06
Hoperise, однозначно понял, что надо идти учить матчасть и теорию)))) Пойду шерстить форумы да разбираться. Спасибо за ответ!
Добавлено (25.11.2016, 16:26) --------------------------------------------- В продолжение темы: как работает модель урона на Х-Ray 1.6? Есть регистрация попаданий в разные части тела, определение типа прилетевшего боеприпаса?