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

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

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

Перейти к: навигация, поиск
 
м
 
(не показаны 19 промежуточные версии 9 участников)
Строка 1: Строка 1:
'''Всем привет.'''
+
Привет всем. Задался я как-то целью сделать в "СТАЛКЕРе" (версия 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>
  
Задался я как-то целью сделать в "СТАЛКЕРЕ"(версия 1.004) машины, юзабельность которых
+
Прописывает ключи от Нивы в файлик '''config\misc\item.ltx''' таким образом:
зависит от наличия в инвентаре ГГ конкретного предмета,
+
а именно: ключей от данного транспорта.
+
Спавн автотехники - пройденный этап,не буду заострять внимание,скажу лишь,что здесь привязал спавн машины к диалогу с коррумпированным майором на Кордоне.Файл dialogs_escape.xml,строки:
+
  
  <phrase id="11">
+
<ini>
  esc_bridge_soldiers_start_11
+
;;;;;;;;;;;;--ключ от нивы--;;;;;;;;;;;;
  <action>esc_modify.spawn_niva</action> - моя добавка
+
[niva_keys]:identity_immunities
  <next>12</next>
+
GroupControlSection = spawn_group
  </phrase>
+
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\misc\item.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>
  
;;;;;;;;;;;;--ключи от нивы--;;;;;;;;;;;;
+
Создаём файл '''config\creatures\vechicles.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_s
+
inv_weight                      = 0
+
inv_grid_width                    = 1
+
inv_grid_height                  = 1
+
inv_grid_x                    = 11
+
inv_grid_y                  = 23
+
cost                            = 0
+
  
 +
<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>
  
Прописал в файл config\creatures\vehicles.ltx ,в
+
Прописывает сам файл '''vechicles.ltx''' в начале файла '''system.ltx''':
блоке"Нивы" строчку
+
вида :
+
custom_data            = scripts\niva_data.ltx.
+
  
Ясно, после этого - создал сам файл config\scripts\niva_data.ltx, с содержимым :
+
<ini>#include "creatures\vechicles.ltx"</ini>
  
[logic]
+
После этого - создаём файл логики '''config\scripts\cars\niva_data.ltx''', с содержимым:
active = ph_car
+
[ph_car]
+
usable = {+actor_has_niva_key}
+
  
Добавил в info_l01escape.xml требующуюся инфопорцию:
+
<ini>
 +
[logic]
 +
active = ph_car
  
<info_portion id="actor_has_niva_key"></info_portion>
+
[ph_car]
 +
usable = {+actor_has_niva_key}
 +
</ini>
  
А дальше интересно: активировать проверку наличия у ГГ ключей додумался так: внедрил в скрипт escape_tasks.script с опросом
+
Добавил в '''config\gameplay\info_l01escape.xml''' требующуюся инфопорцию:
инфопорций свои строки:
+
  
function proceed()
+
<ini>
local actor = db.actor
+
<info_portion id="actor_has_niva_key"></info_portion>
if    not has_alife_info("tutorial_artefact_start") and
+
</ini>
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    not has_alife_info("actor_has_niva_key") and
+
actor:object("niva_keys") ~= nil
+
then
+
actor:give_info_portion("actor_has_niva_key")
+
    --news_manager.send_tip(db.actor, "find_keys_info")
+
end
+
if  actor:object("niva_keys")== nil then
+
actor:disable_info_portion("actor_has_niva_key")
+
end
+
----------------------------------------------------
+
.......и далее по оригиналу.
+
  
(закомментил сообщение о находке ключей ,так как оно является нам
+
А дальше интересно - активировать проверку наличия у ГГ ключей додумался так: внедрил в скрипт '''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>
function spawn_niva()
+
Выглядит будет так:
alife():create("vehicle_niva", vector():set(58.205856,-2.393073,189.756988),345171,98)
+
<ini>
-- ключи среди водки и закуски:
+
<group name="kb_grp_common">
alife():create("niva_keys", vector():set(61.393852,-0.143696695,154.954849),349686,97)
+
<command id="kb_turn_engine" exe="turn_engine"/>
end
+
<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>
  
в файле info_l01escape.xml акция "открыть огонь" привязана к сообщению Торговца об удачном пересечении ж\д насыпи(при условии, естественно, что герой взял чужие ключи):
+
Теперь заходим в игру и назначаем клавишу, чтоб завести движок.
  
<info_portion id="esc_find_railroad_passage_done"> - родная часть
+
Вот и результат:
<action>esc_modify.kill_thief</action> - добавлено
+
</info_portion>                        - родная часть
+
  
, т. е. добавлена ссылка на несуществующий пока скрипт esc_modify и функцию в нём kill_thief.
+
[[Image:Ключ_от_нивы.jpeg|800px|]]
  
скриптовая часть(scripts\esc_modify.script):
+
[[Image:Авто_Нива.jpeg|800px|]]
  
function kill_thief()
+
Файлы мода с отработанным примером по этому уроку : [https://yadi.sk/d/zFSGjNJEsm3Tx Скачать]
if has_alife_info("actor_has_niva_key") then
+
db.actor:give_info_portion("esc_bridge_pass_fire")
+
end
+
end
+
  
Логично вот что: если ГГ не взял ключи(или взял, но спохватился и выбросил), то в спину ему никто не стрельнет, однако и машину уже не угнать.
+
===Автор===
 +
Всем respect, ваш '''J.DLRN'''.
  
Времени тестировать особо нет.Прошу прощения за сырость исполнения, учитывая практически отсутствующие навыки программинга. Всё - благодаря статьям именитых моддеров на Stalker inside Wiki.
+
Привел статью в рабочее состояние - '''World_Stalker'''
  
    Всем respect,ваш  J.DLRN( e.delorin@land.ru)
+
[[Категория:Конфигурационные_файлы]]

Текущая версия на 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