Молоток

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

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


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


FAQ по Корсарам

Сообщений 21 страница 30 из 56

1

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

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

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

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

0

21

Как сделать чтобы один НПС напал на главного героя

Например вам понадобилось, чтобы после беседы или просто так, один НПС с ID Pirate напал на главного героя. Делаем это так

1. Установим вашему НПС тип «воин»

Код:
LAi_SetWarriorType(CharacterFromID("Pirate"));

2. Присвоим НПС какую–нибудь группу, например RAZBOY

Код:
LAi_group_MoveCharacter(CharacterFromID("Pirate"), "RAZBOY");

3. Установим отношение между группой в которую мы поставили НПС и главным героем. В нашем случае отношения враждебные

Код:
LAi_group_SetRelation("RAZBOY", LAI_GROUP_PLAYER, LAI_GROUP_ENEMY);

4. Укажем что группа в которой есть ваш НПС действительно нападает на главного героя

Код:
LAi_group_FightGroups("RAZBOY", LAI_GROUP_PLAYER, true);

0

22

Как сделать чтобы группа НПС напала на главного героя у которого есть своя группа НПС

Допустим, стоит такая задача. Надо сделать, чтобы несколько враждебных НПС напали на главного героя, которого сопровождают его НПС. Пусть НПС которые нападают имеют ID PirateA, PirateB, PirateC соответственно, а НПС которые сопровождают главного героя имеют ID FriendA, FriendB и FriendC. И чтобы они напали друг на друга сделаем так

1. Установим НПС враждебным и тем, которые с главным героем, тип «воин»

Код:
//враждебные НПС
LAi_SetWarriorType(CharacterFromID("PirateA"));
LAi_SetWarriorType(CharacterFromID("PirateB"));
LAi_SetWarriorType(CharacterFromID("PirateC"));

//НПС главного героя
LAi_SetWarriorType(CharacterFromID("FriendA"));
LAi_SetWarriorType(CharacterFromID("FriendB"));
LAi_SetWarriorType(CharacterFromID("FriendC"));

2. Объединим враждебных НПС в группу RAZBOY, а НПС которые с главным героем, включим в группу главного героя

Код:
//враждебные НПС
LAi_group_MoveCharacter(CharacterFromID("PirateA"), "RAZBOY");
LAi_group_MoveCharacter(CharacterFromID("PirateB"), "RAZBOY");
LAi_group_MoveCharacter(CharacterFromID("PirateC"), "RAZBOY");

//НПС главного героя
LAi_group_MoveCharacter(CharacterFromID("FriendA"), LAI_GROUP_PLAYER);
LAi_group_MoveCharacter(CharacterFromID("FriendB"), LAI_GROUP_PLAYER);
LAi_group_MoveCharacter(CharacterFromID("FriendC"), LAI_GROUP_PLAYER);

3. Установим отношение между группой враждебных НПС и группой НПС главного героя. В нашем случае отношения враждебные

Код:
LAi_group_SetRelation("RAZBOY", LAI_GROUP_PLAYER, LAI_GROUP_ENEMY);

4. Укажем что группа враждебных НПС действительно нападает на группу НПС главного героя

Код:
LAi_group_FightGroups("RAZBOY", LAI_GROUP_PLAYER, true);

0

23

Как закрыть/открыть все порты для корабля главного героя

Вам может понадобится закрыть/открыть все порты для корабля главного героя разом. Делаем это так

Чтобы закрыть все порты для корабля главного героя пишем

Код:
CloseAllIslandsPorts(true);

Чтобы открыть все порты для корабля главного героя пишем так

Код:
CloseAllIslandsPorts(false);
 

0

24

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

★ забрать предметы из рюкзака

Код:
PChar.DisableExchangeItems = true;  

★ забрать предмет у главного героя

Код:
TakeItemFromCharacter(pchar, "ID предмета"); 

★ забрать предмет из рюкзака

Код:
TakeNItems(PChar, "ID предмета", -1); 

★ положить предмет в рюкзак

Код:
TakeNItems(PChar, "ID предмета", 1);  

★ положить в рюкзак саблю

Код:
GiveItem2Character(pchar, "blade1");  

★ вооружить главного героя саблей

Код:
   EquipCharacterByItem(pchar, "blade1"); 

★ положить в рюкзак пистолет

Код:
GiveItem2Character(PChar, "gun1");  

★ вооружить главного героя пистолетом

Код:
 EquipCharacterByItem(PChar, "gun1");  

★ положить в рюкзак подзорную трубу

Код:
GiveItem2Character(PChar, "spyglass1");  

★ дать главному герою подзорную трубу

Код:
   EquipCharacterByItem(PChar, "spyglass1");  

Список всех доступных предметов вы можете найти в файле initItems.c в папке program/items

В рюкзак к главному герою вы можете положить любой предмет.

★ положить в рюкзак личилку

Код:
GiveItem2Character(pchar, "potion1");  

★ положить в рюкзак предмет с ID прописанным в файле initItems.c

Код:
GiveItem2Character(pchar, "ID предмета"); 

0

25

Как сделать чтобы НПС бегал от главного героя

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

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

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

2. Заставляем НПС, имеющего тип «актер», бояться главного героя.

Код:
LAi_ActorAfraid(CharacterFromID("ID НПС"), PChar, false);

0

26

Как зафиксировать имя и фамилию, при создании своего НПС

Если вы создали своего НПС с определенным именем и фамилией, а при запуске игры его имя и фамилия все время рендомные, то подпишите этот код в файл 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;
}

0

27

Как сделать видимыми локаторы

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

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

0

28

Объяснения к некоторым из 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

0

29

Как заменить модель и имя главного героя в игре К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,"Иванов"

Вот и все. Теперь можно играть своей моделью главного героя. И не забудьте начать игру сначала, иначе изменения не вступят в силу.

0

30

Как интегрировать в игру свой файл описания НПС

Чтобы создать свой файл для описание НПС и интегрировать его в игру, для начала создадим его. Откройте любой текстовой редактор и создайте файл, например 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 интегрирован в игру

0


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