Войти на сайт Регистрация Лента форума Пользователи Правила сайта Поиск по форуму
Модератор форума: denis2000, FantomICW  
Модостроение. Общие вопросы и ответы
denis2000Дата: Сб, 15.06.2013, 11:51 | Сообщение # 1
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
Награды: 35
Репутация: [ 1918 ]

Помощь тем кто хочет знать больше о игре и модах

Если у вас появились вопросы по модостроению в игре S.T.A.L.K.E.R. Задавайте их в этой теме - умные головы,
модосторители и просто разбирающиеся в программировании люди вам ответят.


Много интересного материала здесь (wiki), Lua_help.script, Help из SDK 0.7

Сборник модостроения ЗП v10.10.11 (автор: XOBAH): *.CHM, *.HTML
[cut noguest=Если у вас не открывается файл CHM]Если у вас не открывается файл:
1. Запустите [Пуск]=>[Выполнить] (либо хот-кей [WIN]+[R])
2. Введите команду (без кавычек) "regsvr32 %windir%\system32\hhctrl.ocx"
3. Если вылезло окно об успешном завершении вы все сделали правильно и можете перезагружать компьютер (а может и не надо)
Также: файлы МОГУТ не открываться если в пути к файлу есть: символы кириллицы, "_", "#"
Также: есть не стандартные программы-просмоторщики CHM файлов. Например: FBReader[/cut]
[cut=Где найти лог игры после вылета]Что такое LOG ошибки, и как мне его найти?
Это система отладки происходивших вылетов, которая подается игрой в форме текста, хотя не всегда.
Для того чтоб найти LOG необходимо зайти вот сюда:

В Win хр лог находится:

C:\Documents and Settings\All Users\Документы\S.T.A.L.K.E.R. - Зов Припяти\logs

Затем открываете первый файл в формате TXT, и в нем отбираете с низу 25 строчек. После кидаете эти 25 строчек в сообщение на форум.

В Win7 лог находится C:\Users\Public\Documents\S.T.A.L.K.E.R. - Зов Припяти\logs

Путь к папке с логом можно найти открыв файл fsgame.ltx который находится в корневой директории ЗП, за это отвечает строка:
...
$app_data_root$ = true | false| $fs_root$| users\
(тут мы указываем что папка пользователя, будет хранится рядом с Fsgame.ltx)
...
$logs$ = true| false| $app_data_root$| logs\
(а тут мы указываем что в папке пользователя, в подпапке Logs будут храниться наши логи)
...
[/cut][cut=Получение более подробной информации о вылете (ХОВАН)]
Открываем файл _g.script и ищем такую функцию: function abort(fmt, ...)
Там есть заккомментированная строчка "--error_log(reason)", ее и надо расскомментировать, должно получиться вот так:
Код
function abort(fmt, ...)
                     local reason = string.format(fmt, ...)
                     error_log(reason)
end

Вот для примера два одинаковых вылета, первый с функцией по умолчанию, второй - с поправленной функцией

Первый:
Код
Expression    : !m_error_code
Function      : raii_guard::~raii_guard
File          : D:\prog_repository\sources\trunk\xrServerEntities\script_storage.cpp
Line          : 748
Description   : ....a.l.k.e.r. - Зов Припяти\gamedata\scripts\_g.script:478: bad argument #2 to 'format' (string expected, got nil)

Второй:
Код
Expression    : 0
Function      : ErrorLog
File          : D:\prog_repository\sources\trunk\xrServerEntities\script_engine_script.cpp
Line          : 49
Description   : 'Attempt to read a non-existant string field 'path_walk' in section 'walker@mechanic'

[/cut]


Перед тем, как задать вопрос в этой теме, прочтите все предыдущие страницы,
статьи в wiki по ссылке из шапки и соседнюю тему "Курс молодого бойца",
возможно Ваш вопрос уже рассматривался.


Если произошел вылет - выкладываем лог! Вопрос ставим четко, не забываем указывать версию игры, установленные моды их версии, установленные фиксы модов и подробно ваши правки.
Помните чем подробнее вопрос, тем точнее ответ.


Посты, для которых есть свои категории, из этой темы будут удаляться или перемещаться в соответсвующую тему. Персональных извещений в ЛС о переносе\удалении поста не будет, ищите сами. Учитывайте, что в системах Ucoz тема не обновляется в статистике при переносе поста.
Посты, написанные здесь-же после переноса, будут расцениваться как кросспостинг, со всеми вытекающими


[cut noguest=Первый юбилей нашей темы]

Здравствуйте господа модостроители, и все так или иначе причастные к этому.
Нашей теме исполнился 1 год.
От души поздравляю Всех Вас дорогие друзья, творческих успехов.
Хочу так же выразить отдельную благодарность denis2000 и ХОВАН.

tracker 23.06.11



[/cut]
 
НаблюдательДата: Чт, 03.06.2021, 21:14 | Сообщение # 3031
Ветеран
Пользователи
Сообщений: 400
Награды: 1
Репутация: [ 59 ]

Здравствуйте Всем! Люди добрые, поможите чем можите! cry Играю в SGM 1.7. С некоторых пор, при попытке быстрого сохранения ловлю вылет:

Expression : 0
Function : ErrorLog
File : D:\prog_repository\sources\trunk\xrServerEntities\script_engine_script.cpp
Line : 49
Description : Smart_terrain [zat_sim_15] population can't be less than zero!!!

Сразу было редко, а сейчас почти всё время. Начал ловить этот вылет даже при попытке сохранить игру через меню. Что означает сия беда и как её прекратить? sad
 
sergej5500Дата: Пт, 04.06.2021, 20:49 | Сообщение # 3032
Полевой Исследователь
Ученые сталкеры
Сообщений: 3793
Награды: 29
Репутация: [ 1355 ]

Наблюдатель,
Покажи содержимое файла zat_sim_15.
 
НаблюдательДата: Пт, 04.06.2021, 21:07 | Сообщение # 3033
Ветеран
Пользователи
Сообщений: 400
Награды: 1
Репутация: [ 59 ]

Цитата sergej5500 ()
Покажи содержимое файла zat_sim_15.

[cut][smart_terrain];zat_sim_15
squad_id = 21
spawn_point = zat_sim_15_spawn_point
max_population = 2
respawn_params = respawn@zat_alfa_sim_15

[respawn@zat_alfa_sim_15]
zat_alfa_force_novice
zat_alfa_force_regular
zat_alfa_force_experienced
zat_alfa_force_veteran
zat_alfa_force_master

[zat_alfa_force_novice]
spawn_squads = zat_alfa_squad_4_novice
spawn_num = {+opt_activate_alfa_force =check_actor_rank(0:100)} 0, 0

[zat_alfa_force_regular]
spawn_squads = zat_alfa_squad_4_regular
spawn_num = {+opt_activate_alfa_force =check_actor_rank(100:200)} 1, 0

[zat_alfa_force_experienced]
spawn_squads = zat_alfa_squad_4_experienced
spawn_num = {+opt_activate_alfa_force =check_actor_rank(200:350)} 1, 0

[zat_alfa_force_veteran]
spawn_squads = zat_alfa_squad_4_veteran
spawn_num = {+opt_activate_alfa_force =check_actor_rank(350:600)} 1, 0

[zat_alfa_force_master]
spawn_squads = zat_alfa_squad_4_master
spawn_num = {+opt_activate_alfa_force =check_actor_rank(600)} 1, 0[/cut]

Добавлено (04.06.2021, 21:22)
---------------------------------------------

Цитата sergej5500 ()
файла zat_sim_15.

Может альфовцев много спавнится? Я ничего не делал со спавном альфы, просто вспомнил, что раз на Затоне, их заспавнилось просто несколько групп за мостом Преображенского. Т.е. они заспавнились не по всему Затону, а в кучу?! Может в этом причина? Я уже встречал когда-то подобный вопрос где-то, но к сожалению тогда он меня не касался и я не сохранил на него ответ! sad

Добавлено (05.06.2021, 16:28)
---------------------------------------------
sergej5500,
Нашёл такой же вылет в группе ВК: "Фиксы для SGM 2.2 SeregA-Lus (И не только)". Решения никто не предложил. Но Вы натолкнули меня на идею. С последней сохранки, всё бросил, отправился на Затон и вынес все отряды "Альфы", как и все массовые скопления мутантов. Вроде помогло. Опять начал сохраняться. Не знаю правда, как долго.

 
denis2000Дата: Пн, 07.06.2021, 09:07 | Сообщение # 3034
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
Награды: 35
Репутация: [ 1918 ]

Наблюдатель, Да, очевидная причина, судя по всему, это излишний спавн отрядов Альфы. Их нужно периодически уничтожать или отключить альфу в принципе в файле mod_params.ltx если не собираетесь перманентно с ними воевать, но это желательно делать сразу с начала игры.

"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..."
(Чугунный всадник)
 
НаблюдательДата: Вт, 15.06.2021, 20:06 | Сообщение # 3035
Ветеран
Пользователи
Сообщений: 400
Награды: 1
Репутация: [ 59 ]

Цитата denis2000 ()
Да, очевидная причина, судя по всему, это излишний спавн отрядов Альфы.

Здравствуйте Всем! Уважаемый denis2000, хочу спросить, у меня в этом вылете:
Expression : 0
Function : ErrorLog
File : D:\prog_repository\sources\trunk\xrServerEntities\script_engine_script.cpp
Line : 49
Description : Smart_terrain [zat_sim_14] population can't be less than zero!!!
Перманентно меняется номер файла zat_sim_... Сначала был 15, потом 10, теперь 14? Эти файлы что, отвечают за спавн разных сквадов Альфы? Ну типа по статусу? smile
 
denis2000Дата: Ср, 16.06.2021, 09:30 | Сообщение # 3036
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
Награды: 35
Репутация: [ 1918 ]

Наблюдатель, Нет это просто имена смартов.

"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..."
(Чугунный всадник)
 
НаблюдательДата: Чт, 24.06.2021, 00:41 | Сообщение # 3037
Ветеран
Пользователи
Сообщений: 400
Награды: 1
Репутация: [ 59 ]

Здравствуйте Всем! Продолжаю играть в старый добрый SGM 1.7. С монолитавцами случилось такое чудо - вижу раненого, подхожу, даю аптечку, получаю деньги за спасение. Раненый продолжает лежать и просить аптечку. Снова даю аптечку, снова получаю деньги за спасение, но на 100 рублей больше и опять раненый продолжает лежать и просить аптечку. Снова даю ему аптечку... и так до бесконечности. Ничего не правил монолиту, сейчас просто состою в нём. "Ничего нэ дэлал, просто вошёл, да э-э-э! Мамой килянусь...!" biggrin Можно как то сделать, что бы монолитовцы вставали, как все, после получения аптечки? smile
 
sergej5500Дата: Чт, 24.06.2021, 23:03 | Сообщение # 3038
Полевой Исследователь
Ученые сталкеры
Сообщений: 3793
Награды: 29
Репутация: [ 1355 ]

Наблюдатель,
Монолитовцам лечиться нельзя. Так решили разрабы Сталкера. Чтобы разрешить им лечение, нужно в файле xr_wounded.script поправить функцию init_wounded.

В секции if npc_community == "monolith" then

def.help_dialog = nil заменить на def.help_dialog = "dm_help_wounded_medkit_dialog"
def.use_medkit = false заменить на def.use_medkit = true
 
НаблюдательДата: Пн, 01.11.2021, 01:56 | Сообщение # 3039
Ветеран
Пользователи
Сообщений: 400
Награды: 1
Репутация: [ 59 ]

Прветствую, честной Народ! Други, подскажите плиз, а что надо подправить в игре, что бы можно было давать аптечки врагам, после чего они бы становились нейтралами, как в некоторых модах? Иногда те же наёмники ну прелесть, как себя ведут, даже добивать не хочется. И нейтральными их делать не хочу, что бы скучно не было. smile Если конечно для этого надо не глубоко лезть в скрипты.
 
asd123Дата: Сб, 13.11.2021, 18:53 | Сообщение # 3040
Mr. «Магма»
Военные сталкеры
Сообщений: 1386
Награды: 10
Репутация: [ 423 ]

Здравствуйте! Очень интересует вопрос по динамической музыке. Хочу добавить несколько боевых тем, за основу беру скрипты от ЧН чтобы была вариативность как там. Однако, столкнулся с проблемой: не могу понять за что отвечают lo, hi и знаки ">" и "<" в структуре перехода треков. Отрывок из файла с темами(оригинал ЧН):
[cut=xrs_dynamic_music_themes.script]
--[[
xStream 02.2008
]]

themes={
{
maps = "stancia_2",
files={
intro = "music\\combat\\aes_intro",
intro_2 = "music\\combat\\aes_intro",
main = "music\\combat\\aes_main"
},
graph={
null={
main = {"hi",">"}
},
main={
main = {"lo","<"},
main = {"lo",">"},
main = {"hi",">"}
}
}
},
{
maps = "garbage, darkvalley, agroprom, agroprom_u, yantar, red_forest, military, limansk, hospital",
files={
intro = "music\\combat\\theme1_intro",
intro_2 = "music\\combat\\theme1_intro_2",
wait_1 = "music\\combat\\theme1_wait_1",
wait_2 = "music\\combat\\theme1_wait_2",
wait_3 = "music\\combat\\theme1_wait_3",
idle_1 = "music\\combat\\theme1_idle_1",
idle_2 = "music\\combat\\theme1_idle_2",
combat_1 = "music\\combat\\theme1_combat_1",
combat_2 = "music\\combat\\theme1_combat_2",
combat_3 = "music\\combat\\theme1_combat_3",
final = "music\\combat\\theme1_final",
relax = "music\\combat\\theme1_relax"
},
graph={
null={
intro = {"lo",">"},
combat_1 = {"hi",">"}
},
intro={
relax = {"lo","<"},
wait_1 = {"lo",">"},
combat_1 = {"hi",">"}
},
intro_2={
final = {"lo","<"},
wait_1 = {"lo",">"},
combat_1 = {"hi",">"}
},
wait_1={
final = {"lo","<"},
wait_2 = {"lo",">"},
intro_2 = {"hi",">"}
},
wait_2={
final = {"lo","<"},
wait_3 = {"lo",">"},
intro_2 = {"hi",">"}
},
wait_3={
final = {"lo","<"},
idle_1 = {"hi","<"},
intro_2 = {"hi",">"}
},
idle_1={
final = {"lo","<"},
wait_1 = {"lo",">"},
combat_1 = {"hi",">"}
},
idle_2={
final = {"lo","<"},
idle_1 = {"lo",">"},
combat_1 = {"hi",">"}
},
combat_1={
final = {"lo","<"},
idle_2 = {"hi","<"},
combat_2 = {"hi",">"}
},
combat_2={
final = {"lo","<"},
idle_2 = {"hi","<"},
combat_3 = {"hi",">"}
},
combat_3={
final = {"lo","<"},
idle_2 = {"hi","<"},
combat_1 = {"hi",">"}
},
final={
null = {"lo","<"},
idle_1 = {"lo",">"},
combat_1 = {"hi",">"}
},
relax={
null = {"lo","<"},
idle_1 = {"lo",">"},
combat_1 = {"hi",">"}
}
}
},[/cut]
Ну и собственно другой файл с функциями, в котором вроде как и обработка этих самых переменных:
[cut=xrs_dyn_music.script]
--[[
xStream 02.2008
]]

function init()
--колбеки для заглушения амбента
xr_s.register_callback("update",fades,nil)
xr_s.register_callback("actor_destroy",restore_ambient_on_end,nil)
xr_s.register_callback("main_menu_on",main_menu_on,nil)
xr_s.register_callback("main_menu_off",main_menu_off,nil)
end

-------------
motivator_obj = nil
combat_table={}
suspence_table = {}
npc_table = {}
play_combat=0
max_suspence_time=2000
min_suspence_time=1000
max_suspence_limit=7000
min_suspence_limit=2500
local suspence_enemy_update=0
local last_update=0
local inert = 1000
local clicks_prev = 3000
local music_section=""
local music_previous_section=""
local music_next_section_start_time=0
local music=false
local music_init=0
local music_obj=nil
local music_lo_lvl=7
local music_hi_lvl=17
local music_graph={}
local ambient_vol = get_console():get_float('snd_volume_music')
local last_max_update = 0
local last_min_update = 0

function set_max_suspence_time(number)
max_suspence_time = number*750
end

function set_min_suspence_time(number)
min_suspence_time = number*750
end

function set_max_suspence_limit(number)
max_suspence_limit = number
end

function set_min_suspence_limit(number)
min_suspence_limit = number
end

function play_suspence()
if play_combat ~= 2 then
if suspence_enemy_update == 0 then
suspence_enemy_update = 1
elseif suspence_enemy_update == 1 then
suspence_enemy_update = 2
elseif suspence_enemy_update == 2 then
play_combat = 2
end
end
end

function stop_suspence()
local n = 0
for k,v in pairs(suspence_table) do
n = 1
break
end
if n == 0 then
suspence_enemy_update = 0
if play_combat ~= 0 then
play_combat = 0
end
end
end

function play_combat_sound()
if play_combat ~= 1 then
play_combat = 1
end
end

function stop_combat_sound()
local n = 0
for k,v in pairs(combat_table) do
--printf("combat NPC NAME = "..k)
n = 1
break
end
if n == 0 and play_combat ~= 0 then
-- for k,v in pairs(suspence_table) do
-- suspence_table[k] = nil
-- end
play_combat = 0
end
end

function music_start(sound)
if not music then
if music_obj==nil then
music_obj=xrs_stereo.stereo_sound()
end
music_obj:initialize(music_graph.files[sound],ambient_vol)
music_next_section_start_time=music_obj:play()-clicks_prev
music_previous_section=music_section
end
music = true
end

function music_change(sound)
if music then
music_next_section_start_time=music_obj:play_at_time(music_next_section_start_time+clicks_prev, music_graph.files[sound], ambient_vol)-clicks_prev
music_previous_section=music_section
end
end

--проверяем, какие можно играть треки на этой карте
-- если нет в теме переменной maps, то можно везде
-- если есть, то только если наша карта есть в списке - карты перечисляются через запятую по именам
function prepare_tracks()
if not xrs_dynamic_music_themes or not xrs_dynamic_music_themes.themes then return end
local new_table={}
local lname = level.name()
for k,v in pairs(xrs_dynamic_music_themes.themes) do
if not v.maps or v.maps=="" or string.find(v.maps,lname) then
table.insert(new_table,v)
end
end
xrs_dynamic_music_themes.themes = new_table
end

function interactive_music(number)
if IsDynamicMusic() then

if music_init==-1 then return end

if music_init==0 then
prepare_tracks()
if xrs_dynamic_music_themes and xrs_dynamic_music_themes.themes and #xrs_dynamic_music_themes.themes>0 then
ambient_vol = get_console():get_float('snd_volume_music')
music_init=1
else
music_init=-1
return
end
end

if not music then
if time_global() - last_update > inert then
music_select_section(number)
last_update = time_global()
end
end

if not music and music_previous_section=="" and music_section~="" then
music_start(music_section)
end

if music and music_previous_section~="" and music_section=="" then
music_previous_section=""
end

if music then
music_obj:update(ambient_vol)
if time_global() > music_next_section_start_time then
music_select_section(number)
if music_section~="" then
music_change(music_section)
else
music=false
end
end
end
else
if music_obj and music_obj:playing() then
music_obj:stop()
combat_table={}
suspence_table = {}
play_combat=0
suspence_enemy_update=0
last_update=0
music_section=""
music_previous_section=""
music_next_section_start_time=0
music=false
music_init=0
music_obj=nil
music_graph={}
last_max_update = 0
last_min_update = 0
end
end
end

function music_select_section(number)
local lvl = number

if music_section=="" then
music_section="null"
music_graph = xrs_dynamic_music_themes.themes[math.random(#xrs_dynamic_music_themes.themes)]
end

local last_sel_max=0
local last_sel_min=1000
for k,v in pairs(music_graph.graph[music_section]) do
local glevel=0
if v[1]=='lo' then glevel=music_lo_lvl end
if v[1]=='hi' then glevel=music_hi_lvl end

if v[2]=="<" and glevel<last_sel_min then
if glevel>lvl then
music_section=k
last_sel_min=glevel
end
end
if v[2]==">" and glevel>=last_sel_max then
if glevel<=lvl then
music_section=k
last_sel_max=glevel
end
end
end

if music_section=="null" then music_section="" end
if music and music_previous_section~="" and music_section=="" then
music_previous_section=""
end
end

function stop_combat(object_id)
if play_combat == 1 then
--printf("object_id = "..object_id)
combat_table[object_id] = nil
stop_combat_sound()
elseif play_combat == 2 then
suspence_table[object_id] = nil
stop_suspence()
end
end

local function play_music(mode, object_id)
if mode == 1 then
combat_table[object_id] = true
play_combat_sound()
else
suspence_table[object_id] = true
play_suspence()
end
end

local function play_consider_silence_zone(actor_pos, object_id, mode)
if db.storage.silence_zone_table then
local flag = 0
for k,v in pairs(db.storage.silence_zone_table) do
local zone = db.zone_by_name[v]
if zone:inside(actor_pos) then
flag = 1
stop_combat(object_id)
break
end
end
if flag == 0 then
play_music(mode, object_id)
end
else
play_music(mode, object_id)
end
end

local function play_local_combat(actor, object, actor_pos, object_id)
local best_enemy = object:best_enemy()
if best_enemy and best_enemy:id() == actor:id() then
-- local distance_to_enemy = actor_pos:distance_to_sqr(object:position())
-- if distance_to_enemy < max_suspence_limit then
if object:see(actor) then
play_consider_silence_zone(actor_pos, object_id, 1)
return true
else
if play_combat ~= 2 then
combat_table[object_id] = nil
stop_combat_sound()
end
return false
end
end
end

local function play_local_suspence(actor, object, actor_pos, object_id)
local visibility = actor:see(object)
if object:relation(actor)==game_object.enemy and play_combat ~= 1 then
if i_am_is_enemy(object, actor, db.storage[object_id].combat_ignore) then
local distance_to_enemy = actor_pos:distance_to_sqr(object:position())
if distance_to_enemy < min_suspence_limit then
if time_global() - last_min_update > min_suspence_time then
if visibility then
play_consider_silence_zone(actor_pos, object_id, 2)
end
last_min_update = time_global()
end
elseif distance_to_enemy < max_suspence_limit then
if time_global() - last_max_update > max_suspence_time then
if visibility then
play_consider_silence_zone(actor_pos, object_id, 2)
end
last_max_update = time_global()
end
end
if not visibility or distance_to_enemy >= max_suspence_limit then
suspence_table[object_id] = nil
stop_suspence()
end
end
end
end

local function fade_in(cur_amb_vol, timer, counter)
if fade_in_check_time ~= nil and time_global() - fade_in_check_time <= timer then return end
fade_in_check_time = time_global()
if cur_amb_vol<ambient_vol then
cur_amb_vol=cur_amb_vol+counter
if cur_amb_vol>ambient_vol then cur_amb_vol=ambient_vol end
--printf("fade_in:SET = "..ambient_vol)
get_console():execute('snd_volume_music '..cur_amb_vol)
end
end

local function fade_out(cur_amb_vol, timer, counter)
if fade_out_check_time ~= nil and time_global() - fade_out_check_time <= timer then return end
fade_out_check_time = time_global()
if cur_amb_vol>0 then
cur_amb_vol=cur_amb_vol-counter
if cur_amb_vol<0 then cur_amb_vol=0 end
--printf("fade_out:SET = "..ambient_vol)
get_console():execute('snd_volume_music '..cur_amb_vol)
end
end

--интерпретируем колбеки по-своему
function fades()
--' Distemper 05.2008 --
local actor = db.actor
if actor:alive() then
local playing_back = IsDynamicMusic()
local actor_pos = actor:position()
for k, object in pairs(npc_table) do
local object_id = object:id()
if not playing_back and play_combat ~= 0 then
stop_combat(object_id)
elseif playing_back then
if object:alive() then
if play_local_combat(actor, object, actor_pos, object_id) then
break
end
play_local_suspence(actor, object, actor_pos, object_id)
end
end
end
end
--' end --

local cur_amb_vol = get_console():get_float('snd_volume_music')
if music then
fade_out(cur_amb_vol, 100, 0.1)
else
if db.storage.silence_zone_table and actor:alive() then
local actor_pos = actor:position()
local flag = 0
for k,v in pairs(db.storage.silence_zone_table) do
local zone = db.zone_by_name[v]
if zone:inside(actor_pos) then
flag = 1
break
end
end
if flag == 1 then
fade_out(cur_amb_vol, 1000, 0.1)
else
fade_in(cur_amb_vol, 1000, 0.05)
end
else
fade_in(cur_amb_vol, 100, 0.05)
end
end
end
function restore_ambient_on_end()
if music_obj and music_obj:playing() then music_obj:stop() end
--printf("restore_ambient_on_end:SET = "..ambient_vol)
get_console():execute('snd_volume_music '..ambient_vol)
end
function main_menu_on()
--printf("main_menu_on:SET = "..ambient_vol)
get_console():execute('snd_volume_music '..ambient_vol)
end
function main_menu_off()
local cur_amb = get_console():get_float('snd_volume_music')
if cur_amb~=ambient_vol then
ambient_vol = cur_amb
end
--printf("main_menu_off:SET = "..ambient_vol)
get_console():execute('snd_volume_music '..ambient_vol)
end

-- Дубликат из xr_combat_ignore, только без кучи проверок
function i_am_is_enemy(obj, enemy, st)
local overrides = st.overrides
--' Если есть оверрайды, то работаем по ним.
if overrides and overrides.combat_ignore then
if xr_logic.pick_section_from_condlist( enemy, obj, overrides.combat_ignore.condlist ) ~= nil then
--printf("pl:Disabling_memory_object[10] obj [%s]", obj:name())
--obj:enable_memory_object( enemy, false )
return false
end
return true
else
return true
end
end

function stop_sound()
if music_obj and music_obj:playing() then music_obj:stop() end
end
[/cut]


У мутантов тоже есть группировки. © Движок X-Ray


 
asd123Дата: Вс, 14.11.2021, 03:46 | Сообщение # 3041
Mr. «Магма»
Военные сталкеры
Сообщений: 1386
Награды: 10
Репутация: [ 423 ]

В общем, перенёс таки ЧНовскую боевую тему заменив ею ЗПшную, в итоге всё вроде как работает, тема играет если я рядом с врагом, а если меня не заметили и я сбежал то она затухает. Однако, если я вступаю в бой и побеждаю/сбегаю, то после победы/побега музыка почему-то никогда не затихает. Это можно как-то исправить?

У мутантов тоже есть группировки. © Движок X-Ray


 
robpolДата: Чт, 25.11.2021, 20:10 | Сообщение # 3042
Гражданский
Пользователи
Сообщений: 4
Награды: 0
Репутация: [ 0 ]

Здравствуйте. Подскажите пожалуйста как добавить книги навыков для нового оружия в SGM 2.2?
 
НаблюдательДата: Чт, 09.12.2021, 13:06 | Сообщение # 3043
Ветеран
Пользователи
Сообщений: 400
Награды: 1
Репутация: [ 59 ]

Приветствую Всех! Уважаемые Профи, подскажите плиз, можно ли в ЗП прописать лечение врагов аптечкой, что бы они после этого становились нейтралами, как в Мизери? Или это слишком трудоёмкий процесс? smile

Сообщение отредактировал Наблюдатель - Вт, 17.05.2022, 11:03
 
bsbannerДата: Вт, 04.10.2022, 22:40 | Сообщение # 3044
Гражданский
Пользователи
Сообщений: 2
Награды: 0
Репутация: [ 0 ]

Играю в Gunslinger+ Sigerous
Хотел бы, чтобы больше долговцев и свобовцев ходило по юпитеру (к примеру, спавнились на Янове и гугяли по локации).
Понимаю, что надо что-то править в Gunslinger Sigerous Addon\gamedata\configs\scripts\jupiter\smart
Но что, не понимаю(
 
sergej5500Дата: Чт, 06.10.2022, 00:25 | Сообщение # 3045
Полевой Исследователь
Ученые сталкеры
Сообщений: 3793
Награды: 29
Репутация: [ 1355 ]

Цитата bsbanner ()
что надо что-то править в Gunslinger Sigerous Addon\gamedata\configs\scripts\jupiter\smart


Правильно понимаете. Нужно добавить в файлы в этих папках код типа.

[cut=Для долга]respawn_params = respawn@jup_sim_21

[respawn@jup_sim_21]
spawn_duty@advanced
spawn_duty@veteran

[spawn_duty@advanced]
spawn_squads = duty_sim_squad_advanced, duty_sim_squad_advanced, duty_sim_squad_novice
spawn_num = {-jup_b218_pripyat_group_gathering} 1, 0

[spawn_duty@veteran]
spawn_squads = duty_sim_squad_advanced, duty_sim_squad_advanced, duty_sim_squad_veteran
spawn_num = {+jup_b218_pripyat_group_gathering} 1, 0[/cut]

[cut=Для свободы]respawn_params = respawn@jup_sim_5

[respawn@jup_sim_5]
spawn_freedom@advanced
spawn_freedom@veteran

[spawn_freedom@advanced]
spawn_squads = freedom_sim_squad_advanced, freedom_sim_squad_advanced, freedom_sim_squad_novice
spawn_num = {-jup_b218_pripyat_group_gathering} 2, 0

[spawn_freedom@veteran]
spawn_squads = freedom_sim_squad_advanced, freedom_sim_squad_advanced, freedom_sim_squad_veteran
spawn_num = {+jup_b218_pripyat_group_gathering} 2, 0[/cut]

Названия секций типа respawn@jup_sim_5 в каждом файле должны быть уникальны. Свои.

Возможно, потребуется новая игра.
 
Поиск: