Выкладываем различные уроки свои идеи.
Тех поддержки и ссылки на Объединённый Пак 2.2
Тех поддержка для тех кто играет с правками
Флуд в это теме не допустим, на это есть БАР
Тема | Форум | Написано | Дата |
---|---|---|---|
|
|
Выкладываем различные уроки свои идеи.
Тех поддержки и ссылки на Объединённый Пак 2.2
Тех поддержка для тех кто играет с правками
Флуд в это теме не допустим, на это есть БАР
Хочу предложить очень удобную и полезную программку "JSGME", для установки и удаления любых модов и правок в иге STALKER. Сам пользуюсь уже несколько лет. Всего за пару кликов мышки устанавливает или если надо удаляет любую правку. В случае каких то проблем с игрой Не нужно копаться в папках в поисках того что вы устанавливали.
@srsuh
1.Ссылка на скачку. Скачайте очень полезную утилиту, для смены "хоткеев" и быстрого сравнивания текста в файлах и быстрого поиска.
2.Ссылка Проги используемые: @lexa.3012
Ссылка на скачку торрента от 02.02.2021
system-software-for-windows-v351-2021-pc.rar 20.62К
скачиваний 94
Советую из-за простоты установки и не нужно делать лишних телодвижений с поиском чего-либо. lexa.3012
Описание: System software for Windows v.3.5.1
###
-DirectX (полная версия)
-Microsoft Visual С++ (2005-2008-2010-2012-2013-2019 x86 и x64 + Visual Studio 2010 F# Runtime 2.0 + F# Runtime 4.0 + Visual Basic 6.0 Runtime Plus 2.2 + Visual J# 2.0 Redistributable Package + Visual Basic 7 Runtime)
-Microsoft Visual C++ 2005-2008-2010-2012-2013-2019 Redistributable Package от Lisabon (15.01.2021)
-NET Framework Version 1.0 SP2 для Windows XP
-NET Framework Version 1.1 SP1
-NET Framework Version 3.5 SP1
-NET Framework Version 3.5 (для Windows 8, 8.1 и Server 2012 — 2012 R2)
-NET Framework Version 3.5 (для Windows 10 и Server 2019)
-NET Framework Version 4.0 (для Windows XP и Server 2003)
-NET Framework Version 4.6 Финал (для Windows Vista sp2 и Windows 8)
-NET Framework Version 4.8 Финал (DC 25.07.2019).
-NET Core Desktop Runtime 5.0.2
-Windows Media Video 9 VCM
-OpenAL 2.1.0
-Rapture3D 2.7.4
-NVIDIA PhysX 9.19.0218
-NVIDIA PhysX старая версия 9.13.1220
-NVIDIA PhysX Legacy 9.13.0604
-NVIDIA PhysX Legacy Full by CUTA
-RuntimePack Lite 20.3.3
-Games for Windows — LIVE 3.5.95.0 Final
-Java Platform SE 7 U80
-Java Platform SE 8 U281
-Java Platform SE 9.0.4 только для ОС Windows 32bit
-Java Platform SE 11.0.10 только для ОС Windows 64bit
-Java Platform SE 13.0.2 только для ОС Windows 64bit
-Java Platform SE 14.0.2 только для ОС Windows 64bit
-Java Platform SE 15.0.2 только для ОС Windows 64bit
-Java Platform от Lisabon SE JDK JRE v6 U161
-Java Platform от Lisabon SE JDK JRE v7 U161
-Java Platform от Lisabon SE JDK JRE v8 U281
-Java Platform от Lisabon SE JRE v9.0.4 только для ОС Windows 32bit
-Java Platform от Lisabon SE JDK v11.0.10 только для ОС Windows 64bit
-Java Platform от Lisabon SE JDK v13.0.2 только для ОС Windows 64bit
-Java Platform от Lisabon SE JDK v14.0.2 только для ОС Windows 64bit
-Java Platform от Lisabon SE JDK v15.0.2 только для ОС Windows 64bit
-Adobe Flash Player 32.0.0.465 для Internet Explorer
-Adobe Flash Player 32.0.0.465 для Firefox и Netscape
-Adobe Flash Player 32.0.0.465 для Opera и Chrome
-Adobe Flash Player ActiveX (для Windows 8, 8.1, 10, Server 2012-2019) 32.0.0.445
-Adobe Shockwave Player 12.3.5.205 (Repack by CUTA)
-Adobe AIR 32.0.0.125
-Microsoft Silverlight 5.1.50918.0
-Microsoft XNA Framework Redistributable (1.0, 2.0, 3.0, 3.1, 4.0)
-Microsoft XML v4.0 SP3
-Microsoft XML v6.0 SP1
-Windows Media Player Firefox Plugin 1.0.0.8
-Unity Web Player 5.3.8.0
-Vulkan Runtime 1.2.162.1
<specific_character id="actor" no_random = "1"> Под ней, после строки: <reputation>0</reputation> вставить вот это: <money min="1000000" max="1000000" infinitive="1"></money>
При проблемах обращаться к автору урока - @polkooovnik
Строки 348-350:
if db.actor:is_any_move() then --для фотки надо стоять на месте return false end
Смело комментируем
--[[if db.actor:is_any_move() then --для фотки надо стоять на месте return false end]]
Строка 357
if iAmMonster[clsid] and obj:alive() and db.actor:see(obj)
комментируем без зазрения совести
if iAmMonster[clsid] --[[and obj:alive() and db.actor:see(obj)]]
Строки 363-365
if (has_info("silent_hunt_start") and not has_info("silent_hunt_done")) and (silent_hunt_monsters[clsid] and not has_info("monster_stealth_"..silent_hunt_monsters[clsid])) and self:obj_in_shot(obj:bone_position("bip01_head"), 0, 2, 3.5, true, nil, nil, nil, nil, true)
тоже пускаем под нож, чтобы получилось
if (has_info("silent_hunt_start") and not has_info("silent_hunt_done")) and (silent_hunt_monsters[clsid] and not has_info("monster_stealth_"..silent_hunt_monsters[clsid])) --[[and self:obj_in_shot(obj:bone_position("bip01_head"), 0, 2, 3.5, true, nil, nil, nil, nil, true)]]
Строки 386-388
elseif (has_info("foto_ohota_start") and not has_info("foto_ohota_done")) and foto_ohota_monsters[section] and not has_info(foto_ohota_monsters[section]) and self:obj_in_shot(obj:center(), 5, 10, 3.0, false, nil, nil, nil, nil, false)
легким движением руки превращаем в
elseif (has_info("foto_ohota_start") and not has_info("foto_ohota_done")) and foto_ohota_monsters[section] and not has_info(foto_ohota_monsters[section]) --[[and self:obj_in_shot(obj:center(), 5, 10, 3.0, false, nil, nil, nil, nil, false)]]
---------------Мирилка с конкретным неписем--------------- --В gamedata\scripts\ui\ui_main_menu.script --После: -- elseif dik == DIK_keys.DIK_Q then --winsor:дурацкая затея... -- self:OnMessageQuitWin() --дописать: --Вызов мира с конкретным неписем начало. elseif dik == DIK_keys.DIK_I then -- Вызов: выходим в Г.Меню игры и жмём "I"-англ. "Ш"-русс. Можете поменять букву. npc_drug() get_console():execute("main_menu off") --Вызов мира с конкретным неписем конец. --Добавить в самый низ. function npc_drug() -- Делаем непися другом local npc = level_object_by_sid(425) -- Место 425 - "Боров" в скобки писать story_id НПС из файла config\game_stoty_ids.ltx Или из: gamedata\config\misc\cycle_task.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
--Быстрое лечение, по квесту Доктора + на достижения.(стоит вылечить шесть 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
в kostya_dialog.script находим function stealth2_done() и ниже замеяем 6 строк этими: create("s_inventory_box_stealth1",xyz(83.43,8.73,108.34),56772,2566) create("s_inventory_box_stealth2",xyz(83.43,8.73,108.34),56772,2566) create("s_inventory_box_stealth3",xyz(83.43,8.73,108.34),56772,2566) local obj = create("s_inventory_box_stealth4",xyz(83.43,8.73,108.34),56772,2566) obj:set_direction(0,1.57,0) create("s_inventory_box_stealth5",xyz(83.43,8.73,108.34),56772,2566)
в arhara_dialog.script находим function spawn_joystik() local a = table.random(anders_joystik) и строку ниже заменяем этим: obj = create("pult_anders", xyz(a.position.x,a.position.y,a.position.z), a.lv, a.gv) level.map_add_object_spot_ser(obj.id, "red_location", "Джойстик") -- метка Eugen81 Автор адаптации: Christobal Hunta
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.9, на постоянное использование лучше не ставить! Если приперло - не можешь "дотянуться", только на время проблемы и потом вернуть обратно.
--Быстрое лечение, по квесту Доктора + на достижения.(стоит вылечить шесть 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
scripts\binders\bind_actor --loc_radiation.update()
gamedata\scripts\arhara_dialog.script Добавляем что нужно. Тут пример добавления простого штык-ножа, мед-аптечки, мухомора, пива, консервы и немного)) денег --' получим аптечку и пм от Звездочёта function noz_dat() got("wpn_pm") got("wpn_6x4_knife") got("medkit") got("medkit_scientic") got("mushroom") got("beer_a") got("conserva") got_money(3000) end =========================== Если хочется все "сделать красиво", правим еще и диалог, в: config\text\dialogs_arhara.xml Ищем в нем текст: "Ты вот что... Держи аптечку и пистолет. Патронов нет, извини." - и меняем на что угодно, насколько фантазии хватит
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 }
Пример на жетоне монолитовца. В gamedata\config\misc\quest_items.ltx находим по army_counter [army_counter]:II_DOC visual = dynamics\equipments\geton.ogf description = army_counter inv_name = army_counter_name quest_item = false ;вместо true ставим false inv_weight = 0.01 inv_grid_width = 2 inv_grid_height = 1 inv_grid_x = 69 inv_grid_y = 16 cost = 100 То же самое можно проделать с любым предметом, даже если этой строчки в его конфиге нет. В таком случае ее нужно добавить. Некоторые предметы могут быть не в quest_items.ltx а в item.ltx ----------------- от @tihik
В 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
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, ставить не стоит. Да и то, только в начале игры, а как прибарахлились, лучше эту правку убрать.
Все волшебство тут, погляди для саморазвития, показометр синий(только кнопки надо свои назначать) спавнер - зеленый. ============================================== function main_menu:StartGame() ui_mm_opt_add.check_options() if (alife() ~= nil) then console:execute ("disconnect") end console:execute("start server(all/single/alife/new) client(localhost)") console:execute("main_menu off") archievements.on_new_game() end --===спавнер===-- function main_menu:OnButton_load_spawn() if self.spawn_dlg == nil then self.spawn_dlg = ui_cheat_naxac.cheat_menu() self.spawn_dlg.owner = self end self:GetHolder():start_stop_menu(self.spawn_dlg, true) self:GetHolder():start_stop_menu(self, true) --new self:Show(false) end --===спавнер===-- function main_menu:OnButton_save_clicked() local save_dlg = ui_save_dialog.save_dialog() save_dlg.owner = self self:GetHolder():start_stop_menu(save_dlg, true) self:GetHolder():start_stop_menu(self, true) --new self:Show(false) end function main_menu:OnButton_options_clicked() local opt_dlg = ui_mm_opt_main.options_dialog() opt_dlg.owner = self opt_dlg:UpdateControls() self:GetHolder():start_stop_menu(opt_dlg, true) self:GetHolder():start_stop_menu(self, true) --new self:Show(false) amk_mod.hud_update = true end function main_menu:OnButton_load_clicked() local load_dlg = ui_load_dialog.load_dialog() load_dlg.owner = self self:GetHolder():start_stop_menu(load_dlg, true) self:GetHolder():start_stop_menu(self, true) --new self:Show(false) end ---Показометр адпатация PLK --- 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 elseif key_handlers.handler_press(dik,dik_to_bind(dik)) then elseif dik == DIK_keys.DIK_L then self:OnButton_last_save() -- лютый котик, ебашит все в онлайне -- elseif dik == DIK_keys.DIK_P then pokazometr.show_actor_position() -- показывает барбитуру и коды от дверей -- elseif dik == DIK_keys.DIK_O then pokazometr.obkolishi_i_barbiturshiki() -- котик выкашивающих все в радиусе 70м-- elseif dik == DIK_keys.DIK_V then pokazometr.final_victory() --- чистильщик трупов, выкашивание трулей, давление жабы, тушение аномалий партиклями -- elseif dik == DIK_keys.DIK_H then pokazometr.cleaner() --- лечение, вывод радиации, показ координтатов -- elseif dik == DIK_keys.DIK_NUMPAD4 then pokazometr.zdoroviy() --- выдача 100к --- elseif dik == DIK_keys.DIK_K then pokazometr.bablo() --- показ меток на херобору -- elseif dik == DIK_keys.DIK_NUMPAD1 then pokazometr.set_spots() --- удаление меток вручную --- elseif dik == DIK_keys.DIK_NUMPAD2 then pokazometr.del_spots() -- показ аномалий на мини-карте -- elseif dik == DIK_keys.DIK_NUMPAD3 then pokazometr.show_anomalies() -- набор багфиксов, необходимы тесты -- elseif dik == DIK_keys.DIK_U then pokazometr.armistice() -- показ рестрикторов -- elseif dik == DIK_keys.DIK_NUMPAD5 then pokazometr.show_restrictors() -- Полёт на болте -- elseif dik == DIK_keys.DIK_NUMPAD6 then pokazometr.pokaz_stalkerov() -- показ мобов и сталкеров -- elseif dik == DIK_keys.DIK_M then pokazometr.show_mobs() --- нюх на все, отлов обьектов в радиусе 5м с записью лога--- elseif dik == DIK_keys.DIK_NUMPAD8 then pokazometr.nuh_na_vse() elseif dik == DIK_keys.DIK_Q then self:OnMessageQuitWin() --===спавнер===-- elseif dik == DIK_keys.DIK_S then self:OnButton_load_spawn() --===спавнер===-- 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 ============================================== ============================================== ============================================== Если хочется несколько спавнеров, делаем так: --===спавнеры===-- function main_menu:OnButton_load_spawnnaxac() if self.spawnnaxac_dlg == nil then self.spawnnaxac_dlg = ui_cheat_naxac.cheat_menu() self.spawnnaxac_dlg.owner = self end self:GetHolder():start_stop_menu(self.spawnnaxac_dlg, true) self:GetHolder():start_stop_menu(self, true) --new self:Show(false) end ----------------- function main_menu:OnButton_load_spawnkot() if self.spawnkot_dlg == nil then self.spawnkot_dlg = spawner.spawn_items_dialog() self.spawnkot_dlg.owner = self end self:GetHolder():start_stop_menu(self.spawnkot_dlg, true) self:GetHolder():start_stop_menu(self, true) self:Show(false) end --=============-- --******************************-- --===спавнеры===-- elseif dik == DIK_keys.DIK_S then self:OnButton_load_spawnnaxac() --==============-- elseif dik == DIK_keys.DIK_D then self:OnButton_load_spawnkot() --===спавнеры===--
от @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
Вариант от 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
Похоже разобрался с выпадением исправных стволов и броников. Разработчики убрали из death_manager.script вот эти параметры:
local global_rebalance_cond = 15 --тут ставим 0 и разброса не будет local global_rebalance_loot = 0.1 local global_rebalance_cond = 15 --тут ставим 0 и разброса не будет local global_rebalance_loot = 0.1 Без них, все остальное вообще не работает. Остальное правится так же как и в 2.1, по этому мануалу.
-------------------
upd: не большое уточнение, с уровнем сложности еще увязанно, меняем -5 на 0
return -5 * level.get_game_difficulty() return -5 * level.get_game_difficulty()
Использовать при крайней необходимости и обязательно сделать именное сохранение и бэкап gamedata, перед манипуляциями с поршнями! А то можно так надвигать, что только хуже станет. В ui_main_menu.script добавить после:
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 --===Поршневая вызов===-- elseif dik == DIK_keys.DIK_H then dvinem_porsh.dvinem_porsh_0() elseif dik == DIK_keys.DIK_J then dvinem_porsh.dvinem_porsh_1() elseif dik == DIK_keys.DIK_K then dvinem_porsh.dvinem_porsh_2() --===**************===-- Создать скрипт: \scripts\dvinem_porsh.script с таким содержанием: --===Поршневая===-- function dvinem_porsh_0() db.actor: give_info_portion("тут вписываем поршень") end function dvinem_porsh_1() db.actor: give_info_portion("koloda_kuznec_done") end function dvinem_porsh_2() db.actor: give_info_portion("souls_house_done") end --koloda_kuznec_done - колода Кузнецова --souls_house_done - Дом духов --snipers_kuzya_done - Устранение помех --===Поршневая===-- function dvinem_porsh_0() db.actor: give_info_portion("тут вписываем поршень") end function dvinem_porsh_1() db.actor: give_info_portion("koloda_kuznec_done") end function dvinem_porsh_2() db.actor: give_info_portion("souls_house_done") end --koloda_kuznec_done - колода Кузнецова --souls_house_done - Дом духов --snipers_kuzya_done - Устранение помех Вызовы и функции, не обязательно делать 3, лучше 1 и перезаписывать. И в гл.меню жми что нужно. Все поршни тут: \config\gameplay --info_aem.xml --info_arhara.xml --info_buusty.xml --info_encyclopedia.xml --info_new.xml --info_oksana579.xml --info_storyline.xml --info_v92.xml --info_volazar.xml --info_wawka.xml Но искать нужный сначала надо по названию задания(без ошибок) во всех конфигах
Все волшебство тут, погляди для саморазвития, показометр синий(только кнопки надо свои назначать) спавнер - зеленый. ============================================== function main_menu:StartGame() ui_mm_opt_add.check_options() if (alife() ~= nil) then console:execute ("disconnect") end console:execute("start server(all/single/alife/new) client(localhost)") console:execute("main_menu off") archievements.on_new_game() end --===спавнер===-- function main_menu:OnButton_load_spawn() if self.spawn_dlg == nil then self.spawn_dlg = ui_cheat_naxac.cheat_menu() self.spawn_dlg.owner = self end self:GetHolder():start_stop_menu(self.spawn_dlg, true) self:GetHolder():start_stop_menu(self, true) --new self:Show(false) end --===спавнер===-- function main_menu:OnButton_save_clicked() local save_dlg = ui_save_dialog.save_dialog() save_dlg.owner = self self:GetHolder():start_stop_menu(save_dlg, true) self:GetHolder():start_stop_menu(self, true) --new self:Show(false) end function main_menu:OnButton_options_clicked() local opt_dlg = ui_mm_opt_main.options_dialog() opt_dlg.owner = self opt_dlg:UpdateControls() self:GetHolder():start_stop_menu(opt_dlg, true) self:GetHolder():start_stop_menu(self, true) --new self:Show(false) amk_mod.hud_update = true end function main_menu:OnButton_load_clicked() local load_dlg = ui_load_dialog.load_dialog() load_dlg.owner = self self:GetHolder():start_stop_menu(load_dlg, true) self:GetHolder():start_stop_menu(self, true) --new self:Show(false) end ---Показометр адпатация PLK --- 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 elseif key_handlers.handler_press(dik,dik_to_bind(dik)) then elseif dik == DIK_keys.DIK_L then self:OnButton_last_save() -- лютый котик, ебашит все в онлайне -- elseif dik == DIK_keys.DIK_P then pokazometr.show_actor_position() -- показывает барбитуру и коды от дверей -- elseif dik == DIK_keys.DIK_O then pokazometr.obkolishi_i_barbiturshiki() -- котик выкашивающих все в радиусе 70м-- elseif dik == DIK_keys.DIK_V then pokazometr.final_victory() --- чистильщик трупов, выкашивание трулей, давление жабы, тушение аномалий партиклями -- elseif dik == DIK_keys.DIK_H then pokazometr.cleaner() --- лечение, вывод радиации, показ координтатов -- elseif dik == DIK_keys.DIK_NUMPAD4 then pokazometr.zdoroviy() --- выдача 100к --- elseif dik == DIK_keys.DIK_K then pokazometr.bablo() --- показ меток на херобору -- elseif dik == DIK_keys.DIK_NUMPAD1 then pokazometr.set_spots() --- удаление меток вручную --- elseif dik == DIK_keys.DIK_NUMPAD2 then pokazometr.del_spots() -- показ аномалий на мини-карте -- elseif dik == DIK_keys.DIK_NUMPAD3 then pokazometr.show_anomalies() -- набор багфиксов, необходимы тесты -- elseif dik == DIK_keys.DIK_U then pokazometr.armistice() -- показ рестрикторов -- elseif dik == DIK_keys.DIK_NUMPAD5 then pokazometr.show_restrictors() -- Полёт на болте -- elseif dik == DIK_keys.DIK_NUMPAD6 then pokazometr.pokaz_stalkerov() -- показ мобов и сталкеров -- elseif dik == DIK_keys.DIK_M then pokazometr.show_mobs() --- нюх на все, отлов обьектов в радиусе 5м с записью лога--- elseif dik == DIK_keys.DIK_NUMPAD8 then pokazometr.nuh_na_vse() elseif dik == DIK_keys.DIK_Q then self:OnMessageQuitWin() --===спавнер===-- elseif dik == DIK_keys.DIK_S then self:OnButton_load_spawn() --===спавнер===-- 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 ============================================== ============================================== ============================================== Если хочется несколько спавнеров, делаем так: --===спавнеры===-- function main_menu:OnButton_load_spawnnaxac() if self.spawnnaxac_dlg == nil then self.spawnnaxac_dlg = ui_cheat_naxac.cheat_menu() self.spawnnaxac_dlg.owner = self end self:GetHolder():start_stop_menu(self.spawnnaxac_dlg, true) self:GetHolder():start_stop_menu(self, true) --new self:Show(false) end ----------------- function main_menu:OnButton_load_spawnkot() if self.spawnkot_dlg == nil then self.spawnkot_dlg = spawner.spawn_items_dialog() self.spawnkot_dlg.owner = self end self:GetHolder():start_stop_menu(self.spawnkot_dlg, true) self:GetHolder():start_stop_menu(self, true) self:Show(false) end --=============-- --******************************-- --===спавнеры===-- elseif dik == DIK_keys.DIK_S then self:OnButton_load_spawnnaxac() --==============-- elseif dik == DIK_keys.DIK_D then self:OnButton_load_spawnkot() --===спавнеры===--
-- Путь: 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
Подсказки:
Для поиска нужно полностью распаковать все файлы мода или игры в отдельную папку включая все патчи и фиксы.
Поиск будет производиться с помощью программы Total Commander.
Разбираться и знать эту программу совсем не обязательно. Достаточно запомнить расположение всего одной кнопки.
Примеры:
1. Поиск конкретного оружия по его описанию:
Допустим вы прочитали вот такое описание нужного вам ствола
"FN SCAR-Н - боевая штурмовая винтовка калибра 7,62 НАТО, разработанная американским подразделением бельгийской компании FN Herstal в 2004 году. SCAR-H Mk.17 Mod.0 штатно комплектуется съёмными открытыми прицельными приспособлениями, состоящими из складного регулируемого по дальности диоптрического целика и складной же мушки. Кроме того, на винтовку могут устанавливаться любые дневные или ночные прицелы с соответствующими кронштейнами. Приклад у всех вариантов винтовки FN SCAR складной вбок. Ресурс ствола винтовки составляет 16 000 выстрелов и более."
И хотите найти его параметры и прочее.
Для этого открываете Total Commander, а в нём папку с распакованными файлами игры или мода.
Так как параметры предметов находятся в подпапке config, то для ускорения поиска вам нужно открыть уже эту папку config.
Далее нажимаете на иконку с рисунком бинокля в шапке программы, ставите галочку в квадратике "С текстом", и пишите справа от галочки нужный для поиска текст.
В нашем случае мы возьмём вот этот кусочек - подразделением бельгийской компании FN Herstal
ВНИМАНИЕ !!! Текст должен быть абсолютно точным включая пробелы и знаки препинания.
Далее нажимаете кнопку "Начать поиск" и ждёте его окончания.
В результате поиска был найден один файл. Это arsenal_mod.xml
Кликаете 2 раза левой кнопкой мышки на строке с найденным файлом в окне "Результаты поиска", и программа автоматически найдёт вам этот файл.
Далее открываете этот найденный файл в текстовом редакторе (хоть в блокноте) и ищете заданное вами словосочетание - подразделением бельгийской компании FN Herstal
Нужный вам текст идёт под заголовком - <string id="enc_arsenal_scar_cry">
Возвращаетесь в подпапку config, и снова запускаете поиск уже по словосочетанию - enc_arsenal_scar_cry
В результате поиска было найдено два файла, но нам нужен только один расположенный в подпапке config\weapons\arsenal_mod\ar
Это файл w_scar_cry.ltx.
Всё... Мы нашли нужный нам ствол.
Поиск предмета по его названию осуществляется точно также.
2. Поиск неизвестного предмета по фразам в диалогах:
Допустим в разговоре с Кузькиной матерью вы прочитали вот такой диалог
" У меня на Большой Земле племянница сильно заболела. Сестра моя очень упрямая и консервативная в этом вопросе, не признает никакие современные лекарства, и лечит дочку только травами. Я и в Зону-то подалась только из-за этого лекарства. Всё, что нужно, заготовила и спрятала в двух разных местах."
Берём кусочек диалога - У меня на Большой Земле племянница сильно заболела
и ищем по этим словам в папке config.
Находим в config\text\rus файл stable_dialogs_buusty.xml
Открываем его в текстовом редакторе и ищем эту фразу.
Эта фраза идёт под заголовком - <string id="kuzmat_dialog1_5">
Обращаем внимание на характерное слово - kuzmat
Опять запускаем поиск в папке config уже по этому слову.
В результате будет найдено очень много файлов, но нас интересует предмет, а конфиги предметов обычно прописаны в подпапке config\misc
В этой подпапке найдено два файла.
Просматриваем оба на наличие слова kuzmat, и в файле arhara_items.ltx находим нужный предмет.
Это lekarstvo_kuzmat.
Также как и в примере с оружием можно найти тоже самое по названию предмета.
Например вы случайно продали одну банку настойки "Цитомегалия" для Кузькиной матери, и хотите её заспавнить, прописать в продажу и так далее...
Ищем по точному названию предмета. Это слово - Цитомегалия
Поиск вывел название файла содержащего это слово - string_table_enc_equipment.xml
Открываем этот файл, ищем нужное слово и смотрим как оно прописано в файлах игры
<string id="lekarstvo_kuzmat"> <text>Настойка "Цитомегалия"</text> </string> <string id="enc_equipment_lekarstvo_kuzmat"> <text>Лекарственный сбор "Цитомегалия". Способствует подавлению вирусной и бактериальной инфекции. Предупреждает и тормозит воспалительные процессы в организме. Повышает иммунитет, оказывает общеукрепляющее, защитное действие. Настоен на чистом спирту. Не употреблять в чистом виде и без особых рекомендаций врача!</text> </string>
Далее:
Берём например enc_equipment_lekarstvo_kuzmat и снова запускаем поиск уже по этому новому слову.
Получаем наводку на другой файл содержащий конфиги предметов - arhara_items.ltx
Открываем этот новый файл и ищем enc_equipment_lekarstvo_kuzmat
Получаем название предмета:
[lekarstvo_kuzmat]:lekarstvo
description = enc_equipment_lekarstvo_kuzmat
inv_name = lekarstvo_kuzmat
inv_name_short = lekarstvo_kuzmat
Поиск неизвестного предмета по фразам в диалогах:
Допустим в разговоре с Кузькиной матерью вы прочитали вот такой диалог
" У меня на Большой Земле племянница сильно заболела. Сестра моя очень упрямая и консервативная в этом вопросе, не признает никакие современные лекарства, и лечит дочку только травами. Я и в Зону-то подалась только из-за этого лекарства. Всё, что нужно, заготовила и спрятала в двух разных местах."
Берём кусочек диалога - У меня на Большой Земле племянница сильно заболела
и ищем по этим словам в папке config.
Находим в config\text\rus файл stable_dialogs_buusty.xml
Открываем его в текстовом редакторе и ищем эту фразу.
Эта фраза идёт под заголовком - <string id="kuzmat_dialog1_5">
Обращаем внимание на характерное слово - kuzmat
Опять запускаем поиск в папке config уже по этому слову.
В результате будет найдено очень много файлов, но нас интересует предмет, а конфиги предметов обычно прописаны в подпапке config\misc
В этой подпапке найдено два файла.
Просматриваем оба на наличие слова kuzmat, и в файле arhara_items.ltx находим нужный предмет.
Это lekarstvo_kuzmat.
Также как и в примере с оружием можно найти тоже самое по названию предмета.
Например вы случайно продали одну банку настойки "Цитомегалия" для Кузькиной матери, и хотите её заспавнить, прописать в продажу и так далее...
Ищем по точному названию предмета. Это слово - Цитомегалия
Поиск вывел название файла содержащего это слово - string_table_enc_equipment.xml
Открываем этот файл, ищем нужное слово и смотрим как оно прописано в файлах игры
<string id="lekarstvo_kuzmat"> <text>Настойка "Цитомегалия"</text> </string> <string id="enc_equipment_lekarstvo_kuzmat"> <text>Лекарственный сбор "Цитомегалия". Способствует подавлению вирусной и бактериальной инфекции. Предупреждает и тормозит воспалительные процессы в организме. Повышает иммунитет, оказывает общеукрепляющее, защитное действие. Настоен на чистом спирту. Не употреблять в чистом виде и без особых рекомендаций врача!</text> </string>
Далее:
Берём например enc_equipment_lekarstvo_kuzmat и снова запускаем поиск уже по этому новому слову.
Получаем наводку на другой файл содержащий конфиги предметов - arhara_items.ltx
Открываем этот новый файл и ищем enc_equipment_lekarstvo_kuzmat
Получаем название предмета:
[lekarstvo_kuzmat]:lekarstvo description = enc_equipment_lekarstvo_kuzmat inv_name = lekarstvo_kuzmat inv_name_short = lekarstvo_kuzmat
Замена награды в квестах:
Допустим вы хотите заменить автомат выдаваемый Волком на что то другое.
Сохраняемся перед сдачей квеста, сдаём его и смотрим какой автомат получили.
Находим (как описано выше) точное название этого автомата.
Пусть это будет wpn_ak74u.
В папке scripts запускаем поиск по wpn_ak74u
Будет найдено очень много файлов которые придётся просмотреть на предмет нахождения wpn_ak74u.
Ищем наиболее подходящее по смыслу.
Находим требуемое в файле sak_dialog.script.
Это
function take_sescape_lager_volk_ak(first_speaker, second_speaker) dialogs.relocate_item_section(first_speaker, "wpn_ak74u", "in") end Заменяем название оружия в скобочках на нужное. function take_sescape_lager_volk_ak(first_speaker, second_speaker) dialogs.relocate_item_section(first_speaker, "wpn_vintorez", "in") end
Снова загружаем сделанное ранее сохранение, и получаем у Волка Винторез.
Если нужно много предметов, то просто дублируем строку и вставляем нужное.
function take_sescape_lager_volk_ak(first_speaker, second_speaker)
dialogs.relocate_item_section(first_speaker, "wpn_vintorez", "in")
dialogs.relocate_item_section(first_speaker, "wpn_spas12", "in")
end
Если нужны деньги, то добавляем следующее:
dialogs.relocate_money(second_speaker, 10000, "in") где 10000 - это сумма.
Если нужно много патронов, то добавляем следующее:
sak.create_items_actor("ammo_12x70_kart",9)
где 9 - это количество пачек
Аптечки, гранаты и прочее добавляются точно также.
ИТОГО:
Такими способами можно найти что угодно и где угодно, вплоть до поршней и что вам еще взбредет в голову.
В Total Commander есть ещё одна полезная функция - это сравнение файлов по содержимому.
Открываем в левой и правой половинах программы файлы которые вы хотите сравнить. Они должны иметь одинаковое название.
Выделяете нужный вам файл. и в шапке программы под заголовком "файлы" нажимаете на - Сравнить по содержимому...
Изменения в файлах будут выделены другим цветом.
С помощью этого сравнения можно корректировать что угодно. Например подогнать скрипты под новый патч.
p.p.s.
Надеюсь после описанного выше в темах по моду будет поменьше одинаковых и просто осточертевших просьб типа - как называется и где находится...
Автор @shahvkit
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
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
scripts\ai\rx_gl.script stor.can_fire = true ;false stor.can_fire = true ;false
-----------------
от Prophet13
[army_counter]:II_DOC visual = dynamics\equipments\geton.ogf description = army_counter inv_name = army_counter_name quest_item = false ;вместо true ставим false inv_weight = 0.01 inv_grid_width = 2 inv_grid_height = 1 inv_grid_x = 69 inv_grid_y = 16 cost = 100
То же самое можно проделать с любым предметом, даже если этой строчки в его конфиге нет. В таком случае ее нужно добавить. Некоторые предметы могут быть не в quest_items.ltx а в item.ltx
-----------------
от tihik
Все волшебство тут, погляди для саморазвития, показометр синий(только кнопки надо свои назначать) спавнер - зеленый. ============================================== function main_menu:StartGame() ui_mm_opt_add.check_options() if (alife() ~= nil) then console:execute ("disconnect") end console:execute("start server(all/single/alife/new) client(localhost)") console:execute("main_menu off") archievements.on_new_game() end --===спавнер===-- function main_menu:OnButton_load_spawn() if self.spawn_dlg == nil then self.spawn_dlg = ui_cheat_naxac.cheat_menu() self.spawn_dlg.owner = self end self:GetHolder():start_stop_menu(self.spawn_dlg, true) self:GetHolder():start_stop_menu(self, true) --new self:Show(false) end --===спавнер===-- function main_menu:OnButton_save_clicked() local save_dlg = ui_save_dialog.save_dialog() save_dlg.owner = self self:GetHolder():start_stop_menu(save_dlg, true) self:GetHolder():start_stop_menu(self, true) --new self:Show(false) end function main_menu:OnButton_options_clicked() local opt_dlg = ui_mm_opt_main.options_dialog() opt_dlg.owner = self opt_dlg:UpdateControls() self:GetHolder():start_stop_menu(opt_dlg, true) self:GetHolder():start_stop_menu(self, true) --new self:Show(false) amk_mod.hud_update = true end function main_menu:OnButton_load_clicked() local load_dlg = ui_load_dialog.load_dialog() load_dlg.owner = self self:GetHolder():start_stop_menu(load_dlg, true) self:GetHolder():start_stop_menu(self, true) --new self:Show(false) end ---Показометр адпатация PLK --- 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 elseif key_handlers.handler_press(dik,dik_to_bind(dik)) then elseif dik == DIK_keys.DIK_L then self:OnButton_last_save() -- лютый котик, ебашит все в онлайне -- elseif dik == DIK_keys.DIK_P then pokazometr.show_actor_position() -- показывает барбитуру и коды от дверей -- elseif dik == DIK_keys.DIK_O then pokazometr.obkolishi_i_barbiturshiki() -- котик выкашивающих все в радиусе 70м-- elseif dik == DIK_keys.DIK_V then pokazometr.final_victory() --- чистильщик трупов, выкашивание трулей, давление жабы, тушение аномалий партиклями -- elseif dik == DIK_keys.DIK_H then pokazometr.cleaner() --- лечение, вывод радиации, показ координтатов -- elseif dik == DIK_keys.DIK_NUMPAD4 then pokazometr.zdoroviy() --- выдача 100к --- elseif dik == DIK_keys.DIK_K then pokazometr.bablo() --- показ меток на херобору -- elseif dik == DIK_keys.DIK_NUMPAD1 then pokazometr.set_spots() --- удаление меток вручную --- elseif dik == DIK_keys.DIK_NUMPAD2 then pokazometr.del_spots() -- показ аномалий на мини-карте -- elseif dik == DIK_keys.DIK_NUMPAD3 then pokazometr.show_anomalies() -- набор багфиксов, необходимы тесты -- elseif dik == DIK_keys.DIK_U then pokazometr.armistice() -- показ рестрикторов -- elseif dik == DIK_keys.DIK_NUMPAD5 then pokazometr.show_restrictors() -- Полёт на болте -- elseif dik == DIK_keys.DIK_NUMPAD6 then pokazometr.pokaz_stalkerov() -- показ мобов и сталкеров -- elseif dik == DIK_keys.DIK_M then pokazometr.show_mobs() --- нюх на все, отлов обьектов в радиусе 5м с записью лога--- elseif dik == DIK_keys.DIK_NUMPAD8 then pokazometr.nuh_na_vse() elseif dik == DIK_keys.DIK_Q then self:OnMessageQuitWin() --===спавнер===-- elseif dik == DIK_keys.DIK_S then self:OnButton_load_spawn() --===спавнер===-- 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 ============================================== ============================================== ============================================== Если хочется несколько спавнеров, делаем так: --===спавнеры===-- function main_menu:OnButton_load_spawnnaxac() if self.spawnnaxac_dlg == nil then self.spawnnaxac_dlg = ui_cheat_naxac.cheat_menu() self.spawnnaxac_dlg.owner = self end self:GetHolder():start_stop_menu(self.spawnnaxac_dlg, true) self:GetHolder():start_stop_menu(self, true) --new self:Show(false) end ----------------- function main_menu:OnButton_load_spawnkot() if self.spawnkot_dlg == nil then self.spawnkot_dlg = spawner.spawn_items_dialog() self.spawnkot_dlg.owner = self end self:GetHolder():start_stop_menu(self.spawnkot_dlg, true) self:GetHolder():start_stop_menu(self, true) self:Show(false) end --=============-- --******************************-- --===спавнеры===-- elseif dik == DIK_keys.DIK_S then self:OnButton_load_spawnnaxac() --==============-- elseif dik == DIK_keys.DIK_D then self:OnButton_load_spawnkot() --===спавнеры===--