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

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


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

Greh921,

 

function esc_unik_npc () alife():create("esc_unik_npc",vector():set(-218.20,-20.2,-145.63),35362,47) end

 

ничего не трогал. просто нагло скопировал из шапки. :(

А ты имя esc_unik_npc не менял, где-нибудь в нпс_профель или спавн_сектор допустим на erik_pridurok.

Я когда этот мануал юзал, то натыкался на множество ошибок при создании именно с именем!

У мя была ошибка с этой хернёй _g.script: 20, я 20 строку закомментил и потом игра запустилась и через пару секунд наебнулась с ссылкой на логику, ну я поковырялся в ней, но не хера не получилось, тупо всё переделал с нуля и всё пошло без вылетов.

В spawn_section.ltx

[esc_unik_npc]:stalker

$spawn = "respawn\esc_unik_npc"

character_profile = esc_unik_npc

spec_rank = regular

community = dolg

Нужно писать ещё
под community вставляем: custom_data = scripts\esc_unik_npc.ltx

Если ты добавил <action>esc_unik_npc.esc_unik_npc</action> в info_portions.xml , то для появления нашего персонажа нужна новая игра!!!

Ошибка может быть в

<game_information_portions>

<info_portion id="storyline_actor_start">

<task>storyline_eliminate_gunslinger</task>

<action>esc_unik_npc.esc_unik_npc</action>

</info_portion>

При добавлении нового персонажа нужно под старым, а в данном случае <action>esc_unik_npc.esc_unik_npc</action> писать нового, допустим <action>esc_unik_npc_2.esc_unik_npc_2</action>

При ошибке

[error]Arguments : LUA error: ....r. - shadow of chernobyl\gamedata\scripts\_g.script:20: bad argument #2 to 'format'
достаточно новый игры, если новая игра выдаёт ошибку, то можно закомментировать 20 строку либо всё переделать, если делаете мод, то лучше создавать свои файлы, прописывая в сустем.ltx проще при исправлении вылетов!
Ссылка на комментарий

Greh921,

 

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

объясни как закоментить 20 строку g.script

 

Добавлено через 146 мин.:

Greh921, все друг я нашел свою ошибку. Все дело в логике. если ее нет то мужик ходит по кордону и ему кабздец а с логикой вылет

Изменено пользователем Бубалех

убийство гарика и жорика главный стимул дойти до бара

Ссылка на комментарий
Создал НПС в 3П, :ny_unsure: запускаю игру и сразу вылет:

FATAL ERROR

 

[error]Expression : !m_error_code

[error]Function : raii_guard::~raii_guard

[error]File : D:\prog_repository\sources\trunk\xrServerEntities\script_storage.cpp

[error]Line : 748

[error]Description : .... - Зов Припяти\gamedata\scripts\bind_stalker.script:255: attempt to call method 'check_detective_achievement' (a nil value)

 

 

stack trace:

Что-то накопустил. в файле bind_stalker.script

Если ты делал как в шапке, то там ТОЛЬКО НА ТЧ, а по зп смотри выше твоего сообщения в этой теме.

Если делал по этому сообщению, то ошибка в написании в этом файле. На крайняк эту строку закомментируй, т.е. поставь в начале "--" , тока без ковычек) Больше ничего не посоветую, т.к. ЗП не ковырял!

Ссылка на комментарий
Greh921, ты не знаешь почему созданный мною торговец выбрасывает вещи. вокруг него огромная куча стволов. купить почему то можно только патроны хотя я прописывал все. при продаже ему ствола он тут же выкидывает его. ставил ему вместимость на 10000 кг но все равно то же?

убийство гарика и жорика главный стимул дойти до бара

Ссылка на комментарий
Greh921, ты не знаешь почему созданный мною торговец выбрасывает вещи. вокруг него огромная куча стволов. купить почему то можно только патроны хотя я прописывал все. при продаже ему ствола он тут же выкидывает его. ставил ему вместимость на 10000 кг но все равно то же?

Честно говоря, а хрен его знает, я сам толком не могу сказать, т.к. не делал через скриптовый спавн, но по ходу дела тут с классами или логикой ковырнуть надо, т.к. я сделал у обычных нпс торговлю всем и он сволочь при торговле оружием выбрасывает его если оно сломано или менее мощно уже существующего! У мя так сломанную грозу долговец выкинул в замен не сломанной двухстволки-обрез.

Там нужно в xr_мотиватор или др. поковыряться. В моде История Прибоя эта хня исправлена. Посмотри эту штуку:

Болезненная тема для многих начинающих модмейкеров. Для создания нового тороговца требуется постигать навыки работы со спавн-файлом. Для создания торговца придётся запастись кое-какими утилитами:

 

acdc от bardak скачать с:

народа

или

ifolder-а

 

ActivePerl 5.8.8 для работы программы acdc скачать :ny_use_search:

 

Практика

Создание непися и профиля

Для работы acdc нужно ещё прога 7z-архив я её в архив закинул в разделе "acdc от bardak скачать", а ActivePerl 5.8.8 в поиске наберите "Скачать ActivePerl-5.10.0.1004-MSWin32-x86-287188" и всё.

Манул от меня:

Устанавливаем 7z462.exe

Потом ActivePerl 5.8.8 (Я брал ActivePerl-5.10.0.1004-MSWin32-x86-287188) - ищем в поиске, скачиваем и устанавливаем

Создаем отдельную папку и кидаюм все файлы архива без 7z462.exe потом кидаем в неё all.spawn и Декомпиликтуем, изменяем и Компиляция новый файл с именем"all.spawn.new" кидаем в папку где брали all.spawn, старый удаляем а новый переминовываем в "all.spawn" и всё!

И так. Сперва мы создаём профиль непися. Например, в файле character_desc_escape.xml по адресу gamedata\config\gameplay\ Можно создать отдельный файл для наших неписей, это упрощает совмещение модов. В файле character_desc_escape.xml, в самом низу, перед тегом </xml> пишем профиль нового непися:

 

<specific_character id="esc_dark_stalker_voron" no_random = "1">

;важно при создании торговца, указать параметр no_random = "1"

 

<name>Ворон</name>

<icon>ui_npc_dark_voron</icon>

<map_icon x="0" y="0"></map_icon>

<bio>sim_stalker_novice_bio</bio>

 

<class>esc_dark_stalker_01</class> -- настраивает респавнер на класс персонажа для спавна разных моделей.

;т.к. мы спавним уникального непися, класс можно скопировать у любого другого непися или написать новый, уникальный класс.

<community>dark_stalker</community>

<money min="500000" max="500000" infinitive="1"></money>

;в поле денег, надо поставить бессконечные деньги - infinitive="1"

;иначе вы сможете продать неписю товаров исключительно на указанную сумму.

 

<rank>1000</rank>

<reputation>-553</reputation>

 

<visual>actors\dark_stalker\dark_stalker_voron</visual> ;ссылка на файл-модель персонажа без окончания .ogf

<snd_config>characters_voice\human_01\monolith\</snd_config>

<crouch_type>-1</crouch_type>

<panic_treshold>0</panic_treshold>

<supplies>

[spawn] \n

wpn_gauss \n

ammo_gauss \n

#include "gameplay\character_items.xml" \n

#include "gameplay\character_drugs.xml" \n

#include "gameplay\character_food.xml"

</supplies>

 

#include "gameplay\character_criticals_3.xml"

 

<start_dialog>hello_dialog_dark_stalker</start_dialog>

<actor_dialog>dm_cool_info_dialog</actor_dialog>

<actor_dialog>dm_help_wounded_medkit_dialog</actor_dialog>

<actor_dialog>join_dark</actor_dialog>

</specific_character>

 

Профиль создан, пара стандартных диалогов, взятых у любого другого профиля, дописать не составит труда. Я ничего не менял в своём коде. Лезем в npc_profile.xml, который находится в той же папке. Где-нить внизу делаем запись:

 

<character id="esc_dark_stalker_voron">

<class>esc_dark_stalker_01</class> -- настраивает респавнер на класс персонажа для спавна разных моделей.

;т.к. мы спавним уникального непися, класс можно скопировать у любого другого непися или написать новый, уникальный класс.

<specific_character>esc_dark_stalker_voron</specific_character> -- ссылка на профиль нашего непися.

</character>

 

Ввод в симуляцию

 

Непись создан. Теперь надо вводить его в симуляцию. Открываем файл gamedata\config\creatures\spawn_sections.ltx и прописываем в конце:

 

[esc_dark_stalker_voron]:stalker_trader - дописать суффикс торговца... хотя у меня и без него всё работало =)

$spawn = "respawn\esc_dark_stalker_voron" - опция спавна для Левел Едитора

character_profile = esc_dark_stalker_voron - профиль непися, записанный в npc_profile.xml

spec_rank = regular

community = dark_stalker - группировка

 

Спавн торговца через all.spawn файл

 

Дальше, самое нудное - спавн. Спасибо Arhet'y за пример. Используя прогу acdc от bardak'a декомпилим all.spawn, создав батник разбора спавна (без active perl толку от проги бардака нуль - просто не запустится) и в понравившемся месте делаем запись с уникальным номером. Я заспавнил на Кордоне:

 

[8796]

; cse_abstract properties

section_name = stalker_trader -- метка, что сталкер является торговцем

name = dark_stalker_voron -- имя любое, вроде бы; где оно используется не знаю

position = -215.67399597168,-20.403390884355,-151.03227233887 -- местоположение на игровой карте

direction = 0.0445535257458687,-0.000645029998850077,0.0144814234226942

 

; cse_alife_trader_abstract properties

character_profile = esc_dark_stalker_voron

 

; cse_alife_object properties

game_vertex_id = 61 -- геймвертекс, без него спавнер не будет знать, на какой именно карте и в какой её части спавнить объект

distance = 3.5

level_vertex_id = 42599 -- левелвертекс, без него спавнер не будет знать, в именно какой части карты спавнить объект

object_flags = 0xfffffffb

custom_data = <<END

[logic]

cfg = scripts\esc_voron.ltx -- конфиг с логикой

[smart_terrains]

none = true -- смарт террейн; если создаёте статического торговца - лучше не выставлять смарт террейн

;если хотите бродягу - пишите по аналогии с другими неписями или создавайте свой смарт террейн, куда и определяйте непися

 

[spawn]

wpn_gauss -- спавним в инвентаре всё, что хотим, в продажу оно не пойдёт

END

story_id = 9958 - уникальный стори_ид для меток на карте

 

; cse_visual properties

visual_name = actors\dark_stalker\dark_stalker_voron -- внешний вид, указать путь к .ogf модели, без окончания формата файла!

 

; cse_alife_creature_abstract properties

g_team = 0

g_squad = 0

g_group = 0

health = 2

dynamic_out_restrictions =

dynamic_in_restrictions =

 

upd:health = 2

upd:timestamp = 0

upd:creature_flags = 0

upd:position = -215.67399597168,-20.403390884355,-151.03227233887 -- те же координаты, что и в секции position

upd:o_model = 0

upd:o_torso = 0,0,0

upd:g_team = 0

upd:g_squad = 0

upd:g_group = 0

 

; cse_alife_monster_abstract properties

 

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,2,0

predicate4 = 2,2,1,2

 

; cse_ph_skeleton properties

 

upd:start_dialog =

 

; se_stalker properties

 

Спавн файл еще рано собирать!

Логика торговца

 

Далее, создаём файл конфиг торговца, который указали в спавне - gamedata\config\scripts\esc_voron.ltx и пишем в нём:

 

[logic]

active = walker

trade = misc\trade_voron.ltx -- файл торговли, создаётся по аналогии с существующими

trader_flags = 0 - флаг трейдера

inv_max_weight = 10000 -- вес инвентаря торговца

on_death = death

 

[walker]

path_walk = esc_sin_voron_walk -- привязка вейпоинта, чтобы трейдер стоял на месте или двигался по определённому курсу

path_look = esc_sin_voron_look -- куда будет смотреть непись

meet = meet -- параметры реакции непися на встречу с актором

 

[meet]

use = true

use_wpn = true -- перезаряжает оружие

meet_talk_enabled = true

 

Теперь лезем за скриптом от бардака и снимаем координаты местоположения нашего непися. У кого нету скрипта, копируем в gamedata/scripts/ui_main_menu.script этот скрипт:

 

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

 

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

Создаём вейпоинты и лукпоинты

 

И так, мы сняли координаты мест, где хотим видеть торговца и где мы хотим, чтобы он ходил - теперь в разобранном all.spawn ищите файл way_*левел*.ltx и туда пишем данные. Я приведу пример свой, опять таки. В файле way_l01_escape.ltx пишем:

 

[esc_sin_voron_look] -- имя, которые мы записали в ''gamedata\config\scripts\esc_voron.ltx''

points = p0,p1

p0:name = wp00

p0:flags = 0x1

p0:position = -205.306793212891,-20.4855155944824,-150.415893554688

p0:game_vertex_id = 46

p0:level_vertex_id = 54218

 

p1:name = wp01

p1:flags = 0x1

p1:position = -207.645278930664,-20.2700958251953,-146.980590820313

p1:game_vertex_id = 61

p1:level_vertex_id = 45276

 

 

[esc_sin_voron_walk] -- имя, которые мы записали в ''gamedata\config\scripts\esc_voron.ltx''

points = p0

p0:name = wp00

p0:flags = 0x1

p0:position = -215.67399597168,-20.403390884355,-151.03227233887

p0:game_vertex_id = 47

p0:level_vertex_id = 37503

 

Если нужно создать несколько вейпоинтов - смотрите по аналогии с уже существующими.

 

После всего этого собираем all.spawn батником (что писать в батниках для сбора и разбора спавна - в файле help.txt в папке с программой), закидываем новый файл спавна в gamedata/spawn и стартуем новую игру.

Авторы

 

Статья Орион.

При помощи (косвенной) Arhet (SRP Team).

 

Мой друг писал, я ему верю :ny_thumbsup:

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

Ошибка при создании НПС для Зова

Expression : !m_error_code

Function : raii_guard::~raii_guard

File : D:\prog_repository\sources\trunk\xrServerEntities\script_storage.cpp

Line : 748

Description : ...ðèïÿòè\gamedata\scripts\smart_terrain_control.script:65: attempt to index field 'actor' (a nil value)

Правельно пейсать "мадыратарчег", патамукаг проверочнойе слова "красафчег".

Ссылка на комментарий
Народ,а что нужно сделать что бы нпс спавнился мертвым?

По мануалу в шапке: Создаём файл в папке 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:kill(npc) --спавнится живым и тут же убивается, если не получится, то пробуй так npc:kill(esc_unik_npc) или так npc:kill("esc_unik_npc")

 

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

а как сделать так чтобы мой чел после того как например убил военных вернулся на исходное место? а то он стоит себе и ждет когда его маслинами напихают. :ny_mellow:

убийство гарика и жорика главный стимул дойти до бара

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

в общем создал нпс для зова, заставил его ходить, но болтать он на отрез отказывается говорит типа говори со старшим

так вот как заставить его заставить говорить с гг и сделать его бессмертным?

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

Greh921, Удалите мат из своего сообщения , иначе придут "добрые дядьки" ZVER и n6260 и тогда они не будут смотреть ,что Вы новичок на форуме и впишут Бан дня так на 3 ...

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

Эээ... Ну да ладно. возможно я ошибся. мне плохо было :D

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

Кто может выложить готовый пример? Я уже утомился. Ну не выходит и всё тут. Кстати это может быть из за того, что я на шестёрке всё это делаю?

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

Это углы поворота по осям x,y,z соответственно. Измеряется в радианах.

Ушёл из модостроения

Последний мод http://www.amk-team.ru/forum/index.php?sho...=60#entry351951

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

Создал нового непися для Зова по тутору Греха, вылет:

 

 

FATAL ERROR

 

[error]Expression : !m_error_code

[error]Function : raii_guard::~raii_guard

[error]File : D:\prog_repository\sources\trunk\xrServerEntities\script_storage.cpp

[error]Line : 748

[error]Description : .... - Зов Припяти\gamedata\scripts\xr_animpoint.script:419: attempt to index local 'manager' (a nil value)

 

 

stack trace:

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

Небольшой вопрос:

Заспавнил скриптом нового нпс в ЗП, все отлично, только вот разговаривать с актором он не хочет при прописанных диалогах в character_desc. Как разговорить?

 

1802_countdown_slim.png

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

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

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

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

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

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

Войти

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

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

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