В этой теме пишем всё что знаем о хитростях прохождения ОП-2.
Примеры смотрим ниже... P.S. Ребята! Это не стол заказов мне в личку и не тема модмейкера. Спрашивать можно, но только здесь. Иначе, на ответ не надейтесь. Помогайте друг другу. Пишите всё что пробовали и знаете сами. Дополняйте, поправляйте уже существующие правки. Что бы не дублировать правки здесь, схожие правики найдёте в теме "Мастерская" раздела НС+ДМХ.
gamedata.db0, gamedata.db1: папка levels; gamedata.db2: папки levels и textures\wpn; gamedata.db3, gamedata.db4, gamedata.db5: папка textures, кроме файлов иконок и textures\wpn; gamedata.db6: папки ai, anims, meshes, shaders и все корневые файлы кроме particles.xr; gamedata.db7: папка sounds; gamedata.db8: прицелы для широкоформатов; gamedata.db9: текстуры иконок и все остальные (в т.ч. "cоnfig" и "scripts") папки и файлы;-- файл "actor.ltx" лежит в архиве "gamedata.db7"! gamedata.dba: текущий фикс. (пока пусто)
Предисловие для понимания: Игра всегда берёт за приоритет папку gamedata, а затем gamedata.db-архив. Попросту говоря. Игра сначала проверяет есть ли папка gamedata. Если есть, тогда она ссылается на неё и её содержимое. Если папки gamedata нет или в этой папке нет нужного файла, тогда игра ссылается на .db-архив.
Пример: Установили игру с запакованной gamedata-ой. Теперь нам нужно сделать правку на отключение античита. Что мы делаем? Заходим в каталог игры, создаём в ней папку с названием gamedata. Возьмём для примера второй способ. Во тором способе нам нужны файлы по пути \gamedata\config\ и \gamedata\config\creatures\ Значит что? В созданной нами ранее папке damedata создаём папки с соответствующими путями для требуемых файлов. А значит создаём в папке gamedata папку config и в папку config для правки помещаем файл system.ltx, далее в этой же папке config создаём папку creatures и в эту папку creatures помещяем файл actor.ltx Всё. Теперь у нас всё готово для правки. Что у нас получилось? Когда мы запустим игру, то игра будет ссылаться на наши правленные файлы system.ltx и actor.ltx, а не на те, что в gamedata.db... Аналогично и с остальными правками. Только учитываем тот момент, что некоторые файлы у нас уже могут быть из других правок. Тогда мы не новый кидаем, а редактируем существующий. P.S. Игру распаковываем отдельно, не в корень игры! Затем берём лишь нужные файлы для правок. Распаковщик .db-архивов, Упаковщик .db-архивов, Упаковщик gamedata.
Способ первый: В ...\gamedata\scripts\amk.script поставить два тире перед строчкой xrs_utils.getStartTime(StartTime), в ...\gamedata\scripts\bind_stalker.script поставить два тире перед строчкой archievements.has_cheated_jump() или просто удалить эти строки.
Способ второй: Идём в \gamedata\config\system.ltx и меняем #include "creatures\actor.ltx" на например #include "creatures\actor1.ltx" и соответственно сам \gamedata\config\creatures\actor.ltx меняем на actor1.ltx ...
Что бы не произошел спавн зомби в тоннеле по квесту Волка на бритву и Фаната на лапы Гигантов делаем следущее: Идём ...gamedata\config\gameplay\info_buusty.xml При взятии Бритвы:
function dialog_is_enough(portion, count) local pname = "" for i=1,count do pname = portion..tostring(i) if not has_alife_info(pname) then return false end end return true end
отредактировать в такой вид:
Код
function dialog_is_enough(portion, count) return false end
alen-fantom.
...\gamedata\scripts\art_hit.script Часть кода для примера:
Способ второй (более практичный): Идём: ...\gamedata\scripts\bind_stalker.script
Код
function actor_binder:on_item_take (obj) ... art_hit.hit_by_art(obj)
и перед
Код
art_hit.hit_by_art(obj)
поставить два тире или удалить эту строку. alen-fantom.
Идём: ...\gamedata\scripts\drrr.script Находим:
Код
function do_vbr() sim = alife() actor = db.actor weight_max = weight_normal+add_weight() if weight_max > 350 then weight_max = 350 end if sim and actor then ...
и
Код
function weight_ok() weight_max = weight_normal+add_weight() if weight_max > 350 then weight_max = 350 end calc_inventory_weight() return weight_rukzak <= weight_max end
Правим строки в обеих функциях:
Код
if weight_max > 350 then weight_max = 350 end
Вместо "350" (это вес после которого рвётся рюкзак) ставим число превышающее ваш переносимый вес.
Идём: ...gamedata\config\ui\maingame.xml (maingame_16.xml для широкоформатных мониторов) находим:
x="303" - координата по оси х (горизонталь); y="745" - координата по оси у (вертикаль); отсчёт начинается с левого верхнего угла монитора (экрана).
Столкнулся с такой бедой. Взял у Свиблова задание "Выкрасть ПКМ" и решил одновременно выполнить квест Сидора на перегон Багги. Но тут есть проблема. В ходе перестрелки по квесту Свиблова взрывается Багги которая стоит в неподходящем месте. Что делать теперь? Идём ...\gamedata\config\models\vehicles\veh_baggi.ltx Находим иммунитет машины:
- повреждения от пуль правим значение = 0.09 этой строки на = 0 Я конечно на всяк случай себе поправил все значения и от других повреждений. Должно это выглядеть так:
Если хотим назначить своё время на варку арта и вероятность вырождения оного, тогда: идём ...\gamedata\scripts\amk_mod.script , находим нужный арт или редактируем все (для примера возьмём рецепт Гусеницы:
v_virogd = 25 - вероятность вырождения в процентах
Идём ...\gamedata\config\misc\task_manager.ltx и во всех заданиях или в конкретно каком-то
Код
[tm_defend_camp_1] type = defend_lager community = actor ;init_condition = {=actor_on_level(l04_darkvalley) =gulag_state(val_smart_bandit_2:1)} text = tm_defend_camp_1_text description = tm_defend_camp_1_descr parent = trader target = val_smart_bandit_3 reward_reputation = +35 reward_relation = dolg, +50 reward_rank = 1 reward_item = af_fireball, grenade_he, grenade_7643b time = 1209600
комментируем или удаляем строку
Код
time = 1209600
Идём: ...\gamedata\scripts\repair_check.script
Код
-- износ (состояние) задается в диапазоне: 0=полностью убитый, 1=полностью исправный local rep_cond_wpn = 0.7 -- минимальное состояние ствола, которое чинится ремкомплектом local rep_cond_armor = 0.75 -- минимальное состояние брони, которое чинится ремкомплектом local min_cond_item = 0.2 -- минимальное состояние предмета, который может починить ремонтник (ниже не ремонтируется) local min_cond_parts = 0.1 -- минимальное состояние ствола на запчасти (ниже не принимается) local cond_ok = 0.99 -- минимальное состояние исправного предмета local cond_double = 0.4 -- минимальное состояние предмета, ниже которого требуется двойной комплект предметов, стволов и денег local rep_percent = 0.1 -- на сколько чинится предмет одним ремкомплектом local money_koef = 0.5 -- множитель денег на ремонт local ammo, item, cond, count, have, slot, parts, pay = "", 0, 0, 0, 0, 0, {}, 0
пример:
Код
-- износ (состояние) задается в диапазоне: 0=полностью убитый, 1=полностью исправный local rep_cond_wpn = 0.0 -- минимальное состояние ствола, которое чинится ремкомплектом local rep_cond_armor = 0.0 -- минимальное состояние брони, которое чинится ремкомплектом local min_cond_item = 0.0 -- минимальное состояние предмета, который может починить ремонтник (ниже не ремонтируется) local min_cond_parts = 0.0001 -- минимальное состояние ствола на запчасти (ниже не принимается) local cond_ok = 0.99 -- минимальное состояние исправного предмета local cond_double = 0.02 -- минимальное состояние предмета, ниже которого требуется двойной комплект предметов, стволов и денег local rep_percent = 0.5 -- на сколько чинится предмет одним ремкомплектом local money_koef = 0.3 -- множитель денег на ремонт local ammo, item, cond, count, have, slot, parts, pay = "", 0, 0, 0, 0, 0, {}, 0
Думаю всё понятно. P.S. Здесь же можно и изменить или убрать предмет (Чёрная энергия) для ремонта у торговца:
Код
-- предметы, нужные для ремонта ствола и брони local parts_wpn = {"art_acumm"} local parts_armor = {"art_acumm"}
if not danger.actor_not_in_danger() then amk.spawn_item_in_inv(section) return false end
Для ремонта холодного оружия:
Код
if db.actor:active_slot() ~= 1 and db.actor:active_slot() ~= 2 then repair_error("Можно отремонтировать только огнестрельное оружие.", section) return false end
Для ремонта сильно поврежденного оружия
Код
if cond < rep_cond_wpn then repair_error("Оружие слишком сильно повреждено. Ремкомплектом не починить.", section) return false end
Для ремонта сильно поврежденной брони:
Код
if cond < rep_cond_armor then repair_error("Броня слишком сильно повреждена. Ремкомплектом не починить.", section) return false end
Ещё как вариант опустив выше написанное: ...\gamedata\scripts\kostya_dialog.script
Код
-- Износ холодного оружия if active_slot == 0 then wpn:set_condition(wpn:condition()-level.get_game_difficulty()*0.001) -- "0.001" - или добавить пару нолей или просто поставить 0 - не изнашивается. end
Идём ...\gamedata\config\creatures\m_...ltx и все значения строки
Код
Spawn_Inventory_Item_Probability = 0.2
меняем на = 1.0
Как показала практика, у многих игроков ГГ становится алкоголиком. Что бы этого избежать идём: ...gamedata\scripts\amk_alcohol.scripts и комментируем двумя тире эти строки:
vision_present = true vis_frame_speed = 4 ; скорость, с которой наводится рамка на цель vis_frame_color = 0.7,0.7,0.7,1.0 ; цвет рамки RGBA (A) Не учитывается found_snd = detectors\DA-2_beep1 ;/Добавлен автозахват цели
Далее
Код
class = WP_AK74
меняем на
Код
class = WP_BINOC
чтобы конфиг ствола имел такой вид (SIG SG 550 «SNIPER»)
vision_present = true vis_frame_speed = 4 ; скорость, с которой наводится рамка на цель vis_frame_color = 0.7,0.7,0.7,1.0 ; цвет рамки RGBA (A) Не учитывается found_snd = detectors\DA-2_beep1 ;/Добавлен автозахват цели
Если провален квест "Получить информацию от Крота" и теперь отсутствуют два очень нужных npc - Ворон и Кулинар.
Это инфопоршн на спавн:
Код
{+agr_krot_band_done}
Открываем блокнотом \gamedata\scripts\bind_stalker.script, находим в нем строчку
Код
function actor_binder:update(delta)
и сразу под ней вставляем
Код
db.actor:give_info_portion("agr_krot_band_done")
должно получиться так:
Код
function actor_binder:update(delta) db.actor:give_info_portion("agr_krot_band_done") -- malandrinus
Сохраняем изменения и грузим сейв на Свалке. Появляются Кулинар и Ворон. Сохраняемся и возвращаем bind_stalker.script к первоначальному виду. Играем дальше.
Ребята помогите, может кто знает. Беру чернобыльский ёж в Копачах по заданию Сяка, а он не телепортирует никуда. Решение: Если квест уже взят, то выдайте последовательно вот эти поршни:
Код
volna_sak_battle
Код
volna_sak_test
Соответственно ёж должен быть в рюкзаке всё время. Если у Сяка не появится диалог, то выдайте дальше поршень:
Код
volna_sak_have
После чего разговаривайте с Сяком на завершение квеста.
Квест "Сорвать сделку". Не прилетает вертолет, что делать? Идём ...gamedata\scripts\ui_main_menu.script Находим
Код
--elseif dik == DIK_keys.DIK_M then self:matants()
меняем на
Код
elseif dik == DIK_keys.DIK_M then db.actor:give_info_portion("upi_sdelka_poneslas") --sak.create_items_actor("blocknot_saharova",1) --Блокнот Сахарова. Перед строкой убрать 2 тире если нужен этот блокнот
Загружаем игру (вертолёта не будет), читаем смс Мерцающего, валим снайперов на экскаваторе и в округе, выходим в главное меню, жмем М. Квест в Старой деревне - "Защитить деревню". Не прилетают вертолёты с десантом:
Код
db.actor:give_info_portion("upi_sdelka_poneslas")
ПДА карателя должен быть в рюкзаке, за ранее спавним или прописываем в продажу.
Сохраняем изменения, загружаем игру, говорим с Братом - получаем задание, сразу пропиликает о выполнении.. Тут же сдаем и получаем дальнейшие указания.
Тёмная долина: val_bandit_trader - Жила val_lager_bandits_borov - Боров val_sos_wounded - Мессер val_escort_bandit_halfdead - Монгол - смертный val_prisoner_captive - Сергей Лохматый - смертный val_escort_nap1 - Пуля val_escort_captive - Макс Любер
Бар: bar_bar_drunk_dolg - Бром bar_bar_lisiy - Лысый bar_bar_osvedomitel - Осведомитель bar_arena_man - Арни bar_dolg_regular_5 - Старший блокпоста на входе на территорию долга со свалки bar_zastava_guard_3 - Сержант Пличко stalker_green_zahar - Захар bar_dolg_petrenko - Полковник Петренко bar_dolg_ivancov - Капитан Иванцов bar_dolg_leader - Генерал Воронин
Что бы НПС не обчистили ваш ящик с хабаром идём ...\gamedata\scripts\amk_offline_alife.scripts находим:
--elseif dik == DIK_keys.DIK_M then self:matants()
меняем на
Код
elseif dik == DIK_keys.DIK_M then npc_drug()
Далее в самый конец файла добавляем:
Код
function npc_drug() -- Делаем непися другом local npc = level_object_by_sid(022) --( ... ) сюда писать story_id из алл.спавна. 022 - это Фанат. if npc and npc:alive() then npc:set_relation(game_object.friend, db.actor) end end
function t_zonedocs(location) local a, se_obj for i=1,table.getn(zonedocs[location]) do a = zonedocs [location][i]se_obj = alife():create("zonedocs".."_"..tostring(i), vector():set(a.position.x,a.position.y,a.position.z), a.lv, a.gv) end -- Дубликаты if location=="agro" then local se_obj = alife():create("zonedocs_26",vector():set(-72.308654785156,2.4818267822266,-116.6388092041),3256,797) elseif location=="dt" then local se_obj = alife():create("zonedocs_22",vector():set(85.389030456543,4.3991627693176,146.19708251953),30402,1221) end end
меняем на
Код
function t_zonedocs(location) local a, se_obj for i=1,table.getn(zonedocs[location]) do a = zonedocs [location][i]se_obj = alife():create("zonedocs".."_"..tostring(i), vector():set(a.position.x,a.position.y,a.position.z), a.lv, a.gv) level.map_add_object_spot_ser(se_obj.id, "artefact_location", "Документ Воронина "..tostring(i)) end -- Дубликаты if location=="agro" then local se_obj = alife():create("zonedocs_26",vector():set(-72.308654785156,2.4818267822266,-116.6388092041),3256,797) level.map_add_object_spot_ser(se_obj.id, "artefact_location", "Документ Воронина 26") elseif location=="dt" then local se_obj = alife():create("zonedocs_22",vector():set(85.389030456543,4.3991627693176,146.19708251953),30402,1221) level.map_add_object_spot_ser(se_obj.id, "artefact_location", "Документ Воронина 22") end end
-- спавн снайперов и Снегиря на ЧАЭС2 function create_snegir_2chaes() local snipers = { {position={x=409.23071289063,y=36.875762939453,z=86.418243408203},gv=2600,lv=139080,look=1}, {position={x=172.48136901855,y=70.372261047363,z=125.20753479004},gv=2573,lv=70575,look=1}, ... ... }
удаляем всех снайперов оставив лишь одного - оставив только первую строчку. Что бы было это так:
Код
-- спавн снайперов и Снегиря на ЧАЭС2 function create_snegir_2chaes() local snipers = { {position={x=409.23071289063,y=36.875762939453,z=86.418243408203},gv=2600,lv=139080,look=1} }
Убиваем одного снайпера, задание засчитывается... Или:
Код
function fli_chaes_set_range() local object_all for k, v in pairs (db.storage) do object_all = level.object_by_id(k)
if object_all and object_all:section() == "fli_snp1" and object_all:alive() then object_all:set_range(450) -- 450 меняем на 10 end end end
Это не мера... local weight_normal = 10000 local weight_max = 11000 local items_dropped_max = 0 Вот это радикально. ------------------------------------------ Те значения из оригинального скрипта, не правленые. Если пояснил не правильно сорри, учился плохо))). Главное что понятно что править. Остальное думаю - семечки у бабки в руке на лавочке. Кто не понял о чём этот пост, он о правке на перегруз рюкзака в первом сообщении темы. А что бы не заморачиваться, поставьте в значении local items_dropped_max = 0 и больше ничего трогать не нужно, а рюкзак пусть себе рвётся. Бродяга.
У меня какой то баг с квэстом "Тайник опытного сталкера". Содержимое забрал и контриков с зомбями по стрелял,а квэст висит. Выходить нужно через пещеру как заходил. Почти на выходе из пещеры стоит "рестриктор" на задание.
Привет Андрей! Подскажи пожалуйста где и в каком скрипте(а может не в скрипте) надо ковырнуть, что бы патроны были бесконечные... А то в мастерской написано но в оп-2 такого скрипта нет... Просто надоело уже спавнить... да и количесво паронов затормаживает игру...
----------------------------------------------- Привет, Саша! Да, подскажу конечно. Только смотри как это будет выглядеть. Что бы не ставить спавнер, от которого масса неприятностей как показывает практика, распишу подробно как и куда добавить скрипт и назначить клавиши на нужные патроны. То есть! Закончились патроны, вышел в меню, нажал нужные клавиши и патроны снова в рюкзаке. Устроит тебя такой вариант? Этот способ, если я не ошибаюсь, не влияет на отслеживание актора и можно спавнить абсолютно любой предмет. Но! Снять античит всё же настоятельно рекомендую. Я описал два способа как это сделать в шапке темы. Игру не распаковывай тоже. Какие нужны файлы все дам. Андрей.
------------------------------------------------- Конечно устроит! Здорово!
------------------------------------------ Ок! Тогда напиши что установлено, какие стоят правки. Если стоят правки, тогда кинь мне из твоей сборки ...\gamedata\scripts\ui_main_menu.script если такой файл имеется. Ну и напиши какие патроны нужны для спавна.
Саша! Ты распиши пока всё что я прошу, а у меня дел по горло сейчас навалилось. Как освобожусь вернусь к тебе. Всё что не ясно спрашивай, не стесняйся. Всё что в моих силах поясню.
На счёт закомментировать? Здесь зависит от того какого расширения файл и комментарии делаются разные. Чаще всего это у нас файл с расширением .script В таких файлах комментарии делаются двумя тире перед строкой которую нужно закомментировать. К примеру у нас есть строка self:InitGameSetupMenu() Что бы игра не читала эту строку, перед ней ставим два тире -- self:InitGameSetupMenu() Игра это поймёт, что эту строку нужно пропустить и не читать её. Ежели нужно закомментировать целый блок, тогда это делается так:
В этом случае игра поймёт, что нужно пропустить не одну строку, а весь этот блок.
В файлах с расширением HTML и подобным им комментарий делается так:
Код
<!-- Здесь содержимое -->
Андрей.
Добавлено (24.08.2014, 13:58) --------------------------------------------- Установлен оп-2 патч и фикс 2.03(скачал несколько дней назад). Извлек из db.0-dba все.. И теперь gemedata обновленная(только не приживается новая папка weapons-Вылет((( пришлось ставить старую) А у меня в скрипте ui_main_menu.script под строками f dik == DIK_keys.DIK_Q then self:OnMessageQuitWin() вставлена функция спавна в рюкз ГГ
elseif db.actor~=nil and dik==DIK_keys.DIK_1then alife():create("ХХХХХ",db.actor:position(),db.actor:level_vertex_id(),db.actor:game_vertex_id(),db.actor:id()) В место ХХХХХ предмет.
Неудобно что один предмет... Все время выходить надо и переписывать(отнимает время)....
Добавлено (24.08.2014, 14:03) --------------------------------------------- Когда будет время тогда и помоги пожалуйста.... Благодарю за понимание... А пока так поиграю....Дела есть дела....
Добавлено (24.08.2014, 14:13) --------------------------------------------- Извиняюсь лучше вот этот скрипт, он чист как слеза... - https://yadi.sk/d/h65u1EIuaKB63
Добавлено (24.08.2014, 14:24) --------------------------------------------- Да Античит отключен...В 2 файлах закоментирован. И слава богу... Все как по 1 способу. Миссия Долга - очищение !!!
Pula, лучше всего игру не распаковывать, играть как есть. А распаковать отдельно и брать нужные файлы лишь для правок как это делаю я. Да, этот способ плох тем, что нужно постоянно выходить из игры и редактировать файл. Но повторюсь! От спавнера постоянно какие-то проблемы. Но решать вам.
Код
-- Spawn elseif db.actor~=nil and dik==DIK_keys.DIK_1 then alife():create("ammo_9x39_sp5",db.actor:position(),db.actor:level_vertex_id(),db.actor:game_vertex_id(),db.actor:id()) elseif db.actor~=nil and dik==DIK_keys.DIK_2 then alife():create("ammo_23x76_shrap",db.actor:position(),db.actor:level_vertex_id(),db.actor:game_vertex_id(),db.actor:id()) elseif db.actor~=nil and dik==DIK_keys.DIK_3 then alife():create("ammo_5.45x39_izomorf",db.actor:position(),db.actor:level_vertex_id(),db.actor:game_vertex_id(),db.actor:id()) elseif db.actor~=nil and dik==DIK_keys.DIK_4 then alife():create("ammo_5.56x45_gd",db.actor:position(),db.actor:level_vertex_id(),db.actor:game_vertex_id(),db.actor:id()) elseif db.actor~=nil and dik==DIK_keys.DIK_5 then alife():create("wpn_abakan_m2",db.actor:position(),db.actor:level_vertex_id(),db.actor:game_vertex_id(),db.actor:id()) elseif db.actor~=nil and dik==DIK_keys.DIK_6 then alife():create("wpn_oicw",db.actor:position(),db.actor:level_vertex_id(),db.actor:game_vertex_id(),db.actor:id()) elseif db.actor~=nil and dik==DIK_keys.DIK_7 then alife():create("wpn_oicw",db.actor:position(),db.actor:level_vertex_id(),db.actor:game_vertex_id(),db.actor:id()) elseif db.actor~=nil and dik==DIK_keys.DIK_8 then alife():create("wpn_m16a2_sk1_otdaca_ves",db.actor:position(),db.actor:level_vertex_id(),db.actor:game_vertex_id(),db.actor:id()) elseif db.actor~=nil and dik==DIK_keys.DIK_9 then alife():create("red_mozg",db.actor:position(),db.actor:level_vertex_id(),db.actor:game_vertex_id(),db.actor:id()) elseif db.actor~=nil and dik==DIK_keys.DIK_0 then alife():create("af_inferno",db.actor:position(),db.actor:level_vertex_id(),db.actor:game_vertex_id(),db.actor:id()) -- /Spawn
Это код из моего файла. Смотрите! Так можно писать спавн пока не закончатся клавиши на клавиатуре. Конечно нужно учитывать те клавиши, которые уже прописаны в скриптах и на них не стоит что-то назначать. Здесь расписан спавн от "единицы" до ноля. Так же этот список можно продолжить другими клавишами, а не задействовать всего лишь одну строку на одну клавишу. Тем самым клавишу 1 и 2 оставить постоянно неизменными на спавн патронов, а другие использовать под другие нужды. Но об этом и была изначально речь на спавн бесконечных патронов. 1 нажатие - одна пачка патронов. Клавиша 1 - ammo_9x39_sp5 Клавиша 2 - ammo_23x76_shrap Клавиша 3 - ammo_5.45x39_izomorf и так далее. Вот ваш файл с этим кодом: http://rghost.ru/57643762 P.S. Такой способ спавна, на данный момент что знаю я, самый безопасный в отличии от спавнера. ИМХО.
hud_adjust_mode X - 0, 1, 2, 3, 4 \ режимы настройки : hud_adjust_mode 0 - Отключение режима настройки hud_adjust_mode 1 - Режим настройки для *zoom_offset*
В ...\gamedata\scripts\biodetector.script находим:
Код
function getColor(obj)
и в ней:
Код
local partOnBelt = inventory.on_belt("bioradar2")
приводим в такой вид:
Код
local partOnBelt = inventory.on_belt("bioradar2") or inventory.on_belt("bioradar")
Теперь простой детектор будет показывать всех монстров как элитный.
Где находятся переходы между локациями: ...gamedata\scripts\sak.script Нашел себе Винторез, а он убитый полностью. Отремонтировал, а он снова убитый: ...gamedata\scripts\snp.script находим:
Код
elseif section == "wpn_ognemet" then if not (has_alife_info("fli_have_3") or has_alife_info("dimak_toolkit_done")) then obj:set_condition(0.01) end
elseif section == "wpn_vihlop" then if not (has_alife_info("bar_deactivate_radar_done") or has_alife_info("izumrud_electra_done")) then obj:set_condition(0.01) end
elseif section == "wpn_vintorez" then if not has_alife_info("escape_meceniy_start") then obj:set_condition(0.01) end
elseif section == "wpn_fn2000_paratrooper" then if not has_alife_info("vasily_chertez_fn") then obj:set_condition(0.01)
и в строках:
Код
obj:set_condition(0.01)
в место 0.01 ставим 1.0
...\gamedata\scripts\death_manager.script
Код
-- condition - диапазон состояний выпавших бронежилетов и оружия -- probability_outfit - вероятность выпадения бронежилетов local data_by_community = { default = { -- значения по-умолчанию для неизвестной группировки condition = {min = 5, max = 95}, -- состояние от и до probability_outfit = 15 -- вероятность выпадения брони }, communities = { ["military"] = { condition = {min = 35, max = 75}, probability_outfit = 20 },
...\gamedata\scripts\bind_monster.script
Код
-- Атака насекомых при приближении к чумному зомби if self.object:section()=="zombie_plague" then if self.object:alive() and self.object:position():distance_to(db.actor:position()) < 10 then -- эффект хита при расстоянии меньше 10м level.add_pp_effector("dead_zone.ppe", 1001, true) level.set_pp_effector_factor(1001, 0.1) ...
Код
-- Атака насекомых при приближении к комариному зомби if self.object:section()=="zombie_plague_komar" then if self.object:alive() and self.object:position():distance_to(db.actor:position()) < 12 then -- эффект хита при расстоянии меньше 12м level.add_pp_effector("total_recall.ppe", 1002, true) level.set_pp_effector_factor(1002, 0.1) ...
; Варлаб [nano_tel_1]:zone_teleport_out -- эту строку приводим в такой вид [nano_tel_1]:zone_teleport teleport = standart script_binding = bind_mteleport.bind radius = 0.5 poz_x = 29.784 poz_y = -8.027 poz_z = 11.162
Как увеличить расстояние захвата "Гравипушки"? .../gamedata/scripts/bind_ggun.script, находим два параметра:
Код
... if not dist then dist = 13 end -- дистанция захвата ... if not self.target then self:capture(0.999,13)
в первой и третьей строке в место "13" ставим нужное вам значение.
Идём ...\gamedata\scripts\fly.script local vel = 30 -- скорость в м/с local delta = 30 -- интервал обновления в мс. не должен быть меньше 20 и произведение vel*delta должно быть не меньше 900, иначе картинка будет дергаться Т.е. - уменьшать первое, увеличивая второе (согласно комментарию про дерганье) Хотя, себе ставил так: local vel = 15 local delta = 30 и ничего не дергалось, летал плавно и на комфортной скорости.. И убрать смерть ГГ если съесть яйцо не по квесту В том же файле, закомментировать строку:
function returner_allowed() if has_alife_info("no_teleport_near_heli_btr") and not (has_alife_info("snpt_jupiter5_have3") and not has_alife_info("snpt_jupiter6_done")) then news_manager.send_tip(db.actor, "Возвращение из района скопления вражеских сил невозможно по техническим причинам. Для восстановления функциональности устраните угрозу.", nil, "nano", 20000) return false elseif db.actor:active_item() then news_manager.send_tip(db.actor, "Возвращатель не работает при наличии в руках любого предмета или оружия. Для восстановления функциональности исправьте ситуацию.", nil, "nano", 20000) return false elseif actor_is_in_danger() then return false elseif not returner_pos then news_manager.send_tip(db.actor, "Не задана позиция возвращения. Для установки позиции нажмите дважды клавишу Возвращателя.", nil, "nano", 20000) return false elseif returner_pos:distance_to_xz(db.actor:position()) > 30 then news_manager.send_tip(db.actor, "Возвращение невозможно из-за слишком большого расстояния. Для смены позиции нажмите дважды клавишу Возвращателя.", nil, "nano", 20000) return false elseif returner_pos:distance_to(db.actor:position()) < 1 then news_manager.send_tip(db.actor, "Слишком малое расстояние между текущей и заданной позицией. Для выполнения возвращения нужно отойти подальше.", nil, "nano", 20000) return false end return true end
и приводим в такой вид:
Код
function returner_allowed() if not returner_pos then news_manager.send_tip(db.actor, "Не задана позиция возвращения. Для установки позиции нажмите дважды клавишу Возвращателя.", nil, "nano", 20000) return false end return true end
...\gamedata\scripts\bind_fot.script Находим:
Код
-- фото монстров и неписей function foto_binder:check_creatures() local clsid, section
for id,obj in pairs(db.creatures) do clsid = obj:clsid() section = obj:section()
-- монстры if IAmAMonster [clsid]and obj:alive() and db.actor:see(obj) and not protected_items.is_monster_friend(section) then -- сначала смотрим тихую охоту if (has_alife_info("silent_hunt_start") and not has_alife_info("silent_hunt_done")) and (silent_hunt_monsters [clsid]and not has_alife_info("monster_stealth_"..silent_hunt_monsters[clsid])) and self:obj_in_shot(obj:bone_position("bip01_head"), 0, 2, 3.5, true, nil, true) then -- удачный снимок и такого еще не было news_manager.send_tip(db.actor, "%c[255,160,160,160]".."МЕЧЕНЫЙ:".."\\n".."%c[255,255,128,128]Захар, я подкрался к очередному монстру и успешно его сфотографировал.".."".."\n", nil, nil, 15000) news_manager.send_tip(db.actor, "%c[255,160,160,160]".."ЗАХАР:".."\\n".."%c[255,255,128,128]Отлично. Неси фото и ищи следующего.".."\n", 15, nil, 15000) db.actor:give_info_portion("monster_stealth_"..silent_hunt_monsters[clsid]) return true
-- затем фото уникальных монстров elseif foto_unique_monster [section]and has_alife_info(foto_unique_monster[section].has_info) and not has_alife_info(foto_unique_monster[section].info) and self:obj_in_shot(obj:center(), 5, 10, 3.0, false, nil, false) then -- удачный снимок и такого еще не было news_manager.send_tip(db.actor, "Уникальный монстр сфотографирован.".."\n", nil, nil, 10000) db.actor:give_info_portion(foto_unique_monster[section].info) return true
-- затем обычную охоту elseif (has_alife_info("foto_ohota_start") and not has_alife_info("foto_ohota_done")) and foto_ohota_monsters [section]and not has_alife_info(foto_ohota_monsters[section]) and self:obj_in_shot(obj:center(), 5, 10, 3.0, false, nil, false) then -- удачный снимок и такого еще не было news_manager.send_tip(db.actor, "Монстр сфотографирован.".."\n", nil, nil, 10000)
-- фото аномалий function foto_binder:check_anomaly() if not has_alife_info("foto_ohota_start") or has_alife_info("foto_anomaly_done") then return false end
local anoms = amk_anoms.get_anomaly_list(db.actor, 10) for anom_sect, info in pairs(foto_ohota_anomaly) do if not has_alife_info(info) then -- такого снимка еще не было, смотрим аномалии for _, anom in ipairs(anoms) do -- внутри это: {id=id,name=obj:name(),pos=o.pos,radius=o.radius} if string.find(anom.name, anom_sect) and self:obj_in_shot(anom.pos, 5, 10, 3.5, false, nil, false) then -- удачный снимок news_manager.send_tip(db.actor, "Аномалия сфотографирована.".."\n", nil, nil, 10000) db.actor:give_info_portion(info) return true end end end end
return false end
и меняем весь этот блок на этот:
Код
-- фото монстров и неписей function foto_binder:check_creatures() local clsid, section
for id,obj in pairs(db.creatures) do clsid = obj:clsid() section = obj:section()
-- монстры if IAmAMonster [clsid]--[[and obj:alive() and db.actor:see(obj)]] and not protected_items.is_monster_friend(section) then -- сначала смотрим тихую охоту if (has_alife_info("silent_hunt_start") and not has_alife_info("silent_hunt_done")) and (silent_hunt_monsters [clsid]and not has_alife_info("monster_stealth_"..silent_hunt_monsters[clsid])) --and --self:obj_in_shot(obj:bone_position("bip01_head"), 0, 2, 3.5, true, nil, false) then -- удачный снимок и такого еще не было news_manager.send_tip(db.actor, "%c[255,160,160,160]".."МЕЧЕНЫЙ:".."\\n".."%c[255,255,128,128]Захар, я подкрался к очередному монстру и успешно его сфотографировал.".."".."\n", nil, nil, 15000) news_manager.send_tip(db.actor, "%c[255,160,160,160]".."ЗАХАР:".."\\n".."%c[255,255,128,128]Отлично. Неси фото и ищи следующего.".."\n", 15, nil, 15000) db.actor:give_info_portion("monster_stealth_"..silent_hunt_monsters[clsid]) return true
-- затем фото уникальных монстров elseif foto_unique_monster [section]and has_alife_info(foto_unique_monster[section].has_info) and not has_alife_info(foto_unique_monster[section].info) and self:obj_in_shot(obj:center(), 5, 10, 3.0, false, nil, false) then -- удачный снимок и такого еще не было news_manager.send_tip(db.actor, "Уникальный монстр сфотографирован.".."\n", nil, nil, 10000) db.actor:give_info_portion(foto_unique_monster[section].info) return true
-- затем обычную охоту elseif (has_alife_info("foto_ohota_start") and not has_alife_info("foto_ohota_done")) and foto_ohota_monsters [section]and not has_alife_info(foto_ohota_monsters[section]) --and --self:obj_in_shot(obj:center(), 5, 10, 3.0, false, nil, false) then -- удачный снимок и такого еще не было news_manager.send_tip(db.actor, "Монстр сфотографирован.".."\n", nil, nil, 10000) for k,v in pairs(foto_ohota_monsters) do db.actor:give_info_portion(v) end return true end end end
return false end
-- фото аномалий function foto_binder:check_anomaly() if not has_alife_info("foto_ohota_start") or has_alife_info("foto_anomaly_done") then return false end
local anoms = amk_anoms.get_anomaly_list(db.actor, 1000) for anom_sect, info in pairs(foto_ohota_anomaly) do if not has_alife_info(info) then -- такого снимка еще не было, смотрим аномалии for _, anom in ipairs(anoms) do -- внутри это: {id=id,name=obj:name(),pos=o.pos,radius=o.radius} if string.find(anom.name, anom_sect) --[[and self:obj_in_shot(anom.pos, 5, 10, 3.5, false, nil, false)]] then -- удачный снимок news_manager.send_tip(db.actor, "Аномалия сфотографирована.".."\n", nil, nil, 10000) db.actor:give_info_portion(info) return true end end end end
return false end
...\gamedata\scripts\monster_parts.script
Код
-- Ножи, которыми можно отрезать local knives = { "wpn_addon_shtyk_nozh", "wpn_bat_a", "wpn_bat_b", "wpn_elf", "wpn_knif2", "wpn_knif3", "wpn_knif4", "wpn_knifa", "wpn_knife", "wpn_knife_m", "wpn_knife_n", "wpn_knife_new", "wpn_machete", "wpn_kukri", "wpn_topor", }
приводим в такой вид:
Код
-- Ножи, которыми можно отрезать local knives = { }
далее ф-ю:
Код
function actor_has_knife() for i, section in ipairs(knives) do if db.actor:object(section) or db.actor:object("fake_"..section) then return true end end return false end
привести в такой вид:
Код
function actor_has_knife() for i, section in ipairs(knives) do if db.actor:object(section) or db.actor:object("fake_"..section) then return true end end return true end
Или пропускаем всё выше написанное и ф-ю:
Код
function on_part_take(obj) if not monster or not rx_utils.read_from_ini(nil, obj:section(), "monster_part", false, 0) then return end
if actor_has_knife() then local difficulty = level.get_game_difficulty() if difficulty > 0 then bind_stalker.hide_weapon() --snp.move_off() -- обездвиживание отключено amk.remove_timer("monster_parts") amk.start_timer("monster_parts", difficulty*2, 0) --amk.start_timer("move_on", difficulty, 0) -- обездвиживание отключено end
level.start_stop_menu(level.main_input_receiver(), true) if snd and snd:playing() then snd:stop() end snd = xr_sound.get_safe_sound_object("zwuk\\inv_mutant_loot_"..math.random(1,9)) snd:play_at_pos(db.actor, vector(), 0, sound_object.s2d)
else db.actor:transfer_item(obj, monster) end end
приводим в такой вид:
Код
function on_part_take(obj) if not monster or not rx_utils.read_from_ini(nil, obj:section(), "monster_part", false, 0) then return end
if actor_has_knife() or not actor_has_knife() then local difficulty = level.get_game_difficulty() if difficulty > 0 then bind_stalker.hide_weapon() --snp.move_off() -- обездвиживание отключено amk.remove_timer("monster_parts") amk.start_timer("monster_parts", difficulty*2, 0) --amk.start_timer("move_on", difficulty, 0) -- обездвиживание отключено end
level.start_stop_menu(level.main_input_receiver(), true) if snd and snd:playing() then snd:stop() end snd = xr_sound.get_safe_sound_object("zwuk\\inv_mutant_loot_"..math.random(1,9)) snd:play_at_pos(db.actor, vector(), 0, sound_object.s2d)
Андрей Большое спасибо за работу!!! Только не пойму, у тебя не запакованная gemedata есть или нет???
-------------------------------------------------- У меня в игре gamedata запакована. А отдельно есть распакована. Я лишь беру из распакованной gamedata-ты отдельные файлы для правок и не более. Андрей.
Добавлено (24.08.2014, 15:15) --------------------------------------------- То есть структура какая должна быть, но только необходимые actor item outfit и т. д. Я правильно тебя понял?
Добавлено (24.08.2014, 15:35) --------------------------------------------- Ой что то я ... В общем я извлек все db(конечно отдельно, предварительно скопировав db файлы из папки с игрой), создал свою gemedata но только c нужными правками! И скопировал в папку с игрой. Правильно я сделал?? У тебя так или нет? Извини может время отнимаю... Я подожду если надо... Саня! Миссия Долга - очищение !!!
Предисловие для понимания: Игра всегда берёт за приоритет папку gamedata, а затем gamedata.db-архив. Попросту говоря. Игра сначала проверяет есть ли папка gamedata. Если есть, тогда она ссылается на неё и её содержимое. Если папки gamedata нет или в этой папке нет нужного файла, тогда игра ссылается на .db-архив.
Да, сделал ты всё правильно. Пример: Установили игру с запакованной gamedata-ой. Теперь нам нужно сделать правку на отключение античита. Что мы делаем? Заходим в каталог игры, создаём в ней папку с названием gamedata. Возьмём для примера второй способ. Во тором способе нам нужны файлы по пути \gamedata\config\ и \gamedata\config\creatures\ Значит что? В созданной нами ранее папке damedata созда папки с соответствующими путями для требуемых файлов. А значит создаём в папке gamedata папку config и в папку config для правки помещаем файл system.ltx, далее в этой же папке config создаём папку creatures и в эту папку creatures помещяем файл actor.ltx Всё. Теперь у нас всё готово для правки. Что у нас получилось? Когда мы запустим игру, то игра будет ссылаться на наши правленные файлы system.ltx и actor.ltx, а не на те, что в gamedata.db... Аналогично и с остальными правками. Только учитываем тот момент, что некоторые файлы у нас уже могут быть из других правок. Тогда мы не новый кидаем, а редактируем существующий.
Отключение Выброса на ЧАЭС через диалог: Идем сюда: gamedata\config\text\rus Находим файл stable_dialogs_escape.xml Вставляем в конце файла, перед строчкой :
Код
<string id="doctor_vybros_0"> <text>Доктор, задолбал уже этот выброс на ЧАЭС, может пошаманишь?</text> </string> <string id="doctor_vybros_1"> <text>Глотни-ка аспиринчику, глядишь и полегчает.</text> </string> <string id="doctor_vybros_2"> <text>Золото, ты, а не человек!</text> </string>
Далее идём: gamedata\config\gameplay\character_desc_escape.xml В начале файла, ищем характер Доктора
elseif dik == DIK_keys.DIK_Q then self:OnMessageQuitWin()
сразу под эти строки вставляем:
Код
elseif db.actor~=nil and dik==DIK_keys.DIK_I then sak.add_new_to_peshera1()
2. Грузим сейв, жмём "Esc"--"I"--"Esc" и получаем 2 перехода в Пещеру - со Свалки и Агропрома.
Альтернативный спавн НПС:
Код
alife():create("секция из spawn_section.ltx",vector():set(x,y,z),lv,gv)
Пример:
Код
local obj = alife():create("puzir_crest",vector():set(135.108261108398,-4.82400608062744,19.7076988220215),36702,1237)
-- спавн Креста в Баре на месте Осведомителя. А это где он на самом деле должен быть:
Код
local obj = alife():create("puzir_crest",vector():set(-41.0699081420898,-0.0368323624134064,-142.238632202148),154276,2882)
Также по spawn_id: .../gamedata/scripts/ bind_stalker.script найти строку xrs_armor.redress() и под неё вставить alife():create(здесь № spawn_id)
Заметка:
Код
-- Из all_spawn_fix: -- удаление алспаун объекта по его name function release_allspawn_object(name) local obj = alife():object(name) if obj then alife():release(obj) return true end return false end
...\gamedata\scripts\snp_spawn.script Привести в такой вид:
Код
function snpt_jupiter5_have2() if has_alife_info("snpt_jupiter5_fail") then return end
db.actor:give_info_portion("snpt_jupiter5_have1") --[[local p={ {position={x=363.57598876953,y=27.446691513062,z=-199.10688781738},gv=3741,lv=1292568}, {position={x=448.03466796875,y=27.67280960083,z=-164.00025939941},gv=3741,lv=1427096}, {position={x=373.82931518555,y=27.448501586914,z=-195.63957214355},gv=3741,lv=1308599}, {position={x=329.47528076172,y=27.650470733643,z=-168.52958679199},gv=3741,lv=1243576}, {position={x=353.50900268555,y=28.190092086792,z=-159.15997314453},gv=3741,lv=1278942}, {position={x=374.54891967773,y=27.489912033081,z=-174.95315551758},gv=3741,lv=1309630}, {position={x=356.46075439453,y=28.496633529663,z=-152.48675537109},gv=3741,lv=1282778}, {position={x=453.34948730469,y=26.964168548584,z=-121.35138702393},gv=3741,lv=1436029}, {position={x=435.44659423828,y=27.529432296753,z=-148.63513183594},gv=3741,lv=1405378}, {position={x=421.47744750977,y=27.673887252808,z=-161.87846374512},gv=3741,lv=1381590}, {position={x=434.01824951172,y=27.674629211426,z=-179.73728942871},gv=3741,lv=1402829}, {position={x=382.095703125,y=27.631851196289,z=-188.90495300293},gv=3741,lv=1320360}, {position={x=334.22894287109,y=28.79377746582,z=-147.85690307617},gv=3741,lv=1249755}, {position={x=412.97665405273,y=27.673191070557,z=-175.97169494629},gv=3741,lv=1367973} } local a for i=1,#p do a = p [i]amk_mod.spawn_military_tech_pack(alife():create("vehicle_btr",vector():set(a.position.x,a.position.y,a.position.z),a.lv,a.gv),"vehicle_btr", "scripts\\snp\\btr.ltx") end]] end
elseif dik == DIK_keys.DIK_Q then self:OnMessageQuitWin()
под эти строки вставляем:
Код
elseif db.actor~=nil and dik==DIK_keys.DIK_I then local obj = alife():object("veh_car_baggi") if obj then alife():release(obj) end -- если багги в игре, то удаляем alife():create(13236) -- спавним даже если нету.
Грузим сейв, жмём "Esc"--"I"--"Esc", гоним Багги.
Меткий стрелок. Бутылки по заданию Борова: Вместо 130 бутылок 1. ...\gamedata\scripts\akill.script
Код
function borov_bottle_spawn() alife():create("quest_vodka",vector():set(50.144065856934,1.9814517498016,-37.293888092041),238905,990) alife():create("quest_vodka",vector():set(50.127235412598,1.982654094696,-33.908508300781),238907,990) ... ... spawn_restrictor.borov_otboi_sr1()
Приводим в такой вид:
Код
function borov_bottle_spawn() alife():create("quest_vodka",vector():set(50.144065856934,1.9814517498016,-37.293888092041),238905,990) spawn_restrictor.borov_otboi_sr1()
теперь нам нужно попасть только в одну бутылку. Инфопоршень на завершение битья посуды:
Вот спасибо, Пояснил как надо. Значит все правильно! У меня был такой опыт,когда играл в 30 новел из зоны. Извлек все db и закинул в игру!!! Что это было!!! 5 минут играю, вылет! Ужас...!!! Но слава богу теперь все иначе.. Только что поставил твою правку. Супер!!! Теперь не надо сохр. и вых. из игры что бы наспавн. другие патроны и т. д. Тебе Респект и Уважуха! До скорого!
Добавлено (24.08.2014, 16:23) --------------------------------------------- Господа Сталкеры! Если кому надо ультрадетекор атефактов, то вот два файла https://yadi.sk/d/SXE2j_cYaGHmL и https://yadi.sk/d/JpsIJuwQaGJ22 В gemedata/script замените script а в gamedata\config\misc item . Сам играю и все работает, можете не сомневаться.(Правка в script идет только на детектор, больше там ничего нет.А item c обновлением можно потом тоже поправить. Это последний.) Безусловно ! Его название det_artefact_super Он показывает все арты на локации на карте! Он почему то нигде и не упоминается!!!! Даже в солянке!!!! Проходил 2 или 3 раза(переигрывал) но загадка то что никто тебе его не дает и не продает!!! А он есть! В файле item есть такая секция [det_artefact_super]:identity_immunities GroupControlSection = spawn_group discovery_dependency = $spawn = "devices\detector_advanced" $prefetch = 32 class = D_SIMDET cform = skeleton visual = equipments\item_datchik3.ogf radius = 10
(это надо вставить вместо того что сейчас там находиться + скрипт ссылка есть)
Я его так и нашел когда там лазел... А в новом патче он даже закоментирован в скриптах! Хотя пишут что он должен работать))) Попробуй. Вещь!!!
Добавлено (24.08.2014, 18:14) --------------------------------------------- Не item а items извиняюсь.
Добавлено (24.08.2014, 18:16) --------------------------------------------- Менял все детекторы... так надежнее (та секция что писал)
Добавлено (26.08.2014, 00:30) --------------------------------------------- Привет Андрей! Подскажи пожалуйста, как стать невидимым, в данном случае от монолита.Ну в том плане что бы npc меня не видели. А то есть квест на чаэс 2 спасти славика снегиря. Так вот выполнить этот квест не представляеться возможным. Во 1ых шаг влево шаг вправо-провал задания! Вылез для выстрела-Провал задания! (монолит читерит по полной! стреляет сквозь крышу, и видит меня за крышей, Ну где справедливость??? И как тут не читерить???!!!!! А без этого не закончить квест на острова, дальше не пройти по сюжету!
Добавлено (26.08.2014, 00:33) --------------------------------------------- Уже 2 дня отстреливаю А ТОЛКУ НОЛЬ! Миссия Долга - очищение !!!
"геймдату" из архива положи в папку с игрой, согласись на слияние/замену, если попросит. После - загрузись с сейва ПЕРЕД тем как ГГ приходит на место откуда нужно отстреливать монолитовцев, или с захода на локацию. Сделал там чтоб спавнился только один снайпер-монолитовец, убъешь его и задание засчитается. После найдешь Снегиря с компанией. Где этот снайпер и где потом искать Снегиря - на скринах ниже: Скачать правку.
Идём: ...\gamedata\scripts\fly_island.script Находим блок кода:
Код
-- спавн снайперов и Снегиря на ЧАЭС2 function create_snegir_2chaes() local snipers = { {position={x=409.23071289063,y=36.875762939453,z=86.418243408203},gv=2600,lv=139080,look=1}, {position={x=172.48136901855,y=70.372261047363,z=125.20753479004},gv=2573,lv=70575,look=1}, {position={x=189.91955566406,y=70.372077941895,z=141.20712280273},gv=2573,lv=75777,look=1}, {position={x=305.48309326172,y=11.397486686707,z=96.222267150879},gv=2593,lv=104572,look=1}, {position={x=358.35037231445,y=11.404424667358,z=113.97929382324},gv=2593,lv=116488,look=1}, {position={x=410.96298217773,y=36.876304626465,z=119.66000366211},gv=2600,lv=139448,look=1}, {position={x=483.32315063477,y=59.435405731201,z=146.46691894531},gv=2632,lv=154803,look=1}, {position={x=575.15216064453,y=24.998668670654,z=199.3540802002},gv=2628,lv=171982,look=1}, {position={x=575.46990966797,y=24.998685836792,z=193.50148010254},gv=2628,lv=171966,look=1}, {position={x=575.46771240234,y=24.998683929443,z=187.53498840332},gv=2628,lv=171950,look=1},
и удаляем всех снайперов оставив лишь одного что бы вышло так:
Код
-- спавн снайперов и Снегиря на ЧАЭС2 function create_snegir_2chaes() local snipers = { {position={x=409.23071289063,y=36.875762939453,z=86.418243408203},gv=2600,lv=139080,look=1}}
Код
function inform_20_pda_have() return new_dialog.item_much("device_pda_npc",20) ~= false end
function inform_40_pda_have() return new_dialog.item_much("device_pda_npc",40) ~= false end
function inform_20_pda(first_speaker, second_speaker) local item = "" local count = math.random(2,3) -- случайно выдаст 2 или 3 предмета, список предметов в таблице local nagrad = { ... level_7 = {. local actor, trader if db.actor and db.actor:id() == first_speaker:id() then actor = first_speaker trader = second_speaker else actor = second_speaker trader = first_speaker end item = nagrad.level_7[math.random(table.getn(nagrad.level_7))] flamethrower.relocate_n_items_section(trader, "device_pda_npc", "out", 20) flamethrower.relocate_n_items_section(actor, item , "in", count) end
Гарик: ...\gamedata\scripts\sak_dialog.script
Код
function give_antirad(first_speaker, second_speaker) sak.out_item_namber("antirad", 1) -- 1-сколько отдать антирада end
Диалог с Гариком: ...\gamedata\config\text\rus\sak_strings_trade.xml
Код
<string id="garik_dialog_5"> <text>Ладно, я всё равно ими не пользуюсь, предпочитаю водку.</text> </string>
Кузнецов:
Код
function has_soldiers_bribe(actor, npc) return sak.have_item_namber("vodka",1) ~= false -- здесь чего и сколько нужно end function give_soldiers_bribe(actor, npc) sak.out_item_namber("vodka",1) -- здесь сколько и что забирает archievements.acv_count_event("acv_bribe", 20, "Честный налогоплательщик") end
можно заменить на:
Код
function has_soldiers_bribe(actor, npc) return db.actor:money()>=10000 -- есть ли нужная сумма end function give_soldiers_bribe(actor, npc) aem_manager.manage_money(10000, "out") -- сколько платить денег archievements.acv_count_event("acv_bribe", 20, "Честный налогоплательщик") end
Здесь 10000 - сумма, которую будет брать Кузнецов за проход под мостом. Или в строке sak.out_item_namber("vodka",1) заменить 1 на 0 - будете ходить бесплатно. Диалог: ...\gamedata\config\text\rus\stable_dialogs_escape.xml
Код
<string id="esc_bridge_soldiers_start_13"> <text>А нельзя!\nНо если очень хочется... то можно. Например, за бутылочку и... можешь мне ещё водочки принести?</text> </string>
Код
function spawn() alife():create("sergeant_counter",db.actor:position(),db.actor:level_vertex_id(),db.actor:game_vertex_id(),db.actor:id()) end
sergeant_counter - его жетон.
...\gamedata\config\gameplay\dialogs_amk.xml
Код
<action>akill.grom_npc_hit</action>
заменить на:
Код
<action>akill.taynik_grom_spawn</action>
и сдавать можно в любое время.
Как получить переход с Радара на АC? У Информатора нет диалога: -Знающие люди говорили, можно полезную информацию купить? -Проходил на Радар с Армейских складов, а обратно не смог попасть... Чтобы появился этот диалог у Осведомителя, ГГ после отключения Выжигателя должен пройти к повороту на Ц.Припять, чтобы сработал инфопоршень rad_start_svoboda_vs_dolg, бой Свободы с Долгом.
Для переспана: Кузькина Мать - esc_kuzmat -- 3876 Шныра--АТП--Ликвидация - atp_bandit_shnura -- 136 Инфопоршень на выполнение - db.actor:give_info_portion("kalinin_zadan_done")
Вечный маскировочный экзоскелет (маскхалат):meceniy_work.script Закомментировать две строки:
Код
make_meceniy_outfit_used(outfit_act) и make_meceniy_outfit_used(prev_outfit_act)
Как отключить музыку в главном меню? ...\gamedata\config\ui\ui_mm_main.xml Сделай так:
Переспавн Клыка: .../gamedata/scripts/bind_stalker.script найти строку
Код
xrs_armor.redress()
и под ней вписать
Код
alife():create(6570) -- из game_story_ids.ltx
Грузануть сохранку, сохраниться и удалить добавленную строку
Код
alife():create(6570)
Фотограф:
Код
akill.fotograf_npc_spawn()
Чтобы избавить экзоскелет Скат 15М от "прожорливости" идём: ...\meceniy_outfit.script находим блок:
Код
if outfit:section() == "exo_mil_exoskeleton_addr" then new_system_rad() elseif outfit:section() == "exo_mil_exoskeleton_addrs" then new_system_rad() new_system_power()
Добавлено (26.08.2014, 03:11) --------------------------------------------- Всё !!! прошёл снегиря! Громандое Спасибо брат! Андрей ты меня просто спас! Мне кажется что этот квест невозможно пройти, и в ОП-2 перестарались!!! Если бы не ты, то крышка!!! РЕСПЕКТ ! Миссия Долга - очищение !!!
Господа Сталкеры! Если кому надо ультрадетекор атефактов, то вот два файла https://yadi.sk/d/SXE2j_cYaGHmL и https://yadi.sk/d/JpsIJuwQaGJ22 В gemedata/script замените script а в gamedata\config\misc item . Сам играю и все работает, можете не сомневаться.(Правка в script идет только на детектор, больше там ничего нет.А item c обновлением можно потом тоже поправить. Это последний.)...
Такими действиями Вы просто откатили с 2.03, минимум на 2.02 именно по этим детекторам.
Цитата
...Я его так и нашел когда там лазел... А в новом патче он даже закоментирован в скриптах! Хотя пишут что он должен работать))) Попробуй. Вещь!!! ...Менял все детекторы... так надежнее (та секция что писал)...
В 2.03 использование детекторов перенесено из слота 1 на пояс: в bind_det_arts.script
local need_del_spot = nil ... ... if inventory.on_belt("detektor_amorf") then this.det_izomorf() need_del_spot = true elseif inventory.on_belt("det_artefact_indy") then this.det_indy() need_del_spot = true elseif inventory.on_belt("det_artefact_super") then this.det_super() need_del_spot = true elseif need_del_spot then this.iteration_del_spot() need_del_spot = nil end end Выделенное (текст жёлтым цветом) добавить для патча 2.03
и иконку в конфигах подправить:
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; Детекторы артефактов Автор мода: Singapur22 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; этот детектор не используется [det_artefact_super]:identity_immunities .... .... inv_grid_y = 27 - изменить на 40 ... ;slot = 1 - за комментировать или удалить
Сообщение изменил:alen-fantom - Пятница, 29.08.2014, 08:57
Привет alen-fantom ! Я с тобой полностью согласен, да я откатил детекторы, только детекторы! Хоть в лоб мне стреляй, НО детекторы артов не работали не в предыдущим не в новом(уже не помню какой ставил патч). У стояла и стоит меня своя gemedata, но там только правочки! Тогда как объяснить ТО, что я скопировал в gemedata только items из посл. патча(извлеченные db9 и dba) , а в моих скриптах скрипта bind_det_arts не было! Значит по логике все должно работать... Но не тут то было! Облом! И он не работал не под каким предлогом...
Добавлено (26.08.2014, 20:20) --------------------------------------------- Я хочу сам еще раз это проверить лично еще раз... Отпишу когда протестирую....
Добавлено (26.08.2014, 20:24) --------------------------------------------- Блин поправочка, моя gemedata была полностью обновлена из db9 dba Все буду пробовать....
Добавлено (26.08.2014, 21:42) --------------------------------------------- Всё проверил.Если я правильно думаю,то за работу ультрадетектора отвечают 2 эти файла... Делал так, удалил из gemedada скрипт bind_det_arts(мой откатный) и заменил items свой на items последнего патча и фикса(без правок). Детектор повесился) на пояс, к артам. На этом его работа и закончилась! На карте артов он уже не показывает(проверял). Осталется его загнать ближайшему барыге...Или выкинуть! Если я не прав поправьте...
Добавлено (27.08.2014, 01:03) --------------------------------------------- Привет Андрей! Да я искал этот скрипт(Снегирь). Но откуда я могу даже близко знать! в каком это скрипте??? Я бы даже и близко не подумал что он в этом скрипте... Большое спасибо! Будем изучать! С уваженим Саня! :wink:
Добавлено (27.08.2014, 01:09) --------------------------------------------- А сейчас помирил Долг и Монолит! Очень не обычно... У костра молится Монолит, а рядом Долг анекдоты травит! Как подружить военных с нейтралами, актором и долгом? 1. Идём по пути gamedata\config\creatures\game_relation.ltx; 2. Копируем исходный файл game_relation.ltx куда-нить в сторонку (на случай "кривизны" рук); 3. Открываем файл game_relation любым текстовым редактором; 4. Находим табличку в секции [communities_relations] - в ней указано отношения группировок между собой и ГГ. От -5000 (полное "отрицалово") до 5000 (огроменная лябофф). 5. Правим отношения между нужными кланами и актором. Делается просто: находим значение на пересечении нужной строки и столбца и меняем значение. Если мирим, то повышаем значение; сеем раздор - уменьшаем. Но не забываем, что количество пробелов между значениями в строке должно остаться таким же как и до внесения правок (!). 6. Сохраняем изменённый файл. 7. Запускаем игру с НИ или ближайшего сейва (правки сделанные при запущенной игре работать не будут). Или же в task_manager.ltx (в каком-нибудь повторяющемся квесте Сидоровича - "принести артефакт" прописать в награду reward_relation к Военным например +1000 и они все позеленеют).
Добавлено (27.08.2014, 02:30) --------------------------------------------- А сейчас помирил Долг и Монолит! Очень не обычно... У костра молится Монолит, а рядом Долг анекдоты травит! Как подружить военных с нейтралами, актором и долгом? 1. Идём по пути gamedata\config\creatures\game_relation.ltx; 2. Копируем исходный файл game_relation.ltx куда-нить в сторонку (на случай "кривизны" рук); 3. Открываем файл game_relation любым текстовым редактором; 4. Находим табличку в секции [communities_relations] - в ней указано отношения группировок между собой и ГГ. От -5000 (полное "отрицалово") до 5000 (огроменная лябофф). 5. Правим отношения между нужными кланами и актором. Делается просто: находим значение на пересечении нужной строки и столбца и меняем значение. Если мирим, то повышаем значение; сеем раздор - уменьшаем. Но не забываем, что количество пробелов между значениями в строке должно остаться таким же как и до внесения правок (!). 6. Сохраняем изменённый файл. 7. Запускаем игру с НИ или ближайшего сейва (правки сделанные при запущенной игре работать не будут). Или же в task_manager.ltx (в каком-нибудь повторяющемся квесте Сидоровича - "принести артефакт" прописать в награду reward_relation к Военным например +1000 и они все позеленеют).
Привет Бродяга ! Подскажи пожалуйста, как сделать что бы вид из костюма был без очков(как в экзоскелете) и овала (как в Сева). Сама цель, снять очки или убрать овал... То есть хотел подменить текстуру. А чтобы вид был без этого. Я искал эти текстуры но найти их не удалось. Может знаешь как это сделать???
Ух ты! Спасибо! Сейчас сделаю... Да, век живи век учись
Добавлено (28.08.2014, 21:54) --------------------------------------------- alen-fantom не отключается! Пробовал, что же не так? Я выкл. перезагрузил, и опять этот овал Миссия Долга - очищение !!!
В игре выйти в меню - АМК опции - Интерактивный худ выкл - Применить - Сохранить игру(сейв) -Перезагружаешь игру... ====================== Другой вариант: в игре снять броню - АМК опции - Интерактивный худ выкл - Применить - вернуться в игру и одеть броню... Конечно лучше сохранить данное, сделав сейв...
Сообщение изменил:alen-fantom - Вторник, 02.09.2014, 05:30
Вечер добрый хотел попросить о помощи, мне очень нравится мод ОП 2 но убивает снайперская точность НПС .... как бандит в пьяном угаре вешает хедшот на 100 метров ... загадка...
как я понял чтобы снизить точность нпс нужно ""gamedata/config/creatures/actor.ltx найти строки hit_probability_gd_novice = 0.20 hit_probability_gd_stalker = 0.30 hit_probability_gd_veteran = 0.40 hit_probability_gd_master = 0.50 они отвечают за вероятность попадания по вам при разных уровнях сложности. Повышаете значение до единицы и наслаждаетесь хардкором.""
Но в папке с ОП 2 у меня нет папки gamedata .... как отредактировать параметры точности В ОП2 не подскажите ? За ранние извиняюсь за тупые вопросы и прошу понять и простить новичка в этом деле.
Сообщение изменил:xxxxxx - Воскресенье, 31.08.2014, 01:09
Если ещё кому-то не понятно, то всё решается выставлением необходимого веса в выше изложенных проверках, например вес 500 кг: ...
Цитатаalen-fantom ()
Если кому то пофиг излишняя нагрузка на движок, то пожалуйста ставьте "0".
Даже если пойти предложенным вами путём, то особой разницы не ощущаю кроме как на "ругательство телепортатора" может быть (с этим я ещё не сталкивался). Имею ввиду, что скрипт всё равно работает и проверяет, только теперь не с 350кг сравнивает, а с 500 как в вашем примере и не срабатывает функция выбрасывания. Вот если бы полностью отключить эту всю проверку. ХЗ его знает как лучше!
Что бы не убиралось оружие во время диалога: gamedata\scripts\bind_stalker.script найти и за комментировать строчки:
Код
-- Апдейт прятание оружия игрока во время диалога if weapon_hide == true or self.object:is_talking() then if self.weapon_hide == false then -- self.object:hide_weapon() self.weapon_hide = true end else if self.weapon_hide == true then -- сюда пишем все проверки, когда можно достать оружие local outfit = db.actor:item_in_slot(6) if not db.eat and (not outfit or (outfit:section() ~= "meceniy_outfit_new" and not string.find(outfit:section(), "soldier_outfit"))) then -- self.object:restore_weapon() self.weapon_hide = false end end end
Контроль лимита сохраненных игр: .../gamedata/scripts/ui_load_dialog.script
Код
-- контроль лимита сохраненных игр function saved_games_limit_set_error(size) if size < 1800000000 then return end
local f = getFS() if f:exist("$game_saves$", "sg_limit.ltx") == nil then local f1 = f:update_path("$game_saves$", "game_setup.ltx") local f2 = f:update_path("$game_saves$", "sg_limit.ltx") f:file_copy(f1, f2) end end
Размеры ГГ из Путь Человека - Возвращение.
Код
ph_box0_center = 0.0, 0.9, 0.0 ph_box0_size = 0.35, 0.9, 0.35 ph_box1_center = 0.0, 0.6, 0.0 ; 2-е значение - высота ГГ в присяде ph_box1_size = 0.35, 0.6, 0.35 ; 2-е значение - высота ГГ в присяде ph_box2_center = 0.0, 0.35, 0.0 ; 2-е значение - высота ГГ в полном присяде ph_box2_size = 0.1 , 0.25, 0.1 ; 2-е значение - высота ГГ в полном присяде stalker_restrictor_radius = 0.20;0.55;0.75;0.9 ; ограничение расстояния между сталкерами. Низкое значение полезно, когда кто-то загородил дорогу в тесных помещениях. stalker_small_restrictor_radius = .05; medium_monster_restrictor_radius = 0.1
Теперь можно пролезть даже в щель.
Ограничение 100% защиты от артов: inventory.script
Код
-- Сканируем инвентарь db.actor:inventory_for_each(scan_inv) -- вместо количества теперь идет проверка по иммунитетам -- remove_duplicate() -- check_immunities() -- снимаем ограничения по кол-ву артов на поясе check_idol_monolita()
исключает вообще всякие лишние проверки по таблицам.
net_spawn(data)
Код
function actor_binder:net_spawn(data) ... ... spawn_level_changer.remove_old_teleport() -- Метка sak.add_new_bar_to_atp() -- переход "Бар - АТП"
Пожалуйста: скрипт от Dennis_Chikin под 2.03 и выше... Отключение ругательства - meceniy_intellectual.script и spawn_level_changer.script: найти и за комментировать\удалить проверку:
Код
elseif not drrr.weight_ok() then news_manager.send_tip(db.actor, "Телепортация перегруженного человека невозможна по техническим причинам. Снизьте вес или отремонтируйте бронекостюм.", nil, "nano", 20000) return
Сообщение изменил:alen-fantom - Вторник, 02.09.2014, 05:31
А вот поправка на вид через бинокль, просто заменил иконку(взято из Народной солянки), себе поставил, отлично! Вот скрин: а вот правка тык! Просто скопировать gemedata в каталог игры. Если потребуется согласиться на замену.
Добавлено (02.09.2014, 12:22) --------------------------------------------- Есть правка на музыку на территории бара, базы Свободы, и агропрома. Очень хорошие темы из Народной солянки. Скопировать gemedata в папку с игрой(обязательно измените имя с gemedata 1 на gemedata ! , если спросит , согласится. Правка ни на что не влияет и от патчей не зависит. В архиве только необходимые файлы... Вот ТЫК
Не большая правка по вкл\выкл "Интерактивного худа"(АМК опции). Нумерация строк соответствует оригиналу скрипта из патча 2.04: amk_mod.script
стр. 2768 if amk.load_variable("option_hud",2)~=2 then return end -- by Monnoroch - закомментировать(--) либо удалить... ... 2807 if amk.load_variable("option_hud",2)~=2 then - "~=2" изменить на "==0" ... 2939 if mycurrent_suithud ~= nil and not string_find(mycurrent_suithud,"_red3") and not string_find(mycurrent_suithud,"hud_sci_") then
изменить на
if (mycurrent_suithud ~= nil and amk.load_variable("option_hud",2)==2 and not string_find(mycurrent_suithud,"_red3") and not string_find(mycurrent_suithud,"hud_sci_")) then
Теперь худ маски брони убирается без снятия самой брони, перед выкл. "Интерактивного худа"... Подглядел в DMX-mod 1.3.5...
Про убирание стволов при использовании медицины/еды gamedata\scripts\zvuki.script:
-- третья рука, прятание оружия при съедании. на новичке не убирается, далее по нарастающей local difficulty = level.get_game_difficulty() if difficulty > 0 then bind_stalker.hide_weapon()
- if difficulty > 0 then - если сложность больше 0(новичок) то hide_weapon(убираем оружие). Если вместо "0" поставить"3", то и на мастере(реализм) стволы не убираются.
Добавлено (07.09.2014, 18:17) --------------------------------------------- Включение "распознавания НПС" и "расстояние(дистанция) до цели" для "ралистов"
ui_mm_opt_main.script
Код
-- отключение на мастере распознавания НПС и дистанции function options_dialog:OnDifficultyChanged() if self.list_difficulty:CurrentID() == 3 then -- знак "==" изменить на ">" self.check_tips:SetCheck(false) self.check_tips:Enable(false) self.check_dist:SetCheck(false) self.check_dist:Enable(false) else self.check_tips:Enable(true) self.check_dist:Enable(true) end
inventory.need_update = true -- для пересчета иммунитетов при смене уровня сложности end
difficulty_manager.script
Код
-- автопереключение опций в зависимости от сложности function switch_options(difficulty) if difficulty == 3 then -- тоже самое, меняем знаки: "==" на ">" get_console():execute("hud_info off") get_console():execute("hud_crosshair_dist off") end
inventory.need_update = true -- для пересчета иммунитетов end
Расширенный пистолетный слот + 24 слота под арты...
Братва , мене надо Серого спаунить в игру, подскажите куда нажать ? Лоханулся по полной а возвращаться лень. Можно было бы и спавнер поставить, но чревато последствиями, уже проходил эту болезнь. Мирного неба и процветания.
--------------------------------------------- Привет всем! А проблема какая? Может можно по другому решить? ----------- Поговорите с Прапором. Он расскажет про бандитов. Если не выйдет, напишите ваш игровой набор и прикрепите сейв где нить на свалке. Ещё можно прикрепить диалоги Серого, на пример, Ворону или Прапору.
Вот нашел! Меню-телепорт. На АМК уже сделали для оп-2, и там гораздо больше возможностей! Можно задавать свои точки, телепортироваться на другую локу... Посмотри может понравиться... Вот ссылка СКАЧАТЬ Миссия Долга - очищение !!!