S.T.A.L.K.E.R.: Global War <<<>>> Инструмент - теперь и для ТЧ! <<<>>> NS OGSR: Сборка от 30.12.2023
-
Число публикаций
372 -
Регистрация
-
Последнее посещение
-
AMKoin
0 [Подарить AMKoin]
Сообщения опубликованы Wawka
-
-
Сомневаюсь, что этот самый кланмод научит чему-либо полезному для игры на обычных серваках. Там и ттх оружия изменены. И только дефолты. И техники нет. Побегай с бауром, пистолетами, кларком наконец - хочешь-не хочешь, меткость улучшится. А кланмодовцы мало чем могут похвастать, особенно перед опытными игроками. Единственное веселят их постоянные приседания (малоэффективные). Ну научишься этим приседаниям, ну улучшится владение дефолтным оружием. Только на практике это мало где пригодится. Да и нет их, кланмодов, вроде уже.
Чтоб приказ нормально отдать клавишей "T", старайся нацеливаться на пиктограммы шахт/флагов/титана. Чтоб пиктограмма была примерно в центре экрана. А проще открыть карту и мышкой приказ отдать или послать запрос главкому, выбрав нужный пункт в контекстном меню, раз уж при помощи "T" не получается.
- 1
-
А не проще будет поиграться одним инфопоршеном? Выдал (give_info) - гулаг включился. Забрал (disable_info) - выключился.
Смарту прописать строку:
cond = {+инфопоршен}
-
Не может найти секцию trader_after_fabric_sell из-за изменения торговли Сидоровича. Нужна новая игра.
-
А логика Сидора правилась?
-
Виталий Зверь
В all.spawn на каждый костёр, имеются по три секции, с именами: lights_hanging_lamp, zone_flame_small и space_restrictor.
lights_hanging_lamp, это видимо, зона свечения костра, zone_flame_small, собственно сам костёр и space_restrictor - зонка, которая запрещена для неписей (чтобы не сидели в кострах). Координаты для будущего гулага на этом месте, например, можно взять из zone_flame_small. Ну или встать в костёр и снять координаты.
Если планируется просто посадить неписей у костра, без каких либо условий (несюжетный гулаг, а так, для фона), то это довольно просто.
Для примера, покажу гулаг на эскейпе, у которого имя и тип будут называться, ну допустим, esc_test_lager, гулаг с населением 3 тела. Всё, что останется сделать - поместить смарт в нужный файл alife и прописать свои координаты. Ну можно ещё и названия поменять (все esc_test_lager на свои).
В alife создать секцию смарта:
[999] ; cse_abstract properties section_name = smart_terrain name = esc_test_lager position = -208.551208496094,-20.0917911529541,-141.64958190918 direction = 0,0,0 ; cse_alife_object properties game_vertex_id = 61 distance = 1 level_vertex_id = 44622 object_flags = 0xffffffbe custom_data = <<END [smart_terrain] type = esc_test_lager capacity = 3 END ; cse_shape properties shapes = shape0 shape0:type = sphere shape0:offset = 0,0,0 shape0:radius = 1 ; cse_alife_space_restrictor properties restrictor_type = 3 ; se_smart_terrain properties
В position, game_vertex_id и в level_vertex_id - подставь координаты из zone_flame_small.
Путь (center_point):
[esc_test_lager_kamp] points = p0 p0:name = wp00 p0:position = -208.551208496094,-20.0917911529541,-141.64958190918 p0:game_vertex_id = 61 p0:level_vertex_id = 44622
В p0:position, p0:game_vertex_id и в p0:level_vertex_id - подставь координаты из zone_flame_small.
Если сможешь сам координаты снять, то можно в паре шагах от костра сделать точку спавна неписей при входе гулага в онлайн (чтобы не рождались в центре пламени), в логике строка path_walk :
[esc_test_lager_kamp_task] points = p0 p0:name = wp00 p0:position = -208.551208496094,-20.0917911529541,-141.64958190918 p0:game_vertex_id = 61 p0:level_vertex_id = 44622
Тут должны быть координаты в паре шагов от костра.
Логика (можно добавить в любой файл логики гулагов, например в gulag_escape.ltx):
[logic@esc_test_lager] active = kamp@esc_test_lager [kamp@esc_test_lager] center_point = kamp path_walk = kamp_task soundgroup = esc_test_lager
Где:
center_point - сам костёр. Неписи рассаживаются вокруг него, по умолчанию, если не ошибаюсь, радиус составляет 1 метр. Можно и свой прописать - добавить строку radius = и нужную цифру.
path_walk - точка спавна неписей при входе гулага в онлайн (снять координаты недалеко от костра). Это необязательный параметр. По умолчанию, если убрать эту строку, неписи будут спавниться в точке center_point. Если это не суть важно, то можно и убрать.
soundgroup - точно не знаю зачем, наверное для синхронности "беседы".
И самое главное, не забывай, что в логике смартов имя пути пишется без имени гулага. То есть, в данном случае путь называется esc_test_lager_kamp, в нём esc_test_lager_ - имя гулага, а kamp - имя пути. Его то только и вписываем в логику.
Ну и загрузка работ (можно так же добавить в имеющийся gulag_escape.script, чтоб свой не подключать):
В function load_job(sj, gname, type, squad, groups) добавить:
if type == "esc_test_lager" then t = { section = "logic@esc_test_lager", idle = 0, prior = 5, state = {0}, in_rest = "", out_rest = "" } table.insert(sj, t) t = { section = "logic@esc_test_lager", idle = 0, prior = 5, state = {0}, in_rest = "", out_rest = "" } table.insert(sj, t) t = { section = "logic@esc_test_lager", idle = 0, prior = 5, state = {0}, in_rest = "", out_rest = "" } table.insert(sj, t) end
В function load_states(gname, type) добавить:
if type == "esc_test_lager" then return function(gulag) return 0 end end
Ну и в function checkStalker(npc_community, gulag_type, npc_rank, se_obj) добавить:
if gulag_type == "esc_test_lager" then return npc_community == "stalker" end
Вроде ничего не забыл... В этом случае, если всё сделано правильно, заработает гулаг на три персоны и в него смогут попасть любые неписи, у кого комьюнити stalker. Лагерь начнёт свою работу со стартом новой игры и будет существовать на протяжении всей игры.
-
Чтобы ГГ заспавнить в другом месте, надо его секцию:
[63] ; cse_abstract properties section_name = actor name = level_prefix_actor_0001 position = -246.726303100586,-24.7932605743408,-134.433868408203 direction = 0.00431653670966625,-1.39625442028046,-0.00068671052576974 s_flags = 0x29 ; cse_alife_object properties game_vertex_id = 4 distance = 0.699999988079071 level_vertex_id = 11713 object_flags = 0xffffffbf custom_data = <<END [dont_spawn_character_supplies] [spawn] wpn_binoc device_torch END ; cse_visual properties visual_name = actors\hero\stalker_novice ; cse_alife_creature_abstract properties g_team = 0 g_squad = 0 g_group = 0 health = 1 dynamic_out_restrictions = dynamic_in_restrictions = upd:health = 1 upd:timestamp = 0x75732029 upd:creature_flags = 0x70 upd:position = -246.726303100586,-24.7932605743408,-134.433868408203 upd:o_model = 0 upd:o_torso = -1.39625442028046,0.00431653670966625,0 upd:g_team = 0 upd:g_squad = 0 upd:g_group = 0 ; cse_alife_trader_abstract properties money = 40 trader_flags = 0 character_profile = actor ; cse_ph_skeleton properties ; cse_alife_creature_actor properties upd:actor_state = 0xd20 upd:actor_accel_header = 0 upd:actor_accel_data = 0 upd:actor_velocity_header = 0 upd:actor_velocity_data = 0 upd:actor_radiation = 0 upd:actor_weapon = 110 upd:num_items = 0
Удалить из alife_l01_ecape.ltx и поместить в файл того уровня, в который необходимо. Прописать новые координаты не только в строках:
position
game_vertex_id
level_vertex_id
Но и в upd:position (взять из строки position). И все дела.
-
Kolmogor, С днём рождения!
-
target=bandit и здесь бандит вместо актор
При таком варианте, конечно же, в ГГ перестанет стрелять, но и по бандитам не начнёт. Для техники целью может быть либо actor, либо story_ID. Но никак не коммьюнити
-
Значит, точно ошибка в скрипте загрузки работ.но у меня посыпались гулаги военных и нейтралов на кордоне. Как сохранить гулаг при удалении НПС.До:
-- Шустрый t = { section = "logic@esc_lager_shustryi", idle = 0, prior = 16, state = {0,1}, online = true, in_rest = "", out_rest = "", predicate = function(obj_info) return obj_info.profile_name == "esc_shustryi" end } table.insert(sj, t) t = { section = "logic@esc_lager_kamp1", idle = 0, prior = 16, state = {2}, online = true, in_rest = "", out_rest = "", predicate = function(obj_info) return obj_info.profile_name == "esc_shustryi" end } table.insert(sj, t)
После:
-- Шустрый t = { section = "logic@esc_lager_shustryi", idle = 0, prior = 16, state = {0,1}, online = true, in_rest = "", out_rest = "" } table.insert(sj, t) t = { section = "logic@esc_lager_kamp1", idle = 0, prior = 16, state = {2}, online = true, in_rest = "", out_rest = "" } table.insert(sj, t)
То есть, работу необходимо сохранить, но убрать проверку профиля esc_shustryi. Важно - обязательно убрать зпт в строке in_rest = "", out_rest = "" - в общем, как здесь. Можно так же, замениь его логику logic@esc_lager_shustryi на ту, что ниже logic@esc_lager_kamp1. То есть, воявится ещё одно место у костра, причём, для всех состояний - дня, ночи, атаки наёмников.
Ещё, в этом гулаге, есть оигинальная ошибка:
-- охранники t = { section = "logic@esc_lager_zoneguard1", idle = 0, prior = 9, state = {0, 1}, in_rest = "", out_rest = "esc_lager_guard_kill_zone", } table.insert(sj, t) t = { section = "logic@esc_lager_zoneguard2", idle = 0, prior = 9, state = {0, 1}, in_rest = "", out_rest = "esc_lager_guard_kill_zone", } table.insert(sj, t)
Запятые в конце строк in_rest = "", out_rest = "esc_lager_guard_kill_zone",
Их тоже убрать:
-- охранники t = { section = "logic@esc_lager_zoneguard1", idle = 0, prior = 9, state = {0, 1}, in_rest = "", out_rest = "esc_lager_guard_kill_zone" } table.insert(sj, t) t = { section = "logic@esc_lager_zoneguard2", idle = 0, prior = 9, state = {0, 1}, in_rest = "", out_rest = "esc_lager_guard_kill_zone" } table.insert(sj, t)
Ну и у самого шустрого убрать esc_lager = true.
-
Oberst, связано с тем, что игра не может найти логику для проводника на Болотах. Видимо, что-то не так встало. Или неправильный порядок установки - в паке всё правильно - логика эта присутствует и подключена.
-
Да! Самое главное в Ragdoll Mod - Это конфиги монстров и неписей в папке Creatures.
-
Эта строка attachable_items - здесь перечислены предметы, которые могут появиться в руках НПС (рация, бутылка водки, колбаса, батон и т.п.). Туда и следует добавить yad. Ragdol Mod, по сути, затрагивает лишь физику (в основном, строки ph_skeleton.... Они все находятся рядом - легко совмесить при помощи WinMerge) - остальное вовсе необязательно добавлять.
-
Отшель[НИК], нет, абсолютно никаких проблем не будет. В Баре есть рестриктор в 200 с лишним метров.
-
Гулаг на всю локу создать, конечно же, можно.
В загрузке работ проставить online = true и всё. Наделать пути, там где необходимо, прописать логику.
А для непися, который должен покинуть своё место на некоторое время, можно сделать примерно следующее:
[первая_логика] on_info = {!is_day} вторая_логика [вторая_логика] on_info = {=is_day} первая_логика
Это условно. Можно и другие условия придумать. Функция is_day находится в xr_conditions.script. Можно создать по её аналогии другую, с другим промежутком времени. Назвать, к примеру, is_utro
function is_utro (actor, npc) return level.get_time_hours() >= 5 and level.get_time_hours() < 12 end
То есть, с 5ти до 12ти непись будет использовать одну логику, а в остальное время другую.
Конечно, можно заставить и покидать гулаг - прописать индивидуальную логику и имя_гулага = true - но только при этом гулаг необходимо распускать, используя cond = {+/-условие/инфопоршен}, по которому гулаг будет прекращать\возобновлять свою работу. Только это не есть хорошо, ибо все остальные жители так же будут покидать гулаг, если его отключить. Проще пользовать первый вариант - менять логику по условию или инфопоршену, не затрагивая остальных "жителей".
Ну и ещё, как вариант, можно менять состояние всего гулага. В один промежуток времени гулаг в 0-ом состоянии, в другой промежуток - в 1-ом - делается это в скриптах загрузки работ:
if type == "имя_гулага" then return function(gulag) if db.actor ~= nil then if ( level.get_time_hours() >= 5 and level.get_time_hours() <= 12 ) then return 0 else return 1 end else return gulag.state end end end
-
Вот мои данные по вертексам для новых локаций - может кому пригодятся:
atp_for_test22 = 1049687, peshera = 32341, puzir = 377572, aver = 1790762, av_peshera = 172637, limansk = 61524, hospital = 7865, generators = 752337, warlab = 7776, red_forest = 166431, lost_village = 46826, marsh = 528961
atp_for_test22 = {2792,2861}, peshera = {2862,2880}, puzir = {2881,2885}, aver = {2886,2908}, av_peshera = {2909,2987}, limansk = {2988,3027}, hospital = {3028,3075}, generators = {3076,3152}, warlab = {3153,3223}, red_forest = {3224,3323}, lost_village = {3324,3336}, marsh = {3337,3581}
-
dipper, это скорее всего, из-за скрипта определения координат - там, по умолчанию, включено отображение костра (fire_movie) - и если не ошибаюсь, правится это дело в файле ui_main_menu.script , путём комментирования строк с упоминанием об этом fire_movie, либо заменой файлом из чистого АМК (если не планируется определять координаты).
P.S. Очень надеюсь, кто-нибудь всё же возьмётся перекомпилировать АТП, но очень желательно, без смещения координат\вертексов.
Супер! Спасибо, Костя.Координаты от этого не изменятся. -
Ну или на худой конец, можно воспользоваться утилиткой Lua Checker.
-
Borsalino, а эти самые новые локации добавлены в amk_anoms.script?
Если нет, то необходимо добавить в:
local level_vertexes (указать имя локации = вертекс уровня)
local level_number (указать имя локации = порядковый номер)
local game_vertexes (указать имя локации = вертекс игры от и до)
level_anoms (если нужны динамически спавнящиеся аномалии)
level_arts (если нужны динамически спавнящиеся артефакты)
local levelname
В items.ltx добавить псевдобинты с названиями лок вида testsak_имялокации
В sak.script в функцию add_tail добавить локи в исключения (на которых не планируется спавн артов)
-
Нужно найти в amk_offline_alife.script найти строку:
news_main.trace("Process trade - unknown - "..sect.." "..v:name())
И закомментировать её.
Из xrGame.dll в лог выводится can't detach independant object. Раз непись подбирает ствол, может нужно добавить их в attachable_items?
-
Ошибка в диалоге. Вполне возможно, в одном диалоге имеется две одинаковых строки или id (цифры).
-
1. При отказе никакого поршена не выдаётся. А лишь прекращается диалог и ГГ перемещается в точку.
--' Мы отказываемся вступить в осознание, нас переносит на вторую станцию function osoznanie_decline(npc, actor) db.actor:disable_info_portion("oso_init_dialog") npc:stop_talk() actor:stop_talk() xr_effects.enable_ui(db.actor, nil) local point = patrol("mon_jump_aes2_walk") local look = patrol("mon_jump_aes2_look") db.actor:set_actor_position(point:point(0)) local dir = look:point(0):sub(point:point(0)) db.actor:set_actor_direction(-dir:getH()) end --' Мы соглашаемся вступить в осознание, конец игры. function osoznanie_agree(npc, actor) db.actor:disable_info_portion("oso_init_dialog") npc:stop_talk() actor:stop_talk() xr_effects.enable_ui(db.actor, nil) game.start_tutorial("mov_join_osoznanie") end
По второму - тоже очень интересно узнать. Понял только одно - это движковое.
-
wolkolak, добавление здоровья для ГГ при использовании аптечки\антирада\еды, зашито в движок (xrGame.dll).
Посмотрел. Это всё для НПС.
-
[error]Description : wrong fixed bone
Это вылет из-за того, что какой-то предмет закреплён за неправильную кость. Тут либо замок, либо ствол в тисках. Хотя, может и другие закреплённые предметы.
- 1
-
r1 - это DX8, r2 - DX9, r3 - DX10
Скрипт отвечает за оффлайн алайф АМК - торговля, перестрелки, гибель неписей и прочее в оффлайне.
У Костра XIII
в У Костра
Опубликовано · Изменено пользователем kish
Ооо, машина времени сработала)) Будто вернулся на 4 года назад. АМК форум - жив) Всё та же атмосфера, всё те же лица (почти). Всем ветеранам большой привет
Добро пожаловать! [kish]