[ Обновленные темы · Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 3 из 3
  • «
  • 1
  • 2
  • 3
FAQ по модам для игр серии "Корсары"
ЛисичкаДата: Понедельник, 10.04.2017, 18:28 | Сообщение # 31
Ветеран
Сообщений: 537
Награды: 8
Репутация: 8
Статус: Offline
Как сделать чтобы НПС бегал от главного героя

Если возникла необходимость сделать так, чтобы НПС бегал от главного героя, то сделать это можно так.

1. устанавливаем НПС тип «актер»

Код
LAi_SetActorType(CharacterFromID("ID НПС"));


2. Заставляем НПС, имеющего тип «актер», бояться главного героя.
Код
LAi_ActorAfraid(CharacterFromID("ID НПС"), PChar, false);
ЛисичкаДата: Понедельник, 10.04.2017, 18:29 | Сообщение # 32
Ветеран
Сообщений: 537
Награды: 8
Репутация: 8
Статус: Offline
Как зафиксировать имя и фамилию, при создании своего НПС

Если вы создали своего НПС с определенным именем и фамилией, а при запуске игры его имя и фамилия все время рендомные, то подпишите этот код в файл EuropeanTowns.с, program\scripts

Код
void SetNames()
{
    for(int i = 0; i < TOTAL_CHARACTERS; i++)
    {
  if(Characters[i].id != "Blaze" && Characters[i].id != "Beatrice")
  {
   if(!CheckAttribute(Characters[i], "namelock"))
   {
    SetRandomNameToCharacter(&Characters[i]);
   }
  }
    }

    SetRandomNameToCharacter(CharacterFromID("Knower"));
    PChar.Quest.Knower.Name = Characters[GetCharacterIndex("Knower")].name + " " + Characters[GetCharacterIndex("Knower")].lastname;
}
ЛисичкаДата: Понедельник, 10.04.2017, 18:31 | Сообщение # 33
Ветеран
Сообщений: 537
Награды: 8
Репутация: 8
Статус: Offline
Как сделать видимыми локаторы

Чтобы увидеть все локаторы нужно открыть файл 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);


При следующем включении игры вы будите видеть все локаторы.
ЛисичкаДата: Понедельник, 10.04.2017, 18:32 | Сообщение # 34
Ветеран
Сообщений: 537
Награды: 8
Репутация: 8
Статус: Offline
Объяснения к некоторым из win_condition

Нахождение главного героя в локации
Код
PChar.quest.(название case квеста).win_condition.l1 = "location";
PChar.quest.(название case квеста). win_condition.l1.location = "id локации";
PChar.quest.(название case квеста).win_condition = "(название case квеста)";


Время наступление следующего case квеста, то есть таймер (здесь 10 дней)
Код
PChar.quest. (название case квеста).win_condition.l1 = "Timer";
PChar.quest. (название case квеста).win_condition.l1.date.day = GetAddingDataDay(0, 0, 10);
PChar.quest. (название case квеста).win_condition.l1.date.month = GetAddingDataMonth(0, 0, 10);
PChar.quest. (название case квеста).win_condition.l1.date.year = GetAddingDataYear(0, 0, 10);
PChar.quest. (название case квеста).win_condition.l1.date.hour = rand(23);
PChar.quest. (название case квеста).win_condition = "(название case квеста)"


Смерть НПС
Код
PChar.quest.(название case квеста).win_condition.l1 = "NPC_Death";
PChar.quest.(название case квеста).win_condition.l1.character = "id НПС";
PChar.quest.(название case квеста).win_condition = "(название case квеста)";


главный герой покидает локацию
Код
PChar.quest.(название case квеста).win_condition.l1 = "ExitFromLocation";
PChar.quest.(название case квеста).win_condition.l1.location = "id докации";
PChar.quest.(название case квеста).win_condition = "(название case квеста)";


Корабль потоплен или взят на абордаж
Код
PChar.quest.(название case квеста).win_condition.l1 = "Ship_capture_NPC_Dead";
PChar.quest.(название case квеста).win_condition.l1.character = "id НПС";
PChar.quest.(название case квеста).win_condition = "(название case квеста)";


Можно комбинировать win_condition (например):

Код
PChar.quest.(название case квеста 1).win_condition.l1 = "NPC_Death";
PChar.quest.(название case квеста 1).win_condition.l1.character = "id НПС";
PChar.quest.(название case квеста 1).win_condition = "(название case квеста 1)";
PChar.quest.(название case квеста 2).win_condition.l1 = "ExitFromLocation";
PChar.quest.(название case квеста 2).win_condition.l1.location = "id докации";
PChar.quest.(название case квеста 2).win_condition = "(название case квеста 2)";


Допустим должна произойти дуэль между главным героем и НПС. Прописав такое выражение в case квеста получим два разных результата: если главный герой убьет НПС запуститься case квеста 1, а если сбежит из локации, то case квеста 2
ЛисичкаДата: Понедельник, 10.04.2017, 18:33 | Сообщение # 35
Ветеран
Сообщений: 537
Награды: 8
Репутация: 8
Статус: Offline
Как заменить модель и имя главного героя в игре К3: ТДМ на свои

Для того, чтобы сменить модель главного героя в игре К3: ТДМ, вы должны уже иметь следующее:
Модель главного героя – файл «название» .gm. Например: my_barmen.gm
Текстура для модели главного героя – файл «название».tga.tx. Например: my_barmen_ttx.tga.tx
Портреты главного героя – файлы размером 256х256, 128х128, 64х64, и 64х64 для BATTLE_INTERFACE в круглой рамке, но имеющие одинаковое название face_номер.tga.tx. Например: face_777.tga.tx

Перейдем к интеграции новой модели главного героя в игру. Для начала откройте папку Characters она находится RESOURCE\MODELS и помещаем туда свой файл с моделью главного героя, в нашем случае файл my_barmen.gm. Далее открываем папку Characters она находится RESOURCE\Textures и помещаем туда файл с текстурой модели, в нашем случае my_barmen_ttx. tga.tx. После этого откроем файл CharacterUtilite.с она находится program\characters и найдем там такую строку: void FaceMaker(aref rCharacter), берем строку, например case "blaze": rCharacter.FaceId = 1; break;, где:
case "blaze-название модели": rCharacter.FaceId = 1-номер портрета; break;, копируем ее и изменяем ее под наши файлы, должно получится:

Код
case " my_barmen":   rCharacter.FaceId = 777; break;


Открываем далее файл characters_init.с и ищем строку ch.model в блоке:
Код
////////////////////////////////////////
// ПЕРВЫЙ ПЕРСОНАЖ - ПАРЕНЬ
////////////////////////////////////////

и заменяем название модели на свою, в нашем случае получится так:
Код
ch.model        = "my_barmen";


Итак, ваша модель в игре, но нет портретов нашей модели. Берем файлы face_777.tga.tx и раскидываем их по папкам соответствующего размера. 256х256, 128х128, 64х64 соответственно в папки 64, 128, 256 RESOURCE\Textures\INTERFACES\PORTRAITS, а так же файл с размером 64х64, который в круглой рамке, помещаем в папку PORTRAITS RESOURCE\Textures\BATTLE_INTERFACE, но это еще не все. Надо отдельно прописать файл с размером 128х128. Открываем файл pictures.ini RESOURCE\INI\interfaces. Находим там такой код:
Код
[FACE128_0]
sTextureName    = portraits\128\face_0.tga
wTextureWidth    = 128
wTextureHeight    = 128
picture = face,0,0,128,128

копируем и изменяем ее под свои значения, в нашем случае получится так:
Код
[FACE128_777]
sTextureName    = portraits\128\face_777.tga
wTextureWidth    = 128
wTextureHeight    = 128
picture = face,0,0,128,128

Теперь у нашего главного героя есть портреты.

Если надо поменять и имя, то делается это так. Открываем Common.ini RESOURCE\INI\texts\russian, ищем такие строки:
Код
string = Blaze,"Питер"
string = Sharp,"Блейк"


и меняем имя, например:
Код
string = Blaze,"Иван"
string = Sharp,"Иванов"


Вот и все. Теперь можно играть своей моделью главного героя. И не забудьте начать игру сначала, иначе изменения не вступят в силу.
ЛисичкаДата: Понедельник, 10.04.2017, 18:35 | Сообщение # 36
Ветеран
Сообщений: 537
Награды: 8
Репутация: 8
Статус: Offline
Как интегрировать в игру свой файл описания НПС

Чтобы создать свой файл для описание НПС и интегрировать его в игру, для начала создадим его. Откройте любой текстовой редактор и создайте файл, например NewCharacters.c. Сохраните его в папке program\characters\init. Далее приписываем в файле:

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


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

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


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

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


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

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


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

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


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

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

ReloadProgressUpdate();

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


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

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

Теперь ваш файл NewCharacters.c интегрирован в игру
ЛисичкаДата: Понедельник, 10.04.2017, 18:36 | Сообщение # 37
Ветеран
Сообщений: 537
Награды: 8
Репутация: 8
Статус: Offline
Как добавить своего НПС в игру

Если вы добавляете в игру собственный НПС персонаж, то прописываем его в файл описания НПС следующим образом. Например, ваш НПС мужчина, определенной нации и с файлом диалога, то есть, имеет возможность диалога с главным героем. Для начала, с помощью программы 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); - НПС бессмертен
ЛисичкаДата: Понедельник, 10.04.2017, 18:38 | Сообщение # 38
Ветеран
Сообщений: 537
Награды: 8
Репутация: 8
Статус: Offline
Как написать простой диалог

Все диалоги находятся в папке 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;
ЛисичкаДата: Понедельник, 10.04.2017, 18:39 | Сообщение # 39
Ветеран
Сообщений: 537
Награды: 8
Репутация: 8
Статус: Offline
Как сделать несколько вариантов ответа

Если вам нужно, чтобы у главного героя был выбор между вариантами ответов, то делаем это так. Добавляем после строчки 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;
ЛисичкаДата: Понедельник, 10.04.2017, 18:40 | Сообщение # 40
Ветеран
Сообщений: 537
Награды: 8
Репутация: 8
Статус: Offline
Как запустить диалог с определенной ветки квеста

При написании квеста, главный герой может встречаться с НПС несколько раз. Тогда потребуется, что бы диалог начинался после определенного события. Для этого в 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" из файла диалога.
  • Страница 3 из 3
  • «
  • 1
  • 2
  • 3
Поиск: