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

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


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

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

Поделиться этим сообщением


Ссылка на сообщение

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 (титры) и потом "пищит" и потом возвращаемся в игру и сообщение на экране с координатами (если сообщения нет, такое тоже бывает, тогда заходим в журнал, события и смотрим там в истории диалогов сообщение с координатами на плоскости).

Поделиться этим сообщением


Ссылка на сообщение
  • Недавно просматривали   0 пользователей

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