SoC. Авторазбор — различия между версиями
Материал из S.T.A.L.K.E.R. Inside Wiki
(оформление) |
м |
||
(не показаны 8 промежуточные версии 2 участников) | |||
Строка 1: | Строка 1: | ||
− | + | Привет всем. Задался я как-то целью сделать в "СТАЛКЕРе" (версия 1.0004) машины, юзабельность которых | |
− | + | ||
− | Задался я как-то целью сделать в "СТАЛКЕРе" (версия 1. | + | |
зависит от наличия в инвентаре ГГ конкретного предмета, а именно ключей от данного транспорта. | зависит от наличия в инвентаре ГГ конкретного предмета, а именно ключей от данного транспорта. | ||
− | Спавн автотехники - пройденный этап,не буду заострять внимание,скажу лишь,что здесь привязал спавн машины к диалогу с коррумпированным майором на Кордоне. | + | Спавн автотехники - пройденный этап, не буду заострять внимание, скажу лишь, что здесь привязал спавн машины к диалогу с коррумпированным майором на Кордоне. |
− | + | Открываем файл '''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"> | |
− | + | <text>esc_bridge_soldiers_start_11</text> | |
− | + | <action>esc_modify.spawn_niva</action> | |
− | + | <next>12</next> | |
− | + | </phrase> | |
</xml> | </xml> | ||
− | + | Прописывает ключи от Нивы в файлик '''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 = | + | 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\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> | <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''' требующуюся инфопорцию: |
− | < | + | <ini> |
<info_portion id="actor_has_niva_key"></info_portion> | <info_portion id="actor_has_niva_key"></info_portion> | ||
− | </ | + | </ini> |
− | + | ||
− | + | ||
− | + | ||
+ | А дальше интересно - активировать проверку наличия у ГГ ключей додумался так: внедрил в скрипт '''scripts\escape_tasks.script''' с опросом инфопорций свои строки: | ||
+ | Находим этот блок функции | ||
<lua> | <lua> | ||
− | + | if not has_alife_info("tutorial_artefact_start") and | |
− | + | ||
− | if | + | |
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 | + | if actor:object("niva_keys") ~= nil then |
− | actor:object("niva_keys") ~= nil | + | |
− | then | + | |
actor:give_info_portion("actor_has_niva_key") | actor:give_info_portion("actor_has_niva_key") | ||
− | + | elseif 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''' акция "открыть огонь" привязана к сообщению Торговца об удачном пересечении ж\д насыпи (при условии, естественно, что герой взял чужие ключи): |
− | < | + | <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> ;родная часть |
− | </ | + | </ini> |
− | т. е. добавлена ссылка на | + | т. е. добавлена ссылка на скрипт '''esc_modify.script''' и функцию в нём ''kill_thief''. |
− | + | Пишем в файле ('''scripts\esc_modify.script''') следующее: | |
<lua> | <lua> | ||
Строка 123: | Строка 150: | ||
Логично вот что: если ГГ не взял ключи (или взял, но спохватился и выбросил), то в спину ему никто не стрельнет, однако и машину уже не угнать. | Логично вот что: если ГГ не взял ключи (или взял, но спохватился и выбросил), то в спину ему никто не стрельнет, однако и машину уже не угнать. | ||
− | + | Осталось последнее, прописать кнопку, чтоб завести движок Нивы. В файле '''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>
Теперь заходим в игру и назначаем клавишу, чтоб завести движок.
Вот и результат:
Файлы мода с отработанным примером по этому уроку : Скачать
Автор
Всем respect, ваш J.DLRN.
Привел статью в рабочее состояние - World_Stalker