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

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


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

можно ему работу в гулаге задать с определенными свойствами-как Шустрому или Толику или в условии спавна прописать инфопоршни (пример Волк -спавниться в лагере ,выполняет работу,а при получении определенного инфопоршня-исчезеет с кордона и появляется на складах) ну или не стопроцентный способ-по инфопоршню

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

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

Здравствуйте великие умы форума АМК! Можете сделать урок по созданию НПС в ЧН. Я пробовал а ничего не получается.

Объясните всё по крупиночкам языком ламеров :) что из себя представляет конфиг НПС в игре. (какие файлы за это отвечают + ещё подробная теория)

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

gruber

 

Это не совсем то что хотелось

Нужно чтоб НПС находясь под гулагом любым в определенное время отправился по своим

делам тоесть в none = true а погуляв некоторое время стал снова доступен смартгулагам

любым верней тем которым подходит

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

AKKK1,

Можно сделать по-другому.

Создай свой гулаг для этого непися. И тогда схема логики может быть такой.

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

Кто весел - тот смеется, кто хочет - тот добьется, кто ищет - тот всегда найдет!

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

Kostya V

 

Спасибо

но наскольло я понимаю невозможно создать смартгул на всю локу ? или можно ?

Как заставить непися для начала просто в определенное время покинуть гулаг перейти под свою логику но не в другой гулаг если он конечно не на всю локу

 

допустим начало игры новички у костра в 5.20 один из них должен уйти в [smartterain] none = true

а в 12.00 вернутся обратно или к любому другому camp

 

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

 

 

можноли создать на локе штук 30 гулагов и чтоб НПС по инфопоршу выбирал их рандомно

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

Pihan13, Там не трудно.....Скачай прогу(у меня в подписи),создай пробного НПС и посмотри фаилы на выходе... и разбирайся....

ЗЫ:Это не реклама моей программы :),хотя могло так выглядеть...

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

AKKK1,

Я не знаю, что значит гулаг на всю локу. По-моему, надо просто создать гулаг и прописать ему работу какую-нибудь. А вот работа этого гулага может быть уже по всему уровню. Как уже пропишешь.

Ты просил подсказать, как это можно сделать, я сказал. Расписывать все это не буду.

По поводу рандомности не знаю.

Кто весел - тот смеется, кто хочет - тот добьется, кто ищет - тот всегда найдет!

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

Гулаг на всю локу создать, конечно же, можно.

В загрузке работ проставить online = true и всё. Наделать пути, там где необходимо, прописать логику.

А для непися, который должен покинуть своё место на некоторое время, можно сделать примерно следующее:

[первая_логика]
on_info = {!is_day} вторая_логика

[вторая_логика]
on_info = {=is_day} первая_логика

Это условно. Можно и другие условия придумать. Функция is_day находится в xr_conditions.script. Можно создать по её аналогии другую, с другим промежутком времени. Назвать, к примеру, is_utro :)

function is_utro (actor, npc)
    return level.get_time_hours() >= 5 and level.get_time_hours() < 12
end

То есть, с 5ти до 12ти непись будет использовать одну логику, а в остальное время другую.

Конечно, можно заставить и покидать гулаг - прописать индивидуальную логику и имя_гулага = true - но только при этом гулаг необходимо распускать, используя cond = {+/-условие/инфопоршен}, по которому гулаг будет прекращать\возобновлять свою работу. Только это не есть хорошо, ибо все остальные жители так же будут покидать гулаг, если его отключить. Проще пользовать первый вариант - менять логику по условию или инфопоршену, не затрагивая остальных "жителей".

Ну и ещё, как вариант, можно менять состояние всего гулага. В один промежуток времени гулаг в 0-ом состоянии, в другой промежуток - в 1-ом - делается это в скриптах загрузки работ:

    if type == "имя_гулага" then
        return function(gulag)
            if db.actor ~= nil then
                if ( level.get_time_hours() >= 5 and level.get_time_hours() <= 12 ) then
                    return 0
                else
                    return 1
                end
            else
                return gulag.state
            end
        end
    end

 

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

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

Тоесть если НПС прописать например это с определенными условиями конечно

 

 

сидящие днём у костра

[logic@esc_lager_kamp1]

active = kamp1@esc_lager

 

[kamp1@esc_lager]

center_point = camp_center

path_walk = camp_center_task

soundgroup = esc_lager

meet = meet@lager

 

 

пойдет он k костру в лагере новичков ?

и если пойдет то ниче что он четвертым будет ?

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

Привет Всем! Вот и я решил "попробывать" себя в моддинге. Вроде всё сделал как написано, игра нормально загружается (без вылета), а моего НПС нет... Где я мог ошибиться, раз нет вылета? Соответственно лог не прикладываю.

Изменено пользователем pastor

)))))))))))))))))))))))))))))))))

Ссылка на комментарий
меченый(стрелок), честно говоря не знаю... Но если это есть в уроке, то скорее всего да. Где и как это проверить? Кстати, если нет вылета, но я его не заспавнил, значит я всё правильно сделал? :) И ещё, я так понимаю, что НПС должен появиться сразу?!

)))))))))))))))))))))))))))))))))

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

pastor, необязательно если его нет и не вылетела правильно. Допустим ты в пути к визуалу допустил ошибку или впихнул ему такой предмет, которого нет в игре, либо допустил ошибку в его логике. Игра не вылетет, но в момент его спавна (экшеном из диалога например) игра вылетет

проверено на собственном опыте! ;)

Ссылка на комментарий
'Pihan13' В том и дело, что, теорретически, спавниться он должен сразу (без диалога с кем либо). Ещё я понял, что новая игра для его появления не нужна?!

)))))))))))))))))))))))))))))))))

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

новая игра не нужна. скорее всего ты инфопоршень не туда вставил и он не появился.

Вот -

Всё наш НПС будет стоять на месте своего спауна. Едем дальше. Нам надо активировать нашего персоонажа. для этого мы должны вставить строку:

Код

<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>

 

 

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

Кстати, в статье ошибку с

$spawn = "respawn\esc_unik_npc"

исправил

Изменено пользователем SCRIPT

Thank you for your honesty.

Now fuck off and die.

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

pastor, почитал урок и кое-что понял, в уроке спавн непися висит на инфопоршне, а ты создал новый инфопоршень, который у тебя не выдается, по этому и спавна нет. Вообщем сделай так:

<?xml version='1.0' encoding="windows-1251"?>

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

  <info_portion id="global_dialogs">
    <dialog>actor_break_dialog</dialog>
<!--    <dialog>actor_help_wounded</dialog>   -->
  </info_portion>


  <info_portion id="terrain_test">
  </info_portion>


  <!-- special info portion that sends to actor when it
    use in-game UI (PDA, Inventory, etc)-->
    
    <info_portion id="ui_pda">
        <disable>ui_pda_hide</disable>
    </info_portion>
    <info_portion id="ui_pda_hide">
        <disable>ui_pda</disable>
    </info_portion>
          
   <info_portion id="ui_pda_contacts"></info_portion>
   <info_portion id="ui_pda_contacts_hide"></info_portion>
   
   <info_portion id="ui_pda_map_local"></info_portion>
   <info_portion id="ui_pda_map_global"></info_portion>
   
   <info_portion id="ui_pda_news"></info_portion>
   <info_portion id="ui_pda_news_hide"></info_portion>
   
   <info_portion id="ui_pda_jobs_failed"></info_portion>
   <info_portion id="ui_pda_jobs_accomplished"></info_portion>
   <info_portion id="ui_pda_jobs_current"></info_portion>
   
    <info_portion id="ui_pda_jobs">
        <disable>ui_pda_jobs_hide</disable>
    </info_portion>
    <info_portion id="ui_pda_jobs_hide">
        <disable>ui_pda_jobs</disable>
    </info_portion>

   
   <info_portion id="ui_pda_contracts"></info_portion>
   
   <info_portion id="ui_pda_diary"></info_portion>
   <info_portion id="ui_pda_diary_hide"></info_portion>
      
   
   <info_portion id="ui_pda_encyclopedia"></info_portion>
   <info_portion id="ui_pda_encyclopedia_hide"></info_portion>
   
   <info_portion id="ui_pda_actor_info"></info_portion>
   <info_portion id="ui_pda_ranking"></info_portion>
   <info_portion id="ui_pda_events"></info_portion>
   
   <info_portion id="ui_inventory">
        <disable>ui_inventory_hide</disable>
   </info_portion>
   <info_portion id="ui_inventory_hide">
        <disable>ui_inventory</disable>
   </info_portion>

    <info_portion id="ui_talk">
        <disable>ui_talk_hide</disable>
    </info_portion>
    <info_portion id="ui_talk_hide">
        <disable>ui_talk</disable>
    </info_portion>

    <info_portion id="ui_trade">
        <disable>ui_trade_hide</disable>
    </info_portion>
    <info_portion id="ui_trade_hide">
        <disable>ui_trade</disable>
    </info_portion>

    <info_portion id="ui_car_body">
        <disable>ui_car_body_hide</disable>
    </info_portion>
    <info_portion id="ui_car_body_hide">
        <disable>ui_car_body</disable>
    </info_portion>


   <info_portion id="tutorial_part_15_hide_weapon"></info_portion>


    <info_portion id="autojump_enabled"></info_portion>

    <!--  kostya level  -->
    <info_portion id="peshera_code_door_unlocked"></info_portion>
    <info_portion id="peshera_code_door_unlocked2"></info_portion>
    <info_portion id="peshera_code_door_unlocked3"></info_portion>
    <info_portion id="peshera_code_door_unlocked4"></info_portion>
    <info_portion id="spawn_teleport_exit"></info_portion>
     <info_portion id="spawn_teleport_hospital"></info_portion>
    <info_portion id="krovosos_spawn"></info_portion>
    <info_portion id="krovosos_spawn2"></info_portion>
     <info_portion id="generators_code_door_unlocked"></info_portion>
     <info_portion id="red_forest_open"></info_portion>
    <info_portion id="red_forest_open2"></info_portion>


</game_information_portions>

 

Возможно всё, ну или почти всё.
Ссылка на комментарий

Моя инструкция по спавну NPC через скрипт в ЧН

(опишу всё довольно понятно)

Чтож приступим :)

для начала берём файл:

gamedata\configs\gameplay\character_desc_***.xml (*** - имя локации, но это не важно т.к. например прописали мы нашего нпс в character_desc_escape.xml, его спокойно можно будет спавнить через скрипт скажем на болотах.)

в этот файл в самом конце есть тэг <xml> и теперь ПЕРЕД НИМ вставляем "основу":

<specific_character id="esc_nash_npc" team_default = "1">
<name>esc_nash</name>
<icon>ui_npc_vlad</icon>
<map_icon x="1" y="0"></map_icon>
<bio>Новичок.</bio> 
<class>esc_nash_npc</class> 
<community>freedom</community>  
<terrain_sect>stalker_terrain</terrain_sect> 
<snd_config>characters_voice\human_02\freedom\</snd_config>
<rank>50</rank>
<reputation>13</reputation>
<money min="0" max="1400" infinitive="0"/>
<visual>actors\stalker_monolith\stalker_monolith_2</visual>

<supplies>
[spawn] \n
device_torch \n
wpn_pb \n
ammo_9x18_fmj = 2 \n
</supplies>
</specific_character>

 

<specific_character id="esc_nash_npc" team_default = "1">

<name>esc_nash</name> - имя можно указать GENERATE_NAME_stalker, GENERATE_NAME_bandit... тогда будет генериться случайное имя, но у нас есть определённое имя - esc_nash. куда с ним дальше объясню позднее

<icon>ui_npc_vlad</icon> иконка нашего при обыске и шмоне трупа (объясню позднее)

<map_icon x="1" y="0"></map_icon> - хз что такое, по походу иконка на карте

<bio>Новичок.</bio> - абсолютно нигде не учавствует (в билде 1935 это можно было читать по ПДА)

<class>esc_nash_npc</class> - класс (объясню и создадим позднее)

<community>freedom</community> - группировка к которой принадлежит наш НПС (можно указать stalker, freedom, monolith ect.)

<terrain_sect>stalker_terrain</terrain_sect> - smart-terrain (так и указывать stalker_terrain)

<snd_config>characters_voice\human_02\freedom\</snd_config> (голосовой конфиг. распакуйте файл Localization\xrussian.db. ВНИМАНИЕ!!! если указать конфиг вояк и наш НПС будет другом, то будут вылеты - у вояк какогото там звука нету)

<rank>50</rank> - ранг (от 0 до 1000) вроде распределяется как новичок, опытный, мастер, ветеран,...

<reputation>13</reputation> - репутация (от 0 до 1000) репутация как на форуме АМК - у кого больше тот главнее (шутка). От неё зависит ВРОДЕ за сколько мы будем сдавать ему хабар и он нам.(т.е. если у него выше, то мы ему дёшево будем, а он нам дорого)

<money min="0" max="1400" infinitive="0"/> - шальные наличные. min="0" самый минимум который может у него быть, max="1400" и так понятно. поставив infinitive="1" у него будут бесконечные (например у торговцев ---)

<visual>actors\stalker_monolith\stalker_monolith_2</visual> - путь до модели "визуала" - любой файл в папке GAMEDATA\meshes\actors ну и соотв в подпапках.

<supplies> - открывает "снабжение"

[spawn] \n - это не трогаем

device_torch \n \\\\ сюда можно добавлять свое к примеру чтоб выдать НПС АК74, пишем ему строку wpn_ak74 \n

wpn_pb \n

ammo_9x18_fmj = 2 \n

</supplies> - закрывает"снабжение"

</specific_character>

 

 

Далее:

открываем gamedata\configs\creatures\spawn_sections_***.ltx (*** - имя локи. как и в предидущем случае неважно)

добавляем:

;наш персонаж
[esc_nash_npc]:stalker; Здесь esc_nash_npc - что вместо этого напишем, то и пропишем для спавна. или это сам класс нпс (в профиле его <class>esc_nash_npc</class>)
$spawn = "respawn\esc_nash_npc"
character_profile = esc_nash_npc; то,  что мы прописали в character_desc_*** (<specific_character id="esc_nash_npc"...)
spec_rank = veteran;ранг. на этот раз не цыфрами а словами (master, veteran...)
community = freedom;опять группировка. хотя если вы в профиле указали скажем freedom, а тут stalker, то вылета не будет
custom_data = scripts\escape\esc_nash_npc.ltx; custom data (в будующем кастомдата) путь до ltx - файла логики

 

Логика!

создаём файл esc_nash_npc.ltx (или как там у вас) в папке gamedata\configs\scripts\escape (имя локации опять чтобы не путаться)

пишем туда стандартную логику - стой на месте, нифига не делай:

[logic] 
active = walker@stay_at_position 
danger = danger_ignore

[danger_ignore] 
ignore_distance = 5

[walker@stay_at_position] 
path_walk = walker_stay_at_position_walk
path_look = walker_stay_at_position_look

Точки пути прописываем в файле way_имя_локации.ltx декомпилированного all.spawn. Новую игру начинать не нужно.

 

вот по логике чуток:

http://stalkerin.gameru.net/wiki/index.php...1%D1%82%D1%8C_1

 

Едем далее:

Имя:

в файле

gamedata\configs\text\rus\st_characters.xml в самый конец ПЕРЕД ТЭГОМ </string_table> добавляем:

<string id="esc_nash">
    <text>Индюк "Опаленный"</text>
</string>

Иконка:

стандартные в файле:

gamedata\configs\ui\textures_descr\ui_npc_unique.xml

структура файла:

<file name="ui\ui_npc_unique"> - файл из которого брать иконки
<texture id="ui_npc_u_nebo_2_face_1" x="0" y="0" width="165" height="108" /> иконка с именем ui_npc_u_nebo_2_face_1 размером 165 х 108 от начала координат (0,0)
ui_npc_u_nebo_2_face_1 - то что в профиле вставляется в тэг icon

 

Далее создаём скрипт ваше_название.script в папке gamedata\scripts. в него пишем

function esc_spawn_nash_nepic () 
    alife():create("esc_nash_npc",vector():set(-233.62,-20.04,-152.72),23680,570)
end

esc_nash_npc - Имя из spawn_cections_***

(-233.62,-20.04,-152.72),23680,570) позиция (x, y, z, gw, lw,) (-233.62,-20.04,-152.72),23680,570) - это в 1ом доме от сидорыча на кордоне

теперь добавляем строку <action>ваше_название.esc_spawn_nash_nepic</action> в любой диалог

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

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

Изменено пользователем Виталий Зверь
Ссылка на комментарий
Как прописать что бы непись появился сразу в начале игры, а не после диалога? С редактированием алл.спавна

 

Если я правильно понял то так

создаем секцию и алл спавне

 

[не использумое число]

; cse_abstract properties

section_name = stalker ----------- обязательно

name = -------------------------- имя

position = -225.604339599609,-20.221607208252,-147.097625732422 ------- координаты

direction = 0.0623090341687202,0.00229393295012414,0.0141186164692044 ----- ореентир можно (0,0,0)

 

; cse_alife_trader_abstract properties

money = 5000 -------------- ну тут понятно

character_profile = esc_stalker_novice ------------

 

; cse_alife_object properties

game_vertex_id = 47

distance = 3.5

level_vertex_id = 29123

object_flags = 0xffffffbf

custom_data = <<END

[smart_terrains]

esc_lager = true ----------- имя смарта если под своей логикой то none = true

END

 

; cse_visual properties

visual_name = actors\novice\green_stalker_2

 

; cse_alife_creature_abstract properties

g_team = 0

g_squad = 1

g_group = 5

health = 1

dynamic_out_restrictions =

dynamic_in_restrictions =

 

upd:health = 1

upd:timestamp = 0xef20e0ec

upd:creature_flags = 0xe5

upd:position = -225.604339599609,-20.221607208252,-147.097625732422

upd:o_model = 0

upd:o_torso = 0.00229393295012414,0.0623090341687202,0

upd:g_team = 0

upd:g_squad = 1

upd:g_group = 5

 

; 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,0,1,0

predicate4 = 2,1,2,1

 

; cse_ph_skeleton properties

 

upd:start_dialog =

 

; se_stalker properties

 

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

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

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

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

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

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

Войти

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

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

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