-
Публикаций
115 -
Зарегистрирован
-
Посещение
Сообщения, опубликованные РСФСР
-
-
31 минуту назад, StrawFlux сказал:Подскажите название смарта в ангаре на Свалке где сидят бандиты атакующие Серого и ко
gar_seryi_bandits
-
1
-
-
7 часов назад, imcrazyhoudini сказал:StrawFlux интересно доковырять эту ситуацию) первое слишком просто)
тогда смотри как волк реализован, пуля
Дополнено 38 минуты спустяПоясните про двустворчатые ворота. Как сделать чтобы они были настежь открыты? С вики непонятно как прописывать параметры open closed и none
[ph_gate] state - <параметр> - состояние, в котором дверь находится при инициализации (по умолчанию none). Возможны следующие значения: open - в открытом состоянии; closed - в закрытом состоянии; none - в текущем (дефолтном или оставшемся от предыдущей схемы). locking - <параметр> - блокировка дверей (по умолчанию none). Возможны следующие значения: stick - прилипание дверей к крайним состояниям. soft - дверь заблокирована с помощью силы, т.е. можно ее открыть/пробить машиной. Состояния в этом положении: open - блокировать в открытом состоянии; closed - в закрытом; none - не используется (мягкая блокировка возможна только в крайних положениях); hard - блокировка двери с помощью границ. Ворота можно только сломать. Состояния в этом положении: open - блокировать в открытом состоянии; closed - в закрытом; none - в текущем. none - дверь не заблокировананапример в эту секцию:
[ph_gate@unlocked_truck] state = open locking = stick
И еще, можно ли прописать в логику ворот таймер, чтобы они закрывались через пару минут например?
-
14 часов назад, imcrazyhoudini сказал:Доковырял этих чёртовых экологов.
Итак, сообразил им логику, в которой они не умирают (буквально убрал проверку).
Потом после получения инфопоршня они уходят на Янтарь в другой смарт (создал новый).
Доходят до граф поинта, переходят на Янтарь и на том же граф поинте остаются.
При чём оффлайн.
Отслеживал путешествие одного из НПС (назначил ему стори_ид):local obj = alife():story_object(5481)
if obj and IsStalker(obj) then
level.map_add_object_spot_ser(obj.id, "treasure", "Vovka")
endПытался принудительно вывести в онлайн:
local npc = alife():story_object(5481)
if npc then
alife():set_switch_offline (npc.id, false)
alife():set_switch_online (npc.id, true)
alife():set_interactive (npc.id, true)
endВсё без толку.
В чём же причина?Промотал время тайм фактором - он пришёл в лагерь, но по прежнему в оффлайне всё время.
Внимание на мини-карту, значок тайника - сам НПС.
Дополнено 24 минуты спустяЗапретил уходить в оффлайн в СДК - доходят до Янтаря, идут в лагерь, после первого сейв-лоада опять исчезают.
В чём же загадка этого озера Янтарь...а логика и скрипты\состояния смарта какие?
-
5 часов назад, Stalkervernite сказал:РСФСР Попробуй зарегистрировать файл) Я когда мертвый город возращал, я просто создал файл gulag_deadcity.ltx помойму как-то так, суть не меняет, просто зарегистрируй файл.
и где его регистрировать?
-
а вообще, как для локации сделать еще один отдельный файл с гулагами?
Есть вот gulag_dark_valley.script и gulag_dark_valley.ltx(пустой)Хочу чтобы часть гулагов была в другом файле, например gulag_dark_valley2.script
Как это сделать? Просто создать файл и все или прописывать надо ссылку на файл куда-то? Обязательно ли создавать gulag_dark_valley2.ltx или можно вписать в пустой gulag_dark_valley.ltx? -
35 минут назад, N42 сказал:А еще, будет ли подгружаться лтх в секции
Цитатаif type == "val_rob" then
-- главный из грабителей, с которым разговариваем
t = { section = "logic@val_rob_leader",
idle = 0,
prior = 3, state = {0},
in_rest = "", out_rest = ""
}
table.insert(sj, t)
ltx = ltx.."#include \"scripts\\val_rob_leader.ltx\"\n"если в файле гулагов уровня
function load_ltx(gname, type)
return nil
end -
-- охранники на входах в здание фермы for i = 1, 2 do t = { section = "logic@" .. gname .. "_guard" .. i, idle = 0, prior = 2, state = {0}, squad = squad, group = groups[1], in_rest = "", out_rest = "" } table.insert(sj, t) ltx = ltx.."[logic@" .. gname .. "_guard" .. i .. "]\n" .. "active = walker@" .. gname .. "_guard" .. i .. "\n" .. "[walker@" .. gname .. "_guard" .. i .. "]\n" .. "path_walk = guard" .. i .. "_walk\n" .. "path_look = guard" .. i .. "_look\n" .. "meet = meet@" .. gname .. "_warn\n" end -- простые сталкеры внутри фермы вокруг костра for i = 1, 5 do t = { section = "logic@" .. gname .. "_kamp", idle = 0, prior = 1, state = {0}, squad = squad, group = groups[1], in_rest = "", out_rest = "" } table.insert(sj, t) end
ltx = ltx.."[logic@" .. gname .. "_kamp]\n" .. "active = kamp@" .. gname .. "_kamp\n"
Что означает i и цифры тут? Из gulag_dark_valley.script -
Подскажите как в gulag_dark_valley.script в тамошнее месиво из динамических .лтх вписать обычные скрипты смарт-террейнов что в gulag_escape, garbage и прочих.
Например это в function load_job(sj, gname, type, squad, groups)
if type == "esc_ambush" then
t = { section = "logic@esc_ambush1",
idle = 0,
prior = 8, state = {0},
in_rest = "", out_rest = "esc_ambush_out_restrictor"
}
table.insert(sj, t)
t = { section = "logic@esc_ambush2",
idle = 0,
prior = 8, state = {0},
in_rest = "", out_rest = "esc_ambush_out_restrictor"
}
table.insert(sj, t)
end
Это - в function load_states(gname, type)
if type == "esc_ambush" then
return function(gulag)
return 0
end
end
Вот так же выглядит начало этого злополучного скрипта куда надо вставить:local mob_spring_count = 20 -------------------------------------------------------------------------- -- States -------------------------------------------------------------------------- local state_normal = 0 local state_alarm = 1 local state_alarm_actor_inside = 2 local state_fight = 1 -------------------------------------------------------------------------- -- General -------------------------------------------------------------------------- local t = {} local gulags = {val_escort = {comm = {"bandit", "dolg"}}, val_sacrifice = {comm = {"bandit", "dolg"}}, val_prisoner = {comm = {"dolg"}}, val_sos = {}, val_rob = {comm = true}, val_lager_bandits = {comm = {"bandit"}}, val_watchtower = {comm = true}, val_soldiers_raid = {comm = {"military"}}, offline_group = {}} -- Job ------------------------------------------------------------------- function load_job(sj, gname, type, squad, groups) local g = gulags[type] if g then g.job(sj, gname, type, squad, groups) end end -- State ----------------------------------------------------------------- function check_state_stub(gulag) return 0 end function load_states(gname, type) local g = gulags[type] if g then return g.state or check_state_stub end return nil end
-
2 часа назад, Mass сказал:да все заработало
-
какова функция зоны sr_dunger?
Пример - в ней стоят долговец и расстреливающие его бандиты в долинеval_sacrifice_danger_zone
[logic]
active = sr_danger[sr_danger]
on_info = {+val_sacrifice_victim_dead} nil -
В 11.08.2023 в 11:38, ian98 сказал:Тебе надо типо после удара переместить игрока на пути какие-то?
Я нашел такую строчку в оригинале. Это телепортация.
db.actor:set_actor_position(patrol("val_ambush_dest_walk"):point(0))Выдача инфы
db.actor:give_infoportion("") -- или give_info_portion("") - забылУправление выключается уже в скрипте, который я выше дал.
set_inactivate_input_time(1000) -- вроде 1000 это 1 секундаработает, кроме выкидывания барахла
-
2 часа назад, ian98 сказал:Тебе надо типо после удара переместить игрока на пути какие-то?
Я нашел такую строчку в оригинале. Это телепортация.
db.actor:set_actor_position(patrol("val_ambush_dest_walk"):point(0))Выдача инфы
db.actor:give_infoportion("") -- или give_info_portion("") - забылда,
-
20 минут назад, ian98 сказал:function punch_and_rob_actor(first_speaker, second_speaker) -- нас бьют во время диалога или вообще не будут с нами разговаривать, а наши предметы летят в указанный ящик local npc if first_speaker:id()==0 then npc = second_speaker elseif second_speaker:id()==0 then npc = first_speaker end -- Сначала бъем в морду npc:clear_animations() npc:add_animation("udar_0") local iTimer = time_global() + 700 local function check_timer() return time_global() > iTimer end local function action_timer() set_inactivate_input_time(30) local snd_obj = xr_sound.get_safe_sound_object([[affects\hit_fist]]) snd_obj:play_no_feedback(db.actor, sound_object.s2d, 0, vector(), 1.0) level.add_cam_effector("camera_effects\\dis_consciousness.anm", 999, false, "") -- найти бы прикольных эффектов. это самый эпичный как по мне) -- Перемещаем инвентарь игрока в ящик inv_robbers_chest = level_object_by_sid(2000) local function transfer_object_item(item) db.actor:transfer_item(item, inv_robbers_chest) end db.actor:inventory_for_each(transfer_object_item) end level.add_call(check_timer, action_timer) dialogs.break_dialog(first_speaker, second_speaker) endВыглядит так себе. Ну делает, что делает, что тебе и нужно. Если что-то еще нужно, то можно доделать.
а вот эту часть не подскажешь как вписать в функцию чтоб работало? телепортация после удара в вейпоинт, выдача некоторых инфо и выключение управления на некоторое время:
st.dest_walk = patrol("val_ambush_dest_walk"):point(0) st.dest_look = utils.vector_copy_by_val( patrol("val_ambush_dest_look"):point(0)):sub(st.dest_walk) st.info = { "val_prisoner_plr_captured", "val_prisoner_door_unlocked", "val_prisoner_door_unlocked_demo" } -- "val_prisoner_door_unlocked_demo", "val_sacrifice_start" } st.disable_input_tm = 15000
-
3 часа назад, ian98 сказал:РСФСР могу написать новый. По-своему:) Попроще. работать будет также - не боись. А по этому скрипту, то вылетает может от того, что ты или кто-то закомментил пару строчек xr_punch.punch... ? Из лога понятно, что ошибка где-то в xr_punch
было бы классно! Может и ошибка там, ведь разница между билдовым и финальным файлом в несколько лет
-
подскажите как подправить скрипт из 2205 билда для финалки с ударом игроку в морду и последующей телепортацией и изыманием вещей.
function val_punch_ambush(first_speaker, second_speaker) —abort("KICK ASS !!!!") —xr_punch.punch[first_speaker:id()] = second_speaker db.storage[db.actor:id()].punch = {} local st = db.storage[db.actor:id()].punch st.dest_walk = patrol("val_ambush_dest_walk"):point(0) st.dest_look = utils.vector_copy_by_val( patrol("val_ambush_dest_look"):point(0)):sub(st.dest_walk) st.info = { "val_prisoner_plr_captured", "val_prisoner_door_unlocked", "val_prisoner_door_unlocked_demo" } — "val_prisoner_door_unlocked_demo", "val_sacrifice_start" } st.dump_inventory_pos = patrol("val_ambush_inventory_dump_place"):point(0) st.disable_input_tm = 15000 db.storage[second_speaker:id()].punch.enabled = true — xr_punch.put_actor_to_sleep_instantly() end
При этом часть где барахло актора вываливается в точке заменить на эту функцию где барахло убирается в ящик или как-то добавить отдельно вызов этой функции(она рабочая):
function val_ambush_rob_actor(actor, npc, p) inv_box_1 = level_object_by_sid(440) local function transfer_object_item(item) —# Секции, которые не перемещать if item:section() ~= "detector_fake" — and item:section() ~= "wpn_knife" and item:section() ~= "device_torch" and item:section() ~= "device_pda" then db.actor:transfer_item(item, inv_box_1) end end actor:inventory_for_each(transfer_object_item) end
Сейчас вылет:
FATAL ERROR [error]Expression : fatal error [error]Function : CScriptEngine::lua_error [error]File : E:\stalker\sources\trunk\xr_3da\xrGame\script_engine.cpp [error]Line : 73 [error]Description : <no expression> [error]Arguments : LUA error: ...a.l.k.e.r\gamedata\scripts\dialogs_darkvalley.script:51: attempt to index field 'punch' (a nil value) stack trace:
Вылет ссылается на эту строчку:
db.storage[second_speaker:id()].punch.enabled = true
-
45 минут назад, Paracetamol сказал:А оно же в любом случаи будет на нулевых коорд. (Рабою в сдк YARA)
Попробуй сделать а нулевыми координатами в пустой сцене эти обьекты для группы и обьединить их в группу (что за обьекты, там есть статические обьекты?)
догнал как эта хрень работает. Чтобы при создании группы она имела нулевые координаты надо чтобы половина или больше объектов которые в нее входят имели эти нулевые координаты.
Дополнено 20 минуты спустяаа все понял. После создания группы надо в поле что внизу справа нажать align to object и выбрать объект который будет центром координат. Выбираем объект с нулевыми координатами и вауля
-
1
-
-
Такой вопрос - как сделать в сдк тч группу чтобы она имела нулевые координаты? Сейчас пытаюсь объединить несколько объектов для переноса с одной локации на другую но получается хрень с ненулевыми координатами. Нормально с ними перенести не получается. Вроде работал способ включения в группу объекта с нулевыми координатами и поворотами, но что-то никак.
-
3 часа назад, Paracetamol сказал:А какой примерно рестриктор по величине?
Движок оригинальный?
круглый, метров 10
Движок да, оригинальный. Возможно есть некоторые изменения из xray_extentions кажется -
10 часов назад, РСФСР сказал:с чем связан такой вылет:
stack trace:
0023:007AEDE0 xrCore.dll, str_container::dock()
[error][ 183] : Невозможно создать файл, так как он уже существует.ошибка оказалась в том что вписал в задание инфопоршион_фэйл и функшион_фэйл использующий туже инфопорцию
-
1
-
-
с чем связан такой вылет:
stack trace:
0023:007AEDE0 xrCore.dll, str_container::dock()
[error][ 183] : Невозможно создать файл, так как он уже существует. -
Подскажите как реализовать следующее:
Есть квестовый предмет, который нужно подобрать в инвентарь, затем пойти и выбросить в определенном рестрикторе и далее постреляв по нему он должен разрушиться(соответственно подменяется модель на разрушенную) и выдать инфо.
Не знаю, можно ли разрушать квестовые предметы. Скорее всего объект должен быть destroyble_object
-
Как выдать инфо при перемещении в рестриктор объекта или тела непися?
-
В 22.07.2023 в 20:57, Mass сказал:capacity должно <= чем работ в смарте!
меньше или равно?
Попробовал прописать сталкерам под логикой уход в смарт по инфо - ничего не произошло, также сидят под логикой при получении инфо. -
Поясните, если вписать это нпс:
[smart_terrains]
smart = {+info}
что будет если в смарте уже все места заняты будут



[SoC] Модострой: вопросница
в Уроки, вопросы и советы по созданию модов
Опубликовано
Такая проблема - декомпилировал локацию из билда 1475(со статичным небом) в формат сдк, однако некоторые источники света очень кривые. Цвет их не тот который должен быть. Если кликнуть на палитру где выбирается цвет - он обнуляется. Попытался вручную перетащить из 1537 билда распаковав файл левел локации в текстовый формат и вручную выписывая настройки цвета из файла FSL_LIGHT_DYNAMIC.ltx (в тексте это параметр diffuse, в палитре в сдк - это правая нижняя колонка на первом скриншоте, где мышка). Некоторые подходят, однако в тексте встречаются источники где цвет идет с параметром больше единицы:
как конвертировать такой из текстового в цвет на палитре в сдк? Подозреваю, что тут как-то связано с яркостью источника. Однако у декомпилированных источников у всех яркость 1.00
Еще добавлю что декомпилируются источники света у которых выставлена галочка dynamic и соответственно они записаны в файл левел FSL_LIGHT_DYNAMIC.ltx локации.
Как быть?
Дополнено 2 минуты спустя
Тут на скриншотах видно этот баг - кликаю на палитру - и цвет обнуляется.
Пробовал также открывать сдк 2002 года и смотреть как там палитра выглядит - тоже самое