Seaward.ru

Здравствуйте, гость ( Вход | Регистрация )

> Описания языка программирования ПКМ, от авторов ВМЛ
ALexusB
сообщение Nov 18 2005, 11:06
Сообщение #1


Разработчик ВМЛ-КВЛ
*******

Seaward TeamЖелезный Профессор
Группа: Admin
Сообщений: 16,430
Регистрация: 2-November 04
Пользователь №: 3



Во!
нарыл в закромах родины.

Начинаем мастер класс!

Порядок следования поменял, одно я где-то уже публиковал, второе новое (из аддона, соовт дейстивтельности ПКМ не гарантирую)

Код

Описание скриптов в адд-оне
        ALexusB 22.04.05
       
Дерево каталогов

Program\BATTLE_INTERFACE\ - скрипты интерфейсов на суще и море + быстрые переходы,
Program\CANNON\ - инициация и методы пушек,
Program\CHARACTERS\ - инициация персонажей и модули управления ими + форты + генератор фантомов,
Program\CONTROLS\ - настройки клавиш
Program\DIALOGS\ - скрипты диалогов по городам и генераторы + квесты,
Program\Encounters\ события на карте
Program\INTERFACE\ - скрипты интерфейса,
Program\ISLANDS\ - инициация островов и городов (товары для контрабанды и тп)
Program\ITEMS\ - инициация предметов
Program\LandEncounters\ - наземные энкаутеры (офицеры, райдеры, девки)
Program\Loc_ai\ - все АИ на суше, включая боевки и абордаж
Program\LOCATIONS\ - инициация локаций и модуль управления загрузгой НПС в них,
Program\NATIONS\ - инициация и модули наций (отношения, матрицы отношений)
Program\QUESTS\ - обработчики квестовых событий и модули управления событиями
Program\SEA_AI\ - АИ на море (все, что с кораблями) + переход в каюту, трюм, палубу
Program\SHIP\ - инициация типов кораблей,
Program\STORE\ - модуль управления магазинами (цены, товары),
Program\Weather\ - инициация погоды и смена погоды
Program\WORLDMAP\ - глобальная карта (коорд на ней, загрузка, события)
Program\ - общий код, модуль начала игры

RESOURCE\ - все ресурсы игры,
RESOURCE\INI\INTERFACES\ - дизайны интерфейса (расположение кнопок, иконки и тд)

Чем редактировать?
Я пользую TotalCommander + SynPlus 2.6
Подсветка синтексиса С++, сравнение файлов, Shift+Tab сдвигает выделение на таб влево, TAB - в право.
Таб должен быть установлен ровно 4 пробела!!!
Весь код идет по ГОСТу и только по нему.

======================
Особенности типов ПКМ
======================
На равне с базовыми типами С++ в игре есть свои собственные
object  - древовидная текстовая структура произвольной структуры (необходимо помнить, что все значения - строки)
все в игре объекты (точнее структуры)
например, ГГ - это первый элемент массива объектов всех НПС

далее
ref  - ссылка на объект
aref - ссылка на атрибут объекта (или ссылки на объект)

примеры

object Items[ITEMS_QUANTITY];
ref itm;
aref  arItm;

makeref(itm,Items[n]);
itm.id = "patent_eng";
itm.type.arm = true;

makearef(arItm,itm.type);

if (sti(arItm.arm) == true)
{
...
}


=============
Как писать диалоги
============
для примера берем простейший файл-заглушку

Miner_dialog.c    - говорят шахтеры

Комментарии по ходу

