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

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

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

Перейти к: навигация, поиск
(оформление)
(Доработал статью по рабочего состояния.)
Строка 1: Строка 1:
'''Всем привет.'''
+
Привет всем. Задался я как-то целью сделать в "СТАЛКЕРе" (версия 1.0004) машины, юзабельность которых  
 
+
Задался я как-то целью сделать в "СТАЛКЕРе" (версия 1.004) машины, юзабельность которых  
+
 
зависит от наличия в инвентаре ГГ конкретного предмета, а именно ключей от данного транспорта.
 
зависит от наличия в инвентаре ГГ конкретного предмета, а именно ключей от данного транспорта.
Спавн автотехники - пройденный этап,не буду заострять внимание,скажу лишь,что здесь привязал спавн машины к диалогу с коррумпированным майором на Кордоне. Файл '''dialogs_escape.xml''', строки:
+
Спавн автотехники - пройденный этап, не буду заострять внимание, скажу лишь, что здесь привязал спавн машины к диалогу с коррумпированным майором на Кордоне.  
 
+
Открываем файл '''config\gameplay\dialogs_escape.xml''', и находим строку:
 +
<ini>
 +
<text>esc_bridge_soldiers_start_11</text>
 +
</ini>
 +
и после неё добавляем:
 +
<ini>
 +
<action>esc_modify.spawn_niva</action>
 +
</ini>
 +
Выглядит будет так:
 
<xml>
 
<xml>
  <phrase id="11">
+
<phrase id="11">
  esc_bridge_soldiers_start_11
+
<text>esc_bridge_soldiers_start_11</text>
  <action>esc_modify.spawn_niva</action> - моя добавка
+
<action>esc_modify.spawn_niva</action>
  <next>12</next>
+
<next>12</next>
  </phrase>
+
</phrase>
 
</xml>
 
</xml>
  
Прописал Ниву, прописал в файлик '''config\misc\item.ltx''' ключи от неё таким образом:
+
Прописывает ключи от Нивы в файлик '''config\misc\item.ltx''' таким образом:
  
 
<ini>
 
<ini>
;;;;;;;;;;;;--ключи от нивы--;;;;;;;;;;;;
+
;;;;;;;;;;;;--ключ от нивы--;;;;;;;;;;;;
 
[niva_keys]:identity_immunities
 
[niva_keys]:identity_immunities
 
GroupControlSection = spawn_group
 
GroupControlSection = spawn_group
Строка 23: Строка 29:
 
class                          = II_ATTCH
 
class                          = II_ATTCH
 
cform                          = skeleton
 
cform                          = skeleton
visual                          = equipments\item_minipda.ogf
+
visual                          = equipments\item_minipda.ogf ;иконка флешки
 
radius                          = 1
 
radius                          = 1
 
description                    = item_niva_key
 
description                    = item_niva_key
 
inv_name                        = item_car_key
 
inv_name                        = item_car_key
inv_name_short                  = item_car_key_s
+
inv_name_short                  = item_car_key
 
inv_weight                      = 0
 
inv_weight                      = 0
 
inv_grid_width                  = 1
 
inv_grid_width                  = 1
Строка 36: Строка 42:
 
</ini>
 
</ini>
  
Прописал в файл '''config\creatures\vehicles.ltx''',в блоке"Нивы" строчку вида:
+
Пропишем русификацию названия и описания ключа от Нивы. В файле '''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>
  
<pre>
+
Создаём файл '''config\creatures\vechicles.ltx''', вписываем туда конфиг Нивы с пропиской логики:
custom_data            = scripts\niva_data.ltx.
+
</pre>
+
  
Ясно, после этого - создал сам файл '''config\scripts\niva_data.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>
 
<ini>
 
[logic]
 
[logic]
 
active = ph_car
 
active = ph_car
 +
 
[ph_car]
 
[ph_car]
 
usable = {+actor_has_niva_key}
 
usable = {+actor_has_niva_key}
 
</ini>
 
</ini>
  
Добавил в '''info_l01escape.xml''' требующуюся инфопорцию:
+
Добавил в '''config\gameplay\info_l01escape.xml''' требующуюся инфопорцию:
  
<xml>
+
<ini>
 
<info_portion id="actor_has_niva_key"></info_portion>
 
<info_portion id="actor_has_niva_key"></info_portion>
</xml>
+
</ini>
 
+
А дальше интересно - активировать проверку наличия у ГГ ключей додумался так: внедрил в скрипт '''escape_tasks.script''' с опросом
+
инфопорций свои строки:
+
  
 +
А дальше интересно - активировать проверку наличия у ГГ ключей додумался так: внедрил в скрипт '''scripts\escape_tasks.script''' с опросом инфопорций свои строки:
 +
Находим этот блок функции
 
<lua>
 
<lua>
function proceed()
+
if not has_alife_info("tutorial_artefact_start") and
local actor = db.actor
+
if   not has_alife_info("tutorial_artefact_start") and
+
 
not has_alife_info("tutorial_artefact_gain") and  
 
not has_alife_info("tutorial_artefact_gain") and  
actor:object("af_blood_tutorial") ~= nil
+
actor:object("af_blood_tutorial") ~= nil  
then
+
then
 
actor:give_info_portion("tutorial_artefact_gain")
 
actor:give_info_portion("tutorial_artefact_gain")
end  
+
end
 +
</lua>
 +
 
 +
Добавляем:
 +
<lua>
 
-----------------------moi_mod--------------------
 
-----------------------moi_mod--------------------
if     not has_alife_info("actor_has_niva_key") and
+
if actor:object("niva_keys") then
actor:object("niva_keys") ~= nil
+
then
+
 
actor:give_info_portion("actor_has_niva_key")
 
actor:give_info_portion("actor_has_niva_key")
    --news_manager.send_tip(db.actor, "find_keys_info")
+
elseif actor:object("niva_keys") then  
end
+
if  actor:object("niva_keys")== nil then
+
 
actor:disable_info_portion("actor_has_niva_key")
 
actor:disable_info_portion("actor_has_niva_key")
 +
return true
 
end
 
end
 
----------------------------------------------------
 
----------------------------------------------------
.......и далее по оригиналу.
 
 
</lua>
 
</lua>
  
(закомментил сообщение о находке ключей, так как оно является нам каждый раз после любой ближайшей загрузки уровня - не доработал:)
 
 
<br>Получилось в итоге вот что: актёр нашёл (купил) ключи, сел в машину и поехал, а потерял или выбросил (продал, пропил и т.д.) - внутрь не попасть, как ни пытайся.
 
<br>Получилось в итоге вот что: актёр нашёл (купил) ключи, сел в машину и поехал, а потерял или выбросил (продал, пропил и т.д.) - внутрь не попасть, как ни пытайся.
  
Строка 91: Строка 118:
 
Всё то же самое, только военные соображают быстро и открывают огонь на поражение, лишь только актёр садится в "Ниву". Хотя - если не тормозить - и тут успеваешь свинтить.
 
Всё то же самое, только военные соображают быстро и открывают огонь на поражение, лишь только актёр садится в "Ниву". Хотя - если не тормозить - и тут успеваешь свинтить.
  
Сие реализовано так - cама Нива спавнится мной прямо за мостом:
+
Сие реализовано так - cама Нива спавнится мной прямо за мостом. Создаём файл скрипта ('''scripts\esc_modify.script''') и пишем в нём:
  
 
<lua>
 
<lua>
 
function spawn_niva()
 
function spawn_niva()
 
alife():create("vehicle_niva", vector():set(58.205856,-2.393073,189.756988),345171,98)
 
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)
 
alife():create("niva_keys", vector():set(61.393852,-0.143696695,154.954849),349686,97)
 
end  
 
end  
 
</lua>
 
</lua>
  
В файле '''info_l01escape.xml''' акция "открыть огонь" привязана к сообщению Торговца об удачном пересечении ж\д насыпи (при условии, естественно, что герой взял чужие ключи):
+
В файле '''config\gameplay\info_l01escape.xml''' акция "открыть огонь" привязана к сообщению Торговца об удачном пересечении ж\д насыпи (при условии, естественно, что герой взял чужие ключи):
  
<xml>
+
<ini>
<info_portion id="esc_find_railroad_passage_done"> - родная часть
+
<info_portion id="esc_find_railroad_passage_done"> ;родная часть
<action>esc_modify.kill_thief</action> - добавлено
+
<action>esc_modify.kill_thief</action> ;добавлено
</info_portion>                        - родная часть
+
</info_portion>                        ;родная часть
</xml>
+
</ini>
  
т. е. добавлена ссылка на несуществующий пока скрипт '''esc_modify''' и функцию в нём ''kill_thief''.
+
т. е. добавлена ссылка на несуществующий пока скрипт '''esc_modify.script''' и функцию в нём ''kill_thief''.
  
Скриптовая часть ('''scripts\esc_modify.script'''):
+
Пишем в файле ('''scripts\esc_modify.script''') следующее:
  
 
<lua>
 
<lua>
Строка 123: Строка 150:
 
Логично вот что: если ГГ не взял ключи (или взял, но спохватился и выбросил), то в спину ему никто не стрельнет, однако и машину уже не угнать.
 
Логично вот что: если ГГ не взял ключи (или взял, но спохватился и выбросил), то в спину ему никто не стрельнет, однако и машину уже не угнать.
  
Времени тестировать особо нет.Прошу прощения за сырость исполнения, учитывая практически отсутствующие навыки программинга. Всё - благодаря статьям именитых моддеров на '''S.T.A.L.K.E.R Inside Wiki'''.
+
Осталось последнее, прописать кнопку, чтоб завести движок Нивы. В файле '''config\text\rus\ui_st_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|]]
 +
 +
Файлы мода с отработанным примером по этому уроку : [http://yadi.sk/d/3btBJT_vSYS79 Скачать]
 +
 +
===Автор===
 
Всем respect, ваш '''J.DLRN''' (''e.delorean@land.ru'').
 
Всем respect, ваш '''J.DLRN''' (''e.delorean@land.ru'').
 +
 +
Доработал статью до рабочего состояния - '''World_Stalker'''
  
 
[[Категория:Конфигурационные_файлы]]
 
[[Категория:Конфигурационные_файлы]]

Версия 00:04, 7 июня 2014

Привет всем. Задался я как-то целью сделать в "СТАЛКЕРе" (версия 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") then
actor:give_info_portion("actor_has_niva_key")
elseif actor:object("niva_keys") 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\text\rus\ui_st_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 (e.delorean@land.ru).

Доработал статью до рабочего состояния - World_Stalker

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