SoC. Авторазбор — различия между версиями — S.T.A.L.K.E.R. Inside Wiki

SoC. Авторазбор — различия между версиями

Материал из S.T.A.L.K.E.R. Inside Wiki

Перейти к: навигация, поиск
(qlxUHjBwCQmisGnXGsi)
м
 
(не показаны 10 промежуточные версии 4 участников)
Строка 1: Строка 1:
comment1,
+
Привет всем. Задался я как-то целью сделать в "СТАЛКЕРе" (версия 1.0004) машины, юзабельность которых
 +
зависит от наличия в инвентаре ГГ конкретного предмета, а именно ключей от данного транспорта.
 +
Спавн автотехники - пройденный этап, не буду заострять внимание, скажу лишь, что здесь привязал спавн машины к диалогу с коррумпированным майором на Кордоне.
 +
Открываем файл '''config\gameplay\dialogs_escape.xml''', и находим строку:
 +
<ini>
 +
<text>esc_bridge_soldiers_start_11</text>
 +
</ini>
 +
и после неё добавляем:
 +
<ini>
 +
<action>esc_modify.spawn_niva</action>
 +
</ini>
 +
Выглядит будет так:
 +
<xml>
 +
<phrase id="11">
 +
<text>esc_bridge_soldiers_start_11</text>
 +
<action>esc_modify.spawn_niva</action>
 +
<next>12</next>
 +
</phrase>
 +
</xml>
 +
 
 +
Прописывает ключи от Нивы в файлик '''config\misc\item.ltx''' таким образом:
 +
 
 +
<ini>
 +
;;;;;;;;;;;;--ключ от нивы--;;;;;;;;;;;;
 +
