Это мой первый гид, нo я постараюсь в отчетливой форме объяснить вам создание НПС через All.spawn и приписывание типового квеста этому НПC. Весь мой опыт получен трудной практикой и с пролитым потом, поэтому этот гид, я думаю, Вам поможет намного легче учится модостройению SoC.
Глава 1
Знакомство с ACDC:
В этом случае, это не рок группа, а программа для разбора файла All.spawn. All.spawn базирует всех неписей игры, в нашем случaе НПС человечка. Файл запакован, поэтому его распаковать и собрать обратно поможет именно ACDC. Вот мой исправный ACDC:
Заметка. С некоторыми ACDC имел проблем, но если Вы нашли другой исправный, при отсутствие файлов compile.bat и decompile.bat :
* - любое слово
1. Откройте папку с ACDC 2. Файл *.pl переименуйте в acdc.pl 3. Закиньте All.spawn в папку ACDC 4. Cоздаем *.txt, вписываем в него perl acdc.pl -d all.spawn 5. Из *.txt делаем decompile.bat (просто переименуем или с UltraEdit программой) 6. Cоздаем *.txt, вписываем в него perl acdc.pl -c all.ltx -o new.spawn 7. Из *.txt делаем compile.bat 8. Качаем и записываем ----> ActivePerl <---- (в любом случае) 9. Decompile.bat - распаковка All.spawn, compile.bat - запаковка.
Глава 2
Создание НПС через All.spawn. Своего НПС возможно базировать через script, но тогда мы теряем важнейший нюанс: story id НПС - уникальный номер НПС, без него типовые квесты и другие изюминки не пройдут.
С помощью ACDC декомпилируем all.spawn. Получаем файлы: alife_l01_escape , way_l01_escape и тд.
Создадим нового НПС на Кордоне. Открываем alife_l01_escape.
Если у вас чистая игра и вы ничего не делали в all.spawn, то последняя секция у Вас будет под номером 869. Добавляем в конец такой код:
Code
[870] ;это уникальный номер. Не должен повторятся ; cse_abstract properties section_name = stalker ;секция того, что спавним name = noobik ;имя может быть любое position = -197.89811706543,-19.897294998169,-139.87812805176 ;позиция direction = 0,0,0 ;разворот
; cse_alife_trader_abstract properties money = 5000 ;количество денег, с которым создастся этот NPC (файл профиля NPC перекроет это значение) character_profile = esc_noobik ;профиль NPC
; cse_alife_object properties game_vertex_id = 57 ;гейм вертекс можно узнать через скрипт distance = 0 ;дистанция вокруг позиции, в которой спавним (если 0, то заспавнится точно в позиции, которую мы указали) level_vertex_id = 54230 ;левел вертекс можно узнать через скрипт object_flags = 0xffffffbf custom_data = <<END
[logic] cfg = scripts\noobik_logic.ltx ;ссылка на логику
; cse [smart_terrains] ;настройки смартов none = true ;к какому смарту относится NPC (если ''none'', то не берется под гулаг) END story_id = 10000 ;уникальный story ID
<!---------------------------------------esc_noobik-----------------------------------------------------> <specific_character id="esc_noobik" team_default = "1"> <name>Рома Армеец</name> ;Имя игрока в игре <icon>ui_npc_u_stalker_neytral_balon_1</icon> ;Иконка в диалоге, выбор в gamedata/textures/ui/ui_npc_unique <bio>esc_noobik</bio> ;биография (неприжилась)
<!---------------------------------------esc_noobik-----------------------------------------------------> <specific_character id="esc_noobik" team_default = "1"> <name>Рома Армеец</name> ;Имя игрока в игре <icon>ui_npc_u_stalker_neytral_balon_1</icon> ;Иконка в диалоге, выбор в gamedata/textures/ui/ui_npc_unique <bio>esc_noobik</bio> ;биография (неприжилась)
<start_dialog>hello_dialog</start_dialog> ;приветствие <actor_dialog>tm_esc_noobik_dialog</actor_dialog> ;сдача квеста <actor_dialog>tm_esc_noobik_reward</actor_dialog> ;сдача награды
</specific_character>
Открываем gamedata\config\misc\task_manager.ltx, пишем после sar_monolith:
Code
tm_kill_stalker_7
И в конце:
Code
[tm_kill_stalker_7] ;наше задание type = kill_stalker ;тип задания, в данном случае – убийство сталкера community = actor ;группировка, которой принадлежит выполняющий задание (везде выставлен равным actor) text = tm_kill_stalker_7_text ;описание нашего задания в диалоге description = tm_kill_stalker_7_descr ;описание нашего задания в PDA parent = esc_noobik ;заказчик target = sim_stalker_novice ;цель reward_money = 1000 ;сколько денег нам дадут за выполнение reward_reputation = +3 ;повышение/понижение репутации после выполнения задания reward_rank = 2 ;количество очков ранга, выдаваемых за выполнение reward_item = vodka, conserva ;предметы, выдаваемые в награду за квест time = 86400 ;время выполнения квеста в секундах (для отсутствия времени писать (--) ) prior = 2 ;приоритет задания
Не забываем про PDA. В файл gamedata\config\gameplay\storyline_info_taskmanager.xml добавляем следующие строки:
Текст на русском для задания нужен? Тогда открываем gamedata\config\text\rus\stable_task_manager.xml и туда вгоняем следующие строки:
Code
<string id="tm_kill_stalker_7"> ;Задание в PDA <text>Убить "мясоеда"</text> </string> <string id="tm_kill_stalker_7_text"> ;Диалог квеста <text>Есть сталкер такой, наглый мясоед, барыга, не то слово. Освободи мир от его присуствия...</text> </string> <string id="tm_kill_stalker_7_descr"> ;Инфа в PDA <text>Убить барыгу "мясоеда". Все просто как джаз... </text> </string>
Важно! Эти строки не должны выходить за пределы тегов <string_table> и </string_table>.
Вот и все!
Спасибо за помощь Arhet, Melnik, Kail и ColR_iT
Сообщение отредактировал Mefistorus - Воскресенье, 01.07.2012, 01:03
Salem, Своего НПС возможно базировать через script, но тогда мы теряем важнейший нюанс: story id НПС - уникальный номер НПС, без него типовые квесты и другие изюминки не пройдут.
Mefistorus, в целом здорово - молодец! Но... Одно уточнение и один вопрос: Уточнение. Персонажу заспавненного скриптом, можно присвоить story_id через net_paket. Это просто в качестве довода информации. Лично сам воспользуюсь именно all.spawn. Вопрос. Ткните меня, пожалуйста, носом туда, где Вы находите туторы, в которых схема remark, задаётся в качестве активной??? Пойду поругаюсь... ОНА НЕ ПРЕДНАЗНАЧЕНА ДЛЯ ЭТОГО! Уж простите... Нужна она, как связующее звено между переключением основных схем, например посиделками у костра и патрулированием, т.е. благодаря схеме remark, можно сделать плавный переход, например задан вот такой алгоритм поведения: Сидит НПС у костра. Приходит его время идти в патруль. Так вот между переключением со схемы kamp на схему walker, можно вставить схему remark, которая заставит НПС, к примеру, медленно встать, выгнуть спину, подтянуться и сказать какую-нибудь фразу, что-то типа: "Эх, погодка то портится...". И всё! На другое эта схема не рассчитана. Ко всему вот эта строчка: no_move = true - будет работать только в схеме zoneguard, в данном примере она бесполезна.
Сообщение отредактировал ColR_iT - Пятница, 29.06.2012, 14:02
Mefistorus, послушай (точнее прочитай) совет. Не используй схему remark, в качестве активной - это привод к неправильному поведению НПС. Например, стоит наш сталкер на каком-то месте, под управление этой схемы. Мимо, на достаточно близком расстоянии, пробегают собаки, естественно наш НПС сорвётся с места и побежит, куда движок пошлёт, т.е. перейдёт на движковый денжер. Собаки, если повезло, пробежали мими, если нет, то нет. А вот НПС наш не станет возвращаться в ту же точку, в которой стоял до этого, он так и останется столбенеть на месте, куда перешёл находясь под денжером. И это не единственный "глюк" который ты сможешь заметить. Поверь. Не легче ли его "посадить" на схему walker и прописать ему две точки walk и look, тем более, что ты делаешь это через all.spawn!? Вот пример такой логики:
Отличная статья, я тоже долго думал над квестом по убийству сталкера , вылеты уже(жаль, мат запрещен). Попробую сделать то, что тут описано, кстати, спавнить непися через скрипт немного быстрее, но можно запутать в скриптах(если НПС много), поэтому их легче в какой-нибудь блокнот записывать
Добавлено (04.07.2012, 15:38) --------------------------------------------- ColR_iT, и тебе спасибо, но во многих статьях логика remark....
ColR_iT, было видео от АМКашника по кличке Script, он создавал непися с этой логикой, инструкцию он откуда-то взял, вот ссылка на статью КЛИК Да и на многих заброшенных сайтах в логику забита функция remark'А
ColR_iT, вот еще несколько: 1. КЛИК 2. КЛИК Еще кое-что хотел спросить: после спавна непися через скрипт нужна новая игра, есть ли способ спавна без новой игры?
Сообщение отредактировал Uyman358 - Среда, 04.07.2012, 16:51