Сповіщення
Очистити все

SoC. Авторозбір


Ранг:
Майстер
Роль:
Гість
Записи:
752
Приєднався:
2 роки тому
 

Привіт всім. Задався я якось метою зробити в "СТАЛКЕРі" (версія 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>
 

Тепер заходимо у гру і призначаємо клавішу, щоб завести двигун.


   
Цитата