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

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

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

Перейти к: навигация, поиск
(оформление, стилевые правки)
Строка 1: Строка 1:
 
'''Всем привет.'''
 
'''Всем привет.'''
  
Задался я как-то целью сделать в "СТАЛКЕРЕ"(версия 1.004) машины, юзабельность которых  
+
Задался я как-то целью сделать в "СТАЛКЕРе" (версия 1.004) машины, юзабельность которых  
зависит от наличия в инвентаре ГГ конкретного предмета,  
+
зависит от наличия в инвентаре ГГ конкретного предмета, а именно ключей от данного транспорта.
а именно: ключей от данного транспорта.
+
Спавн автотехники - пройденный этап,не буду заострять внимание,скажу лишь,что здесь привязал спавн машины к диалогу с коррумпированным майором на Кордоне. Файл '''dialogs_escape.xml''', строки:
Спавн автотехники - пройденный этап,не буду заострять внимание,скажу лишь,что здесь привязал спавн машины к диалогу с коррумпированным майором на Кордоне.Файл dialogs_escape.xml,строки:
+
  
 +
<xml>
 
   <phrase id="11">
 
   <phrase id="11">
 
   esc_bridge_soldiers_start_11
 
   esc_bridge_soldiers_start_11
Строка 11: Строка 11:
 
   <next>12</next>
 
   <next>12</next>
 
   </phrase>
 
   </phrase>
 +
</xml>
  
Прописал Ниву, прописал в файлик config\misc\item.ltx ключи от неё
+
Прописал Ниву, прописал в файлик '''config\misc\item.ltx''' ключи от неё таким образом:
таким образом:
+
  
;;;;;;;;;;;;--ключи от нивы--;;;;;;;;;;;;
+
<pre>
[niva_keys]:identity_immunities
+
;;;;;;;;;;;;--ключи от нивы--;;;;;;;;;;;;
GroupControlSection = spawn_group
+
[niva_keys]:identity_immunities
discovery_dependency =
+
GroupControlSection = spawn_group
$spawn                          = "devices\quest_items\niva_keys"
+
discovery_dependency =
class                          = II_ATTCH
+
$spawn                          = "devices\quest_items\niva_keys"
cform                          = skeleton
+
class                          = II_ATTCH
visual                          = equipments\item_minipda.ogf
+
cform                          = skeleton
radius                          = 1
+
visual                          = equipments\item_minipda.ogf
description                    = item_niva_key
+
radius                          = 1
inv_name                        = item_car_key
+
description                    = item_niva_key
inv_name_short                  = item_car_key_s
+
inv_name                        = item_car_key
inv_weight                       = 0
+
inv_name_short                  = item_car_key_s
inv_grid_width                   = 1
+
inv_weight                     = 0
inv_grid_height                 = 1
+
inv_grid_width                 = 1
inv_grid_x                   = 11
+
inv_grid_height                 = 1
inv_grid_y                   = 23
+
inv_grid_x                     = 11
cost                             = 0
+
inv_grid_y                     = 23
 +
cost                           = 0
 +
</pre>
  
 +
Прописал в файл '''config\creatures\vehicles.ltx''',в блоке"Нивы" строчку вида:
  
Прописал в файл config\creatures\vehicles.ltx ,в
+
<pre>
блоке"Нивы" строчку
+
custom_data            = scripts\niva_data.ltx.
вида :
+
</pre>
custom_data            = scripts\niva_data.ltx.
+
  
Ясно, после этого - создал сам файл config\scripts\niva_data.ltx, с содержимым :
+
Ясно, после этого - создал сам файл '''config\scripts\niva_data.ltx''', с содержимым:
  
[logic]
+
<pre>
active = ph_car
+
[logic]
[ph_car]
+
active = ph_car
usable = {+actor_has_niva_key}
+
[ph_car]
 +
usable = {+actor_has_niva_key}
 +
</pre>
  
Добавил в info_l01escape.xml требующуюся инфопорцию:
+
Добавил в '''info_l01escape.xml''' требующуюся инфопорцию:
  
 +
<xml>
 
<info_portion id="actor_has_niva_key"></info_portion>
 
<info_portion id="actor_has_niva_key"></info_portion>
 +
</xml>
  
А дальше интересно: активировать проверку наличия у ГГ ключей додумался так: внедрил в скрипт escape_tasks.script с опросом  
+
А дальше интересно - активировать проверку наличия у ГГ ключей додумался так: внедрил в скрипт '''escape_tasks.script''' с опросом  
 
инфопорций свои строки:
 
инфопорций свои строки:
  
function proceed()
+
<lua>
local actor = db.actor
+
function proceed()
if    not has_alife_info("tutorial_artefact_start") and
+
local actor = db.actor
not has_alife_info("tutorial_artefact_gain") and  
+
if    not has_alife_info("tutorial_artefact_start") and
actor:object("af_blood_tutorial") ~= nil
+
not has_alife_info("tutorial_artefact_gain") and  
then
+
actor:object("af_blood_tutorial") ~= nil
actor:give_info_portion("tutorial_artefact_gain")
+
then
end  
+
actor:give_info_portion("tutorial_artefact_gain")
-----------------------moi_mod--------------------
+
end  
if    not has_alife_info("actor_has_niva_key") and
+
-----------------------moi_mod--------------------
actor:object("niva_keys") ~= nil
+
if    not has_alife_info("actor_has_niva_key") and
then
+
actor:object("niva_keys") ~= nil
actor:give_info_portion("actor_has_niva_key")
+
then
    --news_manager.send_tip(db.actor, "find_keys_info")
+
actor:give_info_portion("actor_has_niva_key")
end
+
    --news_manager.send_tip(db.actor, "find_keys_info")
if  actor:object("niva_keys")== nil then
+
end
actor:disable_info_portion("actor_has_niva_key")
+
if  actor:object("niva_keys")== nil then
end
+
actor:disable_info_portion("actor_has_niva_key")
----------------------------------------------------
+
end
.......и далее по оригиналу.
+
----------------------------------------------------
 +
.......и далее по оригиналу.
 +
</lua>
  
(закомментил сообщение о находке ключей ,так как оно является нам
+
(закомментил сообщение о находке ключей, так как оно является нам каждый раз после любой ближайшей загрузки уровня - не доработал:)
каждый раз после любой ближайшей загрузки уровня - не доработал:)
+
<br>Получилось в итоге вот что: актёр нашёл (купил) ключи, сел в машину и поехал, а потерял или выбросил (продал, пропил и т.д.) - внутрь не попасть, как ни пытайся.
 
+
Получилось в итоге вот что: актёр нашёл(купил) ключи ,сел в машину и поехал, а потерял или выбросил (продал, пропил и т.д.) - внутрь не попасть, как ни пытайся.
+
  
 
В моём моде:
 
В моём моде:
На Кордоне у майора Кузнецова(под мостом) спавнится "Нива" и забытые на ящике с выпивкой - ключи от неё. ГГ платит подвыпившим военным за проход ,и тут же ,подобрав ключи, садится в машину и исчезает,оставив майора со товарищи в большом(сравнительно) убытке.
+
На Кордоне у майора Кузнецова(под мостом) спавнится "Нива" и забытые на ящике с выпивкой - ключи от неё. ГГ платит подвыпившим военным за проход, и тут же, подобрав ключи, садится в машину и исчезает, оставив майора со товарищи в большом (сравнительно) убытке.
 +
Второй вариант:
 +
Всё то же самое, только военные соображают быстро и открывают огонь на поражение, лишь только актёр садится в "Ниву". Хотя - если не тормозить - и тут успеваешь свинтить.
  
Второй вариант:
+
Сие реализовано так - cама Нива спавнится мной прямо за мостом:
Всё то же самое, только военные соображают быстро и открывают огонь на поражение,лишь только актёр садится в "Ниву".Хотя - если не тормозить - и тут успеваешь свинтить.
+
  
Сие реализовано так:  
+
<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>
  
сама Нива спавнится мной прямо за мостом:
+
В файле '''info_l01escape.xml''' акция "открыть огонь" привязана к сообщению Торговца об удачном пересечении ж\д насыпи (при условии, естественно, что герой взял чужие ключи):
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
+
  
в файле info_l01escape.xml акция "открыть огонь" привязана к сообщению Торговца об удачном пересечении ж\д насыпи(при условии, естественно, что герой взял чужие ключи):
+
<xml>
 +
<info_portion id="esc_find_railroad_passage_done"> - родная часть
 +
<action>esc_modify.kill_thief</action> - добавлено
 +
</info_portion>                        - родная часть
 +
</xml>
  
<info_portion id="esc_find_railroad_passage_done"> - родная часть
+
т. е. добавлена ссылка на несуществующий пока скрипт '''esc_modify''' и функцию в нём ''kill_thief''.
<action>esc_modify.kill_thief</action> - добавлено
+
</info_portion>                        - родная часть
+
  
, т. е. добавлена ссылка на несуществующий пока скрипт esc_modify и функцию в нём kill_thief.
+
Скриптовая часть ('''scripts\esc_modify.script'''):
  
скриптовая часть(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>
  
function kill_thief()
+
Логично вот что: если ГГ не взял ключи (или взял, но спохватился и выбросил), то в спину ему никто не стрельнет, однако и машину уже не угнать.
if has_alife_info("actor_has_niva_key") then
+
db.actor:give_info_portion("esc_bridge_pass_fire")
+
end
+
end
+
  
Логично вот что: если ГГ не взял ключи(или взял, но спохватился и выбросил), то в спину ему никто не стрельнет, однако и машину уже не угнать.
+
Времени тестировать особо нет.Прошу прощения за сырость исполнения, учитывая практически отсутствующие навыки программинга. Всё - благодаря статьям именитых моддеров на '''S.T.A.L.K.E.R Inside Wiki'''.
  
Времени тестировать особо нет.Прошу прощения за сырость исполнения, учитывая практически отсутствующие навыки программинга. Всё - благодаря статьям именитых моддеров на Stalker inside Wiki.
+
===Автор===
  
    Всем respect,ваш J.DLRN( e.delorean@land.ru)
+
Всем respect, ваш '''J.DLRN''' (''e.delorean@land.ru'').
  
 
[[Категория:Конфигурационные_файлы]]
 
[[Категория:Конфигурационные_файлы]]

Версия 13:26, 1 июня 2010

Всем привет.

Задался я как-то целью сделать в "СТАЛКЕРе" (версия 1.004) машины, юзабельность которых зависит от наличия в инвентаре ГГ конкретного предмета, а именно ключей от данного транспорта. Спавн автотехники - пройденный этап,не буду заострять внимание,скажу лишь,что здесь привязал спавн машины к диалогу с коррумпированным майором на Кордоне. Файл dialogs_escape.xml, строки:

 
  <phrase id="11">
   esc_bridge_soldiers_start_11
  <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_s
inv_weight                      = 0
inv_grid_width                  = 1
inv_grid_height                 = 1
inv_grid_x                      = 11
inv_grid_y                      = 23
cost                            = 0

Прописал в файл config\creatures\vehicles.ltx,в блоке"Нивы" строчку вида:

custom_data             = scripts\niva_data.ltx.

Ясно, после этого - создал сам файл config\scripts\niva_data.ltx, с содержимым:

[logic]
active = ph_car
[ph_car]
usable = {+actor_has_niva_key}

Добавил в info_l01escape.xml требующуюся инфопорцию:

 
<info_portion id="actor_has_niva_key"></info_portion>
 

А дальше интересно - активировать проверку наличия у ГГ ключей додумался так: внедрил в скрипт escape_tasks.script с опросом инфопорций свои строки:

 
function proceed()
local actor = db.actor
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     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
----------------------------------------------------
.......и далее по оригиналу.
 

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

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

Сие реализовано так - cама Нива спавнится мной прямо за мостом:

 
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 
 

В файле info_l01escape.xml акция "открыть огонь" привязана к сообщению Торговца об удачном пересечении ж\д насыпи (при условии, естественно, что герой взял чужие ключи):

 
<info_portion id="esc_find_railroad_passage_done"> - родная часть
<action>esc_modify.kill_thief</action> - добавлено
</info_portion>                        - родная часть
 

т. е. добавлена ссылка на несуществующий пока скрипт esc_modify и функцию в нём 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
 

Логично вот что: если ГГ не взял ключи (или взял, но спохватился и выбросил), то в спину ему никто не стрельнет, однако и машину уже не угнать.

Времени тестировать особо нет.Прошу прощения за сырость исполнения, учитывая практически отсутствующие навыки программинга. Всё - благодаря статьям именитых моддеров на S.T.A.L.K.E.R Inside Wiki.

Автор

Всем respect, ваш J.DLRN (e.delorean@land.ru).

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