Это популярное сообщение. Dennis_Chikin 3 658 Опубликовано 27 Мая 2014 Автор Это популярное сообщение. Поделиться Опубликовано 27 Мая 2014 Ваши правки и разнообразное "народное творчество." Хотелось бы видеть преимущественно куски кода/конфигов/и прочего с подробным разбором: что это, зачем, что здесь не так, почему, и как исправить. Перед тем, как задавать вопрос, читаем ПЕРВЫЙ ПОСТ в теме, и вообще саму тему. Также настоятельно рекомендуется: Как, Где, и Что - Шпаргалка АМК 1. https://yadi.sk/d/GcZ4wqkugYgtx 2. https://www.sendspace.com/file/jd4r4f 3. http://rusfolder.com/13002611 Ссылка на пост Ссылка на файл Ковыряем ОП-2.rtf Как называется и где найти - поиск в файлах игры или мода Не работает оружие с автозахватом (установлен репак от Lus'a) - заменить папку bin на эту: ссылка Упорный постинг в тему "дайте мне" и "сделайте мне", не удосужившись прочитать хотя-бы первый пост, и напрочь игнорируя поиск - явлется флудом, и оценивается соответственно (2.1.1 правил). 12 8 2 8 22 Солянка обезжиренная, диетическая, полезные советы по "солянке", текущий тестовый патч Ссылка на комментарий
Максим666 0 Опубликовано 21 Апреля 2016 Поделиться Опубликовано 21 Апреля 2016 (изменено) Весь "m stalker" перековырял, не понимаю почему сталки не истекают кровью, падают замертво при последнем выстреле, даже раненые не падают, смысл тогда этого "ai addition" и его лекарей, менял и "bip"ы по костям, не помогает, в SGM 2.2 себе делал, получалось-две пули с калаша по ногам, 3-4 в торс - сразу падают ранеными или идут истекая кровью. Падают они ранеными вообще кто-нибудь наблюдал? Я весь лагерь на кордоне перебил -никто так раненый и не упал( Формула расчёта стрельбы по НПСам в ТЧ до сих пор НЕИЗВЕСТНА.Есть лишь приблизительные прикидки. Но как движок считает точно, не знает никто. Поэтому подранить НПСа на 100 %, из определённого оружия даже с одинакового расстояния , даже в одну и ту же кость невозможно. BFG. @Максим666, Как подранить НПСа http://www.amk-team.ru/forum/topic/12839-kovyriaem-op-2/?p=925217 Спасибо, у меня вроде всё получилось, я взял данные с мода NLS6+реализм, дописал в "M stalker", "damage", "immunities", заспавнил противников посильнее, падают раненые все как один, истекают кровью, лечат сами себя, но и этот способ тоже попробую) ...пуляю ему только в ступни и локти, но он раненый не падает - дохнет гадина ((( Там как я понял определенный порог ранения, если слишком бронебойность большая - ты этот порог перешагиваешь и он дохнет, надо править "damage", кости в "m stalker", вплоть до параметров патронов или оружия( убойность имею ввиду) - это по моим наблюдениям, сейчас тоже этим страдаю) ... Про раненых здесь: http://www.amk-team.ru/forum/topic/12839-kovyriaem-op-2/?p=849870 И отзыв на эту правку нашел в личке: Работает на ура. Я ставил в def.hp 99, вместо 10 ради эксперимента, так у меня на центральном комплексе агропрома 16 вояк раненных валялось , думал игра повиснет от их причитаний одновременных. Ложатся 9мм пулей в любую часть тела, кроме головы.Ну потом перезагрузился, конечно, и свалил оттуда, def.hp поставил пока 30, понаблюдаю за результатами. Евген. Изменено 24 Апреля 2016 пользователем Eugen81 Ссылка на комментарий
nasar75 3 868 Опубликовано 22 Апреля 2016 Поделиться Опубликовано 22 Апреля 2016 (изменено) Что надо дописать в строку (файл task_manager.ltx) "reward_item = ammo_7.92x33_ap, ammo_7.62x39_k" чтобы после завершения ЦЗ давались не только патроны, но и немного денег. money_loot - "Небольшая пачка наличных денег" reward_item = ammo_7.92x33_ap, ammo_7.62x39_k, money_loot Изменено 24 Апреля 2016 пользователем Eugen81 1 AMD Athlon II X2 250, NVIDIA GTS 450, RAM 8.0 GB, WIN 7/64 правки Золотой Шар Ссылка на комментарий
naxac 2 445 Опубликовано 22 Апреля 2016 Поделиться Опубликовано 22 Апреля 2016 Чтобы после завершения ЦЗ давались не только патроны, но и немного денег.В секции нужного задания добавить строкуreward_money = сумма 1 1 Аддон для ОП-2.09.2: Яндекс/Google/GitHub Ссылка на комментарий
Nevada47 418 Опубликовано 22 Апреля 2016 Поделиться Опубликовано 22 Апреля 2016 (изменено) Переделал прицельные сетки, ничего не добавлял, просто из ОП 2 адаптировал для ШФ. Старые Новые http://rghost.ru/7wGsdwR5k Изменено 22 Апреля 2016 пользователем Nevada47 2 «Ну и жесть!» Сказал асфальтовый каток, оглянувшись назад на бывшую "копейку". Ссылка на комментарий
kasyamba 0 Опубликовано 23 Апреля 2016 Поделиться Опубликовано 23 Апреля 2016 (изменено) Добрый день! Уважаемые, можно как-нибудь отключить кряхтение/оханье ГГ при ударах и падениях? Заранее, спасибо! Здесь звуки актора на хиты: http://www.amk-team.ru/forum/topic/12839-kovyriaem-op-2/?p=980221 Звуковой файл-пустышка называется $no_sound. Просто пишешь: burn = $no_sound shock = $no_sound и т.д. Евген. Изменено 24 Апреля 2016 пользователем Eugen81 Ссылка на комментарий
Shitty 28 Опубликовано 23 Апреля 2016 Поделиться Опубликовано 23 Апреля 2016 (изменено) я про микро "фризы" Выстави в файле alife.ltx параметр switch_distance = 2000 -- 160 стандарт ОП-2 Микро фризы пропадут, но какие могут возникнуть проблемы - неизвестно. Так как локации грузятся на сразу, а на определенном радиусе (вроде как), где центром является ГГ. (Кстати, попутный вопрос: можно ли допустим для определенной локации сделать, чтобы switch_distance был тот, на который задал значения, в Баре при значении "2000" фризы пропадают полностью, что есть хорошо) А от вылетов на 100% не избавиться, так как они есть были и будут, но по сравнению с НС в ОП-2 проделана большая работа над производительностью и устранением вылетов. Ну насчёт проблем известно: Будут рушиться многие квесты завязанные на определённый момент появления ГГ. Также, с гораздо большей вероятностью, будут гибнуть важные НПС. shahvkit Изменено 23 Апреля 2016 пользователем shahvkit Ответ Ссылка на комментарий
1gor 100 Опубликовано 27 Апреля 2016 Поделиться Опубликовано 27 Апреля 2016 (изменено) Всем привет!У меня проблема: зомби вообще не стреляют! Ответов через поиск найти не смог.Подсказали посмотреть файл game_relations.ltx Там, вроде, все ок.[communities_relations]; |actor|act_dol|act_fre|stalker|monolit|military|killer|ecolog|dolg|freedom|bandit|zombied|stranger|trader |arena_enemy|sniper|green|nebo|lastday|fotoman|vermaht|zombied = -5000,-5000,-5000,-5000, 100, -5000, -5000, 0, -5000,-5000,-5000, 1000, 50, 0, -5000, -5000,-5000, -5000, -1500, 0, -5000Как заставить их стрелять? Какие файлы надо еще проверить?Очень прошу помочь.ОП-2 2.09+ф2 +Аврора +правки (античит, без ограничения обмен запчастей, зрение НПС, кол-во выпадающих патронов, варка 1мин, "умное" выпадение запчастей, хол.оружие, спавн-меню, видимые телепорты, рюкзак не рвется, бег с фотиком/топором, увел. вероятность рождения артов до 20%, без радиации на болотах, отмена вступит-го ролика)Правил отношения только у Кости, когда тот внезапно стал врагом. Ты бы мил человек уточнил у тебя зомби ВРАГИ для ГГ и не стреляют или всё-таки они друзья тебе ? Ибо суть есть разные вещи. BFG. Проверил (смотрел при обыске зомби - справа сверху указывается). Отношение к ГГ - враг. Так они не только в ГГ не стреляют, а вообще ни в кого! Интересный у вас баг... Такого ни в чистом ОП-2, ни с различными правками пока не было. Если в game_relations.ltx всё в порядке, тогда можно попробовать метод исключения. Поочерёдно убирать правки, и смотреть на реакцию зомби. shahvkit Либо нет оружия/патронов, либо противника не видят. В общем, проблема "мирных" сталков-зомби оказалась именно в параметре видимости. В файле m_stalker_zombied.ltx параметр eye_range был равен 1;10 (именно через точку с запятой, хотя у других он в виде одной цифры). Исправил на 30 (думаю, для тупых созданий - нормально). Начали шмалять. УРА! Точка с запятой - это знак комментария. Она и все что после нее в строке не читается. Евген. Изменено 8 Мая 2016 пользователем Eugen81 Ссылка на комментарий
harijus 0 Опубликовано 27 Апреля 2016 Поделиться Опубликовано 27 Апреля 2016 (изменено) Подскажите в каких файлах находятся нычки гг с барахлом, очень много скопилось всякого на разных локациях, хочу поудалять ненужное, а то глючит и вылетает при попытке сохраниться.Они находятся в файлах сохранений - C:\Users\Public\Documents\STALKER-SHOC\savedgamesshahvkit А чем открыть sav, если можно? Даже не думай. Выкладывай в эту тему сейв и укажи патч, фикс, правки с которыми играешь. Кто-нибудь поможет. Евген. Изменено 8 Мая 2016 пользователем Eugen81 1 Ссылка на комментарий
exDeMODER 100 Опубликовано 30 Апреля 2016 Поделиться Опубликовано 30 Апреля 2016 Hi-Tech HUD для ОП-2За моменты бесконечного прохождения ОП-2 перепробовал все HUD'ы, которые только есть. Вот вам новый, адаптация худа от Мерцающего. Тестировался на 16:9 мониторе, но уверен, что подойдет и для других. https://drive.google.com/open?id=0B7vXb4duV3GDbkZHWEtPaVhGdHM 1 2 Ссылка на комментарий
rza9111 71 Опубликовано 1 Мая 2016 Поделиться Опубликовано 1 Мая 2016 (изменено) Вопрос не совсем по ОП-2, но так как task_manager под него переписывался...Возможно ли взятие у заказчика ВСЕХ однотипных ЦЗ сразу? Например, у Сидора на убийство вожака бандитов, новичка, торгаша , Отца Диодора, Демона? А вот со временем выполнения и условиями там всё понятно. Изменено 1 Мая 2016 пользователем rza9111 Добавлено BFG, 1 Мая 2016 Не знаю выдержит ли ПДА по количеству заданий, но можно прописать "task`и" хоть ВСЕЙ Солянки на самый первый диалог со Звездочётом. Сразу. На весь сюжет. Поспешишь - модератора насмешишь Ссылка на комментарий
naxac 2 445 Опубликовано 2 Мая 2016 Поделиться Опубликовано 2 Мая 2016 (изменено) Вопрос от Корбан 43 Пытаюсь править наличие и количество аномалий в баре (для варки артов в одном месте, без метания по локам), нашел в amk_anoms.script строку: l05_bar={35,45,150,{mosquito_bald=8, mincer=2, zavesa=3, fountain=1, smallrain=4, electra=1, buzz=5, gravi=8, sakbuzz=2, zharka_static=4, sphere=2}}, Что означают первые три цифры 35,45,150? Ответ: @Корбан 43, первые две цифры - количество аномалий на уровне (пределы рандома), третья не используется. Изменено 8 Мая 2016 пользователем shahvkit Обьединение и удаление 1 Аддон для ОП-2.09.2: Яндекс/Google/GitHub Ссылка на комментарий
Максим666 0 Опубликовано 3 Мая 2016 Поделиться Опубликовано 3 Мая 2016 (изменено) Всех приветствую. Занимаюсь добавлением оружия, заменой существующих на более красивые и свежие модели, уже заменил порядком 15 моделей-"слямзил" у модеров-оружейников, добавил около 20, новые открытые прицелы, коллиматоры, пара съемных прицелов, сил хватит "залью", поделюсь, так вот давно хотел спросить- перевооружать сталкеров научился, в продажу ставить тоже, а вот какие файлы отвечают за бартер-понять не могу, к примеру Сидорович-дает за артефакт "Тоз" или "Сайга" и так же остальные торговцы, где прописано всё это дело, уже по всем файлам пробежался-не нашел...спасибо. sak_dialog.script function add_saiga(first_speaker, second_speaker) и т.д. Евген. А как определить кто дает обмен? Имен не указано, точнее не понятно, где указано что дают и что просят. В профилях торгашей ищи ссылки на диалоги. character_desc_escape.xml <actor_dialog>trade_dialog_sidor</actor_dialog> далее поиском по файлам ищи этот диалог (trade_dialog_sidor) :dialogs_trading.xml <dialog id="trade_dialog_sidor"> <phrase_list> <phrase id="0"> <text>trade_dialog_sidor_0</text> <next>1</next> </phrase> .... <precondition>sak_dialog.medusa_have</precondition> -- проверка: имеем ли медузу <text>trade_dialog_sidor_221</text> <action>sak_dialog.give_medusa</action> -- отдаем медузу <action>sak_dialog.add_ammo_12x70_buck3</action> -- получаем дробь Прога "редактор диалогов": http://www.amk-team.ru/forum/topic/12814-stalker-plot-manager/?p=839246 Евген. Изменено 8 Мая 2016 пользователем Eugen81 Ссылка на комментарий
V.E.Q.O. 159 Опубликовано 5 Мая 2016 Поделиться Опубликовано 5 Мая 2016 По amk_anoms.script или что там править: Самый простой способ уменьшить количество рандомных аномалий, это выставить свои значения в строке: local anoms_difficulty_koef={[0]=0.75,[1]=1.0,[2]=1.25,[3]=1.5}Например:[0]=0.1,[1]=0.3,[2]=0.75,[3]=1.0} Если решили убрать с определённой локации, то комментим название, (к примеру: -- l05_bar) в game_vertexes, level_vertexes, local level_arts и т.д. Просто уменьшить количество аномалий на локе в local level_anoms не прокатит, будет вылет. Вот правленый скрипт, с отключенными рандомными аномалиями на всех локациях: -- -*- mode: lua; coding: windows-1251-dos -*- --[[-------------------------- variable and table --------------------------]] local table_sort=table.sort local math_random=math.random local string_find=string.find local anoms_classes = { [ clsid.zone_bfuzz_s ] = true, [ clsid.zone_electra_s ] = true, [ clsid.zone_galant_s ] = true, [ clsid.zone_ice_s ] = true, [ clsid.zone_mbald_s ] = true, [ clsid.zone_mincer_s ] = true, [clsid.zone_zharka_s]=true } local anoms_difficulty_koef={ [0]=0, [1]=0, [2]=0, [3]=0 } local anoms_sections={ buzz={"buzz",{shtype=0,radius=1.0,center={0,0,0}}}, electra={"witches_galantine",{shtype=0,radius=1,center={0,0,0}}}, fountain={"fountain",{shtype=0,radius=1.0,center={0,0,0}}}, gravi={"gravi_zone",{shtype=0,radius=2,center={0,0,0}}}, mincer={"mincer",{shtype=0,radius=2,center={0,0,0}}}, mosquito_bald={"mosquito_bald",{shtype=0,radius=2,center={0,0,0}}}, sakbuzz={"sakbuzz",{shtype=0,radius=0.1,center={0,0,0}}}, smallrain={"smallrain",{shtype=0,radius=0.1,center={0,0,0}}}, sphere={"sphere",{shtype=0,radius=2.8,center={0,0,0}}}, zavesa={"zavesa",{shtype=0,radius=1,center={0,0,0}}}, zharka_static={"zharka_static",{shtype=1,v1={1,0,0},v2={0,5,0},v3={0,0,1},offset={0,0,0}}} } local anti_spawn_zones={} local arts_sections={ acumm = "art_acumm", balb_1="af_medusa", balb_2="af_cristall_flower", balb_3="af_night_star", buzz_1="af_ameba_slime", buzz_2="af_ameba_slug", buzz_3="af_ameba_mica", dummy_1="af_dummy_spring", dummy_2="af_dummy_dummy", dummy_3="af_dummy_battery", dummy_4="af_dummy_pellicle", dummy_5="af_fuzz_kolobok", dummy_6="af_dummy_glassbeads", electra_1="af_electra_sparkler", electra_2="af_electra_flash", electra_3="af_electra_moonlight", gravi_1="af_vyvert", gravi_2="af_gravi", gravi_3="af_gold_fish", mincer_1="af_blood", mincer_2="af_mincer_meat", mincer_3="af_soul", rusty_1="af_rusty_thorn", rusty_2="af_rusty_kristall", rusty_3="af_rusty_sea-urchin", voron_1="af_eye_voron", zharka_1="af_drops", zharka_2="af_fireball", zharka_3="af_cristall", -- небольшой спавн модификатов af_cry_1="af_cry_1", af_cry_2="af_cry_2", af_cry_3="af_cry_3", af_babka_1="af_babka_1", af_babka_2="af_babka_2", af_babka_3="af_babka_3", af_babka_4="af_babka_4", af_dik_1="af_dik_1", af_dik_2="af_dik_2", af_dik_3="af_dik_3", af_dik_4="af_dik_4", af_spirit_1="af_spirit_1", af_spirit_2="af_spirit_2", af_spirit_3="af_spirit_3", af_spirit_4="af_spirit_4", af_armor_1="af_armor_1", af_armor_2="af_armor_2", af_armor_3="af_armor_3", af_armor_4="af_armor_4", af_pudd_1="af_pudd_1", af_pudd_2="af_pudd_2", af_pudd_3="af_pudd_3", af_pudd_4="af_pudd_4", af_kol_1="af_kol_1", af_kol_2="af_kol_2", af_kol_3="af_kol_3", af_kol_4="af_kol_4", af_buliz="af_buliz" } -- Здесь перечислены все интервалы game_vertex для каждого -- уровня. Можно не запуская игру смотреть, на каком уровне спавнится -- объект game_vertexes = { -- l01_escape = {0,251}, -- l02_garbage = {252,415}, -- l03_agroprom = {416,702}, -- l03u_agr_underground = {703,810}, -- l04_darkvalley = {811,1108}, -- l04u_labx18 = {1109,1167}, -- l05_bar = {1168,1307}, -- l06_rostok = {1308,1437}, -- l08_yantar = {1438,1528}, -- l08u_brainlab = {1529,1544}, -- l07_military = {1545,1861}, -- l10_radar = {1862,2116}, -- l11_pripyat = {2117,2272}, -- l12_stancia = {2273,2401}, -- l12u_sarcofag = {2402,2466}, -- l12u_control_monolith = {2467,2516}, -- l12_stancia_2 = {2517,2660}, -- l10u_bunker = {2661,2791}, -- 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}, -- dead_city = {3582,3659}, -- zaton = {3660,3699}, -- jupiter = {3700,3747}, -- pripyat = {3748,3770}, -- jupiter_underground = {3771,3829}, -- labx8 = {3830,3850}, } level_vertexes={ -- l01_escape = 595499, -- l02_garbage = 382663, -- l03_agroprom = 437421, -- l03u_agr_underground = 4810, -- l04_darkvalley = 390125, -- l04u_labx18 = 7565, -- l05_bar = 99539, -- l06_rostok = 67713, -- l07_military = 418268, -- l08_yantar = 141471, -- l08u_brainlab = 7724, -- l10_radar = 227189, -- l10u_bunker = 8723, -- l11_pripyat = 261219, -- l12_stancia = 477923, -- l12_stancia_2 = 264576, -- l12u_control_monolith = 3971, -- l12u_sarcofag = 10620, -- puzir = 377572, -- aver = 1790762, -- marsh = 528961, -- limansk = 61524, -- hospital = 7865, -- red_forest = 166431, -- lost_village = 49127, -- generators = 752337, -- atp_for_test22 = 1049687, -- dead_city = 551769, -- zaton = 1851251, -- jupiter = 1486320, -- pripyat = 487255, -- av_peshera = 172361, -- peshera = 32109, -- warlab = 7747, -- jupiter_underground = 40830, -- labx8 = 5799, } level_anoms={ -- l01_escape={50,75,400,{electra=12, zavesa=2, smallrain=6, fountain=7, gravi=0, mincer=0, buzz=0, sakbuzz=2, mosquito_bald=0, sphere=4}}, -- l02_garbage={50,75,400,{mosquito_bald=12, mincer=2, smallrain=5, zavesa=3, electra=15, gravi=10, buzz=12, sakbuzz=3, sphere=3, fountain=2}}, -- l03_agroprom={10,14,100,{mosquito_bald=12, mincer=3, smallrain=4, fountain=2, zavesa=2, electra=0, buzz=12, gravi=10, sakbuzz=3, sphere=3}}, -- l04_darkvalley={11,15,100,{mincer=3, mosquito_bald=12, fountain=2, zavesa=3, smallrain=5, electra=0, buzz=10, zharka_static=8, gravi=8, sakbuzz=5, sphere=4}}, -- l05_bar={35,45,150,{mosquito_bald=8, mincer=2, zavesa=3, fountain=1, smallrain=4, electra=1, buzz=5, gravi=8, sakbuzz=2, zharka_static=4, sphere=2}}, -- l06_rostok={10,50,300,{mincer=3, mosquito_bald=7, smallrain=2, electra=2, zavesa=2, zharka_static=25, gravi=0, sakbuzz=3, buzz=10, sphere=2, fountain=1}}, -- l08_yantar={80,110,400,{mosquito_bald=8, mincer=8, fountain=1, smallrain=4, zavesa=3, electra=2, buzz=8, zharka_static=5, gravi=8, sakbuzz=3, sphere=3}}, -- l07_military={11,15,100,{mincer=4 , mosquito_bald=15, fountain=2, smallrain=4, zavesa=3, electra=12, zharka_static=8, gravi=0, sakbuzz=3, buzz=10, sphere=4}}, -- l10_radar={12,14,100,{mincer=6, mosquito_bald=11, fountain=10, smallrain=6, electra=2, zavesa=3, buzz=10, zharka_static=12, gravi=10, sakbuzz=5, sphere=4}}, -- l11_pripyat={11,15,90,{mincer=10, mosquito_bald=10, zavesa=3, fountain=1, smallrain=1, electra=10, zharka_static=8, gravi=10, buzz=10, sakbuzz=2, sphere=3}}, -- l12_stancia={70,90,700,{mincer=2, mosquito_bald=10, smallrain=6, electra=0, fountain=1, zavesa=3, buzz=10, zharka_static=7, gravi=8, sakbuzz=4, sphere=4}}, -- puzir={150,170,450,{mincer=12, mosquito_bald=15, smallrain=6, zavesa=3, electra=14, buzz=12, zharka_static=5, gravi=14, sakbuzz=3, sphere=4, fountain=1}}, -- aver={18,19,75,{mincer=14, mosquito_bald=12, smallrain=5, electra=0, zavesa=4, buzz=15, zharka_static=5, gravi=15, sakbuzz=4, sphere=5, fountain=1}}, -- marsh={10,20,100,{mincer=8, mosquito_bald=12, smallrain=9, electra=0, zavesa=4, buzz=15, zharka_static=5, gravi=15, sakbuzz=4, sphere=5, fountain=1}}, -- limansk={5,6,30,{mosquito_bald=10, mincer=12, smallrain=2, fountain=16, zavesa=2, electra=0, gravi=10, buzz=10, sakbuzz=2, zharka_static=8, sphere=3}}, -- hospital={10,20,100,{mincer=8, mosquito_bald=8, zavesa=2, fountain=1, electra=7, buzz=8, gravi=5, sakbuzz=2, zharka_static=5, sphere=2}}, -- red_forest={11,15,40,{mincer=8, mosquito_bald=10, zavesa=4, fountain=2, smallrain=6, electra=3, zharka_static=8, gravi=10, buzz=10, sakbuzz=4, sphere=5}}, -- lost_village={8,10,25,{mincer=8, mosquito_bald=8, zavesa=3, fountain=1, smallrain=1, electra=10, zharka_static=5, gravi=5, buzz=5, sakbuzz=2, sphere=3}}, -- generators={0,0,0,{mincer=15, mosquito_bald=11, fountain=1, zavesa=5, smallrain=2, electra=15, zharka_static=5, gravi=10, buzz=16, sakbuzz=6, sphere=4}}, -- atp_for_test22={16,18,40,{mincer=13, mosquito_bald=10, fountain=2, smallrain=2, zavesa=4, electra=15, zharka_static=10, gravi=10, buzz=20, sakbuzz=4, sphere=4}}, -- dead_city={11,15,90,{mincer=10, mosquito_bald=10, zavesa=3, fountain=2, smallrain=2, electra=10, zharka_static=8, gravi=10, buzz=10, sakbuzz=1, sphere=4}}, -- zaton={18,19,100,{electra=25, zavesa=6, smallrain=3, fountain=5, gravi=15, mincer=15, buzz=15, sakbuzz=8, mosquito_bald=15, sphere=12, zharka_static=8}}, -- jupiter={18,19,100,{electra=25, zavesa=4, smallrain=3, fountain=4, gravi=20, mincer=15, buzz=25, sakbuzz=5, mosquito_bald=20, sphere=12}}, -- pripyat={14,16,100,{electra=15, zavesa=4, smallrain=1, fountain=3, gravi=18, mincer=15, buzz=15, sakbuzz=4, mosquito_bald=18, sphere=10}} } local level_arts={ -- l01_escape={2,4,{balb_1=22, balb_2=2, gravi_1=22, gravi_2=5, mincer_1=25, electra_1=9, electra_2=1, rusty_1=5, acumm=2, af_buliz=1, af_cry_1=1, af_babka_1=1, af_spirit_1=1, af_armor_1=1, af_pudd_1=1, af_kol_1=1}}, -- l02_garbage={2,4,{balb_1=18, balb_2=5, gravi_1=24, gravi_2=5, mincer_1=19, mincer_2=5, electra_1=10, rusty_1=5, acumm=2, af_buliz=1, af_cry_1=1, af_babka_1=1, af_spirit_1=1, af_armor_1=1, af_pudd_1=1, af_kol_1=1}}, -- l03_agroprom={2,4,{balb_1=11, balb_2=5, gravi_1=11, gravi_2=5, mincer_1=8, mincer_2=5, electra_1=8, electra_2=5, zharka_1=8, zharka_2=5, buzz_1=10, rusty_1=5, acumm=2, af_buliz=1, af_cry_1=1, af_babka_1=1, af_babka_2=1, af_spirit_1=1, af_spirit_2=1, af_armor_1=1, af_armor_2=1, af_pudd_1=1, af_pudd_2=1, af_kol_1=1, af_kol_2=1}}, -- l04_darkvalley={2,4,{balb_1=1, balb_2=8, gravi_1=5, gravi_2=7, mincer_1=5, mincer_2=9, electra_1=5, electra_2=8, zharka_1=9, zharka_2=9, buzz_1=9, buzz_2=3, rusty_1=5, rusty_2=2, voron_1=1, acumm=2, af_buliz=1, af_cry_1=1, af_babka_1=1, af_babka_2=1, af_spirit_1=1, af_spirit_2=1, af_armor_1=1, af_armor_2=1, af_pudd_1=1, af_pudd_2=1, af_kol_1=1, af_kol_2=1}}, -- l05_bar={2,4,{balb_1=15, balb_2=7, gravi_1=15, mincer_1=17, electra_1=10, buzz_1=5, buzz_2=3, rusty_1=5, rusty_2=3, dummy_1=1, dummy_2=1, dummy_4=1, dummy_5=1, acumm=4, af_buliz=1, af_cry_1=1, af_babka_1=1, af_babka_2=1, af_spirit_1=1, af_spirit_2=1, af_armor_1=1, af_armor_2=1, af_pudd_1=1, af_pudd_2=1, af_kol_1=1, af_kol_2=1}}, -- l06_rostok={2,4,{balb_2=2, balb_3=2, mincer_2=2, mincer_3=2, electra_1=8, electra_2=8, zharka_1=14, zharka_2=8, zharka_3=5, buzz_1=5, rusty_1=10, rusty_2=8, rusty_3=5, dummy_2=1, dummy_3=1, dummy_4=1, acumm=2, af_buliz=1, af_cry_1=1, af_cry_2=0.5, af_babka_1=1, af_babka_2=1, af_babka_3=0.5, af_dik_1=0.5, af_dik_2=0.5, af_spirit_1=1, af_spirit_2=1, af_spirit_3=0.5, af_armor_1=1, af_armor_2=1, af_armor_3=0.5, af_pudd_1=1, af_pudd_2=1, af_pudd_3=0.5, af_kol_1=1, af_kol_2=1, af_kol_3=0.5}}, -- l08_yantar={2,4,{balb_1=1, balb_2=3, balb_3=2, gravi_1=7, gravi_2=5, gravi_3=3, mincer_1=5, mincer_2=4, mincer_3=2, electra_1=7, electra_2=5, electra_3=2, zharka_1=6, zharka_2=4, zharka_3=2, buzz_1=7, buzz_2=5, buzz_3=1, rusty_1=7, rusty_2=3, rusty_3=2, af_buliz=1, af_cry_1=1, af_cry_2=0.5, af_babka_1=1, af_babka_2=1, af_babka_3=0.5, af_dik_1=0.5, af_dik_2=0.5, af_spirit_1=1, af_spirit_2=1, af_spirit_3=0.5, af_armor_1=1, af_armor_2=1, af_armor_3=0.5, af_pudd_1=1, af_pudd_2=1, af_pudd_3=0.5, af_kol_1=1, af_kol_2=1, af_kol_3=0.5}}, -- l07_military={2,4,{balb_1=2, balb_2=4, balb_3=2, gravi_1=3, gravi_2=5, gravi_3=3, mincer_1=5, mincer_2=4, mincer_3=4, electra_1=7, electra_2=4, electra_3=2, zharka_1=4, zharka_2=5, zharka_3=3, buzz_1=7, buzz_2=2, rusty_1=7, rusty_2=4, rusty_3=2, dummy_2=1, dummy_3=1, dummy_5=1, acumm=2, af_buliz=1, af_cry_1=1, af_cry_2=0.5, af_babka_1=1, af_babka_2=1, af_babka_3=0.5, af_dik_1=0.5, af_dik_2=0.5, af_spirit_1=1, af_spirit_2=1, af_spirit_3=0.5, af_armor_1=1, af_armor_2=1, af_armor_3=0.5, af_pudd_1=1, af_pudd_2=1, af_pudd_3=0.5, af_kol_1=1, af_kol_2=1, af_kol_3=0.5}}, -- l10_radar={2,4,{balb_1=3, balb_2=5, balb_3=4, gravi_1=4, gravi_2=3, gravi_3=3, mincer_1=5, mincer_2=5, mincer_3=4, electra_1=4, electra_2=4, electra_3=3, zharka_1=4, zharka_2=4, zharka_3=4, buzz_1=5, buzz_2=5, rusty_1=5, rusty_2=5, rusty_3=4, af_buliz=1, af_cry_2=1, af_cry_3=0.5, af_babka_2=1, af_babka_3=1, af_babka_4=0.5, af_dik_1=1, af_dik_2=0.5, af_dik_3=0.5, af_spirit_2=1, af_spirit_3=1, af_spirit_4=0.5, af_armor_2=1, af_armor_3=1, af_armor_4=0.5, af_pudd_2=1, af_pudd_3=1, af_pudd_4=0.5, af_kol_2=1, af_kol_3=1, af_kol_4=0.5}}, -- l11_pripyat={2,4,{balb_1=2, balb_2=2, balb_3=2, gravi_1=3, gravi_2=3, gravi_3=3, mincer_1=4, mincer_2=4, mincer_3=3, electra_1=2, electra_2=4, electra_3=3, zharka_1=4, zharka_2=3, zharka_3=3, buzz_1=4, buzz_2=4, buzz_3=3, rusty_1=7, rusty_2=4, rusty_3=4, dummy_1=1, dummy_2=2, dummy_3=1, dummy_4=1, dummy_5=1, acumm=2, af_buliz=1, af_cry_2=1, af_cry_3=1, af_babka_2=1, af_babka_3=1, af_babka_4=1, af_dik_1=1, af_dik_2=1, af_dik_3=1, af_spirit_2=1, af_spirit_3=1, af_spirit_4=1, af_armor_2=1, af_armor_3=1, af_armor_4=1, af_pudd_2=1, af_pudd_3=1, af_pudd_4=1, af_kol_2=1, af_kol_3=1, af_kol_4=1}}, -- l12_stancia={2,4,{balb_1=1, balb_2=1, balb_3=1, gravi_1=3, gravi_2=3, gravi_3=3, mincer_1=4, mincer_2=4, mincer_3=3, electra_1=4, electra_2=4, electra_3=3, zharka_1=4, zharka_2=4, zharka_3=3, buzz_1=3, buzz_2=4, buzz_3=3, rusty_1=4, rusty_2=4, rusty_3=3, dummy_1=1, dummy_2=1, dummy_3=1, dummy_4=1, dummy_5=1, acumm=2, af_buliz=1, af_cry_2=1, af_cry_3=2, af_babka_2=1, af_babka_3=1, af_babka_4=2, af_dik_2=1, af_dik_3=1, af_dik_4=1, af_spirit_2=1, af_spirit_3=1, af_spirit_4=2, af_armor_2=1, af_armor_3=1, af_armor_4=2, af_pudd_2=1, af_pudd_3=1, af_pudd_4=2, af_kol_2=1, af_kol_3=1, af_kol_4=2}}, -- puzir={4,6,{balb_1=3, balb_2=3, gravi_1=5, gravi_2=5, mincer_1=7, mincer_2=5, electra_1=10, electra_2=5, zharka_1=9, zharka_2=5, buzz_1=10, buzz_2=8, buzz_3=5, rusty_1=5, rusty_2=2, af_buliz=1, af_cry_1=1, af_cry_2=1, af_babka_1=1, af_babka_2=1, af_spirit_1=1, af_spirit_2=1, af_armor_1=1, af_armor_2=1, af_pudd_1=1, af_pudd_2=1, af_kol_1=1, af_kol_2=1}}, -- aver={2,4,{balb_1=2, balb_2=3, balb_3=3, gravi_1=6, gravi_2=4, gravi_3=3, mincer_1=3, mincer_2=4, mincer_3=1, electra_1=5, electra_2=5, electra_3=2, zharka_1=4, zharka_2=4, zharka_3=1, buzz_1=6, buzz_2=6, buzz_3=4, rusty_1=5, rusty_2=4, rusty_3=4, dummy_1=1, dummy_2=1, dummy_3=1, dummy_4=1, dummy_5=1, acumm=2, af_buliz=1, af_cry_2=1, af_babka_2=1, af_babka_3=1, af_dik_2=1, af_dik_3=1, af_spirit_2=1, af_spirit_3=1, af_armor_2=1, af_armor_3=1, af_pudd_2=1, af_pudd_3=1, af_kol_2=1, af_kol_3=1}}, -- marsh={2,4,{balb_1=2, balb_2=3, balb_3=3, gravi_1=5, gravi_2=4, gravi_3=3, mincer_1=4, mincer_2=4, mincer_3=3, electra_1=5, electra_2=4, electra_3=3, zharka_1=5, zharka_2=4, zharka_3=3, buzz_1=7, buzz_2=4, buzz_3=3, rusty_1=5, rusty_2=4, rusty_3=3, dummy_1=1, dummy_2=1, dummy_3=1, dummy_4=1, voron_1=1, af_buliz=1, af_cry_2=1, af_babka_2=1, af_babka_3=1, af_dik_2=1, af_dik_3=1, af_spirit_2=1, af_spirit_3=1, af_armor_2=1, af_armor_3=1, af_pudd_2=1, af_pudd_3=1, af_kol_2=1, af_kol_3=1}}, -- limansk={1,2,{balb_1=2, balb_2=4, balb_3=5, gravi_1=4, gravi_2=4, gravi_3=4, mincer_1=4, mincer_2=4, mincer_3=4, electra_1=4, electra_2=4, electra_3=4, zharka_1=4, zharka_2=4, zharka_3=4, buzz_1=4, buzz_2=4, rusty_1=4, rusty_2=4, rusty_3=4, af_buliz=1, af_cry_2=1, af_cry_3=1, af_babka_2=1, af_babka_3=1, af_babka_4=1, af_dik_2=1, af_dik_3=1, af_dik_4=1, af_spirit_2=1, af_spirit_3=1, af_spirit_4=1, af_armor_2=1, af_armor_3=1, af_armor_4=1, af_pudd_2=1, af_pudd_3=1, af_pudd_4=1, af_kol_2=1, af_kol_3=1, af_kol_4=1}}, -- hospital={1,2,{balb_1=2, balb_2=2, balb_3=3, gravi_1=3, gravi_2=4, gravi_3=3, mincer_1=3, mincer_2=4, mincer_3=3, electra_1=7, electra_2=4, electra_3=3, zharka_1=4, zharka_2=4, zharka_3=3, buzz_1=4, buzz_2=4, buzz_3=3, rusty_1=4, rusty_2=4, rusty_3=3, dummy_1=1, dummy_2=1, dummy_3=1, dummy_4=1, dummy_5=1, af_buliz=1, af_cry_2=1, af_cry_3=1, af_babka_2=1, af_babka_3=1, af_babka_4=1, af_dik_2=1, af_dik_3=1, af_dik_4=1, af_spirit_2=1, af_spirit_3=1, af_spirit_4=1, af_armor_2=1, af_armor_3=1, af_armor_4=1, af_pudd_2=1, af_pudd_3=1, af_pudd_4=1, af_kol_2=1, af_kol_3=1, af_kol_4=1}}, -- red_forest={2,4,{balb_1=3, balb_2=6, balb_3=5, gravi_1=4, gravi_2=3, gravi_3=3, mincer_1=4, mincer_2=4, mincer_3=5, electra_1=5, electra_2=4, electra_3=3, zharka_1=5, zharka_2=5, zharka_3=3, buzz_1=3, buzz_2=5, voron_1=1, rusty_1=4, rusty_2=4, af_buliz=1, af_cry_2=1, af_cry_3=1, af_babka_2=1, af_babka_3=1, af_babka_4=1, af_dik_2=1, af_dik_3=1, af_dik_4=1, af_spirit_2=1, af_spirit_3=1, af_spirit_4=1, af_armor_2=1, af_armor_3=1, af_armor_4=1, af_pudd_2=1, af_pudd_3=1, af_pudd_4=1, af_kol_2=1, af_kol_3=1, af_kol_4=1}}, -- lost_village={1,2,{balb_1=4, balb_2=7, balb_3=5, gravi_1=4, gravi_2=3, gravi_3=3, mincer_1=5, mincer_2=7, mincer_3=5, electra_1=5, electra_2=4, electra_3=2, zharka_1=4, zharka_2=4, zharka_3=4, buzz_1=4, buzz_2=4, dummy_1=5, af_buliz=1, af_cry_2=1, af_cry_3=1, af_babka_2=1, af_babka_3=1, af_babka_4=1, af_dik_2=1, af_dik_3=1, af_dik_4=1, af_spirit_2=1, af_spirit_3=1, af_spirit_4=1, af_armor_2=1, af_armor_3=1, af_armor_4=1, af_pudd_2=1, af_pudd_3=1, af_pudd_4=1, af_kol_2=1, af_kol_3=1, af_kol_4=1}}, -- generators={2,4,{balb_1=1, balb_2=3, balb_3=2, gravi_1=2, gravi_2=2, gravi_3=2, mincer_1=4, mincer_2=4, mincer_3=3, electra_1=3, electra_2=3, electra_3=2, zharka_1=5, zharka_2=4, zharka_3=4, buzz_1=5, buzz_2=4, buzz_3=3, rusty_2=6, dummy_1=4, dummy_2=4, dummy_3=1, dummy_4=1, dummy_5=1, af_buliz=1, af_cry_2=1, af_cry_3=2, af_babka_2=1, af_babka_3=1, af_babka_4=2, af_dik_2=1, af_dik_3=1, af_dik_4=1, af_spirit_2=1, af_spirit_3=1, af_spirit_4=2, af_armor_2=1, af_armor_3=1, af_armor_4=2, af_pudd_2=1, af_pudd_3=1, af_pudd_4=2, af_kol_2=1, af_kol_3=1, af_kol_4=2}}, -- atp_for_test22={2,4,{balb_1=2, balb_2=3, balb_3=2, gravi_1=6, gravi_2=4, gravi_3=3, mincer_1=4, mincer_2=4, mincer_3=1, electra_1=5, electra_2=5, electra_3=2, zharka_1=4, zharka_2=4, zharka_3=1, buzz_1=5, buzz_2=4, buzz_3=4, rusty_1=5, rusty_2=4,dummy_1=5, dummy_2=1, dummy_3=1, dummy_4=1, voron_1=1, acumm=3, af_buliz=1, af_cry_1=1, af_cry_2=0.5, af_babka_1=1, af_babka_2=1, af_babka_3=0.5, af_dik_1=0.5, af_dik_2=0.5, af_spirit_1=1, af_spirit_2=1, af_spirit_3=0.5, af_armor_1=1, af_armor_2=1, af_armor_3=0.5, af_pudd_1=1, af_pudd_2=1, af_pudd_3=0.5, af_kol_1=1, af_kol_2=1, af_kol_3=0.5}}, -- dead_city={2,4,{balb_1=4, balb_2=3, balb_3=3, gravi_1=4, gravi_2=3, gravi_3=3, mincer_1=4, mincer_2=4, mincer_3=3, electra_1=3, electra_2=3, electra_3=3, zharka_1=4, zharka_2=4, zharka_3=3, buzz_1=4, buzz_2=4, buzz_3=3, rusty_1=4, rusty_2=4, rusty_3=3, dummy_1=1, dummy_2=2, dummy_3=1, dummy_4=1, dummy_5=1, af_buliz=1, af_cry_2=1, af_cry_3=1, af_babka_2=1, af_babka_3=1, af_babka_4=1, af_dik_2=1, af_dik_3=1, af_dik_4=1, af_spirit_2=1, af_spirit_3=1, af_spirit_4=1, af_armor_2=1, af_armor_3=1, af_armor_4=1, af_pudd_2=1, af_pudd_3=1, af_pudd_4=1, af_kol_2=1, af_kol_3=1, af_kol_4=1}}, -- zaton={4,6,{balb_1=2, balb_2=3, balb_3=3, gravi_1=3, gravi_2=3, gravi_3=3, mincer_1=3, mincer_2=3, mincer_3=3, electra_1=5, electra_2=4, electra_3=3, zharka_1=5, zharka_2=4, zharka_3=3, buzz_1=7, buzz_2=4, buzz_3=3, rusty_1=5, rusty_2=4, rusty_3=3, dummy_1=1, dummy_2=1, dummy_3=1, dummy_4=1, voron_1=1, acumm=2, af_buliz=1, af_cry_2=1, af_cry_3=0.5, af_babka_2=1, af_babka_3=1, af_babka_4=0.5, af_dik_1=1, af_dik_2=0.5, af_dik_3=0.5, af_spirit_2=1, af_spirit_3=1, af_spirit_4=0.5, af_armor_2=1, af_armor_3=1, af_armor_4=0.5, af_pudd_2=1, af_pudd_3=1, af_pudd_4=0.5, af_kol_2=1, af_kol_3=1, af_kol_4=0.5}}, -- jupiter={4,6,{balb_1=2, balb_2=3, balb_3=3, gravi_1=4, gravi_2=4, gravi_3=3, mincer_1=4, mincer_2=4, mincer_3=3, electra_1=5, electra_2=4, electra_3=3, zharka_1=5, zharka_2=4, zharka_3=3, buzz_1=5, buzz_2=4, buzz_3=3, rusty_1=5, rusty_2=4, rusty_3=3, dummy_1=1, dummy_2=1, dummy_3=1, dummy_4=1, voron_1=1, af_buliz=1, af_cry_2=1, af_cry_3=0.5, af_babka_2=1, af_babka_3=1, af_babka_4=0.5, af_dik_1=1, af_dik_2=0.5, af_dik_3=0.5, af_spirit_2=1, af_spirit_3=1, af_spirit_4=0.5, af_armor_2=1, af_armor_3=1, af_armor_4=0.5, af_pudd_2=1, af_pudd_3=1, af_pudd_4=0.5, af_kol_2=1, af_kol_3=1, af_kol_4=0.5}}, -- pripyat={2,4,{balb_1=2, balb_2=3, balb_3=3, gravi_1=4, gravi_2=4, gravi_3=3, mincer_1=4, mincer_2=4, mincer_3=3, electra_1=5, electra_2=4, electra_3=3, zharka_1=5, zharka_2=4, zharka_3=3, buzz_1=5, buzz_2=4, buzz_3=3, rusty_1=5, rusty_2=4, rusty_3=3, dummy_1=1, dummy_2=1, dummy_3=1, dummy_4=1, voron_1=1, af_buliz=1, af_cry_2=1, af_cry_3=0.5, af_babka_2=1, af_babka_3=1, af_babka_4=0.5, af_dik_1=1, af_dik_2=0.5, af_dik_3=0.5, af_spirit_2=1, af_spirit_3=1, af_spirit_4=0.5, af_armor_2=1, af_armor_3=1, af_armor_4=0.5, af_pudd_2=1, af_pudd_3=1, af_pudd_4=0.5, af_kol_2=1, af_kol_3=1, af_kol_4=0.5}} } --[[-------------------------- variable and table ---------------------end--]] --[[-------------------------- function for spawn --------------------------]] function init() local blow = amk.load_variable( "blowout", 0 ) local lname = level.name() if not level_vertexes[ lname ] then return end if not level_anoms[ lname ] then return end local anoms_sect = "amk_anoms." .. lname if system_ini():section_exist( anoms_sect ) then local result, id, value = nil, nil, nil for a = 0, system_ini():line_count( anoms_sect ) - 1 do result, id, value = system_ini():r_line( anoms_sect, a, "", "" ) if id and amk.trim( id ) ~= "" and amk.trim( id ) then local s = amk.str_explode( ",", id, true ) if s[ 1 ] == nil or s[ 2 ] == nil or s[ 3 ] == nil or s[ 4 ] == nil then abort( "amk_anoms:init() - error while parsing safe zones for " .. lname .. " at section's line #" .. ( a + 1 ) ) end table.insert( anti_spawn_zones, { vector():set( tonumber( s[ 1 ] ), tonumber( s[ 2 ] ), tonumber( s[ 3 ] ) ), tonumber( s[ 4 ] ) } ) end end end if blow > 0 and blow < 4 then return end pre_blow_off() generate_anoms() end function after_blow_on() local lname = level.name() if not level_vertexes[ lname ] then return end if not level_anoms[ lname ] then return end generate_anoms() move_mgr.invalidate_pp_accessibility() end --[=[ function pre_blow_off() -- уточнить нужна ли проверка на существование гейм вертекса по гейм вертексу объекта, который уже заспавнен и готовится к удалению local sim=alife() local ggraph=game_graph() for i=0,65534 do local sobj=sim:object(i) if sobj then if is_anomaly(sobj:clsid()) and ggraph:valid_vertex_id(sobj.m_game_vertex_id) then local map=sim:level_name(ggraph:vertex(sobj.m_game_vertex_id):level_id()) if not check_exclusion(sobj,map) then local status=get_anomaly_status(sobj) if status=="" or status=="on" then set_anomaly_status(sobj,"del") alife():release(sobj,true) end end end end end end --]=] function pre_blow_off() for i = 0, 65534 do local sobj = alife():object(i) if sobj then if is_anomaly( sobj:clsid() ) then local map = alife():level_name( game_graph():vertex( sobj.m_game_vertex_id ):level_id() ) if not check_exclusion( sobj, map ) then local status = get_anomaly_status( sobj ) if status == "" or status == "on" then set_anomaly_status( sobj, "del" ) alife():release( sobj, true ) end end end end end end function cleanup_arts() local known_arts = {} local known_sects = {} for lname, alist in pairs( level_arts ) do if not known_arts[ lname ] then known_arts[ lname ] = {} end for k, v in pairs( alist[ 3 ] ) do local sect = arts_sections[ k ] if sect then known_arts[ lname ][ sect ] = true known_sects[ sect ] = true end end end for i = 0, 65534 do local sobj = alife():object( i ) if sobj and sobj.parent_id == 65535 then local sect = sobj:section_name() if known_sects[ sect ] then local gvid = sobj.m_game_vertex_id local lname = alife():level_name( game_graph():vertex( gvid ):level_id() ) if known_arts[ lname ] and known_arts[ lname ][ sect ] then alife():release( sobj, true ) end end end end for k, v in pairs( amk_offline_alife.off_npcs ) do v.artefacts = {} end end function generate_anoms() local lname = level.name() local v = level_anoms[ lname ] if v then local cnt = 0 local mxx = math_random( v[ 1 ], v[ 2 ] ) * anoms_difficulty_koef[ level.get_game_difficulty() ] while cnt < mxx do if generate_anomaly() then cnt = cnt + 1 end end end end function generate_arts() local lname = level.name() if not level_vertexes[ lname ] then return end local v = level_arts[ lname ] if v then local cnt, mxx = 0, math_random( v[ 1 ], v[ 2 ] ) while cnt < mxx do if generate_art( lname ) then cnt = cnt + 1 end end end -- переделано на поршни - при выбросе снимаем все поршни, при спавне -- артов на локе выдаем - это больше не нужно --generate_test(lname) end function generate_anomaly() local lname = level.name() local gvn, gvx, lvx = game_vertexes[ lname ][ 1 ], game_vertexes[ lname ][ 2 ], level_vertexes[ lname ] local new_lv = math_random( 1, lvx ) local actor_pos = db.actor:position() local pos = level.vertex_position( new_lv ) if actor_pos:distance_to( pos ) < 5 then return false end if not check_coordinates( pos ) then return false end local new_gv = 0 local min_dist = 100000 for a = gvn, gvx do g1 = game_graph():vertex( a ):game_point() if g1:distance_to( pos ) < min_dist then min_dist = g1:distance_to( pos ) new_gv = a end end if game_graph():valid_vertex_id( new_gv ) then return spawn_rand_anom( pos, new_gv, new_lv ) end end function generate_art( lname, section, pre_check_coords_func ) local gvn, gvx, lvx = game_vertexes[ lname ][ 1 ], game_vertexes[ lname ][ 2 ], level_vertexes[ lname ] local new_lv = math_random( 1, lvx ) local pos = level.vertex_position( new_lv ) if not check_coordinates_arts( pos, lname ) then return false end if pre_check_coords_func then if not pre_check_coords_func( pos ) then return false end end local new_gv = 0 local min_dist = 100000 for a = gvn, gvx, 1 do g1 = game_graph():vertex( a ):game_point() if g1:distance_to( pos ) < min_dist then min_dist = g1:distance_to( pos ) new_gv = a end end if game_graph():valid_vertex_id( new_gv ) then if section then return spawn_art( section, pos, gv, lv ) else return spawn_rand_arts( pos, new_gv, new_lv, lname ) end end end -- переспавн провалившегося под текстуры артефакта на текущем уровне, -- на входе оффлайновый провалившийся арт function respawn_falling_art(art) local section = art:section_name() alife():release(art) local lname = level.name() local gvn,gvx,lvx,new_lv,pos repeat gvn,gvx,lvx = game_vertexes[lname][1], game_vertexes[lname][2], level_vertexes[lname] new_lv=math_random(1,lvx) pos = level.vertex_position(new_lv) until check_coordinates_arts(pos,lname) local new_gv = 0 local min_dist = 100000 for a = gvn, gvx, 1 do g1 = game_graph():vertex(a):game_point() if g1:distance_to(pos)<min_dist then min_dist = g1:distance_to(pos) new_gv = a end end if game_graph():valid_vertex_id(new_gv) then return spawn_art(section,pos,new_gv,new_lv) end end --[=[ переделано на поршни - при выбросе снимаем все поршни, при спавне --артов на локе выдаем - это больше не нужно function generate_test(lname) local gvn,gvx,lvx = game_vertexes[lname][1], game_vertexes[lname][2], level_vertexes[lname] local new_lv=math_random(1,lvx) local pos = level.vertex_position(new_lv) if not check_coordinates_arts(pos,lname) then return false end local new_gv = 0 local min_dist = 100000 for a = gvn, gvx, 1 do g1 = game_graph():vertex(a):game_point() if g1:distance_to(pos)<min_dist then min_dist = g1:distance_to(pos) new_gv = a end end if game_graph():valid_vertex_id(new_gv) then return spawn_test(pos,new_gv,new_lv,lname) end end --]=] function spawn_rand_anom(pos,gv,lv) local lname=level.name() local shapes,shape1={},{} local section section = "zone_ice" local rnd=math_random()*100 if 5>rnd then shape1={shtype=0,radius=4,center={0,0,0}} else local rnd_max = 0 for k,v in pairs(level_anoms[lname][4]) do rnd_max = rnd_max + v end rnd=math_random(1,rnd_max) for k,v in pairs(level_anoms[lname][4]) do if rnd<=v then section=anoms_sections[k] break end rnd=rnd-v end local anom_prefix="amk_zone_" local suffix_num=math_random(1,3) local suffix=anom_suffix(suffix_num) shape1=section[2] section=anom_prefix..section[1]..suffix end shapes[1]={} shapes[1].shtype=shape1.shtype if shape1.shtype == 0 then shapes[1].radius = shape1.radius shapes[1].center = vector():set(shape1.center[1],shape1.center[2],shape1.center[3]) else shapes[1].v1 = vector():set(shape1.v1[1],shape1.v1[2],shape1.v1[3]) shapes[1].v2 = vector():set(shape1.v2[1],shape1.v2[2],shape1.v2[3]) shapes[1].v3 = vector():set(shape1.v3[1],shape1.v3[2],shape1.v3[3]) shapes[1].offset = vector():set(shape1.offset[1],shape1.offset[2],shape1.offset[3]) end local status="on" return spawn_anomaly(section,pos,gv,lv,shapes,status) end function spawn_rand_arts(pos,gv,lv,lname) local rnd_max=0 for k,v in pairs(level_arts[lname][3]) do rnd_max=rnd_max+v*10 end local rnd=0 rnd=math_random(1,rnd_max) for k,v in pairs(level_arts[lname][3]) do if rnd<=v*10 then section=arts_sections[k] break end rnd=rnd-v*10 end return spawn_art(section,pos,gv,lv) end function spawn_anomaly(section,pos,gv,lv,shape,status) local sobj sobj=amk.spawn_item(section,pos,gv,lv) if sobj then local tbl = amk.get_anomaly_data(sobj) tbl.shapes=shape tbl.custom=modify_anomaly_custom_data(tbl.custom,status) amk.set_anomaly_data(tbl, sobj) end return sobj end function spawn_art(section,pos,gv,lv) local sobj sobj=amk.spawn_item(section,pos,gv,lv) if sobj then return sobj end end --[=[ --переделано на поршни - при выбросе снимаем все поршни, при --спавне артов на локе выдаем - это больше не нужно function spawn_test(pos,gv,lv,lname) local section="testsak_"..lname return amk.spawn_item(section,pos,gv,lv) end --]=] -- аномалии, которые не исчезнут при НИ, да и вообще function check_exclusion( obj, map ) local obj_name = obj:name() if string_find( obj_name, "amk_" ) or string_find( obj_name, "zone_ice" ) or string_find( obj_name, "caps_" ) then return false end if not level_vertexes[ map ] then return true end if not level_anoms[ map ] then return true end return string_find( obj_name, "zone_tuman" ) -- Острова туман or string_find( obj_name, "zone_fly_island" ) -- Острова парение or string_find( obj_name, "_snp" ) -- Снайпер or string_find( obj_name, "anim_ph_" ) -- Аномальные объекты or string_find( obj_name, "propeller" ) -- Пропеллер or string_find( obj_name, "sky_anomaly" ) -- Sky_Anomaly or string_find( obj_name, "esc_zone_witches" ) -- перемещающаяся электра (Кордон) or string_find( obj_name, "pri_zone_witches" ) -- электра на колесе обозрения (ЦП) or string_find( obj_name, "zone_topolinypuh" ) -- пух (Радар) or string_find( obj_name, "red_zone_acidic" ) -- холодцы в шахте (Красный Лес) or string_find( obj_name, "podval_tornado_strong" ) -- торнадо в подвале (Лиманск) or string_find( obj_name, "dcity_fontan_fountain_average" ) -- фонтан в фонтане (МГ) or string_find( obj_name, "rostok_zone_witches" ) -- электры везде (Росток) or string_find( obj_name, "rostok_zone_zharka_static" ) -- жарки в тоннеле (Росток) or string_find( obj_name, "tutorial" ) -- эпичная смерть псевдоплоти (Кордон) or ( string_find( obj_name, "_mincer" ) and map ~= "l11_pripyat" ) -- почему именно там? end function anom_suffix(suffix_num) local suffix="" if suffix_num==1 then suffix="_weak" elseif suffix_num==2 then suffix="_average" else suffix="_strong" end return suffix end function check_coordinates(pos) local lname=level.name() local hides=amk_hideouts.hide[lname] local tmp if hides then for i,o in ipairs(hides) do if o.zone then for j,v in ipairs(o.zone) do if v.p3 then tmp=amk.check_npc_in_box(pos,vector():set(unpack(v.p1)),vector():set(unpack(v.p2)),vector():set(unpack(v.p3))) else tmp=amk.check_npc_in_box(pos,vector():set(unpack(v.p1)),vector():set(unpack(v.p2))) end if tmp==true then return false end end end end end for k,v in pairs(anti_spawn_zones) do if pos:distance_to(v[1])<=v[2] then return false end end return true end function check_coordinates_arts(pos,lname) for k,v in pairs(anti_spawn_zones) do if pos:distance_to(v[1])<=v[2] then return false end end local hides=amk_hideouts.hide[lname] local tmp if hides then for i,o in ipairs(hides) do if o.zone then for j,v in ipairs(o.zone) do if v.p3 then tmp=amk.check_npc_in_box(pos,vector():set(unpack(v.p1)),vector():set(unpack(v.p2)),vector():set(unpack(v.p3))) else tmp=amk.check_npc_in_box(pos,vector():set(unpack(v.p1)),vector():set(unpack(v.p2))) end if tmp==true then return false end end end end end return true end function get_anomaly_status(sobj) local tbl = amk.get_anomaly_data(sobj) local cd=tbl.custom cd=amk.parse_custom_data(cd) if not cd.dyn_anom then return "" end if not cd.dyn_anom.status then return "" end return cd.dyn_anom.status end function is_anomaly(class_id) return (class_id and anoms_classes[class_id]==true) end function modify_anomaly_custom_data(cd,status) cd=amk.parse_custom_data(cd) if not cd then cd={} end if not cd.dyn_anom then cd.dyn_anom={} end cd.dyn_anom.status=status return amk.gen_custom_data(cd) end function set_anomaly_status( sobj, status ) if sobj then local anom_id = sobj.id if status == "del" then end local tbl = amk.get_anomaly_data( sobj ) tbl.custom = modify_anomaly_custom_data( tbl.custom, status ) amk.set_anomaly_data( tbl, sobj ) set_online_anomaly_status( anom_id, status ) end end function set_online_anomaly_status( obj_id, status ) local obj=level.object_by_id( obj_id ) if obj then if status == "off" or status=="del" then obj:disable_anomaly() amk_anoms.remove_anomaly( obj_id ) amk_anoms.restrictor_deleted( obj_id, obj:name() ) else obj:enable_anomaly() local sobj = alife():object( obj_id ) amk_anoms.add_anomaly( obj_id, sobj.position, sobj.radius, sobj ) end end end --[[-------------------------- function for spawn ---------------------end--]] --[[-------------------------- npc and anom_binder -------------------------]] local anoms_for_npc={} local npcs_for_anom={} local actual_anoms_for_npc={} local npc_restrictors_need_update={} function init_if_needed( nid ) if not anoms_for_npc[ nid ] then anoms_for_npc[ nid ] = {} end if not actual_anoms_for_npc[ nid ] then actual_anoms_for_npc[ nid ] = {} end return anoms_for_npc[ nid ], actual_anoms_for_npc[ nid ] end function add_restriction( npc, id, name ) local nid = npc:id() if name == nil then name = ( level.object_by_id( id ) and level.object_by_id( id ):name() ) end if not name then get_console():execute("load ~~~ add_restriction(): Warning! Nonexistent restrictor id "..id) return end init_if_needed( nid ) if anoms_for_npc[ nid ][ id ] then else anoms_for_npc[ nid ][ id ] = name npc_restrictors_need_update[ nid ]=true end end function remove_restriction(npc,id,name,immed) local nid=npc:id() if name==nil then name=(level.object_by_id(id) and level.object_by_id(id):name()) end if not name then abort("remove_restriction(): Nonexistent restrictor id "..id) return end init_if_needed(nid) if immed then if actual_anoms_for_npc[nid][id] then npc:remove_restrictions("",name) actual_anoms_for_npc[nid][id]=nil npcs_for_anom[id][nid]=nil end if anoms_for_npc[nid][id] then anoms_for_npc[nid][id]=nil end else if anoms_for_npc[nid][id] then anoms_for_npc[nid][id]=nil npc_restrictors_need_update[nid]=true end end end function restrictor_deleted(id,name) for nid,anoms in pairs(anoms_for_npc) do if anoms[id] then anoms[id]=nil npc_restrictors_need_update[nid]=true end end end function clear_to_release(id) local cnt if npcs_for_anom[id] then for nid in pairs(npcs_for_anom[id]) do cnt=cnt+1 end return cnt==0 else return true end end function have_pending_sync( npc ) local nid = npc:id() return npc_restrictors_need_update[ nid ] == true end local max_dynamic_restrictors_count=40 function syncronize( npc ) local nid = npc:id() local cnt = 0 local anoms, actual = init_if_needed( nid ) local disttbl = {} for id in pairs( anoms ) do cnt = cnt + 1 end if cnt > max_dynamic_restrictors_count then local disttbl = {} for id in pairs( anoms ) do local dist = 0 local sobj = alife():object( id ) if sobj then dist = npc:position():distance_to_sqr( sobj.position ) else dist = 1000000 end table.insert( disttbl, { id = id,dist = dist } ) end table.sort( disttbl, function ( a, b ) return a.dist > b.dist end ) for i = 1, cnt - max_dynamic_restrictors_count do anoms[ disttbl[ i ].id ] = nil end end local add, rem = "", "" local first = true for id, name in pairs( actual ) do if not anoms[ id ] then if first then first = false rem = name else rem = name .. "," .. rem end if npcs_for_anom[ id ] then npcs_for_anom[ id ][ nid ] = nil end actual[ id ] = nil end end first = true for id, name in pairs( anoms ) do if not actual[ id ] then if first then first = false add = name else add = name .. "," .. add end if not npcs_for_anom[ id ] then npcs_for_anom[ id ] = {} end npcs_for_anom[ id ][ nid ] = true actual[ id ] = name end end npc:remove_restrictions( "", rem ) npc:add_restrictions( "",add ) npc_restrictors_need_update[ nid ] = false end function unreg_in_anom_manager(npc) local nid=npc:id() local anoms=anoms_for_npc[nid] if anoms then for aid in pairs(anoms) do if npcs_for_anom[aid] then npcs_for_anom[aid][nid]=nil end end anoms_for_npc[nid]=nil end end function bind(obj) obj:bind_object(anom_binder(obj)) end class "anom_binder" ( object_binder ) function anom_binder:__init(obj) super(obj) end function anom_binder:net_spawn(sobj) if not object_binder.net_spawn( self,sobj ) then return false end local status=get_anomaly_status(sobj) if status=="del" or status=="off" then if status=="del" then end self.object:disable_anomaly() else amk_anoms.add_anomaly(sobj.id,sobj.position,sobj.radius, sobj) end return true end function anom_binder:net_destroy() amk_anoms.remove_anomaly(self.object:id()) object_binder.net_destroy(self) end anom_list={} function get_radius_for_section(section) return getIniValueFloat(section,"effective_radius",2,nil) end function add_anomaly( id, pos, radius, sobj ) if not anom_list then anom_list = {} end local lname = alife():level_name( game_graph():vertex(sobj.m_game_vertex_id):level_id() ) anom_list[ id ] = { pos = pos, clsid = sobj:clsid(), radius = radius or 0.0, section = sobj:section_name(), location = lname } end function remove_anomaly(id) if anom_list then anom_list[id]=nil end end function get_nearest_anomaly(npc) return get_nearest_anomaly_for_pos(npc:position()) end function get_nearest_anomaly_for_pos(posn) local anomid,pos,radius,dist local mindist=10000000 for id,o in pairs(anom_list) do dist=posn:distance_to(o.pos)-o.radius if dist<mindist then mindist=dist anomid=id pos=o.pos radius=o.radius end end return anomid,pos,radius,mindist end function get_anomaly_list(npc,radius) return get_anomaly_list_for_pos(npc:position(),radius) end function get_anomaly_list_for_pos(posn,radius) local ret={} if anom_list then for id,o in pairs(anom_list) do local obj=level.object_by_id(id) if obj then local dist=posn:distance_to(o.pos)-o.radius if dist<radius then table.insert(ret,{id=id,name=obj:name(),pos=o.pos,radius=o.radius}) end end end end return ret end остаются лишь скриптовые и те, которые прописаны в all.spawn 1 1 Ссылка на комментарий
naxac 2 445 Опубликовано 6 Мая 2016 Поделиться Опубликовано 6 Мая 2016 (изменено) Вопрос от Firewind Всем привет. У меня после выброса перестали появляться артефакты, а они для варки просто необходимы. Кто то знает как решить эту проблему? Ответ: @Firewind, а почему ты так решил?Могут не спавниться из-за неотключенных инфопоршней testsak_имя_локации. Тогда надо их задисаблить. Изменено 8 Мая 2016 пользователем shahvkit Обьединение и удаление Аддон для ОП-2.09.2: Яндекс/Google/GitHub Ссылка на комментарий
naxac 2 445 Опубликовано 6 Мая 2016 Поделиться Опубликовано 6 Мая 2016 (изменено) Недавно прочитал сообщение @dsh про респавнеры. И решил тоже там поковыряться.Проверил таблицы и вот итог: remove from respawn [val_dog_respawn_1] object: vodka13152 remove from respawn [val_dog_respawn_1] object: ammo_7.92x33_fmj52522remove from respawn [val_dog_respawn_1] object: bandage48157remove from respawn [val_dog_respawn_1] object: grenade_rgd529281remove from respawn [val_dog_respawn_1] object: ammo_7.62x54_7h15210remove from respawn [val_dog_respawn_1] object: mutant_psevdogigant_hand51956remove from respawn [val_dog_respawn_1] object: mutant_psevdogigant_hand51961remove from respawn [bar_stalker_respawn_2] object: wpn_abakan10864remove from respawn [bar_stalker_respawn_2] object: bandage10910remove from respawn [bar_stalker_respawn_2] object: wpn_mossberg59030799remove from respawn [bar_stalker_respawn_2] object: ammo_12x70_buck30782remove from respawn [respawn29244] object: ammo_kumul_8235107remove from respawn [esc2_village_stalker_respawn] object: ammo_kumul_8220253remove from respawn [esc2_village_stalker_respawn] object: wpn_mossberg59030749remove from respawn [agr2_boars_respawn] object: mutant_spleen_rat49408remove from respawn [agr2_boars_respawn] object: mutant_psevdodog_tail32018remove from respawn [upiter_kogots_respawn] object: ammo_7.62x39_ap46605remove from respawn [mil_pseudodog_respawn_1] object: bar_to_militaryremove from respawn [mil_pseudodog_respawn_1] object: af_buliz28768remove from respawn [respawn29240] object: mutant_psevdogigant_hand48915remove from respawn [respawn29216] object: grenade_flash33079Даже переход попал в список. Обалдеть, что же там творится под конец игры... Пусть будет. Чтобы знали, что проблема есть.Есть так же более чем одно решение. См. в теме. Кроме того, требуется аналогичная правка не только по респавнерам, но и по смартам. По этой же причине в теме рекомендовано отключение amk_offline_alife - ВСЕ это - вплоть до замены формирования единых таблиц через se_stalker/se_monster/se_item и т.д. dc. Изменено 12 Июня 2016 пользователем Eugen81 Аддон для ОП-2.09.2: Яндекс/Google/GitHub Ссылка на комментарий
Alzheimer 561 Опубликовано 6 Мая 2016 Поделиться Опубликовано 6 Мая 2016 (изменено) Вопрос от Марсель: Доброе время суток. До последнего не решался, но сил нету . зашел так далеко.что или или... Как отключить телепорты Волозара в Варлаабе? откатываться не буду. Ответ: @Марсель Так и напиши - volazar_del_tel.del_nano_tel_war(story_id) Хоть через bind_stalker.script , хоть через ui_main_menu.script , это уж как удобнее и как умеешь. Делается аналогично выдаче инфопоршня. Телепорты в Варлабе удалятся без следа. Изменено 8 Мая 2016 пользователем shahvkit Обьединение и удаление 1 2 Обидеть Меченого может каждый, не каждый может убежать... Ссылка на комментарий
V.E.Q.O. 159 Опубликовано 7 Мая 2016 Поделиться Опубликовано 7 Мая 2016 (изменено) Вопрос от Firewind: Всем привет. Подскажите кто знает в каких файлах находится порог слышимости приёмников на открытых пространствах, например возле Прапора, и где регулируется сама громкость в них когда приближаешься или удаляешься от них? Уже точно не помню, но вроде бы в ТЧ не было этих приёмников на локах, поэтому решил задать этот вопрос здесь. Ответ: gamedata\sounds\taler - Кулинар, Воронин, Жила и т.д., там написано в названиях. gamedata\sounds\characters_voice\scenario\prapor - это у прапора. Громкость и дальность слышимости регулируется в тегах звуковых файлов программой SAVandT (по моему есть на сайте), ну или в SDK. Изменено 8 Мая 2016 пользователем shahvkit Обьединение и удаление 1 Ссылка на комментарий
Tirbah 632 Опубликовано 8 Мая 2016 Поделиться Опубликовано 8 Мая 2016 (изменено) Здравствуйте, подскажите по этому вылету: 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 : [error]Arguments : LUA error: c:\obedinennyj pak 2\gamedata\scripts\hotkeys.script:211: attempt to index upvalue 'carbody_addons' (a nil value) Проблема в сборке правок от Каравана http://www.amk-team.ru/forum/topic/12835-op-2-neofitcialnaia-tema/?p=959209. Евген. Понял, благодарю) Почему- то не могу изменить свой пост... Этой "ошибки" не будет, если в той же сборке в bind_stalker.script: function actor_binder:net_spawn(data) hotkeys.init() -- УДАЛИТЬ ЭТУ СТРОЧКУ! Не место ей здесь! ... ... function actor_binder:update(delta) ... eugen.update(delta) hotkeys.update() -- убрать дубликат! - вызов есть в amk.oau_watchdog=181 Изменено 21 Мая 2016 пользователем Eugen81 Ссылка на комментарий
Это популярное сообщение. naxac 2 445 Опубликовано 9 Мая 2016 Это популярное сообщение. Поделиться Опубликовано 9 Мая 2016 Обнаружил косяк с Шурупом (техник Свободы). Ему забыли прописать story_id в game_story_ids.ltx, из-за чего на него не ставится метка в заданиях и не работает напоминалко по его квестам. В game_story_ids.ltx надо дописать: 777888 = "mil_Svoboda_engineer" 2 3 1 Аддон для ОП-2.09.2: Яндекс/Google/GitHub Ссылка на комментарий
Dennis_Chikin 3 658 Опубликовано 9 Мая 2016 Автор Поделиться Опубликовано 9 Мая 2016 (изменено) А Петрович мне не верит про метки. 8( Изменено 9 Мая 2016 пользователем Dennis_Chikin Солянка обезжиренная, диетическая, полезные советы по "солянке", текущий тестовый патч Ссылка на комментарий
Рекомендуемые сообщения