Перейти к контенту

Небольшие правки в виде инструкций

---===---

 

 

Скрытый текст

Правленый движок в ОП-2.2, для игры с правками не нужен. Редактировать fsgame.ltx на чтение из каталога игры, папки gamedata, тоже не нужно, т.к. это уже прописано в оригинальном файле:

$game_data$ = true| true| $fs_root$| gamedata\

Все остальное - суеверия))

Скрытый текст
$app_data_root$      = true|        true|    $fs_root$|          userdata\
$game_data$          = true|        true|    $fs_root$|          gamedata\
$game_ai$            = true|        true|    $game_data$|        ai\
$game_spawn$         = true|        true|    $game_data$|        spawns\
$game_anims$         = true|        true|    $game_data$|        anims\
$game_levels$        = true|        true|    $game_data$|        levels\
$game_meshes$        = true|        true|    $game_data$|        meshes\
$game_dm$            = true|        true|    $game_data$|        meshes\
$game_shaders$       = true|        true|    $game_data$|        shaders\
$game_sounds$        = true|        true|    $game_data$|        sounds\
$game_textures$      = true|        true|    $game_data$|        textures\
$game_scripts$       = true|        true|    $game_data$|        scripts\
$game_config$        = true|        true|    $game_data$|        config\
$game_huds$          = true|        true|    $game_data$|        skins_ui\huds\
$game_ui_inventory$  = true|        true|    $game_data$|        skins_ui\inventory
$level$              = true|        true|    $game_levels$
$game_saves$         = true|        true|    $app_data_root$|    savedgames\
$logs$               = true|        true|    $app_data_root$|    logs\
$crash$              = true|        true|    $app_data_root$|    crashes\
$screenshots$        = true|        true|    $app_data_root$|    screenshots\
$game_settings$      = true|        true|    $app_data_root$|    settings\
$mod_dir$            = true|        true|    $fs_root$|          mods\

 

 

Скрытый текст

Если вы решили играть с правками, в первую очередь нужно поставить "Античит". Взять его можно в базе правок. Так же желательно поставить "Отключение счетчиков облегченного прохождения" и смело ими пользоваться - тут вам, без дополнительных правок, и метки на тайники Коллекционера и документы Воронина, и бессмертие - для трудных моментов игры.

 

Прежде чем ставить правки на ослабление не убиваемых НПС и жутких монстров, а так же при тотальной нехватке всего и вся, возможно стоит попробовать снизить сложность)). Если есть вариант правки с отрубанием какой-то из спорных идей-реализаций, авторов ОП-2.2 и правка с "гуманизацией" этих "фишек" - лучше выбрать 2-й вариант. В остальном - ставьте только то, что вам нужно. Не пытайтесь "накатить" все и сразу. Вы или по неопытности сломаете игру или сделаете ее для себя не интересной. 

 

Скрытый текст

В gamedata\scripts\ui\ui_load_dialog.script закомментировать двумя тире, эту строчку:

--db.dev_mode=sg:dev_mode()

Правка только скрывает красную надпись! Скрыть факт вмешательства в файлы мода, таким образом не удастся. У каждого сохранения в логе все равно будет приписка: "save created on DEVELOPER mode!". На офф-сайте с таким логом в сохранениях, делать нечего)).

image.jpg

 

Скрытый текст

Находим счетчики в скриптах: gamedata\scripts\

В каждом файле по одному, кроме 4-го, в valerich_treasures.script - там их 2.

 

ui\ui_mm_opt_creator.script       - db.god.c[1] = db.god.c[1]+1    --"Бессмертие на некоторое время"
ui\ui_mm_opt_add.script            - db.god.c[2] = db.god.c[2]+1    --"Покупка квестового  предмета за 200000"
callbacks\key_handlers.script    - db.god.c[3] = db.god.c[3]+1    --"Суперпрыжок" 
valerich_treasures.script            - db.god.c[4] = db.god.c[4]+1    --"Метка на тайник Коллекционера"
kostya_dialog.script                    - db.god.c[5] = db.god.c[5]+1    --"Метки на документы Воронина"
spawn_level_changer.script       - db.god.c[6] = db.god.c[6]+1    --"Телепортация с неограниченным весом"

 

И приводим их к вот такому виду:

db.god.c[1] = 0
db.god.c[2] = 0
db.god.c[3] = 0
db.god.c[4] = 0 
  --(2 раза)
db.god.c[5] = 0
db.god.c[6] = 0

 

При установке правки "Античит" счетчики отрубаются в правке и можно с этим не заморачиваться.

 

Скрытый текст

gamedata\config\misc\safe_stealmanager_config.ltx

в самом начале файла:

[StealManager]
enable= true                                     ;ставим false и ничего не платим
protectionCostFirstPay=10000       ;первый взнос в рублях
protectionCostDayPay=5000          ;ежедневный взнос в рублях
bethDistance= 60                            ;расстояние для "умного" обкрадывания
traderDistance=6                             ;расстояние до торговца с платным хранилищем глобальное

=============

Эта правка не отключит все воровство! Об этом в следующем спойлере.

 

Скрытый текст

В script\nsafe\safe_stealmanager.script

найти два места 

self.enable=true 

self.enable=reader:readBool(self.classname,"enable",true) 

и заменить их на 

self.enable=false

self.enable=false

