Перейти к контенту

Создание нового НПС


Рекомендуемые сообщения

XeoN,

1) Спавн НПС с выдачей АйДи:

function spawn_mervin22()

local obj=alife():create("esc_mervin22",vector():set(9.693,56.273,48.022),5205,2417)

local params=amk.read_stalker_params(obj)

params.custom="[logic]\ncfg = scripts\\new\\esc_mervin22.ltx"

params.sid=30139

amk.write_stalker_params(params,obj)

end

 

Для контроля назначнных SID_ов надо зарегистрировать Вашего НПС в файле: game_story_ids.ltx (\gamedata\config) по аналогии с остальными. Номер sid надо брать, чтобы он не дублировался с существующими, лучше назначить с "запасом", напрмер, как в примере, иначе будут вылеты с указанием на "дублирование сида".

2) Удаление НПС по СИД_у:

function del_mervin22()

local sim = alife()

local se_obj = sim:story_object(30139)

if se_obj then

sim:release(se_obj, true)

end

end

 

3) Чтобы сделать бессмертным НПС, надо всего лишь прописать ему

:stalker_sakharov в секции спавна, будь то аллспавн или заспавненный скриптом НПС.

Вот пример (\gamedata\config\creatures файл: spawn_sections.ltx):

[esc_mervin22]:stalker_sakharov

$spawn = "respawn\esc_mervin22_spawn"

character_profile = esc_mervin2

spec_rank = master

community = trader

custom_data = scripts\new\esc_mervin22.ltx

 

Что есть stalker_sakharov:

Это всего лишь секция в файле: m_stalker.ltx (вот здесь: \gamedata\config\creatures)

в которой назначены параметры "бессмертия":

[stalker_sakharov]:stalker_trader

$spawn = "stalkers\stalker_sakharov"

immunities_sect = stalker_immunities_sakharov

condition_sect = my_stalker_condition

 

[my_stalker_condition]

satiety_v = 0.0 ;скорость уменьшения сытости со временем

radiation_v = 1.0 ;скорость уменьшения радиации

satiety_power_v = 1.0 ;увеличение силы при уменьшении сытости

satiety_health_v = 1.0 ;увеличение здоровья при уменьшении сытости

satiety_critical = 0.0 ;критическое значения сытости (в процентах от 0..1) когда здоровье начианает уменьшаться

radiation_health_v = 0.0 ;уменьшение здоровья при воздействии радиации

morale_v = 0.0 ;скорость восстановления морали

health_hit_part = 0.0 ;процент хита, уходящий на отнимание здоровья

power_hit_part = 0.1 ;процент хита, уходящий на отнимание силы

psy_health_v = 0.1 ;скорость восстановления psy-здоровья

 

;открытые раны

bleeding_v = 0.0 ;потеря крови при номинальной ране в секунду

wound_incarnation_v = 1.0 ;крутизна кривой заживления (какой процент раны заживет в игровую секунду)

min_wound_size = 1.0 ;минимальный размер раны, после которого она считается зажившей

 

sleep_health = 1.0 ;1.5 ;коэффициенты скоростей изменения параметров во время сна

sleep_power = 1.0 ;1.5

sleep_satiety = 1.0 ;0.8

sleep_radiation = 1.0 ;1.1

sleep_psy_health = 1.0

 

 

[stalker_immunities_sakharov]

burn_immunity = 0.0 ;коэффициенты иммунитета

strike_immunity = 0.0

shock_immunity = 0.0

wound_immunity = 0.0

radiation_immunity = 0.0

telepatic_immunity = 0.0

chemical_burn_immunity = 0.0

explosion_immunity = 0.0

fire_wound_immunity = 0.0

wound_2_immunity = 0.0

 

 

А иногда нужно сделать просто "трудноубиваемого" врага.

Тогда делаем так (просто пример, можно и подругому):

 

[stalker_new]:stalker

$spawn = "stalkers\stalker_new"

immunities_sect = stalker_immunities_new

condition_sect = new_stalker_condition

 

 

[new_stalker_condition]

satiety_v = 0.00001 ;скорость уменьшения сытости со временем

radiation_v = 0.0001 ;скорость уменьшения радиации

satiety_power_v = 0.0005 ;увеличение силы при уменьшении сытости

satiety_health_v = 0.0 ;0.0001 ;увеличение здоровья при уменьшении сытости

satiety_critical = 0.0 ;критическое значения сытости (в процентах от 0..1) когда здоровье начианает уменьшаться

radiation_health_v = 0.000 ;уменьшение здоровья при воздействии радиации

morale_v = 0.0001 ;скорость восстановления морали

health_hit_part = 0.05 ;процент хита, уходящий на отнимание здоровья

power_hit_part = 0.05 ;процент хита, уходящий на отнимание силы

psy_health_v = 0.01 ; скорость восстановления psy-здоровья

health_restore_v = 0.00001 ;скорость восстановления здоровья

 

sleep_health = 1.0 ;коэффициенты скоростей изменения параметров во время сна

sleep_power = 1.0

sleep_satiety = 1.0

sleep_radiation = 1.0

sleep_psy_health = 1.0

 

;---LIMPING STATE-----------------------------------------------------

use_limping_state = off

limping_threshold = 0.5

 

;открытые раны

bleeding_v = 0.0 ;потеря крови при номинальной ране в секунду

wound_incarnation_v = 0.001 ;крутизна кривой заживления (какой процент раны останется после заживления в игровую секунду)

min_wound_size = 0.01

 

[stalker_immunities_new]

burn_immunity = 0.05 ;коэффициенты иммунитета

strike_immunity = 0.05

shock_immunity = 0.05

wound_immunity = 0.3

radiation_immunity = 0.0

telepatic_immunity = 0.0

chemical_burn_immunity = 0.08

explosion_immunity = 100

fire_wound_immunity = 0.00000000001

wound_2_immunity = 0.0000000001

 

 

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

Это только пример, который я использовал. Можно создать свою секцию с характеристиками "защиты-повреждения" для НПС и спавнить новых челов с заданными свойствами, указывая им созданную секцию.

Например, в аллспавне (если там спавнить)(ПРИМЕР):

[3635]

; cse_abstract properties

section_name = stalker_new

name = esc_mervin22

 

Если скриптами спавним, то тогда секция в файле: spawn_sections.ltx (\gamedata\config\creatures):

[esc_mervin22]:stalker_new

$spawn = "respawn\esc_mervin22_spawn"

character_profile = esc_mervin2 --секция его профиля в Вашем character_desc_ххх.xml

spec_rank = master

community = trader --неважно кто он, в данном случае торговец

custom_data = scripts\new\esc_mervin22.ltx --здесь надо прописать логику для своего НПС

Изменено пользователем antreg
Ссылка на комментарий

Два вопроса.

1) Почему НПС спавнится не в точно отведенном ему месте?

ss_admin_06_27_10_03_10_25_2marsha.jpg

Снимал координаты там - за стойкой (на прошлой стр. скрин). Может из за того что снимал демо_рекордом? Залетал за стойку, на уровне головы ставил камеру. Может камеру надо около пола держать?

 

2) Как назначить НПС иконку в диалоге? Знаю что дело в файле ui_npc_unique. Но как там координаты снять... Имеется прога SIE 0.6.3 если что.

 

Сообщение от модератора n6260
В SIE есть вывод координат в двух вариантах: по сетке и для xml-файлов. Отсчет координат иконки вроде от верхнего левого угла. Посмотри у уже готовых иконок в конфигах.

З.Ы. Иконка должна быть в ui_iconstotal.dds (это для АМК), а ее координаты в ui_icons_npc.xml.

Ссылка на комментарий

Shadows,

1) Точка спавна должна быть "на нулевой отметке плоскости" - на земле (по простому). Чем выше поднимаем, тем больше рандом спавна. Снимать координаты демо рекордом не стоит. Есть простая функция от Бардака:

function main_menu:OnButton_credits_clicked()

local text

local vid

local gvid

local a = vector()

local text

a = db.actor:position()

vid = db.actor:level_vertex_id()

gvid = db.actor:game_vertex_id()

text = "Позиция:\\nX= "..a.x.."\\nY= "..a.y.."\\nZ= "..a.z.."\\nlevel_vertex= "..vid.."\\ngame_vertex_id= "..gvid

news_manager.send_tip(db.actor, text, nil, nil, 30000)

end

 

Вставляется в самом конце скрипта ui_main_menu.script

Вызывается нажатием на Credits (титры) в меню игры, т.е. выходим из игры (Esc) и жмём на Credits (титры) и потом "пищит" и потом возвращаемся в игру и сообщение на экране с координатами (если сообщения нет, такое тоже бывает, тогда заходим в журнал, события и смотрим там в истории диалогов сообщение с координатами на плоскости).

Ссылка на комментарий

кровоSTALKER

local obj = alife():create("esc_hunt",vector():set(-213.69770812988,-23.183309555054,-122.53145599365),39933,59)
obj:on_death()

Не бойтесь совершенства. Вам его не достичь.
C. Дали
Ссылка на комментарий

Народ есть вопрос может не по теме но все же. Создал нового НПС, и квесты к нему. Можно ли брать квест брать у одного персонажа, а сдовать и ему и другому персонажу?

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

Разработка Andrew's Pack Mod V0.5..

Ссылка на комментарий

Спасибо! Сейчас попробуем. :rolleyes:

Строгое предупреждение от модератора n6260
Спасибы пишите в ЛС или репутацию, или дописывайте в свое предыдущее сообщение.!
Ссылка на комментарий

Всех приветствую. Возможно ли данным способом, написанным в шапке, добавить физический обьект в игру? Ограждение, разбитую технику и тд. Заранее благодарю за ответ.

Сообщение от модератора n6260
Предметы или техника просто спавнится скриптом или через алл--спавн, а вот с деталями пейзажа - это через компиляцию локации.
Ссылка на комментарий
Предметы или техника просто спавнится скриптом или через алл--спавн, а вот с деталями пейзажа - это через компиляцию локации.

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

Еще 10 лет таких цен, зарплат и пенсий, и вместо переписи населения будет перекличка

Ссылка на комментарий

Arhara

А каким образом не подскажите? Столкнулся с еще одной проблемой. Нужно чтобы свежесозданные неписи возвращались на свои позиции. Организовал мини блокпост. Но чуть какая опасность, мутанты живность, они разбегаются и не возвращаются на свои места. Кучу логик перепробовал (http://stalkerin.gameru.net/wiki , ничего не помогает. Подскажите пожалуйста.

Изменено пользователем Roman82
Ссылка на комментарий
Roman82, чтобы неписи возвращались на свои места, нужно создать смарт-террейн и список работ для него, которые будут выполнять нпс.
Ссылка на комментарий
Roman82, будет проще сделать в алл.спавн одну точку волк и одну лук. Нпс будет приходить на эти точки и стоять на них, если пропишешь эти точки ему в логику.

Разработка Andrew's Pack Mod V0.5..

Ссылка на комментарий
Vito$, ты не правильно думаешь, ты мог банально не прописать функцию спавна своего непися и все, результат: ни вылета ни непися...
Возможно всё, ну или почти всё.
Ссылка на комментарий

У меня вопрос - заспавнил одного НПС всё работает нормально.

По аналогии спавню второго - получаю странный вылет:

Expression : m_available_count

Function : CID_Generator<unsigned int,unsigned char,unsigned short,unsigned char,unsigned short,0,65534,256,65535,0>::tfGetID

File : e:\stalker\sources\trunk\xr_3da\xrgame\id_generator.h

Line : 92

Description : Not enough IDs

Может кто знает в чём дело ?

Ссылка на комментарий

qwqwqw,

тебе же пишут "Not enough IDs" т.е. "не хватает идентификаторов". В игре может быть не более 65534 объектов. Видимо, у тебя насоздавалось столько.

 

Плагины Total Commander для работы с игровыми архивами:

Архиваторный плагин (для работы с одиночным архивом): link1 link2

Системный плагин (для распаковки установленной игры): link1 link2

 

Ссылка на комментарий

Сделал все как описано,в итоге при спавне нпс вылет:

Expression    : fatal error
Function      : CInifile::r_section
File          : E:\stalker\patch_1_0004\xrCore\Xr_ini.cpp
Line          : 342
Description   : <no expression>
Arguments     : Can't open section 'include "gameplay\character_items.xml"'

Как исправить?

Сообщение от администратора n6260
Вообще русским английским :lol: языком написано "невозможно открыть секцию инклуда gameplay\character_items.xml" ;)

Дурак знает как затеять драку, умный знает как победить в драке, мудрец знает как избежать драки.

Ссылка на комментарий

Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий

Комментарии могут оставлять только зарегистрированные пользователи

Создать аккаунт

Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!

Зарегистрировать новый аккаунт

Войти

Есть аккаунт? Войти.

Войти
  • Недавно просматривали   0 пользователей

    • Ни один зарегистрированный пользователь не просматривает эту страницу.
×
×
  • Создать...