From c93e13b99baedeed210885ad7f2973d16f4c2510 Mon Sep 17 00:00:00 2001 From: gr1n-the-big-floppa <58978237+gr1n-the-big-floppa@users.noreply.github.com> Date: Sun, 10 Dec 2023 18:08:16 +0800 Subject: [PATCH 01/15] Add russian localization --- loc/ru.txt | 270 +++++++++++++++++++++++++++++++++++++++++++++++++++++ mod.lua | 1 + 2 files changed, 271 insertions(+) create mode 100644 loc/ru.txt diff --git a/loc/ru.txt b/loc/ru.txt new file mode 100644 index 0000000..8756cf2 --- /dev/null +++ b/loc/ru.txt @@ -0,0 +1,270 @@ +{ + "bm_wp_upg_a_custom_desc": "Дробь большего размера с большим импульсом.\nВ одном патроне содержится 6 магниевых дробинок.\nУрон возрастает до 40% в радиусе 3 метров.\nСпад урона начинается ближе.", + "bm_wp_upg_a_explosive_desc": "Одна смертоносная разрывная пуля.\nЭтот тип патронов сложнее найти.\nУвеличена точность.\nНе имеет спада урона.", + "bm_wp_upg_a_piercing_desc": "Заостренные стальные снаряды.\nВ одном снаряде содержится 12 стрел.\nПробивает броню.\nСпад урона начинается дальше.", + "bm_wp_upg_a_slug_desc": "Одна тяжелая свинцовая пуля.\nСильно увеличена точность.\nПробивает броню, щиты, врагов и стены.\nНе имеет спада урона.", + "bm_wp_upg_a_dragons_breath_desc": "Специальный тип снарядов зажигательного действия.\nВ одном патроне содержится 12 магниевых дробинок.\nПоджигает всех врагов в радиусе 15 метров.\nЭтот тип патронов сложнее найти.", + "bm_wp_upg_mk2_rare_desc": "Это топливо легче найти.", + "bm_wp_upg_mk2_welldone_desc": "Это топливо труднее найти.", + "bm_w_hajk": "Винтовка CR 805B", + + "bm_menu_bonus": "Перки", + "bm_menu_perk_speedloader": "Спидлодер", + "bm_menu_perk_speedloader_desc": "Увеличивает скорость перезарядки за счет общего количества боеприпасов.\n", + "bm_menu_perk_haste": "Спешка", + "bm_menu_perk_haste_desc": "Увеличивает скорость передвижения на 10% за счет общего количества боеприпасов.\n", + "bm_menu_perk_deadsilence": "Мертвая тишина", + "bm_menu_perk_deadsilence_desc": "Увеличивает скрытность за счет общего количества боеприпасов и обращения с оружием.\n", + "bm_menu_perk_jawbreaker": "Зубодробилка", + "bm_menu_perk_jawbreaker_desc": "Увеличивает урон за счет скорострельности и подбора патронов в 25%.\n", + "bm_menu_perk_whirlwind": "Вихрь", + "bm_menu_perk_whirlwind_desc": "Увеличивает скорострельность за счет обращения с оружием.\n", + "bm_menu_perk_stockpile": "Патронташ", + "bm_menu_perk_stockpile_desc": "Увеличивает общее количество боеприпасов за счет скорости перезарядки.\n", + + + "menu_infamy_desc_root_new": "Для вас, как для новичка в криминальной элите, первоочередной задачей является получение снаряжения и помпы, подобающих кому-то вашего статуса.\n\nБОНУСЫ:\nШанс получить предмет с бесславием увеличен с ##0.3%## до ##0.6%##.\nПолучаемый вами опыт увеличен на ##5%##.", + + + "st_menu_mastermind_inspire": "Поддержка", + "menu_bandage": "Бинты", + "menu_bandage_desc": "БАЗОВЫЙ: ##$basic##\nНапарники, поднятые вами, получают на ##$multibasic## меньше урона в течение ##$multibasic2## секунд.\n\nПРО: ##$pro##\nПоднятый вами напарник получит на ##$multipro## больше здоровья.", + "menu_field_surgery": "Полевая Хирургия", + "menu_field_surgery_desc": "БАЗОВЫЙ: ##$basic##\nНапарники, поднятые вами, получают на ##$multibasic## меньше урона в течение ##$multibasic2## секунд.\n\nПРО: ##$pro##\nВы получаете на ##$multipro## меньше урона в течение ##$multibasic2## секунд после того, как вас подняли.", + "menu_company_soul": "Душа Компании", + "menu_company_soul_desc": "БАЗОВЫЙ: ##$basic##\nСтабильность вашего оружия и оружия вашей команды увеличена на ##$multibasic## очков.\n\nПРО: ##$pro##\nВыносливость всех членов команды, включая вас, увеличена на ##$multipro##.", + "menu_combat_doctor_desc": "БАЗОВЫЙ: ##$basic##\nВы получаете на ##$multibasic## меньше урона в течение ##$multibasic2## секунд во время и после оживления напарника.\n\nПРО: ##$pro##\nПосле оживления напарника, вы будете наносить на ##$multipro2## больше урона в течение ##$multipro3## секунд.\n\nВы поднимаете напарников на ##$multipro## быстрее.", + "menu_keepers": "Хранители", + "menu_inspire_beta_desc": "БАЗОВЫЙ: ##$basic##\nВы можете увеличить скорость передвижения и перезарядки своих напарников на ##$multibasic2## в течение ##$multibasic3## секунд, крича на них в радиусе ##$multibasic##.\n\nПРО: ##$pro##\nВы можете поднимать членов команды своим криком в радиусе ##$multibasic##.\n\nНавык срабатывает раз в ##$multipro## секунд.", + "menu_black_marketeer_beta_desc": "БАЗОВЫЙ: ##$basic##\nЕсли у вас есть как минимум ##$multibasic## заложник или переведённый на вашу сторону полицейский, то вы будете восстанавливать ##$multibasic2## здоровья каждые ##$multibasic3## секунд.\n\nПРО: ##$pro##\nКоличество лечения, которое вы получаете, увеличено до ##$multipro##.\nПереведённые на вашу сторону полицейские теперь будут учитываться в навыках, как заложники.\n\nВнимание: Не распространяется на навыки Стокгольмский Синдром и Ситуация с Заложниками.", + "menu_cable_guy_beta": "Стокгольмский Синдром", + "menu_cable_guy_beta_desc": "БАЗОВЫЙ: ##$basic##\nУбедительность и дальность вашего запугивания увеличена на ##$multibasic2##.\n\nПРО: ##$pro##\nШум, создаваемый вами, устрашает гражданских. Гражданские остаются запуганными на ##$multipro## дольше.\n\nУ находящихся поблизости несвязанных гражданских есть шанс поднять вас, если вы с ними взаимодействуете.", + "menu_triathlete_beta_desc": "БАЗОВЫЙ: ##$basic##\nУвеличивает запас кабельных стяжек на ##$multibasic##.\n\nПРО: ##$pro##\nТеперь вы можете вести за собой ##$multipro## заложников одновременно.\n\nВы связываете гражданских на ##$multipro2## быстрее.", + "menu_stockholm_syndrome_beta": "Ситуация с Заложниками", + "menu_stockholm_syndrome_beta_desc": "БАЗОВЫЙ: ##$basic##\nВы и ваша команда получаете ##$multibasic## очка поглощения урона за каждого заложника.\n\nПРО: ##$pro##\nКаждый заложник теперь увеличивает время между полицейскими штурмами на ##$multipro дополнительные## секунды.\n\nВнимание: Этот складывается вплоть до ##4## заложников.", + "menu_control_freak_beta_desc": "БАЗОВЫЙ: ##$basic##\nПереведённый на вашу сторону полицейский получает на ##$multibasic3## меньше урона.\n\nПРО: ##$pro##\nПереведённый на вашу сторону полицейский получает еще на ##$multipro4## меньше урона.", + "menu_rifleman": "По Коням", + "menu_rifleman_desc": "БАЗОВЫЙ: ##$basic##\nВы прицеливаетесь на ##$multibasic## быстрее и меняете оружие на ##$multibasic2## быстрее.\n\nПРО: ##$pro##\nВы можете стрелять от бедра во время бега.", + "menu_speedy_reload_beta_desc": "БАЗОВЫЙ: ##$basic##\nПовышает скорость перезарядки штурмовых и снайперских винтовок на ##$multibasic##.\n\nПРО: ##$pro##\nУбийство в голову увеличивает вашу скорость перезарядки на ##$multipro## в течение ##$multipro2## секунд. Навык срабатывает только для штурмовых винтовок, пистолетов-пулемётов и снайперских винтовок в одиночном режиме стрельбы.", + "menu_sniper_graze_damage": "Взрыв Мозга", + "menu_sniper_graze_damage_desc": "БАЗОВЫЙ: ##$basic##\nВыстрел в голову из снайперской винтовки наносит ##$multibasic## урона ближайшему врагу в ##$multibasic2## радиусе.\n\nВнимание: Не распространяется на снайперские винтовки, наносящие ##300## урона.\n\nПРО: ##$pro##\nЕсли выстрел в голову убьёт противника, то ##$multipro## урона будет нанесено врагу по цепной реакции.", + + + "menu_from_the_hip_desc": "БАЗОВЫЙ: ##$basic##\nВы наносите на ##$multibasic## больше урона с дробовиков.\n\nПРО: ##$pro##\nУменьшает на ##$multipro## время, нужное, чтобы достать и убрать дробовики.", + "menu_shotgun_cqb_beta": "Быстрые Руки", + "menu_shotgun_cqb_beta_desc": "БАЗОВЫЙ: ##$basic##\nВы перезаряжаете дробовики с ##ручным механизмом перезарядки## на ##$multibasic## быстрее.\n\nПРО: ##$pro##\nВы перезаряжаете дробовики с ##ручным механизмом перезарядки## на дополнительные ##$multipro## быстрее.\nУвеличивает скорость прицеливания у дробовиков на ##$multipro2##.", + "menu_shotgun_impact_beta": "Вблизи", + "menu_shotgun_impact_beta_desc": "БАЗОВЫЙ: ##$basic##\nПатроны для ваших дробовиков содержат на ##$multibasic## дробинок больше.\n\nВнимание: Не распространяется на бронебойные и разрывные типы патронов.\n\nПРО: ##$pro##\nРазброс дроби ваших дробовиков увеличен на ##$multipro## при стрельбе от бедра.", + "menu_far_away_beta": "Профессионал Ближнего Боя", + "menu_far_away_beta_desc": "БАЗОВЫЙ: ##$basic##\nСкорострельность ваших полуавтомотических дробовиков увеличена на ##$multibasic## при стрельбе от бедра.\n\nПРО: ##$pro##\nПри каждом попадании по врагу из дробовика вы получаете ##$multipro## прибавку к скорости передвижения на ##$multipro2## секунд.\nНавык складывается ##$multipro3## раза.", + "menu_close_by_beta": "Спец Магазинных Дробовиков", + "menu_close_by_beta_desc": "БАЗОВЫЙ: ##$basic##\nВы перезаряжаете ##магазинные и двуствольные## дробовики на ##$multibasic## быстрее.\n\nПРО: ##$pro##\nВаши ##магазинные## дробовики получат прибавку в виде ##$multipro## патронов в магазин.", + "menu_overkill_beta": "Ад из Дробовиков", + "menu_overkill_beta_desc": "БАЗОВЫЙ: ##$basic##\nВы получаете ##$multibasic## шанс не потратить патрон при стрельбе из дробовика.\n\nПРО: ##$pro##\nПри убийстве врага из дробовика вы будете сеять панику среди врагов с вероятностью ##$multipro##.\nПаника будет подавлять противника, заставляя его испытывать страх.\n\nНавык срабатывает раз в ##$multipro2## секунд.", + "menu_juggernaut_beta_desc": "БАЗОВЫЙ: ##$basic##\nОткрывает Улучшенный Комбинированный Тактический Бронежилет.\n\nПРО: ##$pro##\nПоказатель брони увеличен на ##$multibasic##.", + "menu_show_of_force_beta": "Толстокожий", + "menu_show_of_force_beta_desc": "БАЗОВЫЙ: ##$basic##\nВаша стойкость увеличена на ##$multibasic##.\nБолее высокая стойкость уменьшает тряску экрана при попадании по вам.\n\nПРО: ##$pro##\nПрочность всех баллистических бронежилетов увеличена на ##$multipro2##.", + "menu_scavenging_beta_desc": "БАЗОВЫЙ: ##$basic##\nРадиус, с которого вы можете поднимать патроны увеличен на ##$multibasic##.\n\nВнимание: Не складывается с набором перков Шулер.\n\nПРО: ##$pro##\nКаждый ##шестой## убитый противник оставляет после себя дополнительную коробку с патронами.", + "menu_bandoliers_beta_desc": "БАЗОВЫЙ: ##$basic##\nЧем тяжелее ваша броня, тем больше количество переносимых вами боеприпасов.\n\nКоличество переносимых боеприпасов увеличивается до ##$multibasic##, когда вы носите Улучшенный Комбинированный Тактический Бронежилет.\n\nПРО: ##$pro##\nКоличество переносимых вами боеприпасов увеличено на ##$multipro##.", + + + "menu_defense_up_beta": "Транспортер", + "menu_defense_up_beta_desc": "БАЗОВЫЙ: ##$basic##\nВаша скорость передвижения на ##$multibasic## больше, когда вы несете сумку.\n\nПРО: ##$pro##\nПозволяет кидать сумки на ##$multipro## дальше.", + "menu_sentry_targeting_package_beta": "Смельчак", + "menu_sentry_targeting_package_beta_desc": "БАЗОВЫЙ: ##$basic##\nПолучаемый вами урон снижен на ##$multibasic##, если вы взаимодействуете с каким-либо предметом.\n\nПРО: ##$pro##\nПерезарядка на бегу: вы можете перезаряжаться во время бега.", + "menu_engineering_beta": "Защитный Набор", + "menu_engineering_beta_desc": "БАЗОВЫЙ: ##$basic##\nУ ваших турелей на ##$multibasic## больше здоровья.\n\nПРО: ##$pro##\nУ турелей появляется защитный экран.", + "menu_tower_defense_beta": "Турельное Гнездо", + "menu_tower_defense_beta_desc": "БАЗОВЫЙ: ##$basic##\nТеперь у вас есть ещё ##1## дополнительная турель. \n\nПРО: ##$pro##\nВаши турели стоят на ##$multipro## меньше амуниции, чтобы её поставить.\nВаши турели имеют на ##$multipro2## больше патронов.", + "menu_eco_sentry_beta": "Кандидат Технических Наук", + "menu_eco_sentry_beta_desc": "БАЗОВЫЙ: ##$basic##\nВаши турели получают улучшенный датчик движения, что позволяет им помечать всех врагов в радиусе ##10m## и увеличивает их точность на ##$multibasic##.\n\nПРО: ##$pro##\nТеперь вы можете переключать турель в бронебойный режим, уменьшая её скорострельность на ##$multipro##, но увеличив урон на ##$multipro2##. В этом режиме, турель получает возможность простреливать щиты и несколько врагов за раз.", + "menu_combat_engineering_beta": "Боевой Инженер", + "st_menu_technician_auto": "Спец Больших Пушек", + "menu_fast_fire_beta": "Улучшенный Магазин", + "menu_fast_fire_beta_desc": "БАЗОВЫЙ: ##$basic##\nВаши пистолеты-пулемёты, пулемёты и штурмовые винтовки получают прибавку в виде ##$multibasic## патронов в магазин.\n\nПРО: ##$pro##\nВаши пистолеты-пулемёты, пулемёты и штурмовые винтовки получают еще ##$multipro## патронов в магазин.\n\nВнимание: Не влияет на навык \"Ловкость Рук\".", + "menu_body_expertise_beta_desc": "БАЗОВЫЙ: ##$basic##\nТяжелое оружие больше не дает штраф к скорости передвижения.\n\nПРО: ##$pro##\nМножитель попадания в голову применяется к телу противника с эффективностью в ##$multipro##.\nЭтот навык работает только с пистолетами-пулемётами, пулемётами и миниганами в режиме автоматической стрельбы. ", + "menu_fast_hands": "Ловкость Рук", + "menu_fast_hands_desc": "БАЗОВЫЙ: ##$basic##\nВы перезаряжаете пистолеты-пулемёты и пулемёты на ##$multibasic## быстрее.\n\nПРО: ##$pro##\nУбив ##$multipro## противников с пистолета-пулемёта, пулемёта или особого оружия в режиме автоматической стрельбы, скорость вашей следующей перезарядки будет увеличена на ##$multipro2##. Данный бонус будет уменьшен на ##$multipro3## за каждый следующий патрон выше отметки в ##$multipro4## патронов в обойме, до минимальной скорости перезарядки в ##$multipro5##.", + "menu_oppressor_desc": "БАЗОВЫЙ: ##$basic##\nВаше оружие на ##$multibasic## более эффективно запугивает врагов.\n\nПРО: ##$pro##\nВаше оружие еще на ##$multipro## более эффективно запугивает врагов.", + "menu_fire_control_beta": "Бронебойные Патроны", + "menu_fire_control_beta_desc": "БАЗОВЫЙ: ##$basic##\nТочность вашего оружия увеличена на ##$multibasic## при стрельбе от бедра.\n\nACE: ##$pro##\nВаше оружие получает возможность пробивать вражескую броню. Данный навык не работает с метательным оружием.", + + + "menu_sprinter": "Атлет", + "menu_sprinter_desc": "БАЗОВЫЙ: ##$basic##\nСнижает время до начала регенерации выносливости на ##$multibasic## и повышает скорость её восстановления на ##$multibasic##.\n\nПРО: ##$pro##\nВаша скорость ходьбы увеличена на ##$multipro##. Ваша общая скорость передвижения увеличена на ##$multipro2##.", + "menu_awareness": "Пригнись и Прикройся", + "menu_awareness_desc": "БАЗОВЫЙ: ##$basic##\nВаша скорость передвижения в приседе увеличена на ##$multibasic##.\n\nПРО: ##$pro##\nВы получаете ##$multipro## шанс увернуться от выстрела врага в приседе.", + "menu_optic_illusions": "Спринтер", + "menu_optic_illusions_desc": "БАЗОВЫЙ: ##$basic##\nВы можете бегать в стороны. Вы бегаете на ##$multibasic## быстрее.\n\nПРО: ##$pro##\nУ вас есть ##$multipro## шанс увернуться от вражеского огня во время бега или передвижения на зиплайне.", + "menu_dire_need_beta": "Второе Дыхание", + "menu_dire_need_beta_desc": "БАЗОВЫЙ: ##$basic##\nКогда вы лишаетесь брони во время боя, скорость вашего передвижения увеличивается на ##$multibasic## в течение ##$multibasic2## секунд.\n\nПРО: ##$pro##\nКогда ваша броня ломается, у вас есть ##$multipro## шанс посеять панику среди врагов. Паника будет подавлять противника, заставляя его испытывать страх.\n\nНавык срабатывает раз в ##$multipro2## секунд.", + "menu_insulation_beta_desc": "БАЗОВЫЙ: ##$basic##\nАтаки тэйзера слабее на ##$multibasic##.\n\nВы больше не будете произвольно нажимать на курок во время атаки тейзера.\n\nПРО: ##$pro##\nКогда тэйзер оглушил вас током, вы получаете ##$multipro2## секунды, чтобы вырваться из его плена.", + "st_menu_ghost_silencer": "Спец. Убийца", + "menu_scavenger_beta": "Стойкое Нападение", + "menu_scavenger_beta_desc": "БАЗОВЫЙ: ##$basic##\nВы получаете ##$multibasic## шанс нанести критический урон.\n\nПРО: ##$pro##\nКогда вы остались без брони, первый выстрел по противнику отбросит его назад.\n\nЭффект работает в течение ##$multipro## секунд после восстановления брони.", + "menu_silenced_damage": "Тихий Убийца", + "menu_silenced_damage_desc": "БАЗОВЫЙ: ##$basic##\nЗа каждое оружие с глушителем вы получаете ##$multibasic## очко скрытности. Уменьшает штраф к скрытности у глушителей на ##$multibasic2##.\n\nПРО: ##$pro##\nВаше оружие с глушителем наносит на ##$multipro## больше урона и имеет ##$multipro2## шанс пробить броню врага.", + "menu_silence_expert_beta_desc": "БАЗОВЫЙ: ##$basic##\nСтабильность вашего оружия с глушителем увеличена на ##$multibasic##.\n\nПРО: ##$pro##\nТочность вашего оружия с глушителем увеличена на ##$multipro## и скорость прицеливания увеличена на ##$multipro2##.", + "menu_spotter_teamwork_beta_desc": "БАЗОВЫЙ: ##$basic##\nПомеченные вами противники получают на ##$multibasic## больше урона при дистанции дальше ##$multibasic2## метров.\n\nПРО: ##$pro##\nПомеченные вами противники получают еще на ##$multipro## больше урона на любой дистанции.\n\nДлительность вашей метки на врагах увеличена на ##$multipro2##.", + "menu_jail_workout_beta_desc": "БАЗОВЫЙ: ##$basic##\nУвеличивает время до того, как вас начнут замечать в режиме исследования на ##$multibasic##.\n\nВаш шанс стать целю врагов на ##$multibasic## меньше, когда вы находитесь рядом с членом команды.\n\nПРО: ##$pro##\nВаша скрытность увеличена на ##$multipro##.", + "menu_cleaner_beta": "Орлиный Глаз", + "menu_cleaner_beta_desc": "БАЗОВЫЙ: ##$basic##\nВы наносите на ##$multibasic## больше урона по особым врагам.\n\nПРО: ##$pro##\nТеперь вы можете помечать противников, прицелившись из любого оружия.\n\nДистанция, на которой вы можете помечать врагов в ##$multipro## раза больше.", + "menu_second_chances_beta": "Логист", + "menu_second_chances_beta_desc": "БАЗОВЫЙ: ##$basic##\nВы взаимодействуете с сумками на ##$multibasic## быстрее.\n\nПРО: ##$pro##\nВы взламывайте замки на ##$multipro## быстрее.\n\nВы научились бесшумно взламывать сейфы вручную.", + "menu_chameleon_beta": "Блэкаут", + "menu_chameleon_beta_desc": "БАЗОВЫЙ: ##$basic##\nВы можете зациклить ##1## камеру на ##25## секунд и тем самым отключив её.\n\nПРО: ##$pro##\nВы можете открывать некоторые двери, используя генератор. Генератор помех теперь откладывает ответ на пейджер на столько, сколько генератор остаётся активным.", + "menu_ecm_booster_beta": "Перегрузка", + "menu_ecm_booster_beta_desc": "БАЗОВЫЙ: ##$basic##\nТеперь вы можете взаимодействовать с генератором помех, чтобы вызывать перегрузку. Перегрузка будет оглушать врагов в радиусе ##$multibasic##.\nЕсли враг не будет иметь прямой видимости с генератором помех, то радиус оглушения будет в ##2## раза меньше.\n\nПРО: ##$pro##\nПерегрузка теперь перезаряжается каждые ##$multipro## минуты.", + "menu_ecm_2x_beta_desc": "БАЗОВЫЙ: ##$basic##\nВы теперь можете ставить ##2## генератора помех вместо одного.\n\nПРО: ##$pro##\nДлительность работы генератора помех и эффекта перегрузки теперь составляет ##$multipro## секунд.", + "menu_backstab_beta_desc": "БАЗОВЫЙ: ##$basic##\nВы можете нанести критический урон с вероятностью ##$multibasic## за каждые ##$multibasic2## пункта риска обнаружения меньше ##$multibasic3##. Навык складывается вплоть до ##$multibasic4##.\n\nКритический урон на ##$multibasic5## больше обычного.\n\nПРО: ##$pro##\nВы можете нанести критический урон с вероятностью ##$multipro## за каждый ##$multipro2## пукнт обнаружения.\n\nКритический урон еще на ##$multipro3## больше обычного.\n\nВнимание: Критический урон не распространяется на гранатометы.", + + + "menu_nine_lives_beta": "Здоровяк", + "menu_pistol_beta_messiah_desc": "БАЗОВЫЙ: ##$basic##\nПока вы истекаете кровью, вы можете оживить себя убив врага. У вас есть только ##$multibasic## заряд.\n\nВаш таймер истечения кровью увеличен на ##$multibasic2## секунд.\n\nВнимание: Заряды не восстанавливаются после возвращения из заключения.\n\nПРО: ##$pro##\nВы получаете дополнительно ##$multipro## зарядов.\n\nКак только вы попадете в тюрьму, заложники обменяют себя на вас. Этот эффект может сработать даже во время полицейского штурма, но только ##1## раз за ограбление.", + "menu_drop_soap_beta_desc": "БАЗОВЫЙ: ##$basic##\nВ можете бегать с рукопашным оружием.\n\nПРО: ##$pro##\nВы можете сбивать Бульдозеров с ног рукопашным оружием.\n\nНавык срабатывает раз в ##$multipro## секунд.", + "menu_wolverine_beta_desc": "БАЗОВЫЙ: ##$basic##\nЧем меньше ваше здоровье, тем больше будет ваша скорость передвижения. Когда ваше здоровье будет меньше ##$multibasic##, вы будете получать до ##$multibasic2## скорости передвижения.\n\nПРО: ##$pro##\nЧем меньше у вас здоровья, тем больше урона вы наносите. Когда ваше здоровье ниже ##$multipro##, вы будете наносить до ##$multipro2## больше урона оружием ближнего боя и пилой.", + "menu_trigger_happy_beta_desc": "БАЗОВЫЙ: ##$basic##\nКаждое попадание из пистолета даёт ##$multibasic## к наносимому урону на ##$multibasic2## секунды.\nНавык может складываться ##$multibasic3## раз.\n\nПРО: ##$pro##\nКаждое попадание из пистолета даёт ##$multipro## к наносимому урону на ##$multipro2## секунды.\nНавык может складываться ##$multipro3## раза.", + "menu_perseverance_beta_desc": "БАЗОВЫЙ: ##$basic##\nВместо того чтобы сразу упасть, вы сможете сражаться ещё ##$multibasic2## секунды. Скорость передвижения при этом будет уменьшена на ##$multibasic3##.\n\nВнимание: Данный навык не срабатывает при падении с высоты или если вы упали под воздействием огня. \n\nПРО: ##$pro##\nВремя действия навыка увеличено ещё на ##$multipro## секунды.", + "menu_nine_lives_beta_desc": "БАЗОВЫЙ: ##$basic##\nВы можете использовать прицел, когда вы лежите.\n\nПРО: ##$pro##\nВы можете переключать оружие, когда вы лежите.", + "menu_tea_cookies_beta_desc": "БАЗОВЫЙ: ##$basic##\nДобавляет ##$multibasic## аптечки первой помощи в инвентарь.\n\nПРО: ##$pro##\nДобавляет еще ##$multipro## аптечки первой помощи в инвентарь.\n\nВаши разложенные аптечки первой помощи автоматически используются, если игрок повален в ##$multipro2## метровом радиусе от неё. Эффект срабатывает раз в ##$multipro3## секунд.", + + + + "menu_st_category_health": "Здоровье", + "menu_st_category_healing": "Лечение", + "menu_st_category_armor": "Броня", + "menu_st_category_armor_gating": "Реген. Брони", + "menu_st_category_resistance": "Сопротивление", + "menu_st_category_support": "Поддержка", + "menu_st_category_dodge": "Уворот", + + + "menu_deckall_2": "Возврат", + "menu_deckall_2_desc": "У вас есть ##2%## шанс найти метательное оружие в оставленных врагами боеприпасах.\n\nШанс увеличивается на ##0.1%## за каждый подобранный боеприпас, в котором не было метательного оружия.\n\nКогда метательное оружия будет найдено в боеприпасах, шанс будет сброшен к стандартному значению.", + "menu_deckall_4_desc": "Теперь вы можете приобрести услуги «Своего человека».\n\nПараметр скрытности увеличен на ##1##.", + "menu_deckall_6_desc": "Открывает сумку с бронёй, содержимое которой можно надеть во время ограбления.\n\nНошение брони влияет на скорость передвижения на ##15%## меньше.", + + "menu_deck1_3_desc": "Выносливость всех членов команды, включая вас, увеличена на ##$multiperk##.\n\nДистанция вашего крика увеличена на ##$multiperk2##.", + "menu_deck1_9_desc": "Здоровье всей команды, включая вас, а также выносливость, увеличиваются на ##$multiperk## и ##$multiperk2## за каждого связанного заложника соответственно. Навык складывается вплоть до ##$multiperk3## захваченных заложников.\n\nВнимание: Перки, распространяющие своё действие на напарников не складываются.\n\nБонус завершения ряда: Вероятность получить предмет высокого качества после завершения контракта увеличена на ##10%##.", + "menu_deck2_7": "Бешеный", + "menu_deck2_7_desc": "Когда ваше здоровье упадет ниже ##$multiperk##, вы получите неуязвимость к урону по здоровью на ##$multiperk2## секунд.\n\nЭффект срабатывает раз в ##$multiperk3## секунд.", + "menu_deck2_9_desc": "Ваше здоровье увеличено ещё на ##$multiperk##.\n\nВы будете восстанавливать ##$multiperk2## здоровья каждые ##$multiperk3## секунд.\n\nБонус завершения ряда: Вероятность получить предмет высокого качества после завершения контракта увеличена на ##10%##.", + "menu_deck3_9_desc": "Броня всех членов команды, включая вас, восстанавливается быстрее на ##$multiperk2##.\n\nВнимание: Перки, распространяющие своё действие на напарников не складываются.\n\nБонус завершения ряда: Вероятность получить предмет высокого качества после завершения контракта увеличена на ##10%##.", + "menu_deck5_1": "Стрелок", + "menu_deck5_1_desc": "Ваше вторичное оружие будет автоматически перезаряжено, после совершения ##$multiperk## убийств с основного и ##наоборот##.", + "menu_deck5_3": "Самая быстрая рука на Диком Западе", + "menu_deck5_3_desc": "Скорость смены оружия увеличена на ##$multiperk##.", + "menu_deck5_5": "Исподтишка", + "menu_deck5_5_desc": "Если вы не получали урона в течение ##$multiperk3## секунд, шанс нанести критический урон будет увеличен на ##$multiperk## в течение ##$multiperk2## секунд.\n\nКритический урон в ##два раза## больше обычного и не распространяется на гранатометы. Если вы получите урон, то время, которое вы должны не получать урон, будет сброшено.", + "menu_deck5_7": "Отличный Стрелок", + "menu_deck5_7_desc": "Попадание в голову будет восстанавливать ##$multiperk## патрон в ваше используемое оружие.\n\nЭффект срабатывает раз в ##$multiperk2## секунды.", + "menu_deck5_9_desc": "Убийство врага восстанавливает ##$multiperk## брони.\n\nЭффект срабатывает раз в ##$multiperk2## секунду.\n\nБонус завершения ряда: Вероятность получить предмет высокого качества после завершения контракта увеличена на ##10%##.", + "menu_deck6_3_desc": "Баллистические бронежилеты получают увеличенный шанс уворота и больше брони.\n\nЧем тяжелее бронежилет, тем больше брони и шанса уворота он получит", + "menu_deck6_5_desc": "Баллистические бронежилеты получают еще больше шанса уворота и брони.\n\nЧем тяжелее бронежилет, тем больше брони и шанса уворота он получит.", + "menu_deck6_7_desc": "Баллистические бронежилеты получают еще больше шанса уворота и брони.\n\nЧем тяжелее бронежилет, тем больше брони и шанса уворота он получит.", + "menu_deck7_7_desc": "Если вы пригнулись и не двигаетесь, то вы еще на ##$multiperk2## менее приоритетная цель.\n\nСкорость ответа на пейджеры увеличена на ##$multiperk3##.", + "menu_deck7_9": "Рикошет", + "menu_deck7_9_desc": "Пули, от которых вы увернулись, будут ##рикошетить## обратно во врага, который их выстрелил.\n\nБонус завершения ряда: Вероятность получить предмет высокого качества после завершения контракта увеличена на ##10%##.", + "menu_deck8_9_desc": "Удар по врагу рукопашным оружием восстановит ##$multiperk## здоровья. Эффект срабатывает раз в ##$multiperk2## секунд.\n\nБонус завершения ряда: Вероятность получить предмет высокого качества после завершения контракта увеличена на ##10%##.", + "menu_deck9_7_desc": "Убийство врага на среднем расстоянии восстанавливает ##$multiperk## брони.\n\nЭффект срабатывает раз в ##$multiperk2## секунд.", + "menu_deck10_3_desc": "Количество подбираемых вами патронов увеличено на ##$multiperk##.\n\nЗдоровье увеличено на ##$multiperk3##.", + "menu_deck10_9_desc": "Количество здоровья, получаемого из боеприпасов, оставленных противниками, увеличено на ##$multiperk##.\n\nВаш радиус подбора патронов увеличен на ##$multiperk4##.\n\nБонус завершения ряда: Вероятность получить предмет высокого качества после завершения контракта увеличена на ##10%##.", + "menu_deck11_1_desc": "Нанося урон противникам, вы будете восстанавливать ##$multiperk## здоровья каждые ##$multiperk2## секунды в течение ##$multiperk3## секунд. Действие перка складывается. Эффект срабатывает только раз за ##$multiperk4## секунды.\n\nПерк работает только с Костюмом-двойкой.", + "menu_deck11_3_desc": "Нанося урон противникам, вы будете восстанавливать ##$multiperk## здоровья каждые ##$multiperk2## секунды в течение ##$multiperk3## секунд.", + "menu_deck11_7_desc": "Нанося урон противникам, вы будете восстанавливать ##$multiperk## здоровья каждые ##$multiperk2## секунды в течение ##$multiperk3## секунд.", + "menu_deck12_1_desc": "Чем ниже ваше здоровье, тем быстрее восстанавливается ваша броня.\n\nВы будете получать вплоть до ##$multiperk## скорости восстановления брони.", + "menu_deck12_3_desc": "Уменьшает время переключения между оружием на ##$multiperk##.", + "menu_deck12_5_desc": "Вы на ##$multiperk## менее приоритетная цель, когда находитесь рядом с союзниками.", + "menu_deck12_7_desc": "Чем меньше у вас здоровья, тем больше ваш шанс уворота.\n\nВы будете получать вплоть до ##$multiperk## шанса уворота.", + "menu_deck12_9_desc": "Чем меньше у вас здоровья, тем больше урона вы наносите.\n\nВы будете наносить до ##$multiperk## больше урона огнестрельным оружием.\n\nБонус завершения ряда: Вероятность получить предмет высокого качества после завершения контракта увеличена на ##10%##.", + "menu_deck13_3_desc": "Увеличивает количество дополнительного здоровья, получаемого за убийства, на ##$multiperk##.", + "menu_deck13_5_desc": "Увеличивает количество дополнительного здоровья на ##$multiperk##.\n\nВаш шанс уклонения увеличивается на ##$multiperk3##.", + "menu_deck13_7_desc": "Увеличивает количество дополнительного здоровья, получаемого за убийства, на ##$multiperk##.", + "menu_deck14_3_desc": "Другие члены команды так же будут получать бонусы от ваших очков истерии.\nОчки истерии разных членов команды не складываются и работают только очки, дающие большую прибавку к урону.\n\nУ всего вашего оружия есть шанс посеять панику среди врагов.\nПаника будет подавлять противника, заставляя его испытывать страх.", + "menu_deck15_1_desc": "Вместо полного восстановления брони вне боя, Анархист будет восстанавливать её в течение всего боя. Чем тяжелее броня, тем больше брони будет восстанавливаться, но за более длительный интервал времени. Внимание: Навыки и перки, которые ускоряют регенерацию брони, отключены для этого набора перков.", + "menu_deck15_7_desc": "##$multiperk## вашего здоровья конвертируется в дополнительные ##$multiperk2## брони.\n\nВаш шанс увернуться увеличен на ##$multiperk3##.", + "menu_deck15_9_desc": "Нанося урон, вы получаете ##$multiperk## брони. Это срабатывает каждые ##$multiperk2## секунды.\n\nВаша броня увеличена на ##$multiperk3##.\n\nБонус завершения ряда: Вероятность получить предмет высокого качества после завершения контракта увеличена на ##10%##.", + "menu_deck17_9_desc": "За каждые ##5 очков## здоровья, полученных во время действия инъектора, пока у вас максимальный запас здоровья, время перезарядки инъектора уменьшается на ##1 секунду##.\n\nБонус завершения ряда: Вероятность получить предмет высокого качества после завершения контракта увеличена на ##10%##.", + "menu_deck21_5_desc": "Убийство врага, пока генератор помех активен, восстановит ##$multiperk## здоровья.\n\nВаш шанс увернуться увеличен на ##$multiperk2##.", + "menu_deck21_7_desc": "Вы получаете ##$multiperk## дополнительного здоровья.", + "menu_deck21_9_desc": "Члены команды, которые убивают врагов, пока генератор помех активен, получат ##$multiperk## здоровья.\n\nБонус завершения ряда: Вероятность получить предмет высокого качества после завершения контракта увеличена на ##10%##.", + "menu_deck22_1_desc": "Открывает и экипирует Ампулу Кровопийцы.\n\nЕсли вы смените набор перков на другой, Ампула Кровопийцы будет недоступна для использования. Ампула Кровопийцы использует слот для метательного оружия, но вы можете взять вместо нее что-нибудь другое. Чтобы воспользоваться Ампулой, достаточно нажать на кнопку для метательного оружия.\n\nАктивация Ампулы Кровопийцы ##полностью## восстановит ваше здоровье и уберет вашу броню на время действия Ампулы Кровопийцы.\n\nПока Ампула Кровопийцы активна ваше здоровье будет поделено на сегменты по ##$multiperk2## и урон от врагов отнимет один сегмент.\n\nУбийство ##1## врага заблокирует весь урон по вам в течение ##$multiperk3## секунд.\nЕсли вы получите урон, то здоровье ваших союзников будет восстановлено на ##$multiperk4##. Эффект Ампулы Кровопийцы длится ##$multiperk5## секунды и перезаряжается ##$multiperk6## секунд.", + "menu_deck22_5_desc": "Длительность эффекта Ампулы Кровопийцы увеличена до ##$multiperk## секунд.\n\nУбийство врага уменьшает перезарядку Ампулы Кровопийцы на ##$multiperk2## секунду.\n\nПри получении вами урона, здоровье ваших союзников будет восстановлено на ##$multiperk3##.", + "menu_deck22_9_desc": "Теперь во время действия Ампулы Кровопийцы ваше здоровье будет поделено на сегменты по ##$multiperk##.\n\nВаше максимальное здоровье увеличено на ##$multiperk2##.\n\nБонус завершения ряда: Вероятность получить предмет высокого качества после завершения контракта увеличена на ##10%##.", + + "menu_deck1_3_short": "Выносливость всех членов команды, включая вас, увеличена на ##$multiperk##. Дистанция вашего крика увеличена на ##$multiperk2##.", + "menu_deck1_9_short": "Здоровье всей команды, включая вас, а также выносливость, увеличиваются на ##$multiperk## и ##$multiperk2## за каждого связанного заложника соответственно. Навык складывается вплоть до ##$multiperk3## захваченных заложников. Внимание: Перки, распространяющие своё действие на напарников не складываются.", + "menu_deck2_7_short": "Когда ваше здоровье упадет ниже ##$multiperk##, вы получите неуязвимость к урону по здоровью на ##$multiperk2## секунд. Эффект срабатывает раз в ##$multiperk3## секунд.", + "menu_deck2_9_short": "Ваше здоровье увеличено ещё на ##$multiperk##.Вы будете восстанавливать ##$multiperk2## здоровья каждые ##$multiperk3## секунд.", + "menu_deck3_9_short": "Броня всех членов команды, включая вас, восстанавливается быстрее на ##$multiperk2##.Внимание: Перки, распространяющие своё действие на напарников не складываются.", + "menu_deck5_1_short": "Ваше вторичное оружие будет автоматически перезаряжено, после совершения ##$multiperk## убийств с основного и ##наоборот##.", + "menu_deck5_3_short": "Скорость смены оружия увеличена на ##$multiperk##.", + "menu_deck5_5_short": "Если вы не получали урона в течение ##$multiperk3## секунд, шанс нанести критический урон будет увеличен на ##$multiperk## в течение ##$multiperk2## секунд.\n\nКритический урон в ##два раза## больше обычного и не распространяется на гранаты и гранатометы. Если вы получите урон, то время, которое вы должны не получать урон, будет сброшено.", + "menu_deck5_7_short": "Попадание в голову будет восстанавливать ##$multiperk## патрон в ваше используемое оружие.\n\nЭффект срабатывает раз в ##$multiperk2## секунды.", + "menu_deck5_9_short": "Убийство врага восстанавливает ##$multiperk## брони.\n\nЭффект срабатывает раз в ##$multiperk2## секунду.", + "menu_deck6_3_short": "Баллистические бронежилеты получают увеличенный шанс уворота и больше брони. Чем тяжелее бронежилет, тем больше брони и шанса уворота он получит.", + "menu_deck6_5_short": "Баллистические бронежилеты получают еще больше шанса уворота и брони. Чем тяжелее бронежилет, тем больше брони и шанса уворота он получит.", + "menu_deck6_7_short": "Баллистические бронежилеты получают еще больше шанса уворота и брони. Чем тяжелее бронежилет, тем больше брони и шанса уворота он получит.", + "menu_deck7_7_short": "Если вы пригнулись и не двигаетесь, то вы еще на ##$multiperk2## менее приоритетная цель. Скорость ответа на пейджеры увеличена на ##$multiperk3##.", + "menu_deck7_9_short": "Пули, от которых вы увернулись, будут ##рикошетить## обратно во врага, который их выстрелил.", + "menu_deck8_9_short": "Удар по врагу рукопашным оружием восстановит ##$multiperk## здоровья. Эффект срабатывает раз в ##$multiperk2## секунд.", + "menu_deck9_7_short": "Убийство врага на среднем расстоянии восстанавливает ##$multiperk## брони. Эффект срабатывает раз в ##$multiperk2## секунд.", + "menu_deck10_3_short": "Количество подбираемых вами патронов увеличено на ##$multiperk##. Здоровье увеличено на ##$multiperk3##.", + "menu_deck10_9_short": "Количество здоровья, получаемого из боеприпасов, оставленных противниками, увеличено на ##$multiperk##. Ваш радиус подбора патронов увеличен на ##$multiperk4##.", + "menu_deck11_1_short": "Нанося урон противникам, вы будете восстанавливать ##$multiperk## здоровья каждые ##$multiperk2## секунды в течение ##$multiperk3## секунд. Действие перка складывается. Эффект срабатывает только раз за ##$multiperk4## секунды. Перк работает только с Костюмом-двойкой.", + "menu_deck11_3_short": "Нанося урон противникам, вы будете восстанавливать ##$multiperk## здоровья каждые ##$multiperk2## секунды в течение ##$multiperk3## секунд.", + "menu_deck11_7_short": "Нанося урон противникам, вы будете восстанавливать ##$multiperk## здоровья каждые ##$multiperk2## секунды в течение ##$multiperk3## секунд.", + "menu_deck12_1_short": "Чем ниже ваше здоровье, тем быстрее восстанавливается ваша броня. Вы будете получать вплоть до ##$multiperk## скорости восстановления брони.", + "menu_deck12_3_short": "Уменьшает время переключения между оружием на ##$multiperk##.", + "menu_deck12_5_short": "Вы на ##$multiperk## менее приоритетная цель, когда находитесь рядом с союзниками.", + "menu_deck12_7_short": "Чем меньше у вас здоровья, тем больше ваш шанс уворота. Вы будете получать вплоть до ##$multiperk## шанса уворота.", + "menu_deck12_9_short": "Чем меньше у вас здоровья, тем больше урона вы наносите. Вы будете наносить до ##$multiperk## больше урона огнестрельным оружием.", + "menu_deck13_3_short": "Увеличивает количество дополнительного здоровья, получаемого за убийства, на ##$multiperk##.", + "menu_deck13_5_short": "Увеличивает количество дополнительного здоровья на ##$multiperk##. Ваш шанс уклонения увеличивается на ##$multiperk3##.", + "menu_deck13_7_short": "Увеличивает количество дополнительного здоровья, получаемого за убийства, на ##$multiperk##.", + "menu_deck14_3_short": "Другие члены команды так же будут получать бонусы от ваших очков истерии. У всего вашего оружия есть шанс посеять панику среди врагов.", + "menu_deck15_1_short": "Вместо полного восстановления брони вне боя, Анархист будет восстанавливать её в течение всего боя. Чем тяжелее броня, тем больше брони будет восстанавливаться, но за более длительный интервал времени. Внимание: Навыки и перки, которые ускоряют регенерацию брони, отключены для этого набора перков.", + "menu_deck15_7_short": "##$multiperk## вашего здоровья конвертируется в дополнительные ##$multiperk2## брони. Ваш шанс увернуться увеличен на ##$multiperk3##.", + "menu_deck15_9_short": "Нанося урон, вы получаете ##$multiperk## брони. Это срабатывает каждые ##$multiperk2## секунды. Ваша броня увеличена на ##$multiperk3##.", + "menu_deck17_9_short": "За каждые ##5 очков## здоровья, полученных во время действия инъектора, пока у вас максимальный запас здоровья, время перезарядки инъектора уменьшается на ##1 секунду##.", + "menu_deck21_5_short": "Убийство врага, пока генератор помех активен, восстановит ##$multiperk## здоровья. Ваш шанс увернуться увеличен на ##$multiperk2##.", + "menu_deck21_7_short": "Вы получаете ##$multiperk## дополнительного здоровья.", + "menu_deck21_9_short": "Члены команды, которые убивают врагов, пока генератор помех активен, получат ##$multiperk## здоровья.", + "menu_deck22_1_short": "Открывает и экипирует Ампулу Кровопийцы.", + "menu_deck22_5_short": "Длительность эффекта Ампулы Кровопийцы увеличена до ##$multiperk## секунд. Убийство врага уменьшает перезарядку Ампулы Кровопийцы на ##$multiperk2## секунд(ы). Получение вами урона теперь лечит товарищей по команде на ##$multiperk3## здоровья.", + "menu_deck22_9_short": "Пока Ампула Кровопийцы активна, ваше здоровье разделено на сегменты по ##$multiperk##. Ваше максимальное здоровье увеличено на ##$multiperk2##.", + + + "bm_global_value_mrwi_unlock": "ЭТО НАБОР ПЕРКОВ ЗАБЛОКИРОВАН, И ЕГО КАРТЫ ИСПОЛЬЗУЮТСЯ ДЛЯ ДРУГИХ НАБОРОВ ПЕРКОВ.", + "hud_int_equipment_drill_upgrade": "НАЖМИТЕ $BTN_INTERACT ЧТОБЫ УЛУЧШИТЬ ДРЕЛЬ", + "hud_assault_ponr": "Натиск полной силы.", + "hud_assault_normal_ponr": "Максимальные силы реагирования на подходе.", + "hud_assault_zeal_ponr": "Легион Zeal на подходе.", + "eclipse_menu_main": "Eclipse", + "eclipse_menu_ponr_assault_text": "Изменения баннера штурма", + "eclipse_menu_ponr_assault_text_desc": "Изменения баннера штурма. Несовместимо с модами, которые меняют баннер штурма.", + + + "menu_pro_warning": "Это Pro Job!\n\nОгонь по своим включен.\nУ вас будет только один ИИ-напарник.\nНекоторые ограбления будут иметь точку невозврата.\nКаждое падение уменьшает ваш таймер истечения кровью и уменьшает получаемое вами здоровье после оживления.", + "menu_difficulty_easy_wish": "Затмение", + "menu_risk_easy_wish": "Операция 'Затмение'.\nДля тебя, в риске самый смак.", + "menu_risk_special": "Overkill.\nМаксимум сил реагирования на подходе.", + "menu_difficulty_very_hard": "Сложно", + "menu_risk_fbi": "Сложно.\nФБР в повышенной готовности.", + "menu_difficulty_hard": "Нормально", + "menu_risk_swat": "Нормально.\nСредний риск.", + "menu_difficulty_normal": "Легко", + "menu_risk_pd": "Легко.\nПодождите! Я забыл свои пончики!", + + "menu_toggle_one_down": "Pro Job", + "menu_one_down": "Pro Job", + "menu_toggle_one_down_lobbies": "Разрешить Pro Job лобби", + + "menu_stat_job_completed": "", + "menu_max_progress": "Максимизировать прогрессию аккаунта", + "menu_max_progress_help": "Максимизировать прогрессию аккаунта и пропустить рутину.", + "menu_progress_msg": "Вы уверены, что хотите максимизировать свой прогресс?\nЭто максимально прокачает вашего персонажа и разблокирует все доступные предметы.", + "menu_max_masks": "Максимизировать кастомизацию масок", + "menu_max_masks_help": "Максимизировать маски и их кастомизацию, чтобы пропустить рутину.", + "menu_masks_msg": "Вы уверены, что хотите максимизировать маски?\nЭто даст 10 штук каждой маски, материала, рисунка и цвета." +} diff --git a/mod.lua b/mod.lua index eaac620..a6f55ad 100644 --- a/mod.lua +++ b/mod.lua @@ -64,6 +64,7 @@ if not StreamHeist then local language_tbl = { [("english"):key()] = "en.txt", [("schinese"):key()] = "schinese.json", + [("russian"):key()] = "ru.txt" } local language = language_tbl[SystemInfo:language():key()] or "en.txt" From 8b23c0242fa0172a37cfc9a3044fa2677513892e Mon Sep 17 00:00:00 2001 From: nikita <59087849+mrcreepysos@users.noreply.github.com> Date: Wed, 13 Dec 2023 00:49:47 +0300 Subject: [PATCH 02/15] sh branch bank script Co-Authored-By: Sebastian Gabl (aka Hoppip) --- req/mission_script/branchbank.lua | 46 +++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 req/mission_script/branchbank.lua diff --git a/req/mission_script/branchbank.lua b/req/mission_script/branchbank.lua new file mode 100644 index 0000000..ad8e4a2 --- /dev/null +++ b/req/mission_script/branchbank.lua @@ -0,0 +1,46 @@ +return { + -- Special ambush chance increase + [103072] = { + values = { + chance = 75 + } + }, + [105563] = { + values = { + player_1 = true + } + }, + [105574] = { + values = { + player_1 = true + } + }, + -- Enable spawns sooner + [103882] = { + on_executed = { + { id = 100251, delay = 30 }, + { id = 105774, delay = 20 } + } + }, + -- Enable all street reinforce spots when first responders arrive + [104727] = { + on_executed = { + { id = 100364, delay = 0 } + } + }, + [104728] = { + on_executed = { + { id = 100364, delay = 0 } + } + }, + [104729] = { + on_executed = { + { id = 100364, delay = 0 } + } + }, + [104730] = { + on_executed = { + { id = 100364, delay = 0 } + } + } +} \ No newline at end of file From 06b2d305148f041c835cb2081ff3c2de5c455e0f Mon Sep 17 00:00:00 2001 From: nikita <59087849+mrcreepysos@users.noreply.github.com> Date: Wed, 13 Dec 2023 01:36:36 +0300 Subject: [PATCH 03/15] tone down some of the absurd enemy damage dealers --- lua/charactertweakdata.lua | 20 ++++++++++---------- lua/weapontweakdata.lua | 2 +- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/lua/charactertweakdata.lua b/lua/charactertweakdata.lua index f09aff9..01b9e01 100644 --- a/lua/charactertweakdata.lua +++ b/lua/charactertweakdata.lua @@ -63,7 +63,7 @@ function CharacterTweakData:_presets(tweak_data, ...) presets.weapon.base.is_shotgun_pump.RELOAD_SPEED = 1.5 presets.weapon.base.is_shotgun_pump.range = { close = 500, optimal = 1000, far = 2000 } presets.weapon.base.is_shotgun_pump.FALLOFF = { - { dmg_mul = 17.5, r = 300, acc = { 0.8, 1 }, recoil = { 0.8, 1 }, mode = { 1, 0, 0, 0 } }, + { dmg_mul = 15, r = 300, acc = { 0.8, 1 }, recoil = { 0.8, 1 }, mode = { 1, 0, 0, 0 } }, { dmg_mul = 10.5, r = 1000, acc = { 0.7, 0.9 }, recoil = { 1, 1.4 }, mode = { 1, 0, 0, 0 } }, { dmg_mul = 2.5, r = 2000, acc = { 0.6, 0.8 }, recoil = { 1.2, 1.8 }, mode = { 1, 0, 0, 0 } }, } @@ -92,7 +92,7 @@ function CharacterTweakData:_presets(tweak_data, ...) presets.weapon.base.is_smg = deep_clone(presets.weapon.base.is_rifle) presets.weapon.base.is_smg.autofire_rounds = { 3, 8 } presets.weapon.base.is_smg.FALLOFF = { - { dmg_mul = 5, r = 0, acc = { 0.4, 0.7 }, recoil = { 0.5, 1 }, mode = { 1, 0, 0, 0 } }, + { dmg_mul = 5, r = 0, acc = { 0.35, 0.6 }, recoil = { 0.5, 1 }, mode = { 1, 0, 0, 0 } }, { dmg_mul = 5, r = 3000, acc = { 0.1, 0.3 }, recoil = { 1, 2 }, mode = { 1, 0, 0, 0 } }, } @@ -123,10 +123,10 @@ function CharacterTweakData:_presets(tweak_data, ...) } presets.weapon.gc = based_on(presets.weapon.base) - presets.weapon.gc.is_rifle.autofire_rounds = { 1, 3 } + presets.weapon.gc.is_rifle.autofire_rounds = { 1, 1 } presets.weapon.gc.is_rifle.FALLOFF = { - { dmg_mul = 9, r = 0, acc = { 0.45, 0.7 }, recoil = { 0.5, 1 }, mode = { 1, 0, 0, 0 } }, - { dmg_mul = 9, r = 3000, acc = { 0.2, 0.45 }, recoil = { 1, 2 }, mode = { 1, 0, 0, 0 } }, + { dmg_mul = 9, r = 0, acc = { 0.45, 0.6 }, recoil = { 0.33, 0.66 }, mode = { 1, 0, 0, 0 } }, + { dmg_mul = 9, r = 3000, acc = { 0.15, 0.3 }, recoil = { 1, 2 }, mode = { 1, 0, 0, 0 } }, } presets.weapon.gc.is_smg.FALLOFF = { { dmg_mul = 7.5, r = 0, acc = { 0.45, 0.7 }, recoil = { 0.5, 1 }, mode = { 1, 0, 0, 0 } }, @@ -138,9 +138,9 @@ function CharacterTweakData:_presets(tweak_data, ...) aim_delay = { 0, 0.1 }, }) - presets.weapon.elite.is_rifle.autofire_rounds = { 1, 3 } + presets.weapon.elite.is_rifle.autofire_rounds = { 1, 1 } presets.weapon.elite.is_rifle.FALLOFF = { - { dmg_mul = 8.5, r = 0, acc = { 0.6, 0.9 }, recoil = { 0.5, 1 }, mode = { 1, 0, 0, 0 } }, + { dmg_mul = 8.5, r = 0, acc = { 0.6, 0.9 }, recoil = { 0.33, 0.66 }, mode = { 1, 0, 0, 0 } }, { dmg_mul = 8.5, r = 3000, acc = { 0.25, 0.6 }, recoil = { 1, 2 }, mode = { 1, 0, 0, 0 } }, } @@ -153,7 +153,7 @@ function CharacterTweakData:_presets(tweak_data, ...) presets.weapon.elite.is_shotgun_pump.RELOAD_SPEED = 1.5 presets.weapon.elite.is_shotgun_pump.range = { close = 500, optimal = 1000, far = 2000 } presets.weapon.elite.is_shotgun_pump.FALLOFF = { - { dmg_mul = 17.5, r = 300, acc = { 0.8, 1 }, recoil = { 0.75, 0.75 }, mode = { 1, 0, 0, 0 } }, + { dmg_mul = 15, r = 300, acc = { 0.8, 1 }, recoil = { 0.75, 0.75 }, mode = { 1, 0, 0, 0 } }, { dmg_mul = 10.5, r = 1000, acc = { 0.7, 0.9 }, recoil = { 0.9, 0.9 }, mode = { 1, 0, 0, 0 } }, { dmg_mul = 2.5, r = 2000, acc = { 0.6, 0.8 }, recoil = { 1, 1.2 }, mode = { 1, 0, 0, 0 } }, } @@ -171,12 +171,12 @@ function CharacterTweakData:_presets(tweak_data, ...) presets.weapon.shield.is_smg.autofire_rounds = { 3, 8 } presets.weapon.shield.is_smg.FALLOFF = { - { dmg_mul = 3, r = 0, acc = { 0.4, 0.7 }, recoil = { 0.5, 1 }, mode = { 1, 0, 0, 0 } }, + { dmg_mul = 3, r = 0, acc = { 0.35, 0.6 }, recoil = { 0.5, 1 }, mode = { 1, 0, 0, 0 } }, { dmg_mul = 3, r = 3000, acc = { 0.1, 0.3 }, recoil = { 1, 2 }, mode = { 1, 0, 0, 0 } }, } presets.weapon.elite_shield.is_pistol.FALLOFF = { - { dmg_mul = 7, r = 0, acc = { 0.6, 0.9 }, recoil = { 0.3, 0.45 }, mode = { 1, 0, 0, 0 } }, + { dmg_mul = 7, r = 0, acc = { 0.5, 0.75 }, recoil = { 0.4, 0.6 }, mode = { 1, 0, 0, 0 } }, { dmg_mul = 7, r = 3000, acc = { 0.1, 0.4 }, recoil = { 0.5, 1 }, mode = { 1, 0, 0, 0 } }, } diff --git a/lua/weapontweakdata.lua b/lua/weapontweakdata.lua index de25af5..36cddb2 100644 --- a/lua/weapontweakdata.lua +++ b/lua/weapontweakdata.lua @@ -1717,7 +1717,7 @@ self.system.use_data.selection_index = SELECTION.UNDERBARREL_PRIMARY -- NPC weapons -- rifles self.m4_npc.DAMAGE = 1 - self.m4_npc.auto.fire_rate = 0.225 + self.m4_npc.auto.fire_rate = 0.25 self.m4_yellow_npc.DAMAGE = 1 self.m4_yellow_npc.auto.fire_rate = 0.3 self.g36_npc.DAMAGE = 1 From 43f79d14a5b3e158583131e170923b84f0e9714b Mon Sep 17 00:00:00 2001 From: nikita <59087849+mrcreepysos@users.noreply.github.com> Date: Wed, 13 Dec 2023 01:40:56 +0300 Subject: [PATCH 04/15] change tear gas spawn conditions (sh) No longer requires a ceiling to be deployed Hostages prevent teargas grenades in their area --- lua/groupaistatebesiege.lua | 17 +++++------------ 1 file changed, 5 insertions(+), 12 deletions(-) diff --git a/lua/groupaistatebesiege.lua b/lua/groupaistatebesiege.lua index a06a4eb..0997617 100644 --- a/lua/groupaistatebesiege.lua +++ b/lua/groupaistatebesiege.lua @@ -622,27 +622,20 @@ function GroupAIStateBesiege:_chk_group_use_grenade(assault_area, group, detonat -- If players camp a specific area for too long, turn a smoke grenade into a teargas grenade instead local use_teargas - if grenade_type == "smoke_grenade" and assault_area.criminal_entered_t and table.size(assault_area.neighbours) <= 2 then + if grenade_type == "smoke_grenade" and not assault_area.hostages and assault_area.criminal_entered_t and table.size(assault_area.neighbours) <= 2 then local teargas_chance_times = tweak_data.group_ai.cs_grenade_chance_times or { 60, 240 } local teargas_chance = math.map_range(self._t - assault_area.criminal_entered_t, teargas_chance_times[1], teargas_chance_times[2], 0, 1) if math.random() < teargas_chance then local teargas_pos = managers.navigation:find_random_position_in_segment(assault_area.pos_nav_seg) - mvec_lerp(teargas_pos, teargas_pos, assault_area.pos, 0.75) + mvec_lerp(detonate_offset_pos, teargas_pos, assault_area.pos, 0.75) local c_key = table.random_key(assault_area.criminal.units) if c_key then - mvec_lerp(teargas_pos, teargas_pos, assault_area.criminal.units[c_key].m_pos, 0.5) + mvec_lerp(detonate_offset_pos, detonate_offset_pos, assault_area.criminal.units[c_key].m_pos, 0.5) end - mvec_set(detonate_offset, math.UP) - mvec_mul(detonate_offset, 1000) - mvec_add(detonate_offset, teargas_pos) - - if World:raycast("ray", teargas_pos, detonate_offset, "slot_mask", managers.slot:get_mask("world_geometry"), "report") then - assault_area.criminal_entered_t = assault_area.criminal_entered_t - teargas_chance_times[2] - detonate_offset_pos = teargas_pos - use_teargas = true - end + assault_area.criminal_entered_t = assault_area.criminal_entered_t - teargas_chance_times[2] + use_teargas = true end end From b0eac2fc67bdc5e55c635ad7e547ce68136ad811 Mon Sep 17 00:00:00 2001 From: nikita <59087849+mrcreepysos@users.noreply.github.com> Date: Wed, 13 Dec 2023 01:57:30 +0300 Subject: [PATCH 05/15] change how armor break gp is handled it's now universally .3s (except normal where it will be .4s) on all difficulties instead of having .2s added on top of the already existing timer --- lua/playerdamage.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lua/playerdamage.lua b/lua/playerdamage.lua index 5df1eba..76956c5 100644 --- a/lua/playerdamage.lua +++ b/lua/playerdamage.lua @@ -266,7 +266,7 @@ function PlayerDamage:_calc_armor_damage(attack_data) end -- Add significantly longer grace period on armor break (repurposing Anarchist/Armorer damage timer) (sh) - self._can_take_dmg_timer = self._dmg_interval + 0.2 + self._can_take_dmg_timer = math.max(self._dmg_interval, 0.3) local pm = managers.player From b4b24a7d6e317f7737334af1de4d807d3dca8197 Mon Sep 17 00:00:00 2001 From: nikita <59087849+mrcreepysos@users.noreply.github.com> Date: Thu, 14 Dec 2023 00:30:49 +0300 Subject: [PATCH 06/15] increase ai tickrate (& add elite groups to ovk) --- loc/ru.txt | 2 +- lua/groupaitweakdata.lua | 12 +++++++++--- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/loc/ru.txt b/loc/ru.txt index 8756cf2..10bc5fe 100644 --- a/loc/ru.txt +++ b/loc/ru.txt @@ -41,7 +41,7 @@ "menu_cable_guy_beta_desc": "БАЗОВЫЙ: ##$basic##\nУбедительность и дальность вашего запугивания увеличена на ##$multibasic2##.\n\nПРО: ##$pro##\nШум, создаваемый вами, устрашает гражданских. Гражданские остаются запуганными на ##$multipro## дольше.\n\nУ находящихся поблизости несвязанных гражданских есть шанс поднять вас, если вы с ними взаимодействуете.", "menu_triathlete_beta_desc": "БАЗОВЫЙ: ##$basic##\nУвеличивает запас кабельных стяжек на ##$multibasic##.\n\nПРО: ##$pro##\nТеперь вы можете вести за собой ##$multipro## заложников одновременно.\n\nВы связываете гражданских на ##$multipro2## быстрее.", "menu_stockholm_syndrome_beta": "Ситуация с Заложниками", - "menu_stockholm_syndrome_beta_desc": "БАЗОВЫЙ: ##$basic##\nВы и ваша команда получаете ##$multibasic## очка поглощения урона за каждого заложника.\n\nПРО: ##$pro##\nКаждый заложник теперь увеличивает время между полицейскими штурмами на ##$multipro дополнительные## секунды.\n\nВнимание: Этот складывается вплоть до ##4## заложников.", + "menu_stockholm_syndrome_beta_desc": "БАЗОВЫЙ: ##$basic##\nВы и ваша команда получаете ##$multibasic## очка поглощения урона за каждого заложника.\n\nПРО: ##$pro##\nКаждый заложник теперь увеличивает время между полицейскими штурмами на ##$multipro дополнительные## секунды.\n\nВнимание: Данные эффекты складываются вплоть до ##4## заложников.", "menu_control_freak_beta_desc": "БАЗОВЫЙ: ##$basic##\nПереведённый на вашу сторону полицейский получает на ##$multibasic3## меньше урона.\n\nПРО: ##$pro##\nПереведённый на вашу сторону полицейский получает еще на ##$multipro4## меньше урона.", "menu_rifleman": "По Коням", "menu_rifleman_desc": "БАЗОВЫЙ: ##$basic##\nВы прицеливаетесь на ##$multibasic## быстрее и меняете оружие на ##$multibasic2## быстрее.\n\nПРО: ##$pro##\nВы можете стрелять от бедра во время бега.", diff --git a/lua/groupaitweakdata.lua b/lua/groupaitweakdata.lua index 5c7a72f..015032b 100644 --- a/lua/groupaitweakdata.lua +++ b/lua/groupaitweakdata.lua @@ -1777,7 +1777,7 @@ Hooks:PostHook(GroupAITweakData, "_init_task_data", "eclipse__init_task_data", f -- Assault Data -- AI Tickrate - self.ai_tickrate = 1 / (30 * f) + self.ai_tickrate = 1 / (50 * math.sqrt(f)) -- BESIEGE -- @@ -1889,7 +1889,10 @@ Hooks:PostHook(GroupAITweakData, "_init_task_data", "eclipse__init_task_data", f fbi_lights = { 1.5, 1.5, 1.5 }, fbi_heavies = { 0.3, 0.5, 1 }, fbi_shields = { 0.2, 0.2, 0.3 }, - fbi_tanks = { 0, 0.02, 0.1 }, + fbi_tanks = { 0, 0.04, 0.125 }, + gensec_cqc_lights = { 0, 0.1, 0.25 }, + gensec_ranged_lights = { 0, 0.1, 0.25 }, + gensec_flankers = { 0, 0.1, 0.2 }, spoocs = { 0, 0.03, 0.06 }, } self.besiege.recon.groups = { @@ -1989,7 +1992,10 @@ Hooks:PostHook(GroupAITweakData, "_init_task_data", "eclipse__init_task_data", f fbi_lights = { 1.5, 1.5, 1.5 }, fbi_heavies = { 0.3, 0.5, 1 }, fbi_shields = { 0.2, 0.2, 0.3 }, - fbi_tanks = { 0, 0.02, 0.1 }, + fbi_tanks = { 0, 0.04, 0.125 }, + gensec_cqc_lights = { 0, 0.1, 0.25 }, + gensec_ranged_lights = { 0, 0.1, 0.25 }, + gensec_flankers = { 0, 0.1, 0.2 }, spoocs = { 0, 0.03, 0.06 }, } self.ponr.reenforce.groups = { From 208c344152044a10435bed8f83c0679e745378af Mon Sep 17 00:00:00 2001 From: nikita <59087849+mrcreepysos@users.noreply.github.com> Date: Fri, 15 Dec 2023 01:29:33 +0300 Subject: [PATCH 07/15] pro job enemies buff and a few fixes --- loc/en.txt | 2 +- loc/ru.txt | 4 ++-- lua/charactertweakdata.lua | 32 +++++++++++++++++++------------- lua/groupaitweakdata.lua | 11 ++++++----- lua/playerdamage.lua | 2 +- lua/skilltreetweakdata.lua | 4 ++-- 6 files changed, 31 insertions(+), 24 deletions(-) diff --git a/loc/en.txt b/loc/en.txt index bcfd118..8209c09 100644 --- a/loc/en.txt +++ b/loc/en.txt @@ -245,7 +245,7 @@ "eclipse_menu_ponr_assault_text_desc": "Assault banner flavor edits. Incompatible with mods that edit assault banner.", - "menu_pro_warning": "This is a pro job!\n\nFriendly fire is enabled.\nYou're only granted one Team AI.\nVarious heists have points of no return enabled.\nEach consecutive down decreases bleedout timer and revive health.", + "menu_pro_warning": "This is a pro job!\n\nFriendly fire is enabled.\nYou're only granted one Team AI.\nEnemies are more agile, snappy and aggressive.\nVarious heists have points of no return enabled.\nEach consecutive down decreases bleedout timer and revive health.", "menu_difficulty_easy_wish": "Eclipse", "menu_risk_easy_wish": "Operation 'Eclipse'.\nFor you, action is the juice.", "menu_risk_special": "Overkill.\nMaximum Force Responders inbound.", diff --git a/loc/ru.txt b/loc/ru.txt index 10bc5fe..6af752f 100644 --- a/loc/ru.txt +++ b/loc/ru.txt @@ -245,10 +245,10 @@ "eclipse_menu_ponr_assault_text_desc": "Изменения баннера штурма. Несовместимо с модами, которые меняют баннер штурма.", - "menu_pro_warning": "Это Pro Job!\n\nОгонь по своим включен.\nУ вас будет только один ИИ-напарник.\nНекоторые ограбления будут иметь точку невозврата.\nКаждое падение уменьшает ваш таймер истечения кровью и уменьшает получаемое вами здоровье после оживления.", + "menu_pro_warning": "Это Pro Job!\n\nОгонь по своим включен.\nУ вас будет только один ИИ-напарник.\nВраги более ловкие, точные и агрессивные.\nНекоторые ограбления будут иметь точку невозврата.\nКаждое падение уменьшает ваш таймер истечения кровью и уменьшает получаемое вами здоровье после оживления.", "menu_difficulty_easy_wish": "Затмение", "menu_risk_easy_wish": "Операция 'Затмение'.\nДля тебя, в риске самый смак.", - "menu_risk_special": "Overkill.\nМаксимум сил реагирования на подходе.", + "menu_risk_special": "Overkill.\nМаксимальные силы реагирования на подходе.", "menu_difficulty_very_hard": "Сложно", "menu_risk_fbi": "Сложно.\nФБР в повышенной готовности.", "menu_difficulty_hard": "Нормально", diff --git a/lua/charactertweakdata.lua b/lua/charactertweakdata.lua index 01b9e01..736fcd3 100644 --- a/lua/charactertweakdata.lua +++ b/lua/charactertweakdata.lua @@ -21,10 +21,11 @@ end local _presets_orig = CharacterTweakData._presets function CharacterTweakData:_presets(tweak_data, ...) local presets = _presets_orig(self, tweak_data, ...) + local is_pro = Global.game_settings and Global.game_settings.one_down presets.weapon.base = based_on(presets.weapon.expert, { - focus_delay = 0.35, - aim_delay = { 0, 0.2 }, + focus_delay = (is_pro and 0.25) or 0.35, + aim_delay = (is_pro and { 0, 0.1 }) or {0.15, 0.2}, melee_dmg = 10, melee_speed = 1, melee_retry_delay = { 1, 2 }, @@ -134,8 +135,8 @@ function CharacterTweakData:_presets(tweak_data, ...) } presets.weapon.elite = based_on(presets.weapon.base, { - focus = 0.15, - aim_delay = { 0, 0.1 }, + focus_delay = (is_pro and 0.15) or 0.25, + aim_delay = (is_pro and { 0, 0.05 }) or {0.1, 0.1}, }) presets.weapon.elite.is_rifle.autofire_rounds = { 1, 1 } @@ -165,8 +166,8 @@ function CharacterTweakData:_presets(tweak_data, ...) range = { close = 500, optimal = 1000, far = 2000 }, }) presets.weapon.elite_shield = based_on(presets.weapon.shield, { - focus = 0.15, - aim_delay = { 0, 0.1 }, + focus_delay = (is_pro and 0.15) or 0.25, + aim_delay = (is_pro and { 0, 0.05 }) or {0.1, 0.1}, }) presets.weapon.shield.is_smg.autofire_rounds = { 3, 8 } @@ -193,14 +194,13 @@ function CharacterTweakData:_presets(tweak_data, ...) presets.weapon.sniper = based_on(presets.weapon.base, { focus_delay = 0.5, - aim_delay = { 0, 0.25 }, + aim_delay = (is_pro and { 0, 0.15 }) or {0.1, 0.25}, range = { close = 5000, optimal = 10000, far = 15000 }, }) presets.weapon.sniper.is_rifle.FALLOFF = { { dmg_mul = 12, r = 0, acc = { 0, 0.5 }, recoil = { 3, 4 }, mode = { 1, 0, 0, 0 } }, { dmg_mul = 12, r = 1000, acc = { 0.5, 1 }, recoil = { 3, 4 }, mode = { 1, 0, 0, 0 } }, - { dmg_mul = 12, r = 4000, acc = { 0.5, 1 }, recoil = { 3, 4 }, mode = { 1, 0, 0, 0 } }, } presets.weapon.tank = based_on(presets.weapon.base, { @@ -208,8 +208,8 @@ function CharacterTweakData:_presets(tweak_data, ...) }) presets.weapon.elite_tank = based_on(presets.weapon.tank, { melee_dmg = 20, - aim_delay = { 0, 0.1 }, - focus_delay = 0.15, + focus_delay = (is_pro and 0.15) or 0.25, + aim_delay = (is_pro and { 0, 0.05 }) or {0.1, 0.1}, }) presets.weapon.tank.is_shotgun_pump.FALLOFF = { @@ -270,8 +270,8 @@ function CharacterTweakData:_presets(tweak_data, ...) presets.move_speed.escort_slow = deep_clone(presets.move_speed.slow) -- Tweak dodge presets - presets.dodge.heavy.occasions.preemptive.chance = 0.25 - presets.dodge.athletic.occasions.preemptive.chance = 0.5 + presets.dodge.heavy.occasions.preemptive.chance = 0.25 * ((is_pro and 1.25) or 1) + presets.dodge.athletic.occasions.preemptive.chance = 0.5 * ((is_pro and 1.25) or 1) presets.dodge.ninja.speed = 2 for _, occasion in pairs(presets.dodge.ninja.occasions) do @@ -903,6 +903,7 @@ end) local function setup_presets(self) local diff_i = self.tweak_data:difficulty_to_index(Global.game_settings and Global.game_settings.difficulty or "normal") + local is_pro = Global.game_settings and Global.game_settings.one_down local f = ((diff_i ^ 2) / (diff_i * 3)) self:_multiply_all_hp(3, 1.75) @@ -962,7 +963,7 @@ local function setup_presets(self) if diff_i == 6 then self.spooc.spooc_sound_events = { detect_stop = "cloaker_presence_stop", detect = "cloaker_presence_loop" } -- cloakers are silent on eclipse - self:_multiply_all_speeds(1.15, 1.075) + self:_multiply_all_speeds(1.12, 1.06) self.tank.move_speed.stand.walk.cbt = { strafe = 196, fwd = 218, bwd = 174 } self.tank.move_speed.stand.run.cbt = self.tank_elite.move_speed.stand.walk.cbt self.tank_elite.move_speed.stand.walk.cbt = { strafe = 216, fwd = 238, bwd = 194 } @@ -974,6 +975,11 @@ local function setup_presets(self) self.zeal_shield.move_speed.crouch.walk.cbt = { strafe = 290, fwd = 320, bwd = 270 } self.zeal_shield.move_speed.crouch.run.cbt = { strafe = 320, fwd = 360, bwd = 290 } end + + -- pro job speed increase + if is_pro then + self:_multiply_all_speeds(1.05, 1.05) + end end CharacterTweakData._set_normal = setup_presets diff --git a/lua/groupaitweakdata.lua b/lua/groupaitweakdata.lua index 015032b..d0ada1e 100644 --- a/lua/groupaitweakdata.lua +++ b/lua/groupaitweakdata.lua @@ -1774,10 +1774,11 @@ function GroupAITweakData:_init_enemy_spawn_groups_level() end Hooks:PostHook(GroupAITweakData, "_init_task_data", "eclipse__init_task_data", function(self, difficulty_index) -- difficulty scaling local f = ((difficulty_index ^ 2) / (difficulty_index * 3)) + local is_pro = Global.game_settings and Global.game_settings.one_down -- Assault Data -- AI Tickrate - self.ai_tickrate = 1 / (50 * math.sqrt(f)) + self.ai_tickrate = 1 / (50 * math.sqrt(f) * ((is_pro and 1.15) or 1)) -- BESIEGE -- @@ -1822,19 +1823,19 @@ Hooks:PostHook(GroupAITweakData, "_init_task_data", "eclipse__init_task_data", f -- GRENADES -- -- global - self.min_grenade_timeout = 20 / f + self.min_grenade_timeout = 20 / f / ((is_pro and 1.25) or 1) self.no_grenade_push_delay = 8 / (math.sqrt(f)) -- flash self.flash_grenade.light_color = Vector3(255, 255, 255) self.flash_grenade.light_range = 500 - self.flash_grenade_timeout = { 30 / f, 40 / f } + self.flash_grenade_timeout = { 30 / f / ((is_pro and 1.25) or 1), 40 / f / ((is_pro and 1.25) or 1) } self.flash_grenade.timer = 2 / f -- smoke & gas - self.smoke_grenade_timeout = { 40 / f, 50 / f } + self.smoke_grenade_timeout = { 40 / f / ((is_pro and 1.25) or 1), 50 / f / ((is_pro and 1.25) or 1) } self.smoke_grenade_lifetime = 10 * f - self.cs_grenade_timeout = { 110 / f, 150 / f } + self.cs_grenade_timeout = { 110 / f / ((is_pro and 1.25) or 1), 150 / f / ((is_pro and 1.25) or 1) } self.cs_grenade_chance_times = { 120, 240 } self.cs_grenade_lifetime = 10 * f diff --git a/lua/playerdamage.lua b/lua/playerdamage.lua index 76956c5..3b40389 100644 --- a/lua/playerdamage.lua +++ b/lua/playerdamage.lua @@ -3,7 +3,7 @@ PlayerDamage._UPPERS_COOLDOWN = 90 -- Pro-Job adds bleedout time and revive health scaling (as well as friendly fire) Hooks:PreHook(PlayerDamage, "replenish", "eclipse_replenish", function(self) - if Global.game_settings.one_down then + if Global.game_settings and Global.game_settings.one_down then self._lives_init = 4 tweak_data.player.damage.DOWNED_TIME = 25 tweak_data.player.damage.DOWNED_TIME_DEC = 10 diff --git a/lua/skilltreetweakdata.lua b/lua/skilltreetweakdata.lua index 1702b83..e49d8fb 100644 --- a/lua/skilltreetweakdata.lua +++ b/lua/skilltreetweakdata.lua @@ -235,8 +235,8 @@ function SkillTreeTweakData:init(tweak_data) self.skills.chameleon.icon_xy = { 6, 3 } -- Athlete - self.skills.sprinter[1].upgrades = { "player_walk_speed_multiplier", "player_movement_speed_multiplier" } - self.skills.sprinter[2].upgrades = { "player_stamina_regen_timer_multiplier", "player_stamina_regen_multiplier" } + self.skills.sprinter[1].upgrades = { "player_stamina_regen_timer_multiplier", "player_stamina_regen_multiplier" } + self.skills.sprinter[2].upgrades = { "player_walk_speed_multiplier", "player_movement_speed_multiplier" } self.skills.sprinter.icon_xy = { 1, 8 } self.skills.sprinter.name_id = "menu_sprinter" self.skills.sprinter.desc_id = "menu_sprinter_desc" From 366a67f15d755886d9d0b426b50a94ca01527c2f Mon Sep 17 00:00:00 2001 From: mrcreepysos Date: Thu, 14 Dec 2023 22:30:02 +0000 Subject: [PATCH 08/15] Code formatting --- lua/charactertweakdata.lua | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/lua/charactertweakdata.lua b/lua/charactertweakdata.lua index 736fcd3..3bfe7c9 100644 --- a/lua/charactertweakdata.lua +++ b/lua/charactertweakdata.lua @@ -25,7 +25,7 @@ function CharacterTweakData:_presets(tweak_data, ...) presets.weapon.base = based_on(presets.weapon.expert, { focus_delay = (is_pro and 0.25) or 0.35, - aim_delay = (is_pro and { 0, 0.1 }) or {0.15, 0.2}, + aim_delay = (is_pro and { 0, 0.1 }) or { 0.15, 0.2 }, melee_dmg = 10, melee_speed = 1, melee_retry_delay = { 1, 2 }, @@ -136,7 +136,7 @@ function CharacterTweakData:_presets(tweak_data, ...) presets.weapon.elite = based_on(presets.weapon.base, { focus_delay = (is_pro and 0.15) or 0.25, - aim_delay = (is_pro and { 0, 0.05 }) or {0.1, 0.1}, + aim_delay = (is_pro and { 0, 0.05 }) or { 0.1, 0.1 }, }) presets.weapon.elite.is_rifle.autofire_rounds = { 1, 1 } @@ -167,7 +167,7 @@ function CharacterTweakData:_presets(tweak_data, ...) }) presets.weapon.elite_shield = based_on(presets.weapon.shield, { focus_delay = (is_pro and 0.15) or 0.25, - aim_delay = (is_pro and { 0, 0.05 }) or {0.1, 0.1}, + aim_delay = (is_pro and { 0, 0.05 }) or { 0.1, 0.1 }, }) presets.weapon.shield.is_smg.autofire_rounds = { 3, 8 } @@ -194,7 +194,7 @@ function CharacterTweakData:_presets(tweak_data, ...) presets.weapon.sniper = based_on(presets.weapon.base, { focus_delay = 0.5, - aim_delay = (is_pro and { 0, 0.15 }) or {0.1, 0.25}, + aim_delay = (is_pro and { 0, 0.15 }) or { 0.1, 0.25 }, range = { close = 5000, optimal = 10000, far = 15000 }, }) @@ -209,7 +209,7 @@ function CharacterTweakData:_presets(tweak_data, ...) presets.weapon.elite_tank = based_on(presets.weapon.tank, { melee_dmg = 20, focus_delay = (is_pro and 0.15) or 0.25, - aim_delay = (is_pro and { 0, 0.05 }) or {0.1, 0.1}, + aim_delay = (is_pro and { 0, 0.05 }) or { 0.1, 0.1 }, }) presets.weapon.tank.is_shotgun_pump.FALLOFF = { From 96e8012601060833650a7b7b89141313af97bdf2 Mon Sep 17 00:00:00 2001 From: nikita <59087849+mrcreepysos@users.noreply.github.com> Date: Fri, 15 Dec 2023 01:34:56 +0300 Subject: [PATCH 09/15] oops --- lua/charactertweakdata.lua | 1 + 1 file changed, 1 insertion(+) diff --git a/lua/charactertweakdata.lua b/lua/charactertweakdata.lua index 3bfe7c9..202bc95 100644 --- a/lua/charactertweakdata.lua +++ b/lua/charactertweakdata.lua @@ -201,6 +201,7 @@ function CharacterTweakData:_presets(tweak_data, ...) presets.weapon.sniper.is_rifle.FALLOFF = { { dmg_mul = 12, r = 0, acc = { 0, 0.5 }, recoil = { 3, 4 }, mode = { 1, 0, 0, 0 } }, { dmg_mul = 12, r = 1000, acc = { 0.5, 1 }, recoil = { 3, 4 }, mode = { 1, 0, 0, 0 } }, + { dmg_mul = 12, r = 4000, acc = { 0.5, 1 }, recoil = { 3, 4 }, mode = { 1, 0, 0, 0 } }, } presets.weapon.tank = based_on(presets.weapon.base, { From f2fe808f8aa05db8b94bd40c1e6031cf345776dd Mon Sep 17 00:00:00 2001 From: gr1n-the-big-floppa <58978237+gr1n-the-big-floppa@users.noreply.github.com> Date: Sat, 16 Dec 2023 09:06:24 +0800 Subject: [PATCH 10/15] Fix Die Hard damage multiplier --- lua/upgradestweakdata.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lua/upgradestweakdata.lua b/lua/upgradestweakdata.lua index 3091697..cd5e43d 100644 --- a/lua/upgradestweakdata.lua +++ b/lua/upgradestweakdata.lua @@ -382,7 +382,7 @@ function UpgradesTweakData:init(tweak_data) self.skill_descs.defense_up.multipro = "50%" -- Die Hard - self.values.player.interacting_damage_multiplier[1] = 0.25 + self.values.player.interacting_damage_multiplier[1] = 0.75 self.skill_descs.sentry_targeting_package.multibasic = "25%" -- Defense Package From 219b9cf3e296544c27631d587b492d6efa1cd8b3 Mon Sep 17 00:00:00 2001 From: nikita <59087849+mrcreepysos@users.noreply.github.com> Date: Sun, 17 Dec 2023 02:48:57 +0300 Subject: [PATCH 11/15] update for SH's new mission script patch system --- lua/elementspawnenemygroup.lua | 10 - lua/missionmanager.lua | 237 ++++++++++---------- req/mission_script/bex.lua | 6 +- req/mission_script/big.lua | 6 +- req/mission_script/bph.lua | 6 +- req/mission_script/des.lua | 6 +- req/mission_script/dinner.lua | 6 +- req/mission_script/election_day_3.lua | 6 +- req/mission_script/election_day_3_skip1.lua | 6 +- req/mission_script/election_day_3_skip2.lua | 6 +- req/mission_script/hox_1.lua | 6 +- req/mission_script/man.lua | 6 +- req/mission_script/pbr2.lua | 6 +- req/mission_script/pent.lua | 6 +- req/mission_script/peta2.lua | 6 +- req/mission_script/pex.lua | 6 +- req/mission_script/red2.lua | 6 +- req/mission_script/run.lua | 6 +- req/mission_script/rvd1.lua | 6 +- req/mission_script/rvd2.lua | 2 +- req/mission_script/spa.lua | 6 +- req/mission_script/vit.lua | 6 +- req/mission_script/wwh.lua | 6 +- 23 files changed, 205 insertions(+), 164 deletions(-) diff --git a/lua/elementspawnenemygroup.lua b/lua/elementspawnenemygroup.lua index ed7bf91..425eb9d 100644 --- a/lua/elementspawnenemygroup.lua +++ b/lua/elementspawnenemygroup.lua @@ -72,9 +72,6 @@ group_mapping.tac_shield_wall_ranged = group_mapping.tac_shield_wall group_mapping.tac_shield_wall_charge = group_mapping.tac_shield_wall group_mapping.tac_tazer_charge = group_mapping.tac_tazer_flanking --- Level specific group mappings to fix issues with nav link access flags -local mission_script_elements = StreamHeist:mission_script_patches() - Hooks:PostHook(ElementSpawnEnemyGroup, "_finalize_values", "sh__finalize_values", function(self) if not self._values.preferred_spawn_groups then return @@ -102,12 +99,5 @@ Hooks:PostHook(ElementSpawnEnemyGroup, "_finalize_values", "sh__finalize_values" end end - local element_mapping = mission_script_elements and mission_script_elements[self._id] - if element_mapping and element_mapping.groups then - for group, enabled in pairs(element_mapping.groups) do - new_groups[group] = enabled or nil - end - end - self._values.preferred_spawn_groups = table.map_keys(new_groups) end) diff --git a/lua/missionmanager.lua b/lua/missionmanager.lua index 759d0c2..a79997e 100644 --- a/lua/missionmanager.lua +++ b/lua/missionmanager.lua @@ -3,137 +3,148 @@ if Global.editor_mode then return end +local is_pro_job = Global.game_settings and Global.game_settings.one_down -- Add custom mission script changes and triggers for specific levels --- Execution of mission scripts can trigger reinforce locations (trigger that has just a name disables previously enabled reinforcement with that id) --- Mission script elements can be disabled or enabled - -Hooks:PreHook(MissionManager, "_activate_mission", "sh__activate_mission", function(self) - local mission_script_elements = StreamHeist:mission_script_patches() - if not mission_script_elements then - return - end - - for element_id, data in pairs(mission_script_elements) do - local element = self:get_element_by_id(element_id) - if not element then - StreamHeist:error(string.format("Mission script element %u could not be found", element_id)) - else - -- Check if this element is supposed to trigger reinforce points - if data.reinforce then - Hooks:PostHook(element, "on_executed", "sh_on_executed_reinforce_" .. element_id, function() - StreamHeist:log(string.format("%s executed, toggled %u reinforce point(s)", element:editor_name(), #data.reinforce)) - for _, v in pairs(data.reinforce) do - managers.groupai:state():set_area_min_police_force(v.name, v.force, v.position) - end - end) - StreamHeist:log(string.format("%s hooked as reinforce trigger for %u area(s)", element:editor_name(), #data.reinforce)) - end +MissionManager.mission_script_patch_funcs = { + values = function (self, element, data) + for k, v in pairs(data) do + element._values[k] = v + StreamHeist:log("%s value \"%s\" has been set to \"%s\"", element:editor_name(), k, tostring(v)) + end + end, - -- Check if this element is supposed to trigger a point of no return - -- thanks redflame - local is_pro_job = Global.game_settings and Global.game_settings.one_down - if is_pro_job then - if data.ponr then - local function set_ponr() - local ponr_timer_balance_mul = data.ponr_player_mul and managers.groupai:state():_get_balancing_multiplier(data.ponr_player_mul) or 1 - managers.groupai:state():set_point_of_no_return_timer(data.ponr * ponr_timer_balance_mul, -1) + on_executed = function (self, element, data) + for _, v in pairs(data) do + local new_element = self:get_element_by_id(v.id) + if new_element then + local val, i = table.find_value(element._values.on_executed, function (val) return val.id == v.id end) + if v.remove then + if val then + table.remove(element._values.on_executed, i) + StreamHeist:log("Removed element %s from on_executed of %s", new_element:editor_name(), element:editor_name()) end - - Hooks:PostHook(element, "on_executed", "eclipse_on_executed_ponr_" .. element_id, set_ponr) - Hooks:PostHook(element, "client_on_executed", "eclipse_client_on_executed_ponr_" .. element_id, set_ponr) + elseif val then + val.delay = v.delay or 0 + val.delay_rand = v.delay_rand or 0 + StreamHeist:log("Modified element %s in on_executed of %s", new_element:editor_name(), element:editor_name()) + else + table.insert(element._values.on_executed, v) + StreamHeist:log("Added element %s to on_executed of %s", new_element:editor_name(), element:editor_name()) end + else + StreamHeist:error("Mission script element %u could not be found", v.id) + end + end + end, - if data.ponr_end then - Hooks:PostHook(element, "on_executed", "eclipse_on_executed_ponr_end_" .. element_id, function() - managers.groupai:state():remove_point_of_no_return_timer(0) - end) - Hooks:PostHook(element, "client_on_executed", "eclipse_client_on_executed_ponr_end_" .. element_id, function() - managers.groupai:state():remove_point_of_no_return_timer(0) - end) - end + pre_func = function (self, element, data) + Hooks:PreHook(element, "on_executed", "sh_on_executed_func_" .. element:id(), data) + StreamHeist:log("%s hooked as pre function call trigger", element:editor_name()) + end, - -- instantly force into post ponr state - if data.set_ponr_state then - if Network:is_server() then - Hooks:PostHook(element, "on_executed", "eclipse_on_executed_ponr_state_" .. element_id, function() - managers.mission:set_ponr_state() - end) - end - end - end + func = function (self, element, data) + Hooks:PostHook(element, "on_executed", "sh_on_executed_func_" .. element:id(), data) + StreamHeist:log("%s hooked as function call trigger", element:editor_name()) + end, - -- Check if this element is supposed to trigger a difficulty change - if data.difficulty then - Hooks:PostHook(element, "on_executed", "sh_on_executed_difficulty_" .. element_id, function() - StreamHeist:log(string.format("%s executed, set difficulty to %.2g", element:editor_name(), data.difficulty)) - managers.groupai:state():set_difficulty(data.difficulty) - end) - StreamHeist:log(string.format("%s hooked as difficulty change trigger", element:editor_name())) + ponr = function (self, element, data) + if is_pro_job then + local function set_ponr() + local ponr_timer_balance_mul = data.player_mul and managers.groupai:state():_get_balancing_multiplier(data.player_mul) or 1 + managers.groupai:state():set_point_of_no_return_timer(data.length * ponr_timer_balance_mul, -1) end - -- Check if this element has custom values set - if data.values then - for k, v in pairs(data.values) do - element._values[k] = v - StreamHeist:log(string.format('%s value "%s" has been set to "%s"', element:editor_name(), k, tostring(v))) + Hooks:PostHook(element, "on_executed", "eclipse_on_executed_ponr_" .. element:id(), set_ponr) + Hooks:PostHook(element, "client_on_executed", "eclipse_client_on_executed_ponr_" .. element:id(), set_ponr) + end + end, - if k == "chance" then - if element.chance_operation_set_chance then - element:chance_operation_set_chance(v) - end - end - end - end + ponr_end = function (self, element, data) + if is_pro_job then + Hooks:PostHook(element, "on_executed", "eclipse_on_executed_ponr_end_" .. element:id(), function() + managers.groupai:state():remove_point_of_no_return_timer(0) + end) + Hooks:PostHook(element, "client_on_executed", "eclipse_client_on_executed_ponr_end_" .. element:id(), function() + managers.groupai:state():remove_point_of_no_return_timer(0) + end) + end + end, - if data.flashlight ~= nil then - Hooks:PostHook(element, "on_executed", "sh_on_executed_func_" .. element_id, function() - StreamHeist:log(string.format("%s executed, changing flashlight state to %s", element:editor_name(), data.flashlight and "true" or "false")) - managers.game_play_central:set_flashlights_on(data.flashlight) + set_ponr_state = function (self, element, data) + if is_pro_job then + if Network:is_server() then + Hooks:PostHook(element, "on_executed", "eclipse_on_executed_ponr_state_" .. element:id(), function() + managers.mission:set_ponr_state() end) - StreamHeist:log(string.format("%s hooked as flashlight state trigger", element:editor_name())) end + end + end, - if data.on_executed then - for _, v in pairs(data.on_executed) do - local new_element = self:get_element_by_id(v.id) - if new_element then - local val, i = table.find_value(element._values.on_executed, function(val) - return val.id == v.id - end) - if v.remove then - if val then - table.remove(element._values.on_executed, i) - StreamHeist:log(string.format("Removed element %s from on_executed of %s", new_element:editor_name(), element:editor_name())) - end - elseif val then - val.delay = v.delay or 0 - val.delay_rand = v.delay_rand or 0 - StreamHeist:log(string.format("Modified element %s in on_executed of %s", new_element:editor_name(), element:editor_name())) - else - table.insert(element._values.on_executed, v) - StreamHeist:log(string.format("Added element %s to on_executed of %s", new_element:editor_name(), element:editor_name())) - end - else - StreamHeist:error(string.format("Mission script element %u could not be found", v.id)) - end - end + spawn_instigator_ids = function (self, element, data) + for _, v in pairs(data) do + local new_element = self:get_element_by_id(v) + if new_element then + table.insert(element._values.spawn_instigator_ids, v) + StreamHeist:log(string.format("Added element %s to spawn_instigator_ids of %s", new_element:editor_name(), element:editor_name())) + else + StreamHeist:error(string.format("Mission script element %u could not be found", v)) end + end + end, - if data.spawn_instigator_ids then - for _, v in pairs(data.spawn_instigator_ids) do - local new_element = self:get_element_by_id(v) - if new_element then - table.insert(element._values.spawn_instigator_ids, v) - StreamHeist:log(string.format("Added element %s to spawn_instigator_ids of %s", new_element:editor_name(), element:editor_name())) - else - StreamHeist:error(string.format("Mission script element %u could not be found", v)) - end - end + reinforce = function (self, element, data) + Hooks:PostHook(element, "on_executed", "sh_on_executed_reinforce_" .. element:id(), function () + StreamHeist:log("%s executed, toggled %u reinforce point(s)", element:editor_name(), #data) + for _, v in pairs(data) do + managers.groupai:state():set_area_min_police_force(v.name, v.force, v.position) end + end) + StreamHeist:log("%s hooked as reinforce trigger for %u area(s)", element:editor_name(), #data) + end, + + difficulty = function (self, element, data) + Hooks:PostHook(element, "on_executed", "sh_on_executed_difficulty_" .. element:id(), function () + StreamHeist:log("%s executed, set difficulty to %.2g", element:editor_name(), data) + managers.groupai:state():set_difficulty(data) + end) + StreamHeist:log("%s hooked as difficulty change trigger", element:editor_name()) + end, + + flashlight = function (self, element, data) + Hooks:PostHook(element, "on_executed", "sh_on_executed_func_" .. element:id(), function () + StreamHeist:log("%s executed, changing flashlight state to %s", element:editor_name(), data and "true" or "false") + managers.game_play_central:set_flashlights_on(data) + end) + StreamHeist:log("%s hooked as flashlight state trigger", element:editor_name()) + end, + + groups = function (self, element, data) + local new_groups = table.list_to_set(element._values.preferred_spawn_groups) + for group_name, enabled in pairs(data) do + new_groups[group_name] = enabled or nil + end + element._values.preferred_spawn_groups = table.map_keys(new_groups) + StreamHeist:log("Changed %u preferred group(s) of %s", table.size(data), element:editor_name()) + end +} + +Hooks:PreHook(MissionManager, "_activate_mission", "sh__activate_mission", function (self) + local mission_script_elements = StreamHeist:mission_script_patches() + if not mission_script_elements then + return + end - if data.func then - Hooks:PostHook(element, "on_executed", "sh_on_executed_func_" .. element_id, data.func) - StreamHeist:log(string.format("%s hooked as function call trigger", element:editor_name())) + for element_id, data in pairs(mission_script_elements) do + local element = self:get_element_by_id(element_id) + if not element then + StreamHeist:error("Mission script element %u could not be found", element_id) + else + for patch_name, patch_data in pairs(data) do + if self.mission_script_patch_funcs[patch_name] then + self.mission_script_patch_funcs[patch_name](self, element, patch_data) + else + StreamHeist:warn("MissionManager.mission_script_patch_funcs.%s does not exist", patch_name) + end end end end diff --git a/req/mission_script/bex.lua b/req/mission_script/bex.lua index 7f4d267..cf5d121 100644 --- a/req/mission_script/bex.lua +++ b/req/mission_script/bex.lua @@ -16,8 +16,10 @@ local suits = { return { [101829] = { - ponr = 240, - ponr_player_mul = {2, 1.5, 1.25, 1} + ponr = { + length = 240, + player_mul = {2, 1.5, 1.25, 1} + } }, -- disable guaranteed reenforce in one of the server rooms, the others dont have reenforce, why this one ? [101835] = { -- point area min police force 2 diff --git a/req/mission_script/big.lua b/req/mission_script/big.lua index 8ee32d9..083df2e 100644 --- a/req/mission_script/big.lua +++ b/req/mission_script/big.lua @@ -1,7 +1,9 @@ return { [100809] = { - ponr = 180, - ponr_player_mul = {2, 1.25, 1, 1} + ponr = { + length = 180, + player_mul = {2, 1.25, 1., 1} + } }, [105844] = { reinforce = { diff --git a/req/mission_script/bph.lua b/req/mission_script/bph.lua index d20b2f2..95cb579 100644 --- a/req/mission_script/bph.lua +++ b/req/mission_script/bph.lua @@ -11,8 +11,10 @@ return { }, }, [100268] = { - ponr = 300, - ponr_player_mul = {1.25, 1, 1, 1} + ponr = { + length = 300, + player_mul = {1.25, 1, 1, 1} + } }, -- longer spawnpoint (those on top of the player) delays at the starting sequence [100741] = { diff --git a/req/mission_script/des.lua b/req/mission_script/des.lua index 4b5e8e9..decc4d7 100644 --- a/req/mission_script/des.lua +++ b/req/mission_script/des.lua @@ -15,8 +15,10 @@ return { } }, -- add point of no return - ponr = 300, - ponr_player_mul = {1.6, 1.2, 1, 0.8} + ponr = { + length = 300, + player_mul = {1.6, 1.2, 1, 0.8} + } }, -- slow down the spawnpoints in weaponlab [107981] = { diff --git a/req/mission_script/dinner.lua b/req/mission_script/dinner.lua index 6ff47f9..48e3e61 100644 --- a/req/mission_script/dinner.lua +++ b/req/mission_script/dinner.lua @@ -5,7 +5,9 @@ return { } }, [101061] = { - ponr = 200, - ponr_player_mul = {1.5, 1.25, 1, 1} + ponr = { + length = 200, + player_mul = {1.5, 1.25, 1, 1} + } } } diff --git a/req/mission_script/election_day_3.lua b/req/mission_script/election_day_3.lua index 4898b54..7b6bd30 100644 --- a/req/mission_script/election_day_3.lua +++ b/req/mission_script/election_day_3.lua @@ -16,8 +16,10 @@ return { } }, [104782] = { - ponr = 420, - ponr_player_mul = {1.5, 1.25, 1, 1} + ponr = { + length = 420, + player_mul = {1.5, 1.25, 1, 1} + } }, [103702] = { values = { diff --git a/req/mission_script/election_day_3_skip1.lua b/req/mission_script/election_day_3_skip1.lua index 4898b54..7b6bd30 100644 --- a/req/mission_script/election_day_3_skip1.lua +++ b/req/mission_script/election_day_3_skip1.lua @@ -16,8 +16,10 @@ return { } }, [104782] = { - ponr = 420, - ponr_player_mul = {1.5, 1.25, 1, 1} + ponr = { + length = 420, + player_mul = {1.5, 1.25, 1, 1} + } }, [103702] = { values = { diff --git a/req/mission_script/election_day_3_skip2.lua b/req/mission_script/election_day_3_skip2.lua index 4898b54..7b6bd30 100644 --- a/req/mission_script/election_day_3_skip2.lua +++ b/req/mission_script/election_day_3_skip2.lua @@ -16,8 +16,10 @@ return { } }, [104782] = { - ponr = 420, - ponr_player_mul = {1.5, 1.25, 1, 1} + ponr = { + length = 420, + player_mul = {1.5, 1.25, 1, 1} + } }, [103702] = { values = { diff --git a/req/mission_script/hox_1.lua b/req/mission_script/hox_1.lua index 46dba24..90e83f6 100644 --- a/req/mission_script/hox_1.lua +++ b/req/mission_script/hox_1.lua @@ -1,8 +1,10 @@ return { -- add point of no return [100580] = { - ponr = 600, - ponr_player_mul = {1.8, 1.5, 1.3, 1.2} + ponr = { + length = 600, + player_mul = {1.8, 1.5, 1.3, 1.2} + }, }, [100124] = { values = { diff --git a/req/mission_script/man.lua b/req/mission_script/man.lua index c53a0f2..e60b1c7 100644 --- a/req/mission_script/man.lua +++ b/req/mission_script/man.lua @@ -1,7 +1,9 @@ return { [101433] = { - ponr = 60, - ponr_player_mul = {1.25, 1, 1, 0.75} + ponr = { + length = 60, + player_mul = {1.25, 1, 1, 0.75} + } }, -- Give saw to all players [101865] = { diff --git a/req/mission_script/pbr2.lua b/req/mission_script/pbr2.lua index 428f07a..9e418ed 100644 --- a/req/mission_script/pbr2.lua +++ b/req/mission_script/pbr2.lua @@ -5,8 +5,10 @@ return { } }, [100980] = { - ponr = 60, - ponr_player_mul = {1.67, 1.34, 1, 1} + ponr = { + length = 60, + player_mul = {1.67, 1.34, 1, 1} + } }, -- slow down a bunch of ground level spawnpoints [100411] = { diff --git a/req/mission_script/pent.lua b/req/mission_script/pent.lua index 07f3ed8..5da5e71 100644 --- a/req/mission_script/pent.lua +++ b/req/mission_script/pent.lua @@ -21,7 +21,9 @@ return { } }, [101607] = { - ponr = 180, - ponr_player_mul = {1.33, 1.15, 1, 0.85} + ponr = { + length = 180, + player_mul = {1.33, 1.15, 1, 0.85} + } } } \ No newline at end of file diff --git a/req/mission_script/peta2.lua b/req/mission_script/peta2.lua index 7e1271a..2b59c2c 100644 --- a/req/mission_script/peta2.lua +++ b/req/mission_script/peta2.lua @@ -33,8 +33,10 @@ return { }, -- add point of no return [100580] = { - ponr = 120, - ponr_player_mul = {2, 1.25, 1, 1} + ponr = { + length = 120, + player_mul = {2, 1.25, 1, 1} + } }, [101707] = { values = { diff --git a/req/mission_script/pex.lua b/req/mission_script/pex.lua index dd5a0cb..bda1770 100644 --- a/req/mission_script/pex.lua +++ b/req/mission_script/pex.lua @@ -1,6 +1,8 @@ return { [101829] = { - ponr = 300, - ponr_player_mul = {1.5, 1.25, 1, 1} + ponr = { + length = 300, + player_mul = {1.5, 1.25, 1, 1} + } } } diff --git a/req/mission_script/red2.lua b/req/mission_script/red2.lua index 9c05949..0f743d6 100644 --- a/req/mission_script/red2.lua +++ b/req/mission_script/red2.lua @@ -7,8 +7,10 @@ return { }, -- add point of no return [103334] = { - ponr = 150, - ponr_player_mul = {1.1, 0.9, 0.7, 0.5} + ponr = { + length = 150, + player_mul = {1.1, 0.9, 0.7, 0.5} + } }, -- remove a few cancer dozers [103603] = { diff --git a/req/mission_script/run.lua b/req/mission_script/run.lua index 18fc8b6..e1499a9 100644 --- a/req/mission_script/run.lua +++ b/req/mission_script/run.lua @@ -8,8 +8,10 @@ end return { [101356] = { - ponr = 480, - ponr_player_mul = {2, 1.5, 1.25, 1} + ponr = { + length = 480, + player_mul = {2, 1.5, 1.25, 1} + } }, -- ovk145-alike dozer spawn on armitage avenue [103592] = { diff --git a/req/mission_script/rvd1.lua b/req/mission_script/rvd1.lua index 5fe7d27..a769f48 100644 --- a/req/mission_script/rvd1.lua +++ b/req/mission_script/rvd1.lua @@ -1,7 +1,9 @@ return { [100115] = { - ponr = 900, - ponr_player_mul = {2, 1.25, 1, 1} + ponr = { + length = 900, + player_mul = {2, 1.25, 1, 1} + } }, -- slow down a few spawnpoints that are close to the warehouse [100019] = { diff --git a/req/mission_script/rvd2.lua b/req/mission_script/rvd2.lua index f661c44..d4888ee 100644 --- a/req/mission_script/rvd2.lua +++ b/req/mission_script/rvd2.lua @@ -14,7 +14,7 @@ return { enabled = false } }, - -- instantly enter point of no return upon securing all bags + -- instantly enter full force onslaught upon securing all bags [100884] = { set_ponr_state = true } diff --git a/req/mission_script/spa.lua b/req/mission_script/spa.lua index 2535e0e..aaff64c 100644 --- a/req/mission_script/spa.lua +++ b/req/mission_script/spa.lua @@ -1,8 +1,10 @@ return { -- add point of no return and disable endless assault [100875] = { - ponr = 240, - ponr_player_mul = {1.5, 1, 0.85, 0.75} + ponr = { + length = 240, + player_mul = {1.5, 1, 0.85, 0.75} + }, }, [100877] = { values = { diff --git a/req/mission_script/vit.lua b/req/mission_script/vit.lua index fafe79e..f2184c1 100644 --- a/req/mission_script/vit.lua +++ b/req/mission_script/vit.lua @@ -11,8 +11,10 @@ return { } }, [100022] = { - ponr = 1500, - ponr_player_mul = {3.5, 2.5, 2.25, 2} + ponr = { + length = 3000, + player_mul = {1.75, 1.25, 1.125, 1} + } }, [103360] = { values = { diff --git a/req/mission_script/wwh.lua b/req/mission_script/wwh.lua index f5e1c96..181b9cf 100644 --- a/req/mission_script/wwh.lua +++ b/req/mission_script/wwh.lua @@ -6,8 +6,10 @@ return { } }, [100945] = { - ponr = 900, - ponr_player_mul = {2, 1.25, 1, 0.8} + ponr = { + length = 900, + player_mul = {2, 1.25, 1, 0.8} + } }, -- slow down a few spawnpoints [100605] = { From 2113e2d34d31d536335917a9ef83b368de8dc81a Mon Sep 17 00:00:00 2001 From: mrcreepysos Date: Sat, 16 Dec 2023 23:49:27 +0000 Subject: [PATCH 12/15] Code formatting --- lua/missionmanager.lua | 42 ++++++++++++++++++++++-------------------- 1 file changed, 22 insertions(+), 20 deletions(-) diff --git a/lua/missionmanager.lua b/lua/missionmanager.lua index a79997e..fb108a4 100644 --- a/lua/missionmanager.lua +++ b/lua/missionmanager.lua @@ -6,18 +6,20 @@ end local is_pro_job = Global.game_settings and Global.game_settings.one_down -- Add custom mission script changes and triggers for specific levels MissionManager.mission_script_patch_funcs = { - values = function (self, element, data) + values = function(self, element, data) for k, v in pairs(data) do element._values[k] = v - StreamHeist:log("%s value \"%s\" has been set to \"%s\"", element:editor_name(), k, tostring(v)) + StreamHeist:log('%s value "%s" has been set to "%s"', element:editor_name(), k, tostring(v)) end end, - on_executed = function (self, element, data) + on_executed = function(self, element, data) for _, v in pairs(data) do local new_element = self:get_element_by_id(v.id) if new_element then - local val, i = table.find_value(element._values.on_executed, function (val) return val.id == v.id end) + local val, i = table.find_value(element._values.on_executed, function(val) + return val.id == v.id + end) if v.remove then if val then table.remove(element._values.on_executed, i) @@ -37,17 +39,17 @@ MissionManager.mission_script_patch_funcs = { end end, - pre_func = function (self, element, data) + pre_func = function(self, element, data) Hooks:PreHook(element, "on_executed", "sh_on_executed_func_" .. element:id(), data) StreamHeist:log("%s hooked as pre function call trigger", element:editor_name()) end, - func = function (self, element, data) + func = function(self, element, data) Hooks:PostHook(element, "on_executed", "sh_on_executed_func_" .. element:id(), data) StreamHeist:log("%s hooked as function call trigger", element:editor_name()) end, - ponr = function (self, element, data) + ponr = function(self, element, data) if is_pro_job then local function set_ponr() local ponr_timer_balance_mul = data.player_mul and managers.groupai:state():_get_balancing_multiplier(data.player_mul) or 1 @@ -59,18 +61,18 @@ MissionManager.mission_script_patch_funcs = { end end, - ponr_end = function (self, element, data) + ponr_end = function(self, element, data) if is_pro_job then Hooks:PostHook(element, "on_executed", "eclipse_on_executed_ponr_end_" .. element:id(), function() managers.groupai:state():remove_point_of_no_return_timer(0) end) Hooks:PostHook(element, "client_on_executed", "eclipse_client_on_executed_ponr_end_" .. element:id(), function() managers.groupai:state():remove_point_of_no_return_timer(0) - end) + end) end end, - set_ponr_state = function (self, element, data) + set_ponr_state = function(self, element, data) if is_pro_job then if Network:is_server() then Hooks:PostHook(element, "on_executed", "eclipse_on_executed_ponr_state_" .. element:id(), function() @@ -80,7 +82,7 @@ MissionManager.mission_script_patch_funcs = { end end, - spawn_instigator_ids = function (self, element, data) + spawn_instigator_ids = function(self, element, data) for _, v in pairs(data) do local new_element = self:get_element_by_id(v) if new_element then @@ -92,8 +94,8 @@ MissionManager.mission_script_patch_funcs = { end end, - reinforce = function (self, element, data) - Hooks:PostHook(element, "on_executed", "sh_on_executed_reinforce_" .. element:id(), function () + reinforce = function(self, element, data) + Hooks:PostHook(element, "on_executed", "sh_on_executed_reinforce_" .. element:id(), function() StreamHeist:log("%s executed, toggled %u reinforce point(s)", element:editor_name(), #data) for _, v in pairs(data) do managers.groupai:state():set_area_min_police_force(v.name, v.force, v.position) @@ -102,33 +104,33 @@ MissionManager.mission_script_patch_funcs = { StreamHeist:log("%s hooked as reinforce trigger for %u area(s)", element:editor_name(), #data) end, - difficulty = function (self, element, data) - Hooks:PostHook(element, "on_executed", "sh_on_executed_difficulty_" .. element:id(), function () + difficulty = function(self, element, data) + Hooks:PostHook(element, "on_executed", "sh_on_executed_difficulty_" .. element:id(), function() StreamHeist:log("%s executed, set difficulty to %.2g", element:editor_name(), data) managers.groupai:state():set_difficulty(data) end) StreamHeist:log("%s hooked as difficulty change trigger", element:editor_name()) end, - flashlight = function (self, element, data) - Hooks:PostHook(element, "on_executed", "sh_on_executed_func_" .. element:id(), function () + flashlight = function(self, element, data) + Hooks:PostHook(element, "on_executed", "sh_on_executed_func_" .. element:id(), function() StreamHeist:log("%s executed, changing flashlight state to %s", element:editor_name(), data and "true" or "false") managers.game_play_central:set_flashlights_on(data) end) StreamHeist:log("%s hooked as flashlight state trigger", element:editor_name()) end, - groups = function (self, element, data) + groups = function(self, element, data) local new_groups = table.list_to_set(element._values.preferred_spawn_groups) for group_name, enabled in pairs(data) do new_groups[group_name] = enabled or nil end element._values.preferred_spawn_groups = table.map_keys(new_groups) StreamHeist:log("Changed %u preferred group(s) of %s", table.size(data), element:editor_name()) - end + end, } -Hooks:PreHook(MissionManager, "_activate_mission", "sh__activate_mission", function (self) +Hooks:PreHook(MissionManager, "_activate_mission", "sh__activate_mission", function(self) local mission_script_elements = StreamHeist:mission_script_patches() if not mission_script_elements then return From 19bd31fca529ccd24f2a8bb689e0be94b879c342 Mon Sep 17 00:00:00 2001 From: nikita <59087849+mrcreepysos@users.noreply.github.com> Date: Sun, 17 Dec 2023 02:51:55 +0300 Subject: [PATCH 13/15] missed'em --- req/mission_script/firestarter_2.lua | 6 ++++-- req/mission_script/flat.lua | 5 ++++- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/req/mission_script/firestarter_2.lua b/req/mission_script/firestarter_2.lua index 3be02c1..7a6bca9 100644 --- a/req/mission_script/firestarter_2.lua +++ b/req/mission_script/firestarter_2.lua @@ -1,6 +1,8 @@ return { [107196] = { - ponr = 60, - ponr_player_mul = {2.5, 1.5, 1, 1} + ponr = { + length = 60, + player_mul = {2.5, 1.5, 1, 1} + } } } diff --git a/req/mission_script/flat.lua b/req/mission_script/flat.lua index 48c5a88..4a501d0 100644 --- a/req/mission_script/flat.lua +++ b/req/mission_script/flat.lua @@ -179,6 +179,9 @@ return { }, -- add point of no return [101016] = { - ponr = 180 + ponr = { + length = 180, + player_mul = {1.33, 1.167, 1, 1} + } } } From e85f14fd9c05a559891f4172ef97e50f91f747d6 Mon Sep 17 00:00:00 2001 From: nikita <59087849+mrcreepysos@users.noreply.github.com> Date: Sun, 17 Dec 2023 03:02:35 +0300 Subject: [PATCH 14/15] more scripting updates + cool stuff from ASS --- req/mission_script/alex_1.lua | 4 +-- req/mission_script/branchbank.lua | 4 +-- req/mission_script/dah.lua | 43 +++++++++++++++++++++++++++++++ req/mission_script/man.lua | 10 ++++--- req/mission_script/red2.lua | 4 +-- req/mission_script/run.lua | 8 +++--- 6 files changed, 56 insertions(+), 17 deletions(-) diff --git a/req/mission_script/alex_1.lua b/req/mission_script/alex_1.lua index 4f77520..6711b8f 100644 --- a/req/mission_script/alex_1.lua +++ b/req/mission_script/alex_1.lua @@ -22,9 +22,7 @@ return { }, -- added chance to cook each time the evaluation runs and fails, vanilla is 10% [100723] = { - values = { - chance = 20, - }, + chance = 20 }, -- waiter ! waiter ! more gangsters please ! [101520] = { diff --git a/req/mission_script/branchbank.lua b/req/mission_script/branchbank.lua index ad8e4a2..c0bef69 100644 --- a/req/mission_script/branchbank.lua +++ b/req/mission_script/branchbank.lua @@ -1,9 +1,7 @@ return { -- Special ambush chance increase [103072] = { - values = { - chance = 75 - } + chance = 75 }, [105563] = { values = { diff --git a/req/mission_script/dah.lua b/req/mission_script/dah.lua index e372054..b8f7fd1 100644 --- a/req/mission_script/dah.lua +++ b/req/mission_script/dah.lua @@ -7,6 +7,49 @@ return { [100614] = { set_ponr_state = true }, + [103969] = { + reinforce = { + { + name = "atrium1", + force = 2, + position = Vector3(-4000, -2200, 750), + }, + { + name = "atrium2", + force = 2, + position = Vector3(-2750, -2200, 750), + }, + { + name = "atrium3", + force = 2, + position = Vector3(-2750, -1000, 750), + }, + { + name = "atrium4", + force = 2, + position = Vector3(-4000, -1000, 750), + }, + }, + }, + [101342] = { + reinforce = { + { + name = "vault_entrance", + force = 3, + position = Vector3(-3250, -2850, 0), + }, + { + name = "atrium_lower1", + force = 3, + position = Vector3(-3800, -800, 400), + }, + { + name = "atrium_lower2", + force = 3, + position = Vector3(-2700, -800, 400), + }, + }, + }, -- slow down vault spawnpoints [104822] = { values = { diff --git a/req/mission_script/man.lua b/req/mission_script/man.lua index e60b1c7..774f181 100644 --- a/req/mission_script/man.lua +++ b/req/mission_script/man.lua @@ -11,6 +11,12 @@ return { managers.network:session():send_to_peers_synched("give_equipment", self._values.equipment, self._values.amount) end }, + -- this disables multiple spawn points when limo lands on the balcony, which is weird, to say the least + [101898] = { + values = { + enabled = false, + }, + }, -- No code chance increase on fail or knockout [102865] = { on_executed = { @@ -35,9 +41,7 @@ return { }, -- Code chance increase amount [102887] = { - values = { - chance = 10 - } + chance = 10 }, -- Faint duration increase [102860] = { diff --git a/req/mission_script/red2.lua b/req/mission_script/red2.lua index 0f743d6..6fa199e 100644 --- a/req/mission_script/red2.lua +++ b/req/mission_script/red2.lua @@ -31,9 +31,7 @@ return { enemy = Idstring("units/payday2/characters/ene_tazer_1/ene_tazer_1") }, [104000] = { - values = { - chance = 1 - } + chance = 100 }, [100225] = { values = { diff --git a/req/mission_script/run.lua b/req/mission_script/run.lua index e1499a9..f168675 100644 --- a/req/mission_script/run.lua +++ b/req/mission_script/run.lua @@ -18,8 +18,8 @@ return { values = { enabled = true, difficulty_overkill_145 = true, -- ovk and below filter - chance = 100 - } + }, + chance = 100 }, [103590] = { values = { @@ -27,9 +27,7 @@ return { } }, [103593] = { - values = { - chance = 100 - } + chance = 100 }, [100036] = { spawn_instigator_ids = { From 8d6e6ef3cc1d4bba6699ff0d20efed72793e4342 Mon Sep 17 00:00:00 2001 From: nikita <59087849+mrcreepysos@users.noreply.github.com> Date: Fri, 22 Dec 2023 00:49:01 +0300 Subject: [PATCH 15/15] 5.4.4 bump --- meta.json | 2 +- mod.txt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/meta.json b/meta.json index f7dc0e3..ba2f513 100644 --- a/meta.json +++ b/meta.json @@ -1,7 +1,7 @@ [ { "ident": "eclipse_difficulty", - "version": "5.4.3.2", + "version": "5.4.4", "patchnotes_url": "https://github.com/mrcreepysos/Eclipse-Difficulty/commits/main", "download_url": "https://github.com/mrcreepysos/Eclipse-Difficulty/archive/refs/heads/main.zip" } diff --git a/mod.txt b/mod.txt index c520455..720c27f 100644 --- a/mod.txt +++ b/mod.txt @@ -5,7 +5,7 @@ "contact" : "nikita_was_taken on Discord", "image" : "mod.png", "blt_version" : 2, - "version" : "5.4.3.2", + "version" : "5.4.4", "updates" : [{ "identifier" : "eclipse_difficulty", "host" : { "meta" : "https://raw.githubusercontent.com/mrcreepysos/Eclipse-Difficulty/main/meta.json" }