Кто-то по уму сделал скрипт, так что если enable=false, то обработка воровства не вызывается. 

-----------------

от @voluntas88

============

upd: эта правка "конфликтует" с платными нычками, т.к. полностью отрубает воровство из новых рюкзаков, а с ним, и возможность оплаты нычек у торговцев - не воруют же. Пользуйтесь чем то одним.

 

Скрытый текст

gamedata\config\alife.ltx

time_factor      = 5

Меняем на сколько нужно; единица вроде будет 1:1 как в реале, 50 - минуты будут меняться на глазах. Для применения эффекта, необходимо поспать.

==========

п.с. следует помнить, что на время завязаны погодные циклы и выброс. Лишний раз "баловаться" изменением этого параметра, не стоит.

 

Скрытый текст

gamedata\config\weapons

Добавляем нолик или два, перед единицей для  интересующего вас ствола.

fire_dispersion_condition_factor   = 5.0    ;1.5        ;увеличение дисперсии в процентах при максимальном износе 
misfire_probability                         = 0.001 ;0.0004    ;вероятность осечки при максимальном износе -меняем тут.
misfire_condition_k                        = 0.05
condition_shot_dec                        = 0.00005    ;увеличение износа при каждом выстреле -тут правим износ, так же.

Если такого параметра в конфигах ствола нет, значит он наследуется от базового, для этого типа оружия. Что прописывается в  классах. Пример:

[wpn_kriss_m1]:wpn_kriss_super_v - наследует параметры от wpn_kriss_super_v

Дописываем этот misfire_probability и(или) этот, condition_shot_dec параметры ему в конфиг, или меняем у базового, если первое вызывает затруднения.

 

Скрытый текст

gamedata\config\creatures\actor.ltx
тщем:
max_item_mass   = 80 ;ставь хоть тонну
max_walk_weight = 90 ;столько же как в max_item_mass  + 10-50 кг.

gamedata\config\system.ltx
ищем;
max_weight    = 80 ; ставим как в max_item_mass

 

Скрытый текст

gamedata\scripts\arhara_dialog.script

Добавляем что нужно. Тут пример добавления простого штык-ножа, мед-аптечки, мухомора, пива, консервы и немного)) денег

--' получим аптечку и пм от Звездочёта
function noz_dat()
    got("wpn_pm")
    got("wpn_6x4_knife")
    got("medkit")
    got("medkit_scientic",2)
    got("mushroom")
    got("beer_a")
    got("conserva")
    got_money(3000)

end

--======================================--

Что-бы выдавал несколько предметов, пишем так:

 got("medkit_scientic",3)

будет 3 мед. аптечки

--======================================--

Если хочется все "сделать красиво", правим еще и диалог, в:  config\text\dialogs_arhara.xml

Ищем в нем текст: "Ты вот что... Держи аптечку и пистолет. Патронов нет, извини." - и меняем на что угодно, насколько фантазии хватит :grin2:

 

Скрытый текст

gamedata\scripts\treasure.script

Находим этот код:

--' Юзание инициатора (возможность выдать тайник)
function CTreasure:use(npc)
    local se_npc = server_object(npc:id())
    if se_npc and se_npc.treasure_processed then return end
    se_npc.treasure_processed = true

    lootmoney.lootmoney(npc)
    local rarets=992
    -- если выбран редкий тип тайников, то снизим вероятность его выпадения
    if math.random(1000) < rarets then
        --log("return from use")
        return
    end

===========================

992 - это процентное соотношение к 1000, т.е. вероятность выпадения тайника: 0,8%. Больше 3% - 970, ставить не стоит. Да и то, только в начале игры, а как прибарахлились, лучше эту правку убрать.

 

Скрытый текст

gamedata\config\creatures\actor.ltx

Сделай как тут и будет тебе щастя:
; Физические размеры героя. Позволяет залезать в тесные пространства, например, в трубы.
ph_box0_center             = 0.0,  0.9,   0.0
ph_box0_size                 = 0.35, 0.9,   0.35
ph_box1_center                 = 0.0,  0.65,  0.0    ; 2-е значение - высота ГГ в присяде
ph_box1_size                 = 0.3, 0.65,  0.3   ; 2-е значение - высота ГГ в присяде
ph_box2_center                 = 0.0,  0.4,   0.0    ; 2-е значение - высота ГГ в полном присяде
ph_box2_size                 = 0.25, 0.4,   0.25   ; 2-е значение - высота ГГ в полном присяде
stalker_restrictor_radius   = .05;0.55;0.75;0.9 ; ограничение расстояния между сталкерами. Низкое значение полезно, когда кто-то загородил дорогу в тесных помещениях.
stalker_small_restrictor_radius   = .05;
medium_monster_restrictor_radius    = 0.1
===========================
Решение в сети гуляет очень давно)))
===========================
По "длинным рукам":
В system.ltx есть параметр take_dist = 2 ;ставь хоть 50 - это и есть расстояние в метрах. Но это может сломать игру. Т.к. тайники, особенно сюжетные, которые трудно взять, завязаны на рестрикторы и нужно именно подходить. Некоторые и не появятся, пока не наступишь на рестриктор, так что особого смысла в увеличении take_dist - нет. Если приперло, видишь но не можешь "дотянуться", поставить только на время проблемы и потом вернуть обратно. На постоянное использование, больше 2.8, лучше не ставить!

 

Скрытый текст
--Быстрое лечение, по квесту Доктора + на достижения.(стоит вылечить шесть NPC)
--Путь: gamedata\scripts\kostya_dialog.script
--Привести функцию к такому виду:
function doktor_lekar1_have()
	if not has_info("doktor_lekar1_start") or has_info("acv_lekar2") then return end

	local cnt = get_value("lekar",0)
	cnt = cnt+1

	if cnt == 1 then
		sms("%c[sender]"..translate("name_doktor")..":\\n%c[sms_red]"..translate("sms_doctor_doktor_lekar1_have_1_0"), nil, "doctor", 30000, nil, [[sms\doctor\doktor_lekar1_have_1]])
	elseif cnt == 2 then
		sms("%c[sender]"..translate("name_doktor")..":\\n%c[sms_red]"..translate("sms_doctor_doktor_lekar1_have_2_0"), nil, "doctor", 30000, nil, [[sms\doctor\doktor_lekar1_have_2]])
	elseif cnt == 3 then
		sms("%c[sender]"..translate("name_doktor")..":\\n%c[sms_red]"..translate("sms_doctor_doktor_lekar1_have_3_0"), nil, "doctor", 30000, nil, [[sms\doctor\doktor_lekar1_have_3]])
	elseif cnt == 4 then
		sms("%c[sender]"..translate("name_doktor")..":\\n%c[sms_red]"..translate("sms_doctor_doktor_lekar1_have_4_0"), nil, "doctor", 30000, nil, [[sms\doctor\doktor_lekar1_have_4]])
		give_info("doktor_lekar1_have")
	elseif cnt == 5 then
		give_info("acv_lekar")
	elseif cnt == 6 then
		give_info("acv_lekar2")
		del_value("lekar")
		return
	end

	set_value("lekar",cnt)
end 
---------------
от @AMK-forum

 

Скрытый текст
-- Путь: gamedata\scripts\flamethrower.script
-- Найти и сделать как ниже.
function mbald_removed_have()
	local value = get_value("mbald_removed", 0)
	return value >= 1                           ----- БЫЛО 3---------------- ЭКСПЕРИМЕНТЫ ВАСИЛЬЕВА---------------------------------------
end
function galant_removed_have()
	local value = get_value("galant_removed", 0)
	return value >= 1                           ----- БЫЛО 3---------------- ЭКСПЕРИМЕНТЫ ВАСИЛЬЕВА---------------------------------------
end
function mincer_removed_have()
	local value = get_value("mincer_removed", 0)
	return value >= 1                           ----- БЫЛО 3---------------- ЭКСПЕРИМЕНТЫ ВАСИЛЬЕВА---------------------------------------
end
--Проверяй. Должно быть достаточно по одной аннигиляции.
-----------------
от @lexa.3012

 

Скрытый текст

Для тех кого не устраивает фото со спутника могу предложить другой вариант:

В gamedata\scripts\binders смотрим файл bind_fot.script

В строке 468 if iAmMonster[clsid] and obj:alive() убираем and obj:alive()

Это позволит фотографировать убитых зверюшек.

в строках 474, 480, 485 смотрим self:obj_in_shot(obj:center()

Меняем первые две цифры на 0 и 30. Это позволит фотографировать от нуля до 30 метров.

Было:

self:obj_in_shot(obj:center(), 1, 3, 3.0, false, nil, nil, nil, nil, true)

Стало:

self:obj_in_shot(obj:center(), 0, 30, 3.0, false, nil, nil, nil, nil, true)

Для аномалий тоже самое.

Строка 504 if string.find(anom.name, anom_sect) and self:obj_in_shot(anom.pos, 5, 10, 3.5, false, nil, nil, nil, nil, false) then

меняем на if string.find(anom.name, anom_sect) and self:obj_in_shot(anom.pos, 0, 30, 3.5, false, nil, nil, nil, nil, false) then

Всё.

Делать снимки становится гораздо удобнее, и эта правка не вызовет проблем при сдаче задания.

-----------------

Рекомендуемая правка для фотографирования!

от @shahvkit

 

Скрытый текст

 В xr_kamp.script сделать так:

        -- играть на гармошке
        local f = false -- item_state_relation["play_harmonica"].allowing(npc,self) 
        npc_states["play_harmonica"] = f
        npc_states["wait_harmonica"] = f
        self.kamp_states["pre_harmonica"] = f
        self.kamp_states["harmonica"] = f
        self.kamp_states["post_harmonica"] = f

        -- играть на гитаре
        f = false -- item_state_relation["play_guitar"].allowing(npc,self) 
        npc_states["play_guitar"] = f
        npc_states["wait_guitar"] = f
        self.kamp_states["pre_guitar"] = f
        self.kamp_states["guitar"] = f
        self.kamp_states["post_guitar"] = f

        -- играть на балалайке
        f = false -- item_state_relation["play_balalaika"].allowing(npc,self) 
        npc_states["play_balalaika"] = f
        npc_states["wait_balalaika"] = f
        self.kamp_states["pre_balalaika"] = f
        self.kamp_states["balalaika"] = f
        self.kamp_states["post_balalaika"] = f

        -- анекдоты
        f =  item_state_relation["joke"].allowing(npc,self) 
        self.kamp_states["pre_joke"] = f
        self.kamp_states["joke"] = f
        self.kamp_states["post_joke"] = f

        -- Если непись знает истории, надо добавить их к лагерю
        f = (f and db.story_by_id[npc:id()] ~= nil)
        self.kamp_states["story"] = f
        self.kamp_states["post_story"] = f
    end
end

 

По аналогии можно анекдоты и истории отключить, но так совсем не весело будет :grin2:

-----------------

от @tihik

 

Скрытый текст

scripts\binders\bind_actor

--loc_radiation.update()

-----------------

от @AMK-forum

 

Скрытый текст

scripts\biodetector.script

     if item and bioradars[item:section()] and not bind_actor.scopeUsed then 

меняем на:

     if item and bioradars[item:section()] --and not bind_actor.scopeUsed

     then

-----------------

от @shram_437

 

Скрытый текст
scripts\ui\ui_mm_opt_add.script
    ["x16_physic_object_0004"]=true,
    ["x16_physic_object_0010"]=true
Меняем на:
    ["x16_physic_object_0004"]=false,
    ["x16_physic_object_0010"]=false
Далее, находясь в x16, заходим в настройки/игра, прописываем x16_physic_object_0004 и x16_physic_object_0010 в панель удаления проблемных объектов и удаляем.
-----------------
от @Prophet13

 

Скрытый текст

scripts\binders\bind_stalker.script

--sak.zombie_checkup()

-----------------

от @AMK-forum

============

Если стоит эта правка, то нельзя получить ачивку Друг зомби.

Скрытый текст

Убери, правку: В bind_stalker.script, расскомментируй --sak.zombie_checkup().  В \config\text\archievements.xml. найди "Друг зомби" = "acv_fzom". По "acv_fzom", поиском по содержимому, в ТС, найди нужную функцию, в данном случае в sak.script и делай с ней все что угодно(ослабьте эффекты и спокойно играйте!):

 

function zombie_checkup()
    if db.actor ~= nil then
        if math_random() > 0.7     and not _G.Inventory:on_belt("af_serpantin") then
            local a=math_random()
            local h = hit()
            h.draftsman = db.actor
            h.direction = vector():set(0,0,0)
            h:bone("bip01_spine") -- чтобv учитvвалась броня
            h.type = hit.telepatic
            h.power = 0.3+a/2
            h.impulse = 1.0

            db.actor:hit(h)
            h.type = hit.strike
            db.actor:hit(h)
            h.type = hit.radiation
            db.actor:hit(h)
            level.add_pp_effector("alcohol.ppe", 100, false)
            local rnd=math_random(1,6)
            local snd_obj=voice(hit_sound[rnd])
            snd_obj:play_no_feedback(db.actor, sound_object.s2d, 0, vector(), 1.0)
            archievements.acv_count_event("acv_fzom", 100, "acv_fzom") -- 1 ставь, бери ачивку и верни --sak.zombie_checkup()
        end

==============

Или так, советы от пользователей: Удали правку, заспавни Серпантин и шмонай зомби. Рано или поздно выпадет; Так же, Экза ЧД, Стальной крыс, Нанокостюм Волозара, Дон Кихот - все это защищает от удара при шмоне зомби.

Скрытый текст

Можно сделать относительно честную правку, раз ачивка "Друг зомби". Вставить проверку поршня в функции

 

function zombie_checkup()
    if db.actor ~= nil then
        if math_random() > 0.7     and not _G.Inventory:on_belt("af_serpantin") and not has_info("acv_fzom") then...

 

и тогда, после обыска с уроном более 100 зомбированных, больше урона по ГГ не будет.

п.с. Если вас парят ачивки, не ставьте правки, отрубающие какие-бы то ни было хиты и прочие условности. Лучше тогда ослабить хиты, до приемлемых и(или) подредактировать условия получения ачивок, а потом, если раздражает, уже можно и отключить. Описание всех ачивок находится в \config\text\archievements.xml - и дальше там не сложно.

 

Скрытый текст

scripts\ui\ui_hud_mask.script

Закомментировать(--) строчки:

--level.add_pp_effector ("alcohol.ppe", 2013, true)     

--level.remove_pp_effector (2013)

-----------------

от @AMK-forum

 

Скрытый текст

scripts\ai\rx_gl.script

stor.can_fire = true ;false
stor.can_fire = true ;false

-----------------
от @Prophet13

 

Скрытый текст

gamedata\scripts\zvuki.script 
Закомментировать как тут показано, эти строки:

        if difficulty > 0 then
        --    hide_wpn.on_info("rm_mp_start")
        --    local delay_time=db.eat_snd:length()/1000
        --    if delay_time<difficulty*3 then
        --        delay_time=difficulty*3
        --    end
        --    timer("zvuki", delay_time, "zvuki.restore_weapon()")
        end
        --if has_info("ui_inventory") then
        --    level.start_stop_menu(level.main_input_receiver(), true)
        --end
-----------------
от @Prophet13
============
Вариант от lexa.3012.  Выделил нужное синим.

		-- треть¤ рука, пр¤тание оружи¤ при съедании. на новичке не убираетс¤, далее по нарастающей
		local difficulty = level.get_game_difficulty()
		if difficulty > 0 then
			hide_wpn.on_info("rm_mp_start")
			local delay_time=db.eat_snd:length()/5000
			if delay_time<difficulty*0 then
				delay_time=difficulty*0
			end
			timer("zvuki", delay_time, "zvuki.restore_weapon()")
		end
		--[[if has_info("ui_inventory") then
			level.start_stop_menu(level.main_input_receiver(), true)
		end]]		
	end
end

-----------------

Дополнение: отключение раздражающих звуков приема пищи и др. подобных звуков в этом же файле:

строки 35-74 содержат информацию о звуках. Для "проблемных" звуков удали/закомментируй целую строку, например:

bread = {"zwuk\\inv_sandwich","zwuk\\inv_kolbasa"},

-----------------

от @voluntas88

 

Скрытый текст

scripts\monnoroch_options.script

blood_enable = 0 -- эффект ранения (1 - вкл , 0 - выкл)
scripts\ui\ui_hud_mask.script

local blood_enable = 0 -- эффект ранения
scripts\amk\amk.script

    -- Эффекты при падении здоровья
    if db.actor:alive() then
        if prev_health > db.actor.health+0.2 then
            level.add_pp_effector("amk_shoot.ppe", 2011, false)
            level.set_pp_effector_factor(2011, (prev_health-db.actor.health)*100)
            if prev_health > db.actor.health+0.9999 then
                local cameffs, sounds
                if prev_health > db.actor.health+0.9999 then 
-----------------

от @tihik

 

Скрытый текст

gamedata\scripts\binders\bind_monster.script

-- Выбивание из рук оружия
local ac_slots={
    [inventory_slots.NO_ACT_SLOT]=false,
    [inventory_slots.KNIFE]=false,
    [inventory_slots.PISTOL]=false,
    [inventory_slots.RIFLE]=false,
    [inventory_slots.SHOTGUN]=false
}
-----------------

от @AMK-forum

 

Скрытый текст

Чтобы убрать этот поносный цвет в Саркофаге. С фонариком невозможно, а без фонарика не видно.
gamedata\config\scripts\sar
Файл - sar_monolith_noise
Сделать так:
active = nil

[sr_psy_antenna]
eff_intensity = 0
hit_intensity = 0
play_visual = false
;mute_sound_threshold = 1

-----------------

от @karavan150 

 

Скрытый текст

В скрипте bind_actor.script

Найти эту строчку:
               any_bot_dis_change=any_bot_dis_change or (is_actor_enemy or is_actor_danger or any_enemy_see_actor)

И заменить на это:
                any_bot_dis_change=false

-----------------

от @bastor

 

Скрытый текст

Вырезаем алкоголизм ГГ
gamedata\scripts\amk\amk_alcohol.script

-- Алкоголь ГГ. Не более 5 бутылок в сутки.
local alc_cont=keyvals("amk_data"):get("alc_count", {})

function drink_vodka(obj)    
    table.insert(alc_cont, game.minutes())
    local limit = iif(has_info("acv_alk"),6,5)
    local sz=table.size(alc_cont)
-- тут вырезаем кусок кода (у кого подсмотрел, не помню)) --
    archievements.acv_count_event("acv_alk", 70, "acv_alk")
end

function update()
    local gm = game.minutes()

    for i=table.size(alc_cont),1,-1 do
        if gm > alc_cont+60*24 then
            table.remove(alc_cont, i)
        end
    end
end

-----------------

от @AMK-forum

 

Скрытый текст

gamedata\config\weapons\ammo.ltx  

у нужных патронов включаем параметр:

tracer                   = on  ; вместо off

Цвет трассера задается этим параметром:

tracer_color_ID    = 0
А tracer_color_ID(ID - цвета от 0-4) это цвет трассера.

color_0  ;yellow
color_1  ;white
color_2  ;red
color_3  ;green
color_4  ;blue

Что бы включить трассеры у Винтореза, нужно в файле:

gamedata\config\weapons\w_vintorez.ltx

Их включить:

tracers              = on  ; вместо off

У именного  Винтореза включены по умолчанию.

-----------------

от @RaFaJIb

============

Что-бы работало на статике, нужно выключить сглаживание.

============

Можно разнообразить и немного подкрасить цвета трассеров. Для этого в:

gamedata\config\weapons\weapons.ltx

находим таблицу цветов:

[tracers_color_table]    ;color_table

и приводим ее вот к такому виду:

color_1 = 1, 0.5, 0; orange
color_2 = 1, 0, 0; red
color_3 = 0.2, 0, 0; dark red
color_4 = 1, 1, 0; yellow
color_5 = 0.5, 0.1, 1 ; purple
color_6 = 0, 1, 0 ;green
color_7 = 1, 0, 1; magenta
color_8 = 0, 1, 1; cian
color_9 = 0, 0, 0.5; dark blue
color_10 = 0.2, 0.4, 1;blue
color_11 = 0, 0.2, 0 ;dark green
color_12 = 0.5, 0.5, 1; electra
color_13 = 1, 1, 1; white
color_0 = 0.2, 0.2, 0.2; grey
color_14 = 1, 0.5, 0.8 ;pink

В ammo.ltx задаем нужным патронам любой из этих цветов.

-----------------

по наработкам для ОП-2.1 от @Mezocop

 

Скрытый текст

Для гравикостюма комментируем строки в gamedata\scripts\hide_wpn.script

Тут:
		func=function() --запрет на использование слотов вообще
			--db.actor:hide_weapon()
			--set_value("hide_wpn_global",true)			
			set_value("gravisak_on",true)			
		end
	},
	["gravisak_off"]={
		func=function()
			--db.actor:restore_weapon()
			--set_value("hide_wpn_global",false)
			del_value("gravisak_on")			
		end

И тут:
		func=function()
			--if has_value("gravisak_on") then
				--return
			--end
			set_value("hide_wpn_global",false)
			db.actor:clear_blocked_slots() --после множественных hide_weapon сфорсим очистку m_blockCounter
			local stored_slot=keyvals():get("active_weapon_slot",inventory_slots.NO_ACT_SLOT) --ключ в контейнере по умолчанию
			if stored_slot~=inventory_slots.NO_ACT_SLOT then
				db.actor:activate_slot(stored_slot,true)
			end
		end
	}
}

Для маскировочной экзы в режиме невидимости комментируем 2 строки в gamedata\scripts\binders\binder_mon.script

function binder_meceniy_outfit_new:invisibility_on() 
--  hide_wpn.on_info("gravisak_on")

function binder_meceniy_outfit_new:invisibility_off()
--  hide_wpn.on_info("gravisak_off")

Подсказал @Купер

Скрытый текст

По идее должно быть здесь:
binder_mon.script. Просто откомментировать соответствующий обработчик

 

function binder_meceniy_outfit_new:invisibility_on() --* включили невидимость
...
    hide_wpn.on_info("gravisak_on") --* выдали поршень для убирания оружия
...
end


function binder_meceniy_outfit_new:invisibility_off() --* выключили невидимость
...
    hide_wpn.on_info("gravisak_off") --* выдали поршень для доставания оружия
...
end

обработчик вызывается в биндере автора bind_actor.script на инфоколлбэке на инфоколлбэке

function actor_binder:info_callback(npc, info_id)
  ....
  		hide_wpn.on_info(info_id)

сам обработчик для данного случая hide_wpn.script:

 

    ["gravisak_on"]={
        func=function() --запрет на использование слотов вообще
            db.actor:hide_weapon() --* спрятали оружие
            set_value("hide_wpn_global",true)  --* установили триггер   
            set_value("gravisak_on",true)  --* и значение переменной
        end
    },
    ["gravisak_off"]={
        func=function()
            db.actor:restore_weapon() --* достали оружие
            set_value("hide_wpn_global",false)   --* установили триггер
            del_value("gravisak_on")  --* и значение переменной
        end
    },

 

Скрытый текст

gamedata\scripts\inventory.script

-- Проверка на иммунитеты и удаление с пояса лишних артов
self.imm_limits = {100, 86, 73, 60}

Меняем на

self.imm_limits = {999999, 999999, 999999, 999999}

===

от @Prophet13

 

Скрытый текст

 gamedata\scripts\amk\amk_alcohol.script

-- Алкоголь ГГ. Не более 5 бутылок в сутки.
local alc_cont=keyvals("amk_data"):get("alc_count", {})

function drink_vodka(obj)    
    table.insert(alc_cont, game.minutes())
    local limit = iif(has_info("acv_alk"),6,5)
    local sz=table.size(alc_cont)
-- тут вырезаем кусок кода (у кого подсмотрел, не помню)) --
    archievements.acv_count_event("acv_alk", 70, "acv_alk")
end

function update()
    local gm = game.minutes()

    for i=table.size(alc_cont),1,-1 do
        if gm > alc_cont[i]+60*24 then
            table.remove(alc_cont, i)
        end
    end
end


===================================
upd: теперь запасаемся аптечками, хавчиком и получаем "Алкаша" - "acv_alk" - за одну пьянку)))
А что-бы не утомиться 70 пузырей хлебать, убираем лишний нолик)) Ведь настоящим тёртым Сталкерам, алкоголизм и прочие житейские невзгоды - не помеха!

В archievements.script отрубаем(true), если еще это не сделали, на выбор, наличие "негативных" достижений для получения ачивки "Сталкер".

function acv_stalker()
        ["acv_has_cheated"]=true,
        ["acv_halavshic"]=true,
        ["acv_bridge"]=true,
        ["acv_docs_fail"]=true,
        ["acv_money3"]=true,
        ["acv_alk"]=true,
        ["acv_xam"]=true,
        ["acv_task_fail"]=true,
        ["acv_treplo"]=true

 Или наоборот - добавляем нолики и бухаем до талого)))

 

Скрытый текст
--Путь:gamedata\scripts\binders\bind_monster.script
-- Атака собаки
function monster_binder:dog_attack()
	--self:effector(1800, 15, function()
		--level.add_pp_effector("radiation.ppe", 2012, false) 
		--self:hit(hit.telepatic, 0.05, 0)
		--self:drop(0.05)
	--end,"dog_attack")
end 

-- Атака пси-пса из билда 1935
function monster_binder:psy_dog_attack()
	--self:effector(4000, 20, function()
		--level.add_cam_effector("build_1935_pseudodog_effect_1.anm", 9901, false, "")
		--level.add_cam_effector("build_1935_pseudodog_effect_2.anm", 9902, false, "")
		--level.add_pp_effector("psy_antenna.ppe", 9903, false)
		--say("monsters\\pseudodog\\psy_affect_0")
		--self:hit(hit.telepatic, 0.05, 0)
		--self:drop(0.5)
	--end,"psy_dog_attack")
end

от lexa.3012@

 

Скрытый текст

scripts\binders\bind_restrictor.script

function restrictor_binder:net_spawn(data)
...
в самом конце перед return true вставить эту строку:
    self.particle = amk_particle.amk_particle({["particle"] = "anomaly2\\gravity_damage_02_smoke", [ "pos" ] =  self.object:position()})   
    return true
end

Делалось для ОП-2, но работает и для других модов. Автор @Eugen81

от @igor.doc

 

Скрытый текст

В scripts\binders\bind_actor.script находим секции броников, одев которые, мы не закашливаемся - и вставляем свою броню

-- секции броников, одев которые, мы не закашливаемся при приближении к гниющему трупу
local no_cough= {
	["merc_scientific_outfit"]=true,	-- Научный костюм наёмников
	["scientific_outfit"]=true,	        -- Научный костюм сталкера "Сева"
	["dolg_scientific_outfit"]=true,	-- Научный костюм Долга
	["freedom_scientific_outfit"]=true,	-- Научный костюм Свободы
	["monolit_scientific_outfit"]=true,	-- Научный костюм Монолита
	["scientist_suit_white"]=true,	-- Белый Научный костюм Монолита
	["nebo_scientific_outfit"]=true,	-- Научный костюм Чистого Неба
	["scientific_lastday_outfit"]=true,	-- Научный костюм Последнего Дня
	["protection_outfit"]=true,	        -- Комбинезон ССП-99М "Вега"
	["ecolog_outfit"]=true,	        -- Костюм "Эколог"
	["nano_outfit"]=true,                -- Стальной Крыс
	["nano_suit"]=true,                  -- Костюм Волазара
	["seva_scient_outfit"]=true,         -- Модернизированная "Сева"
	["exo_scientist_outfit"]=true        -- Научный экзоскелет
}

от @igor.doc

 

Скрытый текст

Экзоскелеты выпадают только после прохождения лаборатории Х-16, как сделать так, что бы экзоскелеты выпадали до прохождения Х-16?
В gamedata\scripts\death_manager.script ищем 441 и 442 строчки, в 442 строчке меняем значение create_allowed=false на true

            if config:r_string(sect, "class")=="EQU_EXO" and not has_info("yan_kill_brain_done") then
                create_allowed=true

 

Теперь экзоскелеты будут выпадать с начала игры.

от @Daredevil

 

Скрытый текст

Загляни в meceniy_in_hell.script там комментарии на русском, должно быть понятно.

от @igor.doc

 

Скрытый текст

Кому мешают засветы от изоморфов, нужно в \config\weapons\ammo.ltx

в секциях изоморфных патронов(их там 4 варианта) выставить:

explosive        = off ;on

 

Скрытый текст

Добавить строчку в секции гравика \config\misc\outfit.ltx

;         ГРАВИКОСТЮМ /в Новой редакции/
[soldier_outfit]:outfit
class             = EQU_EXO
visual                  = dynamics\outfit\gravik_suit ;soldier_suit
actor_visual    = actors\hero\stalker_gravik_new.ogf
npc_visual        = actors\hero\stalker_gravik_new.ogf
inv_name            = outfit_gravisak_name
description            = outfit_gravisak_description
inv_weight            = 13
inv_grid_width        = 2
inv_grid_height        = 3
inv_grid_x            = 38
inv_grid_y            = 26
cost                = 150000
cheat_item = true
full_icon_name        = npc_icon_soldier_outfit

batteries = acumm, akkumulytor
discharge_moving = 0.000001
discharge_sprint = 0.00000115
discharge_jump   = 0.00035
snd_cant_sprint  = zwuk\ekza_out
snd_cant_jump    = zwuk\ekza_out

additional_inventory_weight        = 220
additional_inventory_weight2    = 220
sprint_allowed        = true

======

Так же и любому, в котором не бегается.

 

Скрытый текст

Подскажите где подправить цену перехода из Бара в Ц.П. и на Кордон и обратно?

Комментируем экшены отъёма денег в config\gameplay\dialogs_buusty.xml

<!-- Диалог с БД по поводу доступа к бонусному переходу Ц.Припять-Бар -->
...
       <text>doktor_perehod_dostup_4</text>
       <!-- <action>wawka_dialog.give_money_5000</action> -->
          <next>5</next>

<!-- Диалог с Барменом по поводу доступа в его кладовку и подсобку -->
...  
       <phrase id="5">
       <text>barmen_podsobka_dostup_5</text>
       <!-- <action>sak_dialog.give_9000_money</action> -->              
         <next>7</next>
       </phrase>
       <phrase id="55">
       <precondition>sak_dialog.actor_9000_have</precondition>       
       <text>barmen_podsobka_dostup_5</text>
       <!-- <action>sak_dialog.give_9000_money</action> -->               
         <next>8</next>
         
<!-- Диалог с Сидором по поводу доступа в его каморку -->
...
       <phrase id="4">
       <precondition>sak_dialog.actor_9000_have</precondition>       
       <text>sidor_podsobka_dostup_4</text> 
       <!-- <action>sak_dialog.give_9000_money</action> -->            
         <next>6</next>

Проверять деньги будут, забирать нет.

от @igor.doc

 

Скрытый текст

Небольшой спавнер-помощник в одном файле ui_main_menu.script . Работает из главного меню

 

Выходим в главное меню и жмем нужные клавиши от 1 до 9

1 - гранаты вог

2- патроны к абакану

3- 5.56

4- граната вороненок

5- туррель стрелка

6- резервная кнопка. тут прописываю что то по необходимости

7-8-9  рем наборы - оружие, броня, хол оружие 

N - сделать NPC другом

G - сделать группировку друзьями

F4 - бессмертие

F5 - Смертие(убирает бессмертие)

В принципе Вы можете вставить свои переменные на кнопки

сразу после 
function main_menu:OnKeyboard(dik, keyboard_action)  --virtual function
	CUIScriptWnd.OnKeyboard(self,dik,keyboard_action)
--	local bind = dik_to_bind(dik)
	if keyboard_action == ui_events.WINDOW_KEY_PRESSED then
		if dik == DIK_keys.DIK_ESCAPE then
			if game_is_running() then
				ui_mm_opt_add.check_options()
				console:execute("main_menu off")
				archievements.mm_opt()
			end

--====================мои кнопки
--ammo_vog-25p_ammo_5.45x39_ap_ammo_5.56x45_ap
elseif db.actor~=nil and dik==DIK_keys.DIK_1 then
alife():create("ammo_vog-25p",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_5.45x39_ap",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.56x45_ap",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("grenade_sg",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("strelok_turret",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("detonator",db.actor:position(),db.actor:level_vertex_id(),db.actor:game_vertex_id(),db.actor:id())
--alife():create("wpn_glock21",db.actor:position(),db.actor:level_vertex_id(),db.actor:game_vertex_id(),db.actor:id())
--alife():create("wpn_glock22",db.actor:position(),db.actor:level_vertex_id(),db.actor:game_vertex_id(),db.actor:id())
--alife():create("wpn_glock23",db.actor:position(),db.actor:level_vertex_id(),db.actor:game_vertex_id(),db.actor:id())
--alife():create("wpn_glock25",db.actor:position(),db.actor:level_vertex_id(),db.actor:game_vertex_id(),db.actor:id())
--alife():create("wpn_glock31",db.actor:position(),db.actor:level_vertex_id(),db.actor:game_vertex_id(),db.actor:id())
--alife():create("wpn_glock40",db.actor:position(),db.actor:level_vertex_id(),db.actor:game_vertex_id(),db.actor:id())
--alife():create("wpn_glock35",db.actor:position(),db.actor:level_vertex_id(),db.actor:game_vertex_id(),db.actor:id())
--alife():create("wpn_glock41",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("repair_item_weapon",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("repair_item_outfit",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("repair_item_xo",db.actor:position(),db.actor:level_vertex_id(),db.actor:game_vertex_id(),db.actor:id())		

elseif dik == DIK_keys.DIK_N then
npc_drug(506)   -- story_id НПС из файла config/game_story_ids.ltx  506 - это Петренко
--npc_drug(507) 
--npc_drug(519)
--npc_drug(30135)
--npc_drug(30136)
--npc_drug(30134)
--npc_drug(9501)        
elseif dik == DIK_keys.DIK_G then 
relations("dolg")  --группировка
--relations("freedom")
--relations("stalker")
--relations("green")
--elseif dik == DIK_keys.DIK_O then
--akill.souls_house_have()            
--shv()

elseif dik == DIK_keys.DIK_F4 then
            snp.invul_on()    
            
        elseif dik == DIK_keys.DIK_F5 then
            snp.invul_off()
--==============конец мои кнопки
далее кусок официального ui_main_menu
		else
			key_handlers.handler_press(dik,dik_to_bind(dik))
		end
	end
	if keyboard_action == ui_events.WINDOW_KEY_RELEASED then
		key_handlers.handler_release(dik,dik_to_bind(dik))
	end
   
	return true
end

if ui_mm_opt_creator.get_bool_user_param("pause_on_load") then 
	autopause.main()
end
--в конец файла добавляем описание функций
--=====================================мои функции
--506 petrenko
--507 voronin
--519 barin
--9501 сяк
--9608  = "bar_rostok_james"
function npc_drug(ob) -- Делаем непися другом
local npc = level_object_by_sid(ob) --( ... ) сюда писать story_id НПС из файла config/game_story_ids.ltx
if npc and npc:alive() then
npc:set_relation(game_object.friend, db.actor)
end
end

function level_object_by_sid( sid )
local sim = alife()  if sim then
local se_obj = sim:story_object( sid )
if se_obj then
return level.object_by_id( se_obj.id )
 end
end  return nil
end 

function relations(alians)
relation_registry.set_community_goodwill (alians, "actor", 3000)
end

--============================конец мои функции

от @Blum

 

Скрытый текст

\scripts\archievements.script

--Приводим функцию function all_ecologs_alive()
--к вот такому виду:
function all_ecologs_alive()
	local ecologs = {
		"bar_ecolog_professor",
	}

=======

С первой попытки, не извращаясь с переигрываниями и методами прохождения, ГГ вывел 4-х - и этого более чем достаточно, для морального удовлетворения и для игровой "реалистичности".

 

 

---===---

Категории

AMK-Team.ru

×
×
  • Создать...