[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_car_key
 +
inv_weight                      = 0
 +
inv_grid_width                  = 1
 +
inv_grid_height                = 1
 +
inv_grid_x                      = 11
 +
inv_grid_y                      = 23
 +
cost                            = 0
 +
</ini>
 +
 
 +
Пропишем русификацию названия и описания ключа от Нивы. В файле '''config\text\rus\string_table_enc_equipment.xml''' перед '''</string_table>''' напишем:
 +
<ini>
 +
<string id="item_car_key">
 +
<text>Ключ от Нивы</text>
 +
</string>
 +
<string id="item_niva_key">
 +
<text>Ключ необходимый, чтоб открыть двери от автомобиля Нива</text>
 +
</string>
 +
</ini>
 +
 
 +
Создаём файл '''config\creatures\vechicles.ltx''', вписываем туда конфиг Нивы с пропиской логики:
 +
 
 +
<ini>
 +
[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\veh_niva_u_01.ogf
 +
ef_equipment_type = 3
 +
ph_mass = 13000
 +
script_binding      = bind_physic_object.init
 +
custom_data  = scripts\cars\niva_data.ltx ; путь до логики
 +
</ini>
 +
 
 +
Прописывает сам файл '''vechicles.ltx''' в начале файла '''system.ltx''':
 +
 
 +
<ini>#include "creatures\vechicles.ltx"</ini>
 +
 
 +
После этого - создаём файл логики '''config\scripts\cars\niva_data.ltx''', с содержимым:
 +
 
 +
<ini>
 +
[logic]
 +
active = ph_car
 +
 
 +
[ph_car]
 +
usable = {+actor_has_niva_key}
 +
</ini>
 +
 
 +
Добавил в '''config\gameplay\info_l01escape.xml''' требующуюся инфопорцию:
 +
 
 +
<ini>
 +
<info_portion id="actor_has_niva_key"></info_portion>
 +
</ini>
 +
 
 +
А дальше интересно - активировать проверку наличия у ГГ ключей додумался так: внедрил в скрипт '''scripts\escape_tasks.script''' с опросом инфопорций свои строки:
 +
Находим этот блок функции
 +
<lua>
 +
if not has_alife_info("tutorial_artefact_start") and
 +
not has_alife_info("tutorial_artefact_gain") and
 +
actor:object("af_blood_tutorial") ~= nil
 +
then
 +
actor:give_info_portion("tutorial_artefact_gain")
 +
end
 +
</lua>
 +
 
 +
Добавляем:
 +
<lua>
 +
-----------------------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
 +
----------------------------------------------------
 +
</lua>
 +
 
 +
<br>Получилось в итоге вот что: актёр нашёл (купил) ключи, сел в машину и поехал, а потерял или выбросил (продал, пропил и т.д.) - внутрь не попасть, как ни пытайся.
 +
 
 +
В моём моде:
 +
На Кордоне у майора Кузнецова(под мостом) спавнится "Нива" и забытые на ящике с выпивкой - ключи от неё. ГГ платит подвыпившим военным за проход, и тут же, подобрав ключи, садится в машину и исчезает, оставив майора со товарищи в большом (сравнительно) убытке.
 +
Второй вариант:
 +
Всё то же самое, только военные соображают быстро и открывают огонь на поражение, лишь только актёр садится в "Ниву". Хотя - если не тормозить - и тут успеваешь свинтить.
 +
 
 +
Сие реализовано так - cама Нива спавнится мной прямо за мостом. Создаём файл скрипта ('''scripts\esc_modify.script''') и пишем в нём:
 +
 
 +
<lua>
 +
function spawn_niva()
 +
alife():create("vehicle_niva", vector():set(58.205856,-2.393073,189.756988),345171,98)
 +
-- ключи среди водки и закуски
 +
alife():create("niva_keys", vector():set(61.393852,-0.143696695,154.954849),349686,97)
 +
end
 +
</lua>
 +
 
 +
В файле '''config\gameplay\info_l01escape.xml''' акция "открыть огонь" привязана к сообщению Торговца об удачном пересечении ж\д насыпи (при условии, естественно, что герой взял чужие ключи):
 +
 
 +
<ini>
 +
<info_portion id="esc_find_railroad_passage_done"> ;родная часть
 +
<action>esc_modify.kill_thief</action> ;добавлено
 +
</info_portion>                        ;родная часть
 +
</ini>
 +
 
 +
т. е. добавлена ссылка на скрипт '''esc_modify.script''' и функцию в нём ''kill_thief''.
 +
 
 +
Пишем в файле ('''scripts\esc_modify.script''') следующее:
 +
 
 +
<lua>
 +
function kill_thief()
 +
if has_alife_info("actor_has_niva_key") then
 +
db.actor:give_info_portion("esc_bridge_pass_fire")
 +
end
 +
end
 +
</lua>
 +
 
 +
Логично вот что: если ГГ не взял ключи (или взял, но спохватился и выбросил), то в спину ему никто не стрельнет, однако и машину уже не угнать.
 +
 
 +
Осталось последнее, прописать кнопку, чтоб завести движок Нивы. В файле '''config\ui\ui_keybinding.xml''' пишем в группе '''kb_grp_common''' следующее:
 +
 
 +
<ini><command id="kb_turn_engine" exe="turn_engine"/></ini>
 +
Выглядит будет так:
 +
<ini>
 +
<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>
 +
</ini>
 +
 
 +
Теперь заходим в игру и назначаем клавишу, чтоб завести движок.
 +
 
 +
Вот и результат:
 +
 
 +
[[Image:Ключ_от_нивы.jpeg|800px|]]
 +
 
 +
[[Image:Авто_Нива.jpeg|800px|]]
 +
 
 +
Файлы мода с отработанным примером по этому уроку : [https://yadi.sk/d/zFSGjNJEsm3Tx Скачать]
 +
 
 +
===Автор===
 +
Всем respect, ваш '''J.DLRN'''.
 +
 
 +
Привел статью в рабочее состояние - '''World_Stalker'''
 +
 
 +
[[Категория:Конфигурационные_файлы]]

Текущая версия на 10:01, 24 июня 2016

Привет всем. Задался я как-то целью сделать в "СТАЛКЕРе" (версия 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_car_key
inv_weight                      = 0
inv_grid_width                  = 1
inv_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\veh_niva_u_01.ogf
ef_equipment_type	= 3
ph_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") and
not 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
----------------------------------------------------
 


Получилось в итоге вот что: актёр нашёл (купил) ключи, сел в машину и поехал, а потерял или выбросил (продал, пропил и т.д.) - внутрь не попасть, как ни пытайся.

В моём моде: На Кордоне у майора Кузнецова(под мостом) спавнится "Нива" и забытые на ящике с выпивкой - ключи от неё. ГГ платит подвыпившим военным за проход, и тут же, подобрав ключи, садится в машину и исчезает, оставив майора со товарищи в большом (сравнительно) убытке. Второй вариант: Всё то же самое, только военные соображают быстро и открывают огонь на поражение, лишь только актёр садится в "Ниву". Хотя - если не тормозить - и тут успеваешь свинтить.

Сие реализовано так - cама Нива спавнится мной прямо за мостом. Создаём файл скрипта (scripts\esc_modify.script) и пишем в нём:

 
function spawn_niva()
alife():create("vehicle_niva", vector():set(58.205856,-2.393073,189.756988),345171,98)
-- ключи среди водки и закуски
alife():create("niva_keys", 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>
 

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

Вот и результат:

Ключ от нивы.jpeg

Авто Нива.jpeg

Файлы мода с отработанным примером по этому уроку : Скачать

Автор

Всем respect, ваш J.DLRN.

Привел статью в рабочее состояние - World_Stalker

Другие места
LANGUAGE