Как сталкер привязать нпс
вот расскажу как создать новых неписей в игру
Документ создал для: Военый СТАЛККЕР
Для того, чтобы создать нового НПС нам понадобятся координаты нужного места, где и будет заспаунен наш NPC. Возьмём Кордон, лагерь новичков. Можете снять координаты сами, а можете взять мною уже снятые: (-218.20,-20.2,-145.63),35362,47). Далее. Создаём файл в папке gamedata/scripts файл, скажем esc_unik_npc.script. В нём создаём функцию. Код: function esc_unik_npc () alife():create("esc_unik_npc",vector():set(-218.20,-20.2,-145.63),35362,47) end
Теперь мы в файле npc_profile.xml (в папке gameplay) добавляем нашего НПС. Код: Trader escape_trader
Копируем или создаём по образцу только нижний блок Второго торговца нам ненадо. Теперь создадим секцию нашего персонажа. В файле spawn_section.ltx (gamedata/config/creatures) в блоке:
Создаём секцию. Код: [esc_unik_npc]:stalker $spawn = "respawn\esc_unik_npc" character_profile = esc_unik_npc spec_rank = regular community = dolg
В строке community можете вместо долга вписать другую группировку. Однако если мы хотим, чтоба наш персонаж не гулял по Зоне, пока не наткнётся на первую аномалию, то пропишем чтобы он стоял на месте. Для этого под community вставляем: custom_data = scripts\esc_unik_npc.ltx Далее создаём в gamedata/config папку scripts в в папке создаём файл esc_unik_npc.ltx В наш созданный файл вставляем: Код: [logic] active = remark1 danger = danger_ignore
[danger_ignore] ignore_distance = 5
[remark1] no_move = true
Всё наш НПС будет стоять на месте своего спауна. Едем дальше. Нам надо активировать нашего персоонажа. для этого мы должны вставить строку: esc_unik_npc.esc_unik_npc Либо в диалог, либо в какой-нибудь квест. Давайте вставим строку в файл info_portions.xml (gamedata/gameplay) под Код:
Выглядеть это будет так:
Однако мы не прописали самого НПС, как личность В файле character_desc_escape.xml (gamedata/gameplay) добавляем: Код: GENERATE_NAME_bandit ui_npc_u_stalker_bandit_3 esc_wolf_bio
esc_otbrosi_1 dolg stalker_terrain
actors\bandit\stalker_bandit_3 [spawn] \n
1. include "gameplay\character_items.xml" \n
2. include "gameplay\character_food.xml"
1. include "gameplay\character_criticals_3.xml"
1. include "gameplay\character_dialogs.xml"
Правда тут получится у нас долговец в одежде бандита и говорящего голосом монолитовца xD Всё сохроняем. НПС готов.
Как сталкер привязать нпс
ВНИМАНИЕ: ВЫ ДОЛЖНЫ ИМЕТЬ БАЗОВЫЙ УРОВЕНЬ ЗНАНИЙ ПО РАБОТЕ С ACDC COP (редактором спавна)
Создаем запись (лучше в конце файла, перед </xml>:
<specific_character имя секции вашего НПС team_default = "1">
<name>Печкин ИМЯ ВАШЕГО НПС </name>
<icon>ui_inGame2_ren_3 Иконка нпс </icon>
<map_icon x="1" y="0">
</map_icon>
<bio>Курьер Печкин статус нпс (необязательно) </bio>
Теперь открываем npc_profile.xml
Создаем запись перед </xml>
<character id color:blue">имя секции вашего НПС ">
<class>rad_a24_pechkin имя секции вашего НПС </class>
</character>
Теперь открываем файл spawn_sections_(нужная лока).ltx и пишем:
Теперь, если не хотим, чтобы ваш непись гулял по зоне, пока не нарвется на аномалию или монстра впишем ему функцию НЕ ДВИГАТЬСЯ
Открываем его и пишем:
[danger_ignore]
ignore_distance = 5
[remark2]
no_move = true
Создаем файл торговли:
Берем файл trade_barman_all.ltx и копируем его. Копированный файл переименовываем так, как вы записали его в предидущем файле. (Например мне пришлось назвать его trade_radar_a24_pechkin )
Теперь осталось поставить его на карту: вскрываем через ACDC COP all.spawn и открываем файл alife_(нужная локация).ltx и в конец вносм запись:
[6384 порядковый номер секции ]
; cse_abstract properties
section_name = rad_a24_pechkin имя секции нпс
name = rad_a24_pechkin имя секции нпс
position = 282,-42,57 позиция на карте
direction = 0,0,-0.162930771708488
; cse_alife_trader_abstract properties
money = 5000
character_profile = rad_a24_pechkin имя секции нпс
; cse_alife_creature_abstract properties
g_team = 8
g_squad = 0
g_group = 0
health = 1
dynamic_out_restrictions =
dynamic_in_restrictions =
upd:health = 1
upd:timestamp = 0
upd:creature_flags = 0
upd:position = 282,-42,57 позиция на карте (такая же как и выше!)
upd:o_model = 0
upd:o_torso = 0,0,0
upd:g_team = 8
upd:g_squad = 0
upd:g_group = 0
; cse_alife_monster_abstract properties
base_in_restrictors = yan_bunker_door_zomby_restrictor
upd:next_game_vertex_id = 65535
upd:prev_game_vertex_id = 65535
upd:distance_from_point = 0
upd:distance_to_point = 0
; cse_alife_human_abstract properties
predicate5 = 2,2,1,1,2
predicate4 = 1,0,0,1
Готово. Осталось только адаптировать файл ACDCCOP.PL
Открываем его блокнотом и поиском ищем запись:
mar_csky_tactic
Нашли? Теперь пишем между этой и следующей записью:
Готово! Сохраняем, собираем спавн и кидаем его в папку spawns и пробуем, что получилось.
ЗАПИСИ, ВЫДЕЛЕННЫЕ СИНИМ ЦВЕТОМ: МОИ КОМЕНТЫ. ИХ ПЕРЕД ДОБАВЛЕНИЕМ В ФАЙЛЫ НУЖНО УДАЛИТЬ.
Создание и редактирование НПС
Все профили НПС прописываются в файлах character_desc_локация.
Для раскладывания по полочкам, возьмем профиль Волка:
И разложим все по полочкам.
Внутри этой конструкции располагается все остальное. id - идентификатор Волка, team_default не изменяйте.
Имя НПС, которое будет отображаться в игре. Здесь содержится ссылка на текст, но можно писать имя прямо здесь (если вы хотите, чтобы это был обычный непись с рандомным именем, то прописываете здесь: "GENERATE_NAME_нужная-группировка" (без кавычек).
Здесь указывается иконка НПС, которая будет отображаться в диалоге.
На сколько я знаю, разрабы планировали кажому неписю сделать биографию, но так и не реализовали. Так что можете скопировать с любого профиля.
Класс НПС. Используется для респавна НПС. Для того, чтобы у нас не создавалось куча наших "уникальных" НПС, то мы создадим свой класс.
Группировка (stalker - одиночки, bandit - бандит, dolg - Долг и т.д.)
Ранг НПС (новичок, опытный и т.д.)
Количество денег, которое может быть у НПС. Соотвественно минимальное значение и максимальное. Если поставить infinitive="1", то у НПС будут бесконечные деньги (как у торговца).
Ссылка на папку с голосом и фразами НПС.
На сколько знаю, этот параметр отвечает за тип приседания. Ни разу не использовал, поэтому ничего советовать не буду.
Ссылка на визуальную модель НПС. Но если указать к примеру визуал экзоскелета, то и защитными характеристиками НПС будет обладать, как у экзоскелета.
Здесь указывается список предметов, которые будут появлятся у НПС.
Ну а далее идут диалоги.
Используется, если нужно, чтобы диалог начинал НПС, а
если нужно, чтобы диалог начинал ГГ.
Итак, приступим к практике.
Откроем файл character_desc_escape и создадим профиль нашему НПС. Назовем его Викинг, id у него будет escape_viking, оденем в экзоскелет, группировка - одиночка, оружие - Винторез, класс - esc_viking, а так же пропишем диалоговую иконку НПС в экзоскелете:
Теперь нужно прописать нашего НПС в файле config/gameplay/npc_profile.xml:
Класс ОБЯЗАТЕЛЬНО должен совпадать с тем, который прописан в character_desc_escape, а specific_character должен совпадать с id нашего НПС в character_desc_escape.
Далее происываем нашего НПС в файле config/creatures/spawn_sections.ltx:
В квадратных скобках прописываете любое свое название, spawn ставите от любого НПС, с character_profile все понятно, spec_rank оставляйте regular, community тоже все ясно.
Эээ.
Ну статья и проверялась через скрипт и АСДС.
Можно поподробней как "напрямую через СДК" это делается, и непомешало бы название секции, а еще лучше - лог. Ибо по одному описанию я вряд ли чем то помогу (тебе ли модеру это не знать).
____________________
Я вроде как лог попросил.
Ну нет так нет.
Ошибки которые нашел:
- У ворона была прописана группировка dark_stalker, хотя ты ее НЕ создал, так что пока заменил ее на одиночку.
- Если уж создал свой файл Character_desc_локация, то это еще не значит, что игра его прочитает. Его нужно прописывать в system.ltx, что я и сделал.
- Ты в spawn_sections прописал респавн у ворона свой, а не как в уроке от стандартного НПС. Я не знаю каким ты АСДС компилил спавн, поэтому не смог посмотреть создал ли ты респавнер, и прописал ли туда Ворона. Поэтому я заменил строчку респавнера, на ту, что из урока, ибо она от стандартного непися, то бишь рабочая.
ЗЫ: Без обид, но мне сейчас не для придумывания сюжета и квестов, уж звиняй. Работы и так хватает.
ЗЗЫ: давай все таки на "ты")))
Помоему я итак с тобой на ты
Причин может быть много, и возможно много и сразу.
Получается гадаем.
Размышляющий над сущим
Такие вопросы:
1: Как сделать,так чтоб НПС смотрел/стоял лицом в нужном мне направлении? После прописывания мной координат спавна, НПС всё время смотрит/стоит лицом в одном и том же направлении. Какие строки за это отвечают?
2. Как сделать чтоб НПС стоял на месте в любом случае и вел огонь со своего места спавна (хочу сделать часового, как на вышках). Я, ПЫСУ прописал эти строки:
[logic]
active = remark1
danger = danger_ignore
[danger_ignore]
ignore_distance = 5
[remark1]
no_move = true,
Но, во время атаки этот НПС сходит с места и ломится всех врагов отстреливать.
3: Как прописать НПС путь по которому я хочу чтоб он ходил (рейд, как у военных между блок постом и деревней новичков)?
У меня такой вопрос: После спауна, непись стоит по умолчанию с оружием за спиной. А можно ли как нибудь сделать так, чтобы он стоял с оружием в руках?
Только сейчас заметил проблему. Если сохраниться после того как НПС заспавнится, а потом загрузить это сохранение, игра вылетает со странным логом
J-DOGНе находит файл . ltx. логики для НПС
Larry76,
1.Через аллспавн как правило спавнят уникальных НПС у которых квесты и т д
Пример в секции alife_zaton.ltx прописывается сам НПС
[593]
; cse_abstract properties
section_name = smart_cover
name = zat_a2_sc_zat_b7_sultan -- это Султан
position = 139.320007324219,-7.34000015258789,178.610000610352
direction = 0,-1.57079601287842,0
; cse_alife_object properties
game_vertex_id = 296
distance = 16.1000003814697
level_vertex_id = 1204862
object_flags = 0xffffffbf
; cse_shape properties
shapes = shape0
shape0:type = sphere
shape0:offset = 0,0,0
shape0:radius = 2
; cse_smart_cover properties
cse_smart_cover__unk1_sz = animpoint_sit_normal
cse_smart_cover__unk2_f32 = 0
enter_min_enemy_distance = 15
exit_min_enemy_distance = 10
; se_smart_cover properties
last_description = animpoint_sit_normal
loopholes = animpoint_sit_normal,1
[zat_a1_a_look]
points = p0,p1
p0:name = wp00|a=threat|t=1000 - тут будет целится 1000 милисекунд
p0:flags = 0x1p0:position = 256.240051269531,19.8124237060547,550.824279785156 --первая точка куда будет смотреть НПС
p0:game_vertex_id = 292
p0:level_vertex_id = 1405060
p0:links = p1(1)
p1:name = wp01|a=threat|t=1000 -тут будет целится 1000 милисекунд
p1:flags = 0x1
p1:position = 125.961219787598,-7.31970977783203,178.054428100586 --вторая точка куда будет смотреть НПС
p1:game_vertex_id = 297
p1:level_vertex_id = 1182877
p1:links = p0(1)
[zat_a1_a_walk] тут одна точка движения,т е стоит на месте и целится смотрит в двух направлениях через определённое время
points = p0
p0:name = wp00
p0:flags = 0x1
p0:position = 356.438110351563,-1.82260000705719,296.487701416016
p0:game_vertex_id = 67
p0:level_vertex_id = 1558980
<actor_dialog>zat_b7_bandit_boss_sultan_b7_give_task_dialog</actor_dialog>
<actor_dialog>zat_b7_bandit_boss_sultan_b30_start_actor_dialog</actor_dialog>
<actor_dialog>zat_b7_bandit_boss_sultan_b30_detectors_actor_dialog</actor_dialog>
<actor_dialog>zat_b7_bandit_boss_sultan_b30_compass_actor_dialog</actor_dialog>
<actor_dialog>zat_b7_bandit_boss_sultan_b30_compass_give_actor_dialog</actor_dialog>
<actor_dialog>zat_b7_bandit_boss_sultan_b30_compass_revert_actor_dialog</actor_dialog>
<actor_dialog>zat_b7_bandit_boss_sultan_b30_ruin_actor_dialog</actor_dialog>
<actor_dialog>zat_b7_bandit_boss_sultan_b30_barmen_under_actor_dialog</actor_dialog>
<actor_dialog>zat_b7_bandit_boss_sultan_b52_about_snag</actor_dialog>
<actor_dialog>zat_b7_bandit_boss_sultan_b52_about_nimble</actor_dialog>
<actor_dialog>zat_b7_bandit_boss_sultan_about</actor_dialog>
</character>
[zat_b7_bandit_boss_sultan_squad]:online_offline_group --это сквад Султана
faction = bandit
npc = zat_b7_bandit_boss_sultan
target_smart = zat_stalker_base_smart-- работа на Скадовске
story_id = zat_b7_bandit_boss_sultan_squad [zat_b7_bandit_boss_sultan_squad]:default_squad
sim_avail = false Приписываем сквад НПС к месту где он должен появится сразу или с каким то условием
;;;;;;;;;;;;;;;;;;;;;; FINAL ZATON ;;;;;;;;;;;;;;;;;;;;;;;;;
zat_b7_bandit_boss_sultan_squad = zat_stalker_base_smart --тут Скадовск
[animpoint@base]
use_camp = false
avail_animations = animpoint_sit_normal
cover_name = zat_a2_sc_zat_b7_sultan
;reach_distance = 1.5
meet = meet@base
combat_ignore_cond = true
combat_ignore_keep_when_attacked = true
invulnerable = true
out_restr = zat_a2_sr_noweap
gather_items_enabled = false
help_wounded_enabled = false
corpse_detection_enabled = false
[meet@base]
close_snd_hello = zat_b7_bandit_boss_sultan_greeting
close_snd_bye = zat_b7_bandit_boss_sultan_farewell
close_anim = nil
close_victim = nil
far_anim = nil
far_victim = nil
close_distance = 0
far_distance = 0
use = false, true
trade_enable = false
allow_break = false
close_snd_distance = 3
meet_dialog = zat_b7_bandit_boss_sultan_intro, zat_b7_bandit_boss_sultan_b30_refuse_af_dialog, zat_b7_bandit_boss_sultan_b30_refuse_af_dialog, zat_b7_bandit_boss_sultan_b5_give_task_dialog
meet_on_talking = false
Создаём smart_terrain для сквада НПС в секциях алл.
[578]
; cse_abstract properties
section_name = smart_terrain
name = zat_stalker_base_smart--Это Скадовск
position = 123.900001525879,-7.34000015258789,183.559997558594
direction = 0,0,0
; cse_alife_object properties
game_vertex_id = 297
distance = 7
level_vertex_id = 1179320
object_flags = 0xffffff3e
custom_data = <<END
[story_object]
story_id = zat_stalker_base_smart
; cse_shape properties
shapes = shape0
shape0:type = sphere
shape0:offset = 0,0,0
shape0:radius = 2.50760293006897
; cse_alife_space_restrictor properties
restrictor_type = 3
Фсякченские модЫфикации смАтреть тута пАд сполером
Напримере моего случая можно.
Условие: Имеем голую новую локацию escape( кордон)
1.В точке возле самого входа на локацию надо создать бойца(который просто встречает ГГ)
никуда ходить он не будет,будет просто тупо стоять на одном месте.
Итого файл alife_escape.ltx у нас естесственно есть
[593]
; cse_abstract properties
section_name = smart_cover что означает эта строка?
name = можно ли взять из файла припяти? pri_a17_military_sergeant_morozov или же придётся создать файл character_desc_escape где скопировать pri_a17_military_sergeant_morozov но назвать его esc_a17_military_sergeant_morozov .
position = 139.320007324219,-7.34000015258789,178.610000610352
direction = 0,-1.57079601287842,0
; cse_alife_object properties
game_vertex_id = 296
distance = 16.1000003814697
level_vertex_id = 1204862
object_flags = 0xffffffbf - это пока ясно координаты,направление взгляда и вертексы
; cse_shape properties - за что отвечает эта секция??
shapes = shape0
shape0:type = sphere
shape0:offset = 0,0,0
shape0:radius = 2
; cse_smart_cover properties
cse_smart_cover__unk1_sz = animpoint_sit_normal тут вроде понятно,что перс сидячий, а если он стоит??
cse_smart_cover__unk2_f32 = 0
enter_min_enemy_distance = 15
exit_min_enemy_distance = 10
; se_smart_cover properties
last_description = animpoint_sit_normal
loopholes = animpoint_sit_normal,1
[zat_a1_a_look]
points = p0,p1
p0:name = wp00|a=threat|t=1000 - тут будет целится 1000 милисекунд
p0:flags = 0x1p0:position = 256.240051269531,19.8124237060547,550.824279785156 --первая точка куда будет смотреть НПС
p0:game_vertex_id = 292
p0:level_vertex_id = 1405060
p0:links = p1(1)
p1:name = wp01|a=threat|t=1000 -тут будет целится 1000 милисекунд
p1:flags = 0x1
p1:position = 125.961219787598,-7.31970977783203,178.054428100586 --вторая точка куда будет смотреть НПС
p1:game_vertex_id = 297
p1:level_vertex_id = 1182877
p1:links = p0(1)
[zat_a1_a_walk] тут одна точка движения,т е стоит на месте и целится смотрит в двух направлениях через определённое время
points = p0
p0:name = wp00
p0:flags = 0x1
p0:position = 356.438110351563,-1.82260000705719,296.487701416016
p0:game_vertex_id = 67
p0:level_vertex_id = 1558980
Тут вроде тоже ясно,обзовём только секции esc_a1_a_look и esc_a1_a_walk ну и пропишем свои координаты и куда башкой крутить.
А вот из какого файла к этим секциям путь указать??
далее создаём файл character_desc_escape.xml и в нём пишем(тупо копируем всё из файлика припяти про этого вояку заменяя только название локации)
<actor_dialog>actor_break_dialog</actor_dialog> это понятно. диалог стандартный- привет-пока
<character /> <class>esc_a17_military_sergeant_morozov</class></character> Larry76,
Бысрее скриптом распаунить твоего НПС
if мой_spawn_nps.load_variable("мой_spawn_nps_p_",false)==false then
мой_spawn_nps.start_мой_spawn_nps()
мой_spawn_nps.save_variable("мой_spawn_nps_p_",true)
end
==================================================================================
Далее создаём в папке scripts создаём свой скрипт спавна НПС мой_spawn_nps.script
==================================================================================
Далее в мой_spawn_nps.script пишем функцию спавна
function start_мой_spawn_nps()
swm_spawn_nps_01()
end
function мой_spawn_nps_01()
alife():create("esc_a17_military_sergeant_morozov",vector():set(516.90234375,13.481066703796,589.25476074219),1797242,28)--тут позиция спавна НПС,левел-вертекс и гаме-вертекс спавна НПС
end
function save_variable(variable_name, value)
xr_logic.pstor_store(db.actor, variable_name, value)
end
[walker@esc_a17_military_sergeant_morozov]
path_walk = esc_a1_a_walk-путь брожения
path_look = esc_a1_a_look-куда смотрит
combat_ignore_cond = false
combat_ignore_keep_when_attacked = false
meet = meet
gather_items_enabled = false
help_wounded_enabled = false
corpse_detection_enabled = false
use_camp = false
def_state_standing = ward_noweap
def_state_moving1 = patrol
no_retreat = true
target = story | actor
wounded = wounded
danger = danger
[meet]
close_snd_hello = = nil
close_snd_bye = = nil
close_anim = guard_na
close_victim = actor
far_anim = nil
far_victim = nil
close_distance = 2
far_distance = 0
close_snd_distance = 3
abuse = false
use = false, true
allow_break = false
meet_on_talking = false
[wounded]
hp_state = 0|wounded_heavy@help_heavy
hp_state_see = 0|wounded_heavy@help_heavy
hp_victim = 0|nil
hp_fight = 0|false
hp_cover = 0|false
[danger]
ignore_distance = 0
ignore_distance_grenade = 0
ignore_distance_corpse = 0
ignore_distance_hit = 0
ignore_distance_sound = 0
Фсякченские модЫфикации смАтреть тута пАд сполером
NPS они же "персы" (персонажи сборки)
Q: У меня подчти всех сюжетных поубивало, Беса, он вобже из-за ограждения вылез. Серого, Крота вертушка уже возле входа в подзимелье убила. с этим надо что-то делать, как-то их ограничить, чтоб под пули не лезьли
A: На данный момент в сборке многие квестовые и второстепенные НПС усилены, но по прежнему смертны, и беречь их теперь стОит, многие из них дают доп. квесты.
Ограничивать их, "чтоб под пули не лезли" не будут, так что, если хотите увидеть все сюрпризы сборки, проявляйте смекалку и терпение, чтобы сберечь им жизнь.
Q:Воскресают ли квестовые НПС?
A: Если погибнет Арни (зав. Арены), то через некоторое время его заменяет другой перс, и исполняет его функции.
Как вооружить НПС новым оружием (РК9+6)
Q: . раньше не обращал внимания, подскажите, сколько пулек у НПС по умолчанию? Есть смысл затаривать нужного перса патрончиками?
Непонятны "вкусы" НПС - сначала дашь ему FN, берет с радостью и видишь, что затвор уже передернул. Если следом дать АК, он его выбирает. FN по ходу круче.
A: 1. Продавать им разряженное оружие высоких классов(иначе НПС схватит подобраный обрез) , оптимально СВУ и Винтарез (более эфективны против мутантов, чем СВД и Гаусс)
2. Выкупить все небронебойные боеприпасы к проданому оружию, и впихнуть на пару перезарядок бронебойных (для большей эффективности). Израсходованный боезапас у НПС восстанавливается.
3. выкупать старые патроны ( от старого ствола )не нужно, если НПС при ранении потеряет "новое" оружие, то достанет старый ствол (которого в инвентаре не видно) и будет им пользоватся.
Q: По оружию: . но если у него обрез, то хоть , не поменяет ни на что, даже Сайга в таких случаях не катит
A: Заблуждение, 100%. Поэкспериментируй и понаблюдай: СВУ , СВД, Гаусс, Винтарез заменяют обрез. Если НПС не меняет сразу, то спровоцируй "тревогу", НПС сразу же "переключится" на любой из этих стволов. Но в ближнем бою может запросто достать АКСу (если был до этого) или обрез.
A(Artos):Неписям по барабану оптика/глушители/подствольники на стволах. Они, считай, их не замечают, не используют и не учитывают при выборе.
В игре на выбор неписью ствола влияет файл "mp_ranks.ltx", в котором в зависимости от ранга жестко прописаны предпочтения для оружия. Если новичок - то оружие попроще, навык есть - предпочтение отдается более навороченному. Условно, выбор неписью оружия идет не по крутости ствола, а по навыку с ним обращаться.
Все мы за компом считаем себя универсалами и готовыми сразу из любого, даже незнакомого, ствола палить в яблочко . в реалии совсем иначе и любой опытный стрелок выбирает оружие "под себя" и под ситуацию, а не по крутизне и стоимости. Отдадим неписям все же право выбора, хотя конечно то, как сделано в игре, далеко от совершенства. Уже есть мод, который занялся изменением этого несовершенства
Q: Не хватает возможности бесплатно вооружать "друзей". Кидать на землю костюмы и оружие не удобно, ибо не факт что их подберет тот кто нужно (если вообще подберет). Можно ли сделать чтото типа как в fallout торговля? Там можно выбирать: за бабло отдаешь, со скидкой или вообще бесплатно.
A(Artos):Движек игры предусматривает только "Торговать". "Чем" и "по чем" - жестко прописани в файлах-конфигах торговли. Для всех НЕ-торговцев все определяет файл trade_generic.ltx и каких-либо вариаций "подарить/дешево продать" не предусмотрено.Теоретически можно насоздавать различных секций, но они опять же будут не интерактивны, т.е. игрок не сможет определять сам "торговать или дарить" и отсутствует градация "свой/чужой/друг/недруг/. ".Мысли и желание сделать скриптами хоть какое-то подобие интерактивного диалога при выборе режима торговли/дарения давное есть, но пока это только наметки.
A:Поэкспериментируй так: 1) продал НПС патроны под оружие; 2) после этого становишся прямо перед НПС (1-2м), и выбрасываеш ствол в непись: хватают на лету))) Так же можно сплавлять "греховское" оружие. С костюмами пробуй так же, но не со всеми НПС такой номер проходит.
"Переодевание" НПС
Q: Народ вопрос вроде простой но я чёто недоперепонял - если НЕПИСЮ продаш оружие он его сразу в руки и на войну. А вот броники не одевают , да у денег не у всех хватает.
A: схема "тамагочи" (xrs_armor.script)
теперь NPC можно продать какой-нибудь костюм и если его устроит, то он его оденет. Так же можно кинуть под ноги - если устроит, то он поднимет.
Неписи очень стеснительные, поэтому переодеваются только тогда, когда ГГ их не видит и находится как минимум за 15 метров от них.
Кроме того введена система апгрейда брони - теперь NPC развиваются, вполне возможно встретить по прошествии времени NPC новичка, который обзавелся, например,
костюмом сталкера или даже СЕВОЙ. Система оттачивается, поэтому возможны курьезы. Не все НПС "переодеваются".
А (Artos): Далеко не во всех вариациях с брониками можно что-либо сделать игроку.
Броники неписям "одеваются" по довольно заковыристой схеме и основой является список(массив) соответствия броников - suits_to_visuals. Если в нем (в списке) нет для текущего непися броника "для одевания", который соответствует тому, который ты пытаешься "дать", то непись не "переоденется", т.е. броник его "не устроит".
Всем, кто хочет "ассортимента" переодевания следует знать, что броники, которые доступны ГГ (которые могут быть в рюкзаке) являются объектами игры (аналогично колбасе, аптечке, . ), а броники надетые на неписей - это только визуалы, т.е. НЕ объекты игры, а одно из свойств модели неписи. Т.о. задача переодевания в 1-ю очередь сводится к преобразованию объекта-броника в свойство модели текущего непися. А свойства (в частности визуал) каждого непися ограничено всего несколькими вариантами.
В таблице соответствий броников бандитам прописаны все типы, т.е. они могут "использовать" визуалы броников от разных группировок (бандиты ведь . ). Новичкам и одиночкам дана тоже поблажка и могут надевать, например, и от долга и от свободы . Ну а, например, вояки и монолитовцы могут использовать ТОЛЬКО костюмы своих группировок.
В теории можно сделать "устраивающими" (почти)все броники, но это потребует увеличения кол-ва моделей для всех неписей (сталкеры, бандиты, долговцы, . ), что очень значительно увеличит размеры сборки и повлечет увеличения вероятности ошибок (особенно если правятся конфиги броников, удаляются старые или добавляются новые броники).
Читайте также: