05:01
ОбновитьСмайлыУправление мини-чатом
Мини чат

[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Модератор форума: Rasteador, Королёв  
Форум » Любительские модификации для "Корсаров" » Уроки по созданию модификаций » Урок: Добавление НПС в игру и в свой файл описание НПС
Урок: Добавление НПС в игру и в свой файл описание НПС
ChernozmeyДата: Пятница, 22.11.2013, 16:35 | Сообщение # 1
 Капитан-лейтенант
Сообщений:
343
Награды:
Репутация:
Замечания:
Для начала, добавим свой собственный файл, в котором будут прописаны все ваши НПС. Это удобно, по тому лишь, что они не будут путаться с НПС игры, и вы не будете искать их в бесконечном перечислении. Откроем любой текстовой редактор и сохраним файл MyCharacters.c в папку init (путь program\characters\init) . Вы можете назвать файл, по любому, сути это не меняет, главное, все названия пишутся латиницей. Далее приписываем в файле:

Код
int CreateMyCharacters (int n)
{
ref ch;
// здесь будем писать код описания НПС
return n;
}


Шаблон файла для НПС готов. Переходим к интеграции файла в игру, чтобы она его видела, узнавала и воспринимала ваших НПС. Открываем файл characters.с (путь program\characters), находим следующую строчку с выражением LoadSegment, например:

Код
LoadSegment("characters\init\Usurers.c");    ReloadProgressUpdate();


Копируем строчку в этот же столбец и переименовываем путь на свой, так чтобы появилась строка такого вида:

Код
LoadSegment("characters\init\ MyCharacters.c ");    ReloadProgressUpdate();


В том же файле, далее ищем строку с выражением UnloadSegment, копируем строку, например:

Код
UnloadSegment("characters\init\Usurers.c");


И меняем ее так, чтобы получилось:

Код
UnloadSegment("characters\init\ MyCharacters.c ");


Далее, открываем файл characters_init.с (путь program\characters ) и находим следующую строку:

Код
///////////////////////////////////////////////////
/// ОСТАЛЬНЫЕ ПЕРСОНАЖИ
///////////////////////////////////////////////////

ReloadProgressUpdate();

n = 3;
n = CreateAntiguaCharacters(n);
ReloadProgressUpdate();
//Trace("Antigua: " + n);


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

Код
n = CreateMyCharacters (n);
ReloadProgressUpdate();
//Trace("Story: " + n)
;

Теперь ваш файл MyCharacters.c интегрирован в игру и пришло время прописывать в нем код НПС. Допустим, ваш НПС мужчина, определенной нации и с файлом диалога, то есть, имеет возможность диалога с ГГ. Для начала, с помощью программы GM Viewer (файл запуска gm_view), определяемся с моделью НПС. Допустим нас, устраивает модель huber_spa.gm, значит, model НПС будет huber_spa. Рассмотрим самый простой код НПС:

Код
makeref(ch,Characters[n]);  
ch.id = "My_Hero";
ch.name = "Джон";
ch.lastname = "Блайк";
ch.rank = 5;
ch.model = "huber_spa";
ch.location    = "StMartin_Tavern";  
ch.location.group = "sit";
ch.location.locator = "sit3";
ch.Dialog.Filename = " My_Hero_dialog.c ";
ch.nation = PIRATE;
ch.sex = "man";
ch.greeting = " pirat_guard_1";
LAi_NPC_Equip(ch, ch.rank, true, true);  
Lai_SetStayType(ch);  
LAi_SetImmortal(ch, true);
n = n + 1;


ch.id = "My_Hero"; - id НПС прописываемое в case квестов
ch.name = "Джон"; - имя НПС
ch.lastname = "Блайк"; - фамилия НПС
ch.rank = 5; - уровень НПС
ch.model = "huber_spa"; - название модели используемой для НПС
ch.location = "StMartin_Tavern"; - локация в которой находится НПС, в нашем случае таверна на Св. Мартине
ch.location.group = "sit"; - группа локатора
ch.location.locator = "sit3"; - место локатора
ch.Dialog.Filename = "My_Hero_dialog.c"; - файл диалога НПС
ch.nation = PIRATE; - к какой нации относится НПС
ch.sex = "man"; - пол НПС
ch.greeting = " pirat_guard_1"; - файл звукового приветствия НПС (находится в папке RESOURCE\Sounds\Voice\Russian)
LAi_NPC_Equip(ch, ch.rank, true, true); - сабля, пистолет, труба у НПС ответствуют уровню, подбираются автоматически игрой.
Lai_SetSitType(ch); - тип поведения НПС, в нашем случае сидит (все типы поведения описаны в файле LAi_types.с путь: program\loc_ai, внимательно следите, что бы не было разногласия между Lai_SetSitType(ch); и ch.location.group)
LAi_SetImmortal(ch, true); - НПС бессмертен

В окончательном варианте, код НПС в файле MyCharacters.c, будет выглядеть следующим образом:

Код
int CreateMyCharacters (int n)
{
ref ch;

makeref(ch,Characters[n]);  
ch.id = "My_Hero";
ch.name = "Джон";
ch.lastname = "Блайк";
ch.rank = 5;
ch.model = "huber_spa";
ch.location    = "StMartin_Tavern";  
ch.location.group = "sit";
ch.location.locator = "sit3";
ch.Dialog.Filename = " My_Hero_dialog.c ";
ch.nation = PIRATE;
ch.sex = "man";
ch.greeting = " pirat_guard_1";
LAi_NPC_Equip(ch, ch.rank, true, true);  
Lai_SetStayType(ch);  
LAi_SetImmortal(ch, true);
n = n + 1;

return n;
}


И напоследок, немного о локаторах. В игре локаторы не видны, но при написании квестов и добавлении НПС требуется видеть локаторы, что бы точно знать, где будут расставлены НПС, лежать предметы и т.д. Чтобы увидеть все локаторы нужно открыть файл locations_loader.c (путь program\locations), найти строку VisibleLocatorsGroup("item", 1.0, 15.0, 255, 255, 0, 255);, и удалить символы /* и */, или // со всех требуемых вам локаторов, обычно этих хватает:

Код
VisibleLocatorsGroup("goto", 1.0, 15.0, 55, 255, 0, 0);
VisibleLocatorsGroup("reload", 1.0, 15.0, 55, 0, 255, 0);  
VisibleLocatorsGroup("sit", 1.0, 15.0, 55, 255, 0, 0);
VisibleLocatorsGroup("rld", 1.0, 15.0, 255, 0, 255, 0);  
VisibleLocatorsGroup("box", 1.0, 15.0, 255, 255, 0, 0);
VisibleLocatorsGroup("randitem", 1.0, 15.0, 255, 255, 0, 255);


При следующем включении игры вы будите видеть все локаторы.

Все, ваш НПС полностью прописан и его можно встретить в таверне, в колонии Св. Мартин, модель губернатора Испании будет сидеть за столиком, слева от входа. Только, пока он еще не заговорит с ГГ. В уроке Пишем диалоги, мы рассмотрим как прописать диалог между НПС и ГГ. Если возникнут вопросы, то задавайте их в этой теме.

Урок написан для форума Залив Ветров.


 
Форум » Любительские модификации для "Корсаров" » Уроки по созданию модификаций » Урок: Добавление НПС в игру и в свой файл описание НПС
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика