SoC. Авторазбор — различия между версиями
Материал из S.T.A.L.K.E.R. Inside Wiki
Loxotron (обсуждение | вклад) |
RedPython (обсуждение | вклад) (оформление, стилевые правки) |
||
Строка 1: | Строка 1: | ||
'''Всем привет.''' | '''Всем привет.''' | ||
− | Задался я как-то целью сделать в " | + | Задался я как-то целью сделать в "СТАЛКЕРе" (версия 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 | |
− | + | 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 | ||
+ | </pre> | ||
+ | Прописал в файл '''config\creatures\vehicles.ltx''',в блоке"Нивы" строчку вида: | ||
− | + | <pre> | |
− | + | custom_data = scripts\niva_data.ltx. | |
− | + | </pre> | |
− | + | ||
− | Ясно, после этого - создал сам файл config\scripts\niva_data.ltx, с содержимым : | + | Ясно, после этого - создал сам файл '''config\scripts\niva_data.ltx''', с содержимым: |
− | + | <pre> | |
− | + | [logic] | |
− | + | active = ph_car | |
− | + | [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''' с опросом |
инфопорций свои строки: | инфопорций свои строки: | ||
− | + | <lua> | |
− | + | 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 | |
− | + | ---------------------------------------------------- | |
+ | .......и далее по оригиналу. | ||
+ | </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''' акция "открыть огонь" привязана к сообщению Торговца об удачном пересечении ж\д насыпи (при условии, естественно, что герой взял чужие ключи): | |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | <xml> | |
+ | <info_portion id="esc_find_railroad_passage_done"> - родная часть | ||
+ | <action>esc_modify.kill_thief</action> - добавлено | ||
+ | </info_portion> - родная часть | ||
+ | </xml> | ||
− | + | т. е. добавлена ссылка на несуществующий пока скрипт '''esc_modify''' и функцию в нём ''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> | ||
− | + | Логично вот что: если ГГ не взял ключи (или взял, но спохватился и выбросил), то в спину ему никто не стрельнет, однако и машину уже не угнать. | |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | Времени тестировать особо нет.Прошу прощения за сырость исполнения, учитывая практически отсутствующие навыки программинга. Всё - благодаря статьям именитых моддеров на '''S.T.A.L.K.E.R Inside Wiki'''. | |
− | + | ===Автор=== | |
− | + | Всем 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).