Молоток

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

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


Вы здесь » Молоток » Игры изнутри » 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 по Корсарам