Молоток

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » Молоток » Игры изнутри » FAQ по Корсарам


FAQ по Корсарам

Сообщений 31 страница 40 из 56

1

FAQ по созданию модификаций для игр серии «Корсары»

https://i.pixxxels.cc/yd4kB25j/bae27e5525ba.png

Действия связанные с НПС

▶ Как поместить/удалить НПС в/из локации
▶ Как дать/лишить бессмертия НПС
▶ Как посадить НПС за стол в таверне посредством LAi_ActorSetSitMode
▶ Как посадить НПС за стол в таверне через файл StoryCharacters.с
▶ Как заставить НПС отправиться из одного локатора в другой, а потом исчезнуть
▶ Как объединить нескольких НПС в группу
▶ Как переместить НПС в локацию к главному герою без указания локации
▶ Как сделать чтобы несколько НПС напали на главного героя
▶ Как сделать чтобы один НПС напал на главного героя
▶ Как сделать чтобы группа НПС напала на главного героя у которого есть своя группа НПС
▶ Как сделать чтобы НПС бегал от главного героя
▶ Как положить НПС на землю или пол
▶ Как интегрировать в игру свой файл описания НПС
▶ Как добавить своего НПС в игру
▶ Как зафиксировать имя и фамилию, при создании своего НПС
▶ Как добавить звуковое приветствие вашему НПС

0

31

Как добавить своего НПС в игру

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

Код:
makeref(ch,Characters[n]);
ch.id = "Geroy";
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 = " Geroy_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 = "Geroy"; - 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 = "Geroy_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); - НПС бессмертен

0

32

Как написать простой диалог

Все диалоги находятся в папке program\dialogs\russian. В любом текстовом редакторе и открываем файл _shablon_dialog .с и переименовав его, сохраняем.

Рассмотрим непосредственно кодировку диалогов.

Код:
void ProcessDialogEvent()
{
    ref NPChar;
    aref Link, NextDiag;
    DeleteAttribute(&Dialog,"Links");
    makeref(NPChar,CharacterRef);
    makearef(Link, Dialog.Links);
    makearef(NextDiag, NPChar.Dialog);
    
    switch(Dialog.CurrentNode)
    {
  case "First time":
   dialog.text = "";
   link.l1 = "";
   link.l1.go = "";   
  break;

  case "Exit":
   NextDiag.CurrentNode = NextDiag.TempNode;
   DialogExit();
  break;
    }
}

Блок:

Код:
ref NPChar;
aref Link, NextDiag;
DeleteAttribute(&Dialog,"Links");
makeref(NPChar,CharacterRef);
makearef(Link, Dialog.Links);
makearef(NextDiag, NPChar.Dialog);

обязателен. Здесь прописываем переменные, если вы их используюте в диалоге.

Блок:

Код:
case "First time":
dialog.text = "";
link.l1 = "";
link.l1.go = "";   
break;

это тело самого диалога между НПС и главным героем.
"First time" – название первого блока по умолчанию. Именно с него НПС начнет первый диалог с главным героем.
dialog.text = ""; - слова НПС.
link.l1 = ""; - ответ главного героя.
link.l1.go = ""; - указывает на название case, который будет запущен после диалога.

Пример:

Код:
case "First time":
dialog.text = "Привет, капитан.";
link.l1 = "Здрасте, здрасте.";
link.l1.go = "perehod_1";
break;

В приведенном диалоге НПС говорит с главным героем и после диалога запускается case "next_dialog_1" . Это может быть продолжение диалога, например:

Код:
case "perehod_1":
dialog.text = "Ну чего устпвился?";
link.l1 = "Хех. Узоров на тебе точно нет. А жаль.";
link.l1.go = "exit";
break;

Или, запускается case отвечающий за развитие событий в игре, например:

Код:
case "perehod_1":
AddDialogExitQuest("название case квеста");
NextDiag.TempNode = "Second time";
NextDiag.CurrentNode = NextDiag.TempNode;
DialogExit();
break;

AddDialogExitQuest(""); - этот код запускает case квеста.
NextDiag.TempNode = "Second time"; - указывает, что при повторном обращении главному герою к НПС запускается case диалога с названием "Second time".
DialogExit(); - убирает с экрана интерфейса игры изображение диалога.

Закрыть диалог можно, написав link.l1.go ="exit"; и прописав соответствующий case в файле диалога:

Код:
case "Exit":
NextDiag.TempNode = "Second time";
NextDiag.CurrentNode = NextDiag.TempNode;
DialogExit();
break;

Если вы хотите чтобы НПС никогда не заговорил с главным героем, то case "Exit" должен иметь такой вид:

Код:
case "Exit":
NextDiag.CurrentNode = NextDiag.TempNode;
DialogExit();
break;

0

33

Как сделать несколько вариантов ответа в диалоге

Если вам нужно, чтобы у главного героя был выбор между вариантами ответов, то делаем это так. Добавляем после строчки link.l1.go = ""; еще две, точно, такие как предыдущие только с цифрой 2.
link.l2 = "";
link.l2.go = "";
Если требуется 3 или 4 вариантов ответа, то просто добавляем еще строк с соответствующими номерами. Вот пример case диалога с четырьмя вариантами ответов:

Код:
case "First time":
dialog.text = "";
link.l1 = "";
link.l1.go = "";
link.l2 = "";
link.l2.go = "";
link.l3 = "";
link.l3.go = "";
link.l4 = "";
link.l4.go = "";  
break;

0

34

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

При написании квеста, главный герой может встречаться с НПС несколько раз. Тогда потребуется, что бы диалог начинался после определенного события. Для этого в case квеста пишем:

Код:
characters[GetCharacterIndex("id НПС")].dialog.filename = "mydialog.c";
characters[GetCharacterIndex("id НПС ")].dialog.currentnode = " next_dialog";

"mydialog.c"; - файл диалога, приписанный персонажу
"next_dialog"; - название case диалога в файле диалога simple.c

Этот код запустит case диалога "next_dialog" из файла диалога.

0

35

Как лишить/дать корабль главному герою

Если при создании квеста возникла необходимость лишить главного героя корабля, то можно использовать этот код

Код:
pchar.Ship.Type = SHIP_NOTUSED;

Если при создании квеста возникла необходимость дать главному герою корабль, то можно использовать этот код

Код:
pchar.Ship.Type = GenerateShip(SHIP_QSF_LUGGER, 1);

Информацию о всех кораблях можно найти в файле Ships_init.с в папке program/ships

0

36

Как установить отношения «наций» к главному герою

Чтобы установить отношение «наций» к главному герою используем такой код

SetRelations(нация, отношение);
PChar.reputation.нация = число десятками от 0 до 100 ;

Допустим отношение Англии к главному герою враждебные, пишем так

Код:
SetRelations(ENGLAND, RELATION_ENEMY);
PChar.reputation.England = 0;

Допустим отношении Англии к главному герою нейтральное тогда пишем так

Код:
SetRelations(ENGLAND, RELATION_NEUTRAL);
PChar.reputation.England = 50;

или

Код:
SetRelations(ENGLAND, RELATION_FRIEND);
PChar.reputation.England = 50;

Допустим отношение Англии к главному герою дружественное, тогда пишем так

Код:
SetRelations(ENGLAND, RELATION_FRIEND);
PChar.reputation.England = 100;

Название «наций»
ENGLAND / England - Англия
HOLLAND / Holland - Голландия
SPAIN / Spain - Испания
FRANCE / France - Франция
SMUGGLER / Smuggler - Контрабандисты
PIRATE / Pirate - Пираты

Уровень репутации
от 0 до 40 – враждебная
50 – нейтральная
от 60 до 100 – дружественная

например:
0 - ужасная
10 - ужасная
20 - враждебная
30 - недружелюбная
40 - настороженная
50 - нейтральная
60 - симптизарующая и так далее.

0

37

Как установить отношения «наций» друг к другу

Допустим вам надо установить отношения между Англией и Францией как враждебные

Код:
SetNationRelation(ENGLAND, FRANCE, RELATION_ENEMY);

Допустим вам надо установить отношения между Англией и Францией как нейтральные

Код:
SetNationRelation(ENGLAND, FRANCE, RELATION_NEUTRAL);

Допустим вам надо установить отношения между Англией и Францией как дружеские

Код:
SetNationRelation(ENGLAND, FRANCE, RELATION_FRIEND);

Допустим вам надо установить альянс между Англией и Францией

Код:
SetNationRelation(ENGLAND, FRANCE, RELATION_ALLIANCE);

Название «наций»
ENGLAND / England - Англия
HOLLAND / Holland - Голландия
SPAIN / Spain - Испания
FRANCE / France - Франция
SMUGGLER / Smuggler - Контрабандисты
PIRATE / Pirate - Пираты

0

38

Как уменьшить/увеличить репутацию главного героя у «наций»

Допустим вам потребовалось уменьшить или увеличить репутацию главного героя у той или иной «нации». Для этого используем такой код

ChangeCharacterReputation(pchar, число со знаком минус или без, нация);

Допустим вы хотите уменьшить репутацию главного героя у Англичан на 15, тогда пишем так

Код:
ChangeCharacterReputation(pchar, –15, ENGLAND);

Допустим вы хотите увеличить репутацию главного героя у пиратов на 25, тогда пишем так

Код:
ChangeCharacterReputation(pchar, 25, PIRATE);

Название «наций»
ENGLAND - Англия
HOLLAND - Голландия
SPAIN - Испания
FRANCE - Франция
SMUGGLER - Контрабандисты
PIRATE - Пираты

0

39

Как дать/взять золотые монеты главному герою

Если возникла необходимость забрать или дать главному герою золотые монеты, то пишем этот код

AddMoneyToCharacter(pchar, цифра со знаком минус или без);

Например вам необходимо выдать главному герою 1 000 золотых, то пишем такой код

Код:
AddMoneyToCharacter(pchar, 1000);

Если вам надо отобрать у главного героя 500 золотых монет, то пишем такой код

Код:
AddMoneyToCharacter(pchar, -500);

0

40

Как сделать всплывающую надпись на экране

Если вам необходимо проинформировать о чем–либо игрока с помощью всплывающей надписи на экране, то используйте этот код

Код:
Log_SetStringToLog("ваш текст");

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

Код:
Log_SetStringToLog("новая запись в судовом журнале");

Если вам надо сообщить, что главный герой получил золотые монеты в ходе выполнения квеста, то пишем так

Код:
Log_SetStringToLog("вы получили 1000 золотых");

0


Вы здесь » Молоток » Игры изнутри » FAQ по Корсарам