• Страница 1 из 2
  • 1
  • 2
  • »
Архив - только для чтения
Модератор форума: FAN, V@Dik008  
Создание НПС
# 1
Суббота, 30.05.2009, 05:56:40

Ранг: Мастер
Сообщений: 2546
Награды: 237
Репутация: 2302 Регистрация: 11.12.2008 Город: Заполярье    

Для того, чтобы создать нового НПС нам понадобятся координаты нужного места, где и будет заспаунен наш 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) добавляем нашего НПС. Код: <character id="escape_trader"> <class>Trader</class> <specific_character>escape_trader</specific_character> </character>

<character id="esc_unik_npc"> <class>esc_unik_npc</class> <specific_character>esc_unik_npc</specific_character> </character>

Копируем или создаём по образцу только нижний блок :) Второго торговца нам ненадо. Теперь моздадим секцию нашего персоонажа. В файле spawn_section.ltx (gamedata/config/creatures) в блоке:

--------Escape--------------
--------neutrals------------

Создаём секцию. Код: [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

Всё наш НПС будет стоять на месте своего спауна. Едем дальше. Нам надо активировать нашего персоонажа. для этого мы должны вставить строку: <action>esc_unik_npc.esc_unik_npc</action> Либо в диалог, либо в какой-нибудь квест. Давайте вставим строку в файл info_portions.xml (gamedata/gameplay) под Код: <game_information_portions>

<info_portion id="storyline_actor_start">
<task>storyline_eliminate_gunslinger</task>

Выклядеть это будет так:

Код: <game_information_portions>

<info_portion id="storyline_actor_start">
<task>storyline_eliminate_gunslinger</task>
<action>esc_unik_npc.esc_unik_npc</action>
</info_portion>

Однако мы не прописали самого НПС, как личность :) В файле character_desc_escape.xml (gamedata/gameplay) добавляем: Код: <specific_character id="esc_unik_npc" team_default = "1"> <name>GENERATE_NAME_bandit</name> <icon>ui_npc_u_stalker_bandit_3</icon> <bio>esc_wolf_bio</bio>

<class>esc_otbrosi_1</class> <community>dolg</community> <terrain_sect>stalker_terrain</terrain_sect>

<rank>367</rank> <reputation>-60</reputation> <money min="600" max="2000" infinitive="1"/>

<snd_config>characters_voice\human_01\monolith\</snd_config> <crouch_type>-1</crouch_type>

<visual>actors\bandit\stalker_bandit_3</visual> <supplies> [spawn] \n

wpn_groza \n

ammo_9x39_pab9 \n

1. include "gameplay\character_items.xml" \n
2. include "gameplay\character_food.xml"

</supplies>

1. include "gameplay\character_criticals_3.xml"

1. include "gameplay\character_dialogs.xml"

</specific_character>

Правда тут получится у нас долговец в одежде бандита и говорящего голосом монолитовца xD Всё сохроняем. НПС готов.

Но так же можно добавить нашему НПС диалог) Как добавлять диалоги написано в нашем факе) Если хотяте сделать нашему НПС своё имя то в файле stable_bio_name.xml (gamedata/config/text/rus) добавляем: Код: <string id="esc_unik_npc"> <text>Факер-мазафакер</text> </string>

А в файле сharacter_desc_escape.xml (gamedata/gameplay) находим нашего уже прописаного НПС и вставляем в секцию <name></name> (у нас в ней написано GENERATE_NAME_bandit) esc_unik_npc Всё :) Поздравляю)





-Он счастлив.
-Он мёртв.


Сообщение отредактировал ya - Суббота, 30.05.2009, 05:57:07
# 2
Четверг, 15.10.2009, 12:46:53

Ранг: Мастер
Сообщений: 2546
Награды: 237
Репутация: 2302 Регистрация: 11.12.2008 Город: Заполярье    

Quote (Serg_Anubis)
Где изменять координаты?
И как получить координаты?

Quote (ya)
программой Position Informer,




-Он счастлив.
-Он мёртв.
# 3
Среда, 09.12.2009, 13:50:40

Ранг: Мастер
Сообщений: 2546
Награды: 237
Репутация: 2302 Регистрация: 11.12.2008 Город: Заполярье    

Quote (Sedoй)
ya ты уверен что правильно написал? потому что я сделал так как написано и вылетает после того Синхронизация:клиент. а в xml файле выдает ошибку синтаксиса...

1) Писал не я
2) Notepad++ В помощь




-Он счастлив.
-Он мёртв.
# 4
Четверг, 10.12.2009, 10:25:29

Ранг: Знаток Зоны
Сообщений: 726
Награды: 22
Репутация: 296 Регистрация: 02.03.2009 Город: Миасс    

ya, а НПС будет поставлен если после создания просто загрузить игру, а не новую начать?
Нужна новая игра, т.к. было редактирование all.spawn
PRYZRAK


Истинный путь MOD ver. 1.3.0 (ТЧ) готов!
Истинный путь v2.0 (ТЧ) готов!
# 5
Вторник, 12.01.2010, 03:36:09

Ранг: Прибывший
Сообщений: 2
Награды: 0
Репутация: 0 Регистрация: 12.01.2010  

У меня тоже были вылеты, но разобрался. В коде, присутствуют русские символы. Поэтому вылет. Ниже привожу исправленый код:
Code
  
[logic]
active = remark1
danger = danger_ignore

[danger_ignore]
ignore_distance = 5

[remark1]
no_move = true
# 6
Вторник, 12.01.2010, 15:34:59

Ранг: Прибывший
Сообщений: 7
Награды: 0
Репутация: 0 Регистрация: 27.10.2009  

подходят ли координаты, взятые командой rs_stats?
Да, конечно. Можно ещё через position informer. Кому что нравится.
PRYZRAK
# 7
Вторник, 12.01.2010, 23:32:08

Ранг: Прибывший
Сообщений: 2
Награды: 0
Репутация: 0 Регистрация: 12.01.2010  

Quote (Vova-VIP)
Рэдрик-Шухарт, ну и что ты сделал, поставил чтобы были на других строчках? Я так уже делал <_<

Сравнил код в первом посте, с тем что я привел - действительно совпадают. Поэтому пардон. У меня просто была такая-же ситуация: код скопировал (источник не помню), и при запуске игра вылетала с ошибкой. Но в моем случае символ "а" или "о" в коде был из кириллицы. Поэтому и решил, что тут тоже самое.

Подскажите как правильно заспаунить NPC. Я создаю долговца на баре скриптом по условию:

Code
if level.name() == "l05_bar" then
  get_console():execute("start_my_script_level_name_=_"..level.name())
  bar_unik_npc.bar_unik_npc()
  end

При этом объект нормально создается, но при выходе - входе на локацию бар объектов становится 2 и т.д. То есть при любом входе на локацию спаунится новый долговец. Как прописать, что если он уже существует, то спаунить нового не надо.
# 8
Суббота, 10.07.2010, 10:29:42

Ранг: Новичок
Сообщений: 33
Награды: 5
Репутация: 7 Регистрация: 01.07.2010 Город: Ставропольский край    

У меня нифига не получилось. Либо игра просто не включается либо его(NPC) просто нигде нет.

Добавлено (10.07.2010, 10:04:30)
---------------------------------------------
Вот как легче всего вычислять координаты
добавляем в ui_main_menu в gamedata/scripts

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

Добавлено (10.07.2010, 10:29:42)
---------------------------------------------
дотопываем до того места которого хотите узнать координаты
выходим в главное меню
нажимаем титры или разработчики
и в игре в виде сообщения появляется информация о месте

# 9
Понедельник, 23.08.2010, 23:13:22

Ранг: Разведчик
Сообщений: 182
Награды: 4
Репутация: 42 Регистрация: 25.04.2010  

[Andron], попробуй запихать команду в xr_motivator после строчки
xr_gulag.setup_gulag_and_logic_on_spawn( self.object, self.st, sobject, modules.stype_stalker, self.loaded )
работает не всегда. Или создай скрипт, допустим new_spawn
после той же строчки напиши my_spawn.escape_spawn_load( object )
а в созданный скрипт напиши

function escape_spawn_load()

if level == "l01_escape" then
elseif xr_logic.pstor_retrieve(db.actor, "тут его имя", 0)==0 then
obj = alife():create( "тут его имя для спавна", vector():set(-226.2, -20.3, -158.4), 28485, 48 )
xr_logic.pstor_store(db.actor, "тут его имя", 1)
end

Второй способ взял у SRP Team но это вариант лучше для физ обьектов например автомобилей,и я не уверен что он будет правильно читаться для НПС так как меня беспокоят строчки xr_logic.pstor_store(db.actor, "тут его имя", 1) и elseif xr_logic.pstor_retrieve(db.actor, "тут его имя", 0)==0 then
лучше пытайся первым способом ;) второй как план Б :)



[img]http://nick-name.ru/forum/Ulman%28zzQWERTYzz%29.gif[/img]
# 10
Понедельник, 23.08.2010, 23:36:14

Ранг: Разведчик
Сообщений: 249
Награды: 9
Репутация: 66 Регистрация: 04.09.2009  

еще предложу способ в скрипте bind_stalker найди function actor_binder:update

и встав туда такое

if not has_alife_info("твоя инфопорция")
then
self.object:give_info_portion("твоя инфопорция")
название твоего скрипта.название функции спавна
end





В разработке: B.O.L. mod and Crusader Land

# 11
Воскресенье, 12.09.2010, 16:16:09

Ранг: Разведчик
Сообщений: 249
Награды: 9
Репутация: 66 Регистрация: 04.09.2009  

Чтобы спавнилась группа неписей периодически, в алл.спавне создайте респавнер или скачайте туториал




В разработке: B.O.L. mod and Crusader Land

# 12
Четверг, 18.11.2010, 13:22:24

Ранг: Разведчик
Сообщений: 181
Награды: 4
Репутация: 96 Регистрация: 15.09.2010 Город: СантПитерсбурх    

FATAL ERROR

[error]Expression : no_assert
[error]Function : CXML_IdToIndex<class CSpecificCharacter>::GetById
[error]File : e:\stalker\patch_1_0004\xr_3da\xrgame\xml_str_id_loader.h
[error]Line : 112
[error]Description : item not found, id
[error]Arguments : esc_unik_npc

ВОТ. Что произошло? Пожалуйста помогите.



­­«Проиграть мы всегда успеем. Надо постараться выиграть!»
В.А. Крючков, председатель КГБ (1988-1991)
# 13
Пятница, 19.11.2010, 07:44:54

Ранг: Новичок
Сообщений: 48
Награды: 5
Репутация: 29 Регистрация: 12.11.2010  

Shepka, произошел вылет :) . Проверь наличие и правильность описания (особенно название) твоего НПСа esc_unik_npc в character_desc_escape.xml (или, возможно, в другом подобном xml'e - зависит от того, куда ты сам прописал).
# 14
Суббота, 08.01.2011, 12:43:36

Ранг: Прибывший
Сообщений: 6
Награды: 2
Репутация: 2 Регистрация: 07.01.2011 Город: Припять    

А можно как-нибудь сделать, чтобы нпс патрулировал какую-нибудь местность(ну как чувак, который на Армейских складах, на базе "Свободы" по мосту ещё ходит туда-сюда)....? Кто подскажет: Огромное спасибо!:)

Добавлено (08.01.2011, 12:43:36)
---------------------------------------------
Quote (ya)
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"


У кого не работает?
Тут в коде надо не так, а так:
#include "gameplay\character_items.xml" \n
#include "gameplay\character_food.xml"

#include "gameplay\character_criticals_3.xml"
#include "gameplay\character_dialogs.xml"

у меня не работало..Заменил - работает!

;) изучайем струтуру С++ и LUA )) Ссылки на скрипты с решёткой


Вступайте в "Свободу"! Поможем мирным гражданам всей планеты путём уничтожения "Долга" :)
# 15
Суббота, 08.01.2011, 14:13:33

Ранг: Разведчик
Сообщений: 293
Награды: 30
Репутация: 264 Регистрация: 14.08.2010 Город: Киев    

Quote (Shepka)
FATAL ERROR [error]Expression : no_assert [error]Function : CXML_IdToIndex<class CSpecificCharacter>::GetById [error]File : e:\stalker\patch_1_0004\xr_3da\xrgame\xml_str_id_loader.h [error]Line : 112 [error]Description : item not found, id [error]Arguments : esc_unik_npc ВОТ. Что произошло? Пожалуйста помогите.

Стринг где-то неправильно прописан. Например, такое выбивает, если ты случайно пропишешь персонажу в инвентарь w_akk74, только здесь не находит самого непися. Значит, прописан не везде. Посмотри в конфигах смартов, многие забывают туда вписывать своих уников.




В зоне нет добра и зла. Выживает сильнейший, и плевать на его цели и намерения.
# 16
Понедельник, 10.01.2011, 05:31:53

Ранг: Прибывший
Сообщений: 6
Награды: 2
Репутация: 2 Регистрация: 07.01.2011 Город: Припять    

Quote (PsiGennychL)
как сделать чтобы нпс стоял на месте, а то он постоянно куда то уходит, подскажите пожалуйста ?!

Теперь создадим секцию нашего персоонажа. В файле spawn_section.ltx (gamedata/config/creatures) в блоке:

--------Escape--------------
--------neutrals------------

Создаём секцию. Код: [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

Т.е. когда мы создали секцию нашего нпс, то под строкой, где указывается группировка(community = dolg) пишем custom_data = scripts\esc_unik_npc.ltx И всё!



Вступайте в "Свободу"! Поможем мирным гражданам всей планеты путём уничтожения "Долга" :)
# 17
Суббота, 22.01.2011, 03:49:28

Ранг: Прибывший
Сообщений: 6
Награды: 2
Репутация: 2 Регистрация: 07.01.2011 Город: Припять    

Quote (snyпер)
я так и не нашел папку "gameplay"

Если что, если ты всё прально распаковал, то gameplay находится в папке config...Вдруг не там ищешь:)


Вступайте в "Свободу"! Поможем мирным гражданам всей планеты путём уничтожения "Долга" :)
# 18
Пятница, 28.01.2011, 15:47:28

Ранг: Разведчик
Сообщений: 293
Награды: 30
Репутация: 264 Регистрация: 14.08.2010 Город: Киев    

Quote (Shepka)
Ну есть люди добрые? Я создал точку респавна в темной долине. А неписи не появляются. Что делать? Для них smart_terrain обязательно делать?

Нет. Ты что-то не так сделал, когда создавал спаун.



В зоне нет добра и зла. Выживает сильнейший, и плевать на его цели и намерения.
# 19
Пятница, 28.01.2011, 20:32:59

Ранг: Разведчик
Сообщений: 181
Награды: 4
Репутация: 96 Регистрация: 15.09.2010 Город: СантПитерсбурх    

Qerrenty, Странно.. Сейчас еще попробую.


­­«Проиграть мы всегда успеем. Надо постараться выиграть!»
В.А. Крючков, председатель КГБ (1988-1991)
# 20
Пятница, 28.01.2011, 21:21:18

Ранг: Разведчик
Сообщений: 293
Награды: 30
Репутация: 264 Регистрация: 14.08.2010 Город: Киев    

Quote (Shepka)
</game_task>

С каждым бывает. Обидно, когда ищешь трудные проблемы, а оказывается такая мелочь, помарочка...

Quote (Shepka)
Qerrenty, Странно.. Сейчас еще попробую.

Там ещё кое-что было, хотя вряд ли является проблемой... Сейчас точно скажу, чего может не хватать.



В зоне нет добра и зла. Выживает сильнейший, и плевать на его цели и намерения.
  • Страница 1 из 2
  • 1
  • 2
  • »
Поиск:
Вверх
Правила чата
Мини-чат
+Мини-чат
0