void ProcessDialogEvent()  - название метода обработки прерывания "разговор"
{
    ref NPChar;  - сам говорун
    aref Link, NextDiag;  - ссылки на атрибуты

    DeleteAttribute(&Dialog,"Links");  - трем все варианты ответов с того раза

    makeref(NPChar,CharacterRef);   - альяс глобальной переменной в локальную
    makearef(Link, Dialog.Links);      - ссылка на атрибут (  NPChar.Dialog.Links)
    makearef(NextDiag, NPChar.Dialog);   - ссылка на атрибут (просто удобно в коде, на деле это все часть NPChar)

    ref PChar;
    PChar = GetMainCharacter();   - наш ГГ

    switch(Dialog.CurrentNode)    - текущая ветка диалога (можно задать заранее до начала разговора по квесту, по умолчанию для всех "First time")
    {
 case "First time":
     Dialog.defAni = "dialog_stay1";     - настройки анимации головы и звуков (остатки роскоши от к2, работает частично можно не писать вообще, просто не будет мимики у бошки)
     Dialog.defCam = "1";
     Dialog.defSnd = "dialogs\0\017";
     Dialog.defLinkAni = "dialog_1";
     Dialog.defLinkCam = "1";
     Dialog.defLinkSnd = "dialogs\woman\024";
     Dialog.ani = "dialog_stay2";
     Dialog.cam = "1";
     Dialog.snd = "voice\MIDI\MIDI001";

           switch (rand(1))
     {
   case 0:
           dialog.text = "Поменьше болтай и побольше работай, друг. Стражники следят за нами, ты же не хочешь получить лишний удар плетью?";
       link.l1 = "Ты прав, нужно беречь силы.";
       link.l1.go = "exit";
   break;

   case 1:
       dialog.text = "Эх... как давно я не видел Солнце!!!";   - что говорит НПС
       link.l1 = "Зато добываемое золото блестит не хуже?";    - вариант ответа ГГ
       link.l1.go = "exit";                                    - куда переходим далее
   break;
     }

     NextDiag.TempNode = "first time";    - след ветка, если отработает    link.l1.go = "exit";
 break;

 case "Exit":
     DialogExit();   - выход их диалога
     NextDiag.CurrentNode = NextDiag.TempNode;     - запомним след ветвь
 break;
    }
}

====
Инфа

Что есть if в игре и почему так
ПКМ не поддерживает И и ИЛИ в одном выражении
т.е. if (a && b && (d || c)) - вызовет ошибку компилятора
Причем это вообще не подреживается в любых bool значениях (while и переменных)
Что делать
Вариант 1
if (a && b)
    if(d || c)

Вариант 2
bool ok;
ok = (d) || (c);
if (a && b && ok)

////////////////////////////////////////////////
Описание скриптов в ПКМ
        ALexusB 01.09.03
       
"Весь мир театр, а люди в нем актеры"(С)

По ходу игры главный герой сталкивается  различными персонажами. Добавить в игру новых персонажей или изменить реакции существующих - наша задача.

Все НПС (актеры или статисты) хранятся  в Characters[]
Попадают они туда при инициализации игры различными путями:
(здесь и далее я буду приводить описание методов и переменных исходя из того, что Вы знаете где их искать, иначе используйте поиск по папке программ)

CreateCharacters() -  инициализация всего массива и главного героя
CreateOtherCharacters(); - все остальные служедные НПС (в ПКМ это лодка на берегу)

Они заполняются в файлах офицеры, другие, квестовые персонажи и во всех файлов островов (C:\gama\seadog2\PROGRAM\Characters\init)
При этом счетчик n увеличивается. Всего в игру заложена возможность инициализации 1000 персонажей (но это изменяемо)

    makeref(ch,Characters[n]);  //Даниэль
    ch.name  = "Даниель"; - имя в игре
    ch.lastname = "Грин";   - фамилия
    ch.id  = "Danielle"; - ИД перса для обращения к нему в коде
    ch.nation    = ENGLAND; - нация (ни на что не влияет)
    ch.model    = "Danielle"; - модель, можно менять динамически
    ch.activity_begin = "0";
    ch.activity_end = "24";
    ch.sex = "woman";  - пол :) (для модели нужно задать тип анимации model.animation = "woman";)
    ch.luck = 4;
    GiveItem2Character(ch, "blade6"); - заполняем карман
    TakeNItems(ch,"potion1", Rand(4)+1);
    ch.equip.blade = "blade6"; - что в руках
    GiveItem2Character(ch, GUN_COMMON);
    ch.equip.gun = GUN_COMMON; - что в руках, вообще есть спец метод екипировки, в инициализации рудимент
    ch.location    = ""; - где болтается (можно менять по сюжету)
    ch.location.group = ""; к какой группе принадлежит локатор
    ch.location.locator = ""; локатор, где конкретно болтается в локации, если пусто, то нигде нет, ждет своего часа
    ch.Dialog.Filename = "Danielle_dialog.c"; диалог, который сработает при обращении к персу
    ch.greeting = "Gr_danielle"; - альяс для звуков (список файлов, из которых перс вякает при диалоге)
    ch.rank  = 4; - ранг
    ch.reputation = "50"; - репутация
    ch.experience = CalculateExperienceFromRank(4)+ (CalculateExperienceFromRank(4)/10 + rand(4000)); - текущий опыт (для адона рудимент)
    ch.skill.Leadership = "2"; - скилы
    ch.skill.Fencing = "4";
    ch.skill.Sailing = "2";
    ch.skill.Accuracy = "3";
    ch.skill.Cannons = "2";
    ch.skill.Grappling = "1";
    ch.skill.Repair = "1";
    ch.skill.Defence = "1";
    ch.skill.Commerce = "1";
    ch.skill.Sneak = "1"; - это удача, а не скрытность как написано :)
    ch.money = "0"; - деньги в кармане(т.е считай, что предмет)
    ch.perks.list.LongRangeShoot = true; - перки
    ch.Ship.Name = "Vertigo"; - имя корабля (может не быть корабля вообще. Для того чтою отобразить корабль в игре нужно спец функции вызвать)
    ch.Ship.Type = SHIP_SCHOONER2_ENGLAND;
    ch.Ship.Cannons.Type = CANNON_TYPE_CANNON_LBS16;
    ch.ship.cargo.goods.bombs = 1000;  - задавать так товары ИЗВРАТ (методы есть), но в инициализации бывает - рудимент.
    ch.FaceId = 30; - морда лица при диалоге (перекрывается дальше и тут не на что не влияет и не соответствует правде) - рудимент

типа
switch (rCharacter.model)
 {
     case "black_corsair":  rCharacter.FaceId = 0; break;
     case "bocman1":      rCharacter.FaceId = 1; break;
     case "bocman3":      rCharacter.FaceId = 2; break;
     case "bocman4":      rCharacter.FaceId = 3; break;

Зависит исключительно от модели
Внимание! Добавление новой модели требует добавление морды!!!
Динамическая смена модели морду не меняет

Продолжение следует…..

==============================
Итак, у нас в игре все актеры и статисты обозначены.. Это не значит, что герой их сразу увидит. Многие должны сами появляться, а не сидеть сиднями..
Да, кстати, чтоб НПС именно сидел (в таверне) используется специальный локатор, например
ch.location.group = "sit";
ch.location.locator = "sit1";

Система квестов в игре основана на событиях
Ch.quest.Story_LeavingOxbay.win_condition.l1 = "location"; - тип события (появится в локации)
Ch.quest.Story_LeavingOxbay.win_condition.l1.character = "Blaze"; (кто появляется)
Ch.quest.Story_LeavingOxbay.win_condition.l1.location = "Oxbay"; (где)
Ch.quest.Story_LeavingOxbay.win_condition = "Story_leavingOxbay"; (состояние квеста при совпадении)
Ch.quest.Story_LeavingOxbay.fail_condition = "Story_leavingOxbay"; (при не совпадении, но вопрос??? Не ясно когда оно сработает и что будет.. возможно не сработает вовсе)

Введем терминологию
Состояние квеста - СК

Итак, СК обрабатывается в диалогах и, главное, в quests_reaction.c  QuestComplete();
И другими файлами из папки квест.

Нужно учесть, что СК это строка и никаких ошибок при ошибке в ней не будет вовсе
(эта беда игры - не перечислимый тип и бич тестеров. Не удивительно, что игру тестили целый год :) Поэтому, нужно быть очень внимательным!!!!

Продолжение следует…..


User is offlineProfile CardPM
Go to the top of the page
+Quote Post
2 страниц V  1 2 >  
Reply to this topicStart new topic
Ответов(1 - 19)
ALexusB
сообщение Nov 18 2005, 11:20
Сообщение #2


Разработчик ВМЛ-КВЛ
*******

Seaward TeamЖелезный Профессор
Группа: Admin
Сообщений: 16,430
Регистрация: 2-November 04
Пользователь №: 3



свежачок

================== 18.11.05 ============
Почему нужно начинать игру заново после каждой правки?

Ну, не каждой smile.gif Но нужно! Почему же так?

Во всем виноваты массивы и глобальные переменные. Да они!
Они гады пишутся в сайв и после этого новые переменные и элементы массивов в этот сайв уже не лезут.
А что делает добропорядочная игра при просьбе ее сделать то, что она не умеет? Правильно! Она вылетает в винду. smile.gif

Есть еще засада с непреинициализацией переменных и массивов. Например, меняем местами люггер и фрегат в описании кораблей.
В старом сайве этот массив будет помнить еще старые значения, что приведет, если не к вылетам, то дисбалансу точно.
Хотя это еще и можно обойти спец кнопкой "совместить старый сайв с новым кодом" (только ее еще нет и нужно делать, но проблема №1 все равно обессмысливает сей труд)
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
navy
сообщение Jan 23 2006, 13:45
Сообщение #3


Hagane no Renkinjutsushi
*******

Seaward TeamВетеран ФорумаЗаслуженный Корсар

Группа: Seaward.Ru Team
Сообщений: 5,972
Регистрация: 15-March 05
Из: Волгоград
Пользователь №: 578



Как заставить персонажа общаться с Главным героем...

Добавляем новое квестовое прерываение например заходим в порт Консейсао...
Код

/*
*        pchar.quest.Case1.win_condition.l1 = "location";
*        pchar.quest.Case1.win_condition.l1.location = "Conceicao_port";
*        pchar.quest.Case1.win_condition = "Case1";
*/


Ставим там (или берем готового) NPC..
в quest_reaction.c добавляем следующие кейсы...
Код
/*
*case "Case1":
*        //задаем тип поведения Актер ГГ, чтобы не дергался и не свалил куда-нибудь
*        LAi_SetActorType(PChar);
*
*        //задаем тип поведения Актер NPC, где NPC_ID соответственно ID непися.
*        LAi_SetActorType(characterFromID("NPC_ID"));
*
*        //тут ставим необходимую ноду диалога непися, может быть любая ВАМ необходимая...
*        //в данном случаее Первая встреча
*        Characters[GetCharacterIndex("NPC_ID")].Dialog.CurrentNode = "First time";
*
*        //указываем второму персонажу <characterFromID("NPC_ID")> следовать к первому pchar
*        //по истечении времени 1.0 вызовется квест... тут его нет ""
*        LAi_ActorFollow(pchar, characterFromID("NPC_ID"), "", 1.0);
*
*        //указываем персонажу (первый параметр) ждать диалога с другим персонажем (второй параметр)...
*        LAi_ActorWaitDialog(Pchar, characterFromID("NPC_ID"));
*
*        //даем команду начать диалог первого со вторым, начнется в любом случае, после истечения
*        //5.0 сек. По окончании вызывается квест "Case2"
*        LAi_ActorDialog(characterFromID("NPC_ID"), Pchar, "Case2", 5.0, 0);
*break;
*
*case "Case2":
*        //возвращаем тип Плэйер ГГ
*        LAi_SetPlayerType(Pchar);
*
*        //Возвращаем исходный тип NPC тут указан тип охранника...
*        LAi_SetGuardianType(characterFromID("NPC_ID"));
*break;
*/


Подробное описание всех этих функций можно найти в скриптах
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
ALexusB
сообщение Aug 6 2007, 22:40
Сообщение #4


Разработчик ВМЛ-КВЛ
*******

Seaward TeamЖелезный Профессор
Группа: Admin
Сообщений: 16,430
Регистрация: 2-November 04
Пользователь №: 3



Статья по рекомендациям как писать правильный код (всего 6 основных советов на примере простой игры) от IBM

Читать всем кодерам, кто хочет чего-то достичь - еще и следовать этому smile.gif

http://www.ibm.com/developerworks/ru/libra...&S_CMP=GR01
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
De-Luxis
сообщение Jan 24 2008, 15:51
Сообщение #5


юнга
**


Группа: Members
Сообщений: 15
Регистрация: 13-January 08
Пользователь №: 14,473



Реально ли реализовать свой квест для ГПК, или для этого обязательно должна быть доступна папка Program.
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
Scatimon
сообщение Jan 24 2008, 16:09
Сообщение #6


...Welcome To Scatlend...
******

Ветеран Форума
Группа: форумчанин
Сообщений: 707
Регистрация: 14-April 05
Из: Москва
Пользователь №: 662



Нет, в програм все "повеливания" персами. Так что никак. Даже СЖ не добавить без програм.
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
A_De
сообщение Jan 24 2008, 16:11
Сообщение #7


боцман
****

Заслуженный Художник
Группа: форумчанин
Сообщений: 189
Регистрация: 5-October 07
Из: а то вы не знаете!
Пользователь №: 12,159



Цитата(ALexusB @ Jan 23 2008, 23:16) *

Это не реально даже с диалогами - тк теже бордели заточены на мужика и многие квесты... а жениться на Изабелле девкой тоже песня.

Ну не совсем так, ИМХО. Просто если играть девкой, то квест Изабеллы можно сделать недоступным или же целью квеста будет что-то типа убить Сальватора и на этом все, ну и в борделях ветки диалогов убрать/поменять. А вообще, править все диалоги это долгая и нудная работа...
Цитата(De-Luxis @ Jan 24 2008, 15:51) *

Реально ли реализовать свой квест для ГПК, или для этого обязательно должна быть доступна папка Program.

Program должна быть доступна и скрипты должны быть открыты sad.gif
Но можно потренироваться на других кодах - ПКМ и К3.
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
DinGrey
сообщение Jan 31 2008, 17:50
Сообщение #8


юнга
**


Группа: форумчанин
Сообщений: 39
Регистрация: 1-March 07
Из: Москва
Пользователь №: 5,612



Хотел вот спросить... В к3 существует такая система, что товары по архипелагу распределяются случайным образом и могло получиться так, что к, примеру, на одном острове продавали сандал по дешёвке, а на соседнем покупали как дефицит подороже. Т.е. не торговля, а так, развлечение на час. Появилась идея, как то зафиксировать товары за каждым отдельным островом, чтобы, скажем купить дешевле на Кюрасао, а продать подороже надо плыть, скажем на Ямайку. Начал что-то эксперементировать... И главное, получилось! Помню, что показатели контрабанда - не контробанда менял в описании товаров (показатели 0 - не контра, 1 - контра), и по разделению товаров по островам в папке colonies, а конкретнее в подразделе которые я перевёл как "правила торговли для одного острова" я прописал, что вот для такой колонии = три товара импорт такой, три товара = экспорт такой. Почему именно в этой папке? Ну там с помощью патча сделали так (сорри не знаю авторов), что Петит-Гоав, Ла-Вега и Санто-Доминго имели общую торговую политику. Вот как-то на этом примере я и изменил показатели в скриптах. Да вот как конкретно - не помню. Все работало. Сразу оговорюсь, опыта нет - делал всё наобум, может просто повезло. К несчастью, слелтела система и пример для меня безвозвратно потерян. А бился над ним очень долго, перебирал варианты. Вот точно помню, что указывал название колонии и показатель товара импорт и экспорт для неё такой-то... А вот не работает! Есть какая-то ошибка, в первый раз наверное повезло её не сделать, а сейчас, блин... Так вот просьба, можно привести конкретный пример скрипта из к3, где код открыт, как сделать так, чтобы товары были не рендомно раскиданы, а всё четко распределено согласно воли программиста. Очень меня это дело теперь раздражает, спать не могу. Спасибо если поможете. И если не поможете тоже спасибо.
Я думаю наверное пишу в "правильную" тут, я так понял, что-то вроде мастер-класса.
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
qzer56
сообщение Jun 12 2008, 12:02
Сообщение #9


новичок
*


Группа: Members
Сообщений: 8
Регистрация: 10-June 08
Пользователь №: 16,913



А можна если у каво есть выложить описание функций ПКМ
например: GetMainCharacter(), GetSailPercent(), GetHulllPercent()....
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
Scatimon
сообщение Jun 12 2008, 16:01
Сообщение #10


...Welcome To Scatlend...
******

Ветеран Форума
Группа: форумчанин
Сообщений: 707
Регистрация: 14-April 05
Из: Москва
Пользователь №: 662



Что тут описывать?

GetMainCharacter() - возвращает значение типа "ref", элемент массива тобеш, элемент этот - есть ГГ (Characters[1]).
GetSailPercent() - возвращает значени типа "float", а именно % целостности парусов.
GetHulllPercent() - то же самое что и выше, только % целостности корпуса вазвращает.
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
navy
сообщение Jun 16 2008, 09:51
Сообщение #11


Hagane no Renkinjutsushi
*******

Seaward TeamВетеран ФорумаЗаслуженный Корсар

Группа: Seaward.Ru Team
Сообщений: 5,972
Регистрация: 15-March 05
Из: Волгоград
Пользователь №: 578



Цитата
А можна если у каво есть выложить описание функций ПКМ

Нет такого описания.. все что есть, писалось с нуля для себя и в основном по новым функция.
Ищешь в коде код этой функции и смотришь что она делает. Вот и все.
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
qzer56
сообщение Nov 5 2008, 18:16
Сообщение #12


новичок
*


Группа: Members
Сообщений: 8
Регистрация: 10-June 08
Пользователь №: 16,913



Новая безумная идея: в общем из К3 в ПКМ перенес XINTERFACE.dll, в program\interface\utilites.c прописал функции . Вопрос: почему вылетает игра при запуске, даже в error.log ниче не пишет ???
Пока не прописал функции в program\interface\utilites.c то в error.log писало ошибки.
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
ALexusB
сообщение Aug 4 2009, 17:04
Сообщение #13


Разработчик ВМЛ-КВЛ
*******

Seaward TeamЖелезный Профессор
Группа: Admin
Сообщений: 16,430
Регистрация: 2-November 04
Пользователь №: 3



Вот собранные по крупицам знания, что-то лежало в ПКМ изначально, что-то писал сам во время аддона ВМЛ. Файл атрибуты НПС.txt единственный поддерживался в актуальном состянии для КВЛ-ГПК

Эта папка есть в скриптах, когда их отроют.


Прикрепленные файлы
Прикрепленный файл  script_info.rar ( 37.73 килобайт ) Кол-во скачиваний: 1519
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
Mr.proper
сообщение May 9 2010, 18:10
Сообщение #14


Старый пират
*****


Группа: форумчанин
Сообщений: 463
Регистрация: 4-March 09
Из: Нефтекамска
Пользователь №: 19,489



Можете описать квест,т.е что за че отвечает и что это,можно примером 1 квест из к2?
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
dolphin_sv
сообщение May 10 2010, 00:50
Сообщение #15


матрос
***


Группа: форумчанин
Сообщений: 88
Регистрация: 23-May 05
Из: Донецк
Пользователь №: 771



Вопрос некорреткный... Все заивит от того, что надо делать в квесте и т.п.

ЗЫ
Лучший мануал - логика
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
Mr.proper
сообщение May 10 2010, 13:58
Сообщение #16


Старый пират
*****


Группа: форумчанин
Сообщений: 463
Регистрация: 4-March 09
Из: Нефтекамска
Пользователь №: 19,489



вот например добавил новый корабль,где писать чтобы он в верфи продавался?
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
dolphin_sv
сообщение May 10 2010, 14:16
Сообщение #17


матрос
***


Группа: форумчанин
Сообщений: 88
Регистрация: 23-May 05
Из: Донецк
Пользователь №: 771



А при чем тут квесты?!!

Корабль надо добавить тут
PROGRAM\scripts\ShipsUtilites.c
void SetShipyardStore(ref NPChar)

ЗЫ
С такими вопросами лучше сюда:
http://legend.seaward.ru/forum/index.php?s...2666&st=380
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
jqeen
сообщение Sep 18 2013, 19:02
Сообщение #18


новичок
*


Группа: Members
Сообщений: 2
Регистрация: 28-August 13
Пользователь №: 34,356



Доброго времени суток!
Не могли бы мне помочь с диалогами?
Что нужно мне изменить в кейсе, что бы не было раздвоение НПС
при добавлении его в команду ГГ в качестве компаньена?
(А то получается добавляется компаньен и его точная копия офицер)
Цитата

case "JQ_03":
AddMoneyToCharacter(pchar, -300000);
dialog.text = "Я буду служить вам верой и честью!";
link.l1 = "Я верю вам Джеймс Баллантре.";
link.l1.go = "exit_hire";
NPChar.Dialog.FileName = "Enc_Officer_dialog.c";
NPChar.Money = 0;
SetCharacterShipLocation("heroJQ_02", "santacatalina_town");
SetCompanionIndex(pchar, -1, GetCharacterIndex("heroJQ_02"));
break;

case "exit_hire":
Pchar.questTemp.HiringOfficerIDX = GetCharacterIndex(Npchar.id);
AddDialogExitQuestFunction("LandEnc_OfficerHired");
NextDiag.CurrentNode = NextDiag.TempNode;
NPChar.quest.meeting = true;
DialogExit();
break;
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
NickKolok
сообщение Jan 9 2015, 18:04
Сообщение #19


новичок
*


Группа: Members
Сообщений: 2
Регистрация: 9-January 15
Пользователь №: 35,132



Доброго времени суток, товарищи!

Пишу к AlexusB, ибо в личку не могу (наверное, оттого, что только зарегистрировался на форуме).
Я немного программист. Обнаружил, что в игре теоретически возможен крафт вещей с уникальными характеристиками (оружия и ювелирки - точно, кораблей - не уверен, нужно изучать), причём в ряде случаев даже при сохранении совместимости сейвов. Теоретически возможен - значит, можно создать соответствующие скрипты.

Прошу поделиться данными о попытках добавления крафта, целесообразности оного и т. д.

P. S. Где-то в гугле видел модельки девушек-офицеров от КВЛ и ГПК. Есть ли способ импортировать их в классические ПКМ?
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
CorsairMan
сообщение Jan 9 2015, 18:20
Сообщение #20


боцман
****


Группа: форумчанин
Сообщений: 100
Регистрация: 8-November 13
Пользователь №: 34,643



Да. Возможно.
User is offlineProfile CardPM
Go to the top of the page
+Quote Post

2 страниц V  1 2 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



Текстовая версия Сейчас: 1st November 2024 - 03:15

Блок рекламы
Яндекс цитирования Rambler's Top100
Rambler's Top100