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

Уроки по модостроению


Zeka1996Korneev

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

Доброго вам времени суток. Мне поведали о том, как создать непися в зп и я решил, что вопрос создание нпса мучает не только меня и решил написать об этом.

 

Нам нужны следующие файлы:
- configs\creatures\spawn_sections_zaton.ltx
- configs\gameplay\npc_profile.xml
- сonfigs\gameplay\charecter_desc_zaton.xml
- scripts\db.script

 

И создадим сами файлы:
- scripts\npc.script
- configs\scripts\snaiper_lg.ltx

Для начала создадим нашему неписю логику(( после мы её сможем часто пользоваться)
Для этого заходим в configs\scripts\snaiper_lg.ltx
И там вбиваем следующие строки:

[logic]
active = remark1
danger = danger_ignore
anim = desk_idle

[danger_ignore]
ignore_distance = 5

[remark1]
invulnerable = true
no_move = true
meet = meet_guide

[meet_guide]
close_anim = nil
close_victim = nil
far_anim = nil
far_victim = nil
close_distance = 0
far_distance = 0
close_snd_distance = 3
abuse = false
use = {=actor_enemy} false, true
allow_break = false
meet_on_talking = false
meet_on_talking = false

Теперь всё по порядку поясняю:
[logic] – обозначает, что это функция логи
active = remark1 - функция его действий
danger = danger_ignore – можно ли рядом достать оружие
anim = desk_idle - анимка, но вроде не влияет

[danger_ignore]
ignore_distance = 5
– на сколько близко можно махать стволом

[remark1]
invulnerable = true
- бессмертие. True-бессмертный, false- смертный
no_move = true (будет стоять на месте) или false что б ходил -- не работает.
meet = meet_guide название схемы

[meet_guide] - сама схема
close_anim = nil - анимка при прощании
close_victim = nil - вроде анимка при встречи
far_anim = nil
far_victim = nil
close_distance = 0
far_distance = 0
close_snd_distance = 3
 - на каком расстоянии будет слышен звук приветствия
abuse = false - вроде разрешение говорить
use = {=actor_enemy} false, true - ?
allow_break = false - можно ли закрыть диалог esc
meet_on_talking = false – говорить можно(диалог)
meet_on_talking = false - говорить можно(диалог)

Теперь заходим в configs\creatures\spawn_sections_zaton.ltx
После:

[test_body_5]:stalker
$spawn = "respawn\test_body_5"
;character_profile = zat_a2_stalker_mechanic
community = stalker
;story_id = test_body_5
custom_data = scripts\test_cfg5.ltx

прописываем это:

[snaiper]:stalker
$spawn = "respawn\snaiper"
character_profile = snaiper
spec_rank = master
community = stalker
custom_data = scripts\snaiper_lg.ltx
story_id = stalker_snaiper

где

[snaiper]:stalker - секция нпс
$spawn = "respawn\snaiper" - респавн для sdk
character_profile = snaiper - ссылка на профиль
spec_rank = master - ранг
community = stalker - группировка( здесь роли не играет
custom_data = scripts\snaiper_lg.ltx - логика, которую мы создали
story_id = stalker_snaiper - уникальный ID , не знаю но вроде что-то про квесты

Теперь заходим в configs\gameplay\npc_profile.xml
И в самый конец (перед </xml>) пишем:

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

Должно получиться примерно так:

<character id="conrack_selo_stalker">
<class>jup_b6_freedom_stalker_1</class>
</character>

<character id="snaiper">
<class>snaiper</class>
<specific_character>snaiper</specific_character>
</character>
</xml>

Пояснения:
<character id="snaiper"> - ID
<class>snaiper</class> - класс , это типа метки
<specific_character>snaiper</specific_character> - ID
</character> - массив закрыт

Теперь создадим профиль для нашего непися. Заходим в configs\gameplay\charecter_desc_zaton.xml
И в самый конец (перед <xml>) прописываем:

<specific_character id="snaiper" team_default="1">
<name>Дрюня</name>
<icon>ui_inGame2_merc_4</icon>
<map_icon x="1" y="0">
</map_icon>
<bio>Опытный сталкер. Детальная информация отсутствует.</bio>

<class>snaiper</class>
<community>stalker</community>
<terrain_sect>stalker_terrain</terrain_sect>
<snd_config>characters_voice\human_01\bandit\</snd_config>

<rank>40</rank>
<money min="1500" max="3500" infinitive="1"/>
<reputation>0</reputation>

<visual>actors\stalker_soldier\stalker_soldier_1</visual>
<supplies>

[spawn] \n
wpn_svd \n
ammo_9x39_ap = 1 \n
wpn_beretta \n
ammo_9x19_fmj = 1 \n
grenade_rgd5 = 2 \n
#include "gameplay\character_items.xml"
#include "gameplay\character_food.xml"
#include "gameplay\character_drugs.xml"
</supplies>
#include "gameplay\character_criticals_4.xml"

<start_dialog>zat_b215_stalker_guide_start</start_dialog>

<actor_dialog>zat_b215_stalker_guide_leave_zone</actor_dialog>
<actor_dialog>zat_b215_stalker_guide_maps</actor_dialog>
<actor_dialog>zat_b215_stalker_guide_to_pripyat_no_way</actor_dialog>
<actor_dialog>zat_b215_stalker_guide_to_pripyat</actor_dialog>
<actor_dialog>zat_b215_stalker_guide_to_jupiter</actor_dialog>
<actor_dialog>zat_b215_stalker_guide_to_zaton</actor_dialog>
<actor_dialog>zat_b215_stalker_guide_where_to</actor_dialog>
<actor_dialog>zat_b215_stalker_guide_about_himself</actor_dialog>
<actor_dialog>zat_b215_stalker_guide_about_anomalies</actor_dialog>
<actor_dialog>zat_b215_stalker_guide_about_surge</actor_dialog>

<actor_dialog>actor_break_dialog</actor_dialog>
</specific_character>

Где:
<specific_character id="snaiper" team_default="1"> - ID
<name>Дрюня</name> -имя
<icon>ui_inGame2_merc_4</icon> - иконка
<map_icon x="1" y="0"> - иконка на карте
</map_icon> - закрывающий тэг
<bio>Опытный сталкер. Детальная информация отсутствует.</bio> в игре не используется

<class>snaiper</class> - класс
<community>stalker</community> - группировка
<terrain_sect>stalker_terrain</terrain_sect> - ?
<snd_config>characters_voice\human_01\bandit\</snd_config> - голос

<rank>40</rank> - ранг( не используется в игре)
<money min="1500" max="3500" infinitive="1"/> - количество денег. infinitive="1"- бесконечные, infinitive="0" - заканчивающиеся
<reputation>0</reputation> - репутация

<visual>actors\stalker_soldier\stalker_soldier_1</visual> - модель непися
<supplies>

[spawn] \n - вещи в рюкзаке
wpn_svd \n
ammo_9x39_ap = 1 \n
wpn_beretta \n
ammo_9x19_fmj = 1 \n
grenade_rgd5 = 2 \n

#include "gameplay\character_items.xml" - случайный спавн вещей в рюкзаке
#include "gameplay\character_food.xml"
#include "gameplay\character_drugs.xml"
</supplies>
#include "gameplay\character_criticals_4.xml"


<start_dialog>zat_b215_stalker_guide_start</start_dialog>- диалоги. В нашем случае диалоги лоцмана
<actor_dialog>zat_b215_stalker_guide_leave_zone</actor_dialog> - диалог актора
.....
<actor_dialog>actor_break_dialog</actor_dialog> - диалог выхода
</specific_character> - закрывающий тэг

Теперь создаём скрипт спавна scripts\npc.script
Вбиваем в него:

function snaiper()
if not db.actor:has_info("spawn_snaiper")
then

alife():create("snaiper",vector():set(116.238,2.250,183.199),1165999,316)
db.actor:give_info_portion("spawn_snaiper")
end
end

Строчка alife():create("snaiper",vector():set(116.238,2.250,183.199),1165999,316) отвечает за координаты, на которых спавнится объект. В нашем случае - непись. Подробнее о них:
Pos - 116.238,2.250,183.199
Ivid - 1165999
Gvid - 316

Чтобы их получить качаем позишн информер Отсюда

 

И последнее - регистрация скрипта в scripts\db.script
Открываем db.script. Находим строки:

function add_actor(obj)
actor = obj
actor_proxy:net_spawn(obj)
add_obj(obj)
end

И меняем на такие:

function add_actor(obj)
actor = obj
actor_proxy:net_spawn(obj)
add_obj(obj)
npc.snaiper()
end

Заходим в игру и всё - глядим на непися

 

Изменено пользователем PRYZRAK
оформил и исправил ошибки

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


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

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