В данной теме вы можете задавать любые вопросы касательно 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 по основным вопросам моддинга - обращаемся в ЛС.
Всем привет, наткнулся на странную и не понятную мне проблему. В игре встретил нечто (можно посмотреть на прикреплённой картинке), где-то минут 7 всё плавало и лагало, когда я направлял свой взор в сторону предполагаемого источника, искажение становилось в этом случае максимальным. После выстрела происходило небольшое зависание на две секунды и потом снова FPS восстанавливалось, так же пули не вылетали из ствола, убить НПС получалось только если стрелять в упор. Меню, инвентарь и прочие GUI элементы не отображались. После того как я свернул-развернул игру всё вернулось на свои места. Тем не менее становится интересно чем это могло быть вызвано, как этого не допустить впредь или как вызвать искусственно.
Всем привет. Есть 2 вопроса по скриптам ТЧ. 1 вопрос: Как скриптово останавливать и запускать тамер? 2 вопрос: Можно ли скриптами задавать параметры иммунитета актора?
Сообщение отредактировал Mel - Воскресенье, 16.03.2014, 16:11
Всем привет. Есть 2 вопроса по скриптам ТЧ. 1 вопрос: Как скриптово останавливать и запускать тамер? 2 вопрос: Можно ли скриптами задавать параметры иммунитета актора?
Я не знаю как останавливать таймер пока он идёт, можно просто поставить на его окончание проверку, которая включит или отключит действие забинженое на него. А запускать так:
amk.g_start_timer("dialog",0,0,1)
Но это если ты используешь библиотеку от AMK.
Ответ на второй вопрос. Не могу утверждать, но скорее всего это сделать нельзя. Хотя велика вероятность, что я могу ошибаться.
local timers={} local g_timers={} local timer_trigger=nil
function actor_update(delta) if not timer_trigger then timer_trigger=game.time() end if timer_trigger<=game.time() then timer_trigger=game.time()+1000 check_timers() end end
function start_timer(name,delay,action) if not delay then return false end
if not action then action = "" end
local time = game.time() --time in seconds since 1970 local a=1 while db.storage[db.actor:id()].pstor["xt"..a] do a=a+1 if a>100 then return false end end save_variable("xt"..a, name) save_variable("xd"..a, time+delay*1000*system_ini():r_float("alife","time_factor")) save_variable("xp"..a, action)
return true end
function g_start_timer(name,delay_d,delay_h,delay_m,action) local time = level.get_time_days()*60*24+level.get_time_hours()*60+level.get_time_minutes() --time in game minutes if delay_d==nil or delay_h==nil or delay_m==nil then return false end
if action==nil then action = "" end
local a=1 while db.storage[db.actor:id()].pstor["gt"..a] do a=a+1 if a>100 then return false end end
function check_timers() local tmp for a=1,100,1 do tmp=load_variable("xt"..a,nil) if tmp~=nil then __timer_found(a) end end
for a=1,100,1 do tmp=load_variable("gt"..a,nil) if tmp~=nil then __g_timer_found(a) end end end
function __timer_found(idx) local time = game.time() --time in seconds since 1970 local name,params if load_variable("xd"..idx, nil)<=time then name=load_variable("xt"..idx, nil) params=load_variable("xp"..idx, nil) del_variable("xt"..idx) del_variable("xd"..idx) del_variable("xp"..idx) oau_reason=name.." "..params __do_timer_action(name,params) return true end return false end
function __g_timer_found(idx) local gtime = level.get_time_days()*60*24+level.get_time_hours()*60+level.get_time_minutes() --time in game minutes local name,params if load_variable("gd"..idx, nil)<=gtime then name=load_variable("gt"..idx, nil) params=load_variable("gp"..idx, nil) del_variable("gt"..idx) del_variable("gd"..idx) del_variable("gp"..idx) oau_reason=name.." "..params __do_timer_action(name,params) return true end return false end
function __do_timer_action(select_string,params_string) if select_string=="name_taimer" then --имя таймера my_file.my_function() --функция которая сработает по истичению end end
function save_variable(variable_name, value) if value==nil then amk.mylog("saving nil into "..variable_name) del_variable(variable_name) else xr_logic.pstor_store(db.actor, variable_name, value) end end
function load_variable(variable_name, value_if_not_found) return xr_logic.pstor_retrieve(db.actor, variable_name, value_if_not_found) end
function del_variable(variable_name) if db.storage[db.actor:id()].pstor[variable_name] then db.storage[db.actor:id()].pstor[variable_name] = nil end end
Ещё нужно добавить апдейты в bind_stalker:
В файле bind_stalker.script в функцию function actor_binder:update(delta) добавляем (перед последним end) amk.actor_update(delta)
Сообщение отредактировал MoDoStRoY - Воскресенье, 16.03.2014, 17:29
Mel, Дополнительно ф-ию писать не стоит, т.к. таймер всё равно висит на апдейте. Поставь проверку поршня в начале скрипта, и если она вернёт true то таймер запущен, есhttp://yandex.ru/ли false то дай значение таймеру nil, хотя это не обязательно, т.к. if * then = false, ф-ция остановится. Перевод в nil, просто очистка остатка времени. Пример остановки есть в самом таймере, при достижении времени.
нашел интересный ствол на базе visual= weapons\desert_eagle\wpn_desert_eagle_hud.ogf (описание интересное ) но не могу найти в игре, есть текстура ,звук , в config только w_desert_eagle ltx. где искать ? подскажите .
Graff46, Тебя это интересует: local p=vector(),lv,gv p.x=db.actor:position().x+number p.y=db.actor:position().y p.z=db.actor:position().z-number lv=db.actor:level_vertex_id() gv=db.actor:game_vertex_id() alife():create("name",vector():set(p),lv,gv)
Добавлено (16.03.2014, 21:07) --------------------------------------------- Если нет, то позишн_информер тебе в помощь
Код
function do_something() local text local vid local gvid local a = vector() local text a = db.actor:position() vid = db.actor:level_vertex_id() gvid = db.actor:game_vertex_id() text = "Позиция:\\nX= "..a.x.."\\nY= "..a.y.."\\nZ= "..a.z.."\\nlevel_vertex= "..vid.."\\ngame_vertex_id= "..gvid news_manager.send_tip(db.actor, text, nil, nil, 30000) end