Привіт всім. Задався я якось метою зробити в "СТАЛКЕРі" (версія 1.0004) машини, юзабельність яких залежить від наявності в інвентарі РР конкретного предмета, а саме ключів від цього транспорту. Сповн автотехніки - пройдений етап, не загострюватиму увагу, скажу лише, що тут прив'язав спавн машини до діалогу з корумпованим майором на Кордоні. Відкриваємо файл config\gameplay\dialogs_escape.xml і знаходимо рядок:
<text>esc_bridge_soldiers_start_11</text>
і після неї додаємо:
<action>esc_modify.spawn_niva</action>
Виглядає так:
<phrase id = "11" > <text > esc_bridge_soldiers_start_11 </text > <action > esc_modify.spawn_niva </action > <next > 12 </next > </phrase >
Прописує ключі від Ниви у файлик config\misc\item.ltx таким чином:
;;;;;;;;;;;;;--ключ від ниви--;;;;;;;;;;;;; [ niva_keys ] :identity_immunities GroupControlSection = spawn_group discovery_dependency = $ spawn = " devices\quest_items\niva_keys " class = II_ATTCH cform = skeleton visual = equipments \ item_minipda.ogf ; іконка флешки radius = 1 description = item_niva_key inv_name = item_car_key inv_name_short = item v_grid_height = 1 inv_grid_x = 11 inv_grid_y = 23 cost = 0
Пропишемо русифікацію назви та опису ключа від Ниви. У файлі config\text\rus\string_table_enc_equipment.xml перед </string_table> напишемо:
<string id= "item_car_key" > <text>Ключ від Ниви</text> </string> <string id= "item_niva_key" > <text>Ключ необхідний, щоб відкрити двері від автомобіля Нива</text> </string>
Створюємо файл config\creatures\vechicles.ltx , вписуємо туди конфіг Ниви з пропискою логіки:
[ vehicle_niva ] GroupControlSection = spawn_group $ spawn = "vehicles\veh_niva" class = SCRPTCAR cform = skeleton visual = physics \ vehicles\niva\veh_niva_u_01.ogf actor_visual = physics\vehicles\niva\ veve _mass = 13000 script_binding = bind_physic_object.init custom_data = scripts\cars\niva_data.ltx ; шлях до логіки
Прописує сам файл vechicles.ltx на початку файлу system.ltx :
#include "creatures\vechicles.ltx"
Після цього створюємо файл логіки config\scripts\cars\niva_data.ltx , з вмістом:
[ logic ] active = ph_car [ ph_car ] usable = { +actor_has_niva_key }
Додав до config\gameplay\info_l01escape.xml потрібну інфопорцію:
<info_portion id= "actor_has_niva_key" ></info_portion>
А далі цікаво – активувати перевірку наявності у ГГ ключів додумався так: впровадив у скрипт scripts\escape_tasks.script з опитуванням інфопорцій свої рядки: Знаходимо цей блок функції
if not has_alife_info ( "tutorial_artefact_start" ) і не has_alife_info ( "tutorial_artefact_gain" ) and actor:object ( "af_blood_tutorial" ) ~= nil then actor:give_info_portion ( "tutorial_artefact_gain" ) end
Додаємо:
-----------------------moi_mod-------------------- if actor:object ( " niva_keys" ) ~= nil then actor:give_info_portion ( "actor_has_niva_key" ) elseif actor:object ( "niva_keys" ) == nil then actor:disable_info_portion ( "actor_has_niva_key" ) return true end ----------- -----------------------------------------
Вийшло в результаті ось що: актор знайшов (купив) ключі, сів у машину і поїхав, а втратив чи викинув (продав, пропив і т.д.) – усередину не влучити, як не намагайся.
У моєму моді: На Кордоні у майора Кузнєцова (під мостом) сповниться "Нива" і забуті на ящику з випивкою - ключі від неї. ГГ платить військовим, що напідпитку, за прохід, і тут же, підібравши ключі, сідає в машину і зникає, залишивши майора з товаришами у великому (порівняльно) збитку. Другий варіант: Все те ж саме, тільки військові розуміють швидко і відкривають вогонь на поразку, як тільки актор сідає в "Ниву". Хоча – якщо не гальмувати – і тут встигаєш свинтити.
Це реалізовано так - сама Нива сповниться мною прямо за мостом. Створюємо файл скрипта ( scripts \ esc_modify.script ) і пишемо в ньому:
function spawn_niva ( ) alife ( ) : create ( "vehicle_niva " , vector ( ) : set ( 58.205856 , -2.393073 , 189.756988 ) , 345171 , ) ( " ) , vector ( ) : set ( 61.393852 , -0.143696695 , 154.954849 ) , 349686 , 97 ) end
У файлі config\gameplay\info_l01escape.xml акція "відкрити вогонь" прив'язана до повідомлення Торговця про вдале перетинання залізничного насипу (за умови, природно, що герой узяв чужі ключі):
<info_portion id= "esc_find_railroad_passage_done" > ;рідна частина <action>esc_modify.kill_thief</action> ;додано </info_portion> ;рідна частина
тобто додано посилання на скрипт esc_modify.script та функцію в ньому kill_thief .
Пишемо у файлі ( scripts\esc_modify.script ) наступне:
function kill_thief ( ) if has_alife_info ( "actor_has_niva_key" ) then db.actor:give_info_portion ( "esc_bridge_pass_fire" ) end end
Логічно ось що: якщо ГГ не взяв ключі (або взяв, але схаменувся і викинув), то в спину йому ніхто не стрільне, однак і машину вже не викрасти.
Залишилося останнє, прописати кнопку, щоб завести двигун Ниви. У файлі config\ui\ui_keybinding.xml пишемо у групі kb_grp_common наступне:
<command id= "kb_turn_engine" exe= "turn_engine" />
Виглядає так:
<group name= "kb_grp_common" > <command id= "kb_turn_engine" exe= "turn_engine" /> <command id= "kb_pause" exe= "pause" /> <command id= "kb_use" exe= "use" /> <command id= "kb_screenshot" exe= "screenshot" /> <command id= "kb_quit" exe= "quit" /> <command id= "kb_console" exe= "console" /> <command id= "ui_mm_save_game" exe= "quick_save" /> <command id= "ui_mm_load_game" exe= "quick_load" /> </group>
Тепер заходимо у гру і призначаємо клавішу, щоб завести двигун.