Город Мастеров
IPB

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

 Правила этого форума ПРАВИЛА РАЗДЕЛА
9 страниц V  « < 6 7 8 9 >  
Ответить в эту темуОткрыть новую тему
> ПОСТРОЕНИЕ СКРИПТОВЫХ СЦЕН, Основы написания Cutscene
Aiwan
сообщение Oct 1 2006, 12:40
Сообщение #176


Миловидный Бегрюссунг
Иконки Групп

Класс: Воин
Характер: Chaotic Good
Раса: Человек
NWN: Модмейкер
Проклятие Левора
Порядок Времени



1. Если это в диалоге, то идет инерция от него. Убери в свойствах диалога что бы камера приблежалась.
2,3 Лекс отвеил.
4. Недавно решал точно такую же проблему. Сперва парился как ты потом плюнул. И сделал по уму.
Вот весь код, хочешь смотри. Думаю разберешься.
NSS
//:://////////////////////////////////////////////
//:: Name:
//:: Copyright © 2006 WRG! Team
//:://////////////////////////////////////////////
/*

*/

//:://////////////////////////////////////////////
//:: Created By: Aiwan
//:: Created On: 03.03.2006
//:://////////////////////////////////////////////
#include "am_inc_cutscene"
#include "am_inc_common"
void main()
{
    object oPC = GetPCSpeaker();
    object oNpc = OBJECT_SELF;
    object oWp01 = GetObjectByTag("AM_WP_KALIFGO_01");
    object oWp02 = GetObjectByTag("AM_WP_KALIFGO_02");
    object oWp03 = GetObjectByTag("AM_WP_KALIFGO_03");
    object oWp03PC = GetObjectByTag("AM_WP_KALIFGO_03_PC");
    object oWp04 = GetObjectByTag("AM_WP_KALIFGO_04");
    object oWp04PC = GetObjectByTag("AM_WP_KALIFGO_04_PC");
    object oWp05 = GetObjectByTag("AM_WP_KALIFGO_05");
    object oWp06 = GetObjectByTag("POST_AM_CR_KALIF");
    object oWpP = GetObjectByTag("AM_WP_CUT_KALIF_WP");
    effect eHaste = EffectHaste();

    AssignCommand(oNpc, ActionPauseConversation());
    AssignCommand(oPC, SetCameraFacing(155.0, 10.0, 45.0, CAMERA_TRANSITION_TYPE_VERY_SLOW));
//  AssignCommand(oPC, ActionForceFollowObject(oNpc, 2.0f));
    ApplyEffectToObject(DURATION_TYPE_PERMANENT, eHaste, oNpc);
    AssignCommand(oNpc, ActionForceMoveToObject(oWp01, FALSE, 1.0));
    AssignCommand(oNpc, ActionDoCommand(SetFacingPoint(GetPosition(oPC))));
    AssignCommand(oNpc, ActionSpeakString("Не отставайте."));
    AssignCommand(oNpc, ActionDoCommand(AssignCommand(oPC, ActionMoveToLocation(GetLocation(oWp01)))));
    AssignCommand(oNpc, ActionWait(2.0));
    AssignCommand(oNpc, ActionDoCommand(AssignCommand(oPC, ActionMoveToLocation(GetLocation(oWp02)))));
    AssignCommand(oNpc, ActionForceMoveToObject(oWp02, FALSE, 1.0));
    AssignCommand(oNpc, ActionDoCommand(SetFacingPoint(GetPosition(oPC))));
    AssignCommand(oNpc, ActionWait(2.0));
    AssignCommand(oNpc, ActionDoCommand(AssignCommand(oPC, ActionMoveToLocation(GetLocation(oWp03PC)))));
    AssignCommand(oNpc, ActionDoCommand(AssignCommand(oPC, ActionDoCommand(SetFacingPoint(GetPosition(oNpc))))));
    AssignCommand(oNpc, ActionForceMoveToObject(oWp03, FALSE, 1.0));
    AssignCommand(oNpc, ActionDoCommand(SetFacingPoint(GetPosition(GetNearestObjectByTag("AM_PLC_SPELLBOOK")))));
    AssignCommand(oNpc, ActionWait(1.0));
    AssignCommand(oNpc, ActionSpeakString("Это статуя знаниям."));
    AssignCommand(oNpc, ActionWait(3.0));
    AssignCommand(oNpc, ActionDoCommand(SetFacingPoint(GetPosition(oPC))));
    AssignCommand(oNpc, ActionSpeakString("Она олицетворяет познания в магических учениях."));
    AssignCommand(oNpc, ActionWait(2.0));
    AssignCommand(oNpc, ActionDoCommand(AssignCommand(oPC, SetCameraFacing(25.0, 10.0, 60.0, CAMERA_TRANSITION_TYPE_SLOW))));
    AssignCommand(oNpc, ActionDoCommand(AssignCommand(oPC, ActionWait(1.0))));
    AssignCommand(oNpc, ActionDoCommand(AssignCommand(oPC, ActionMoveToLocation(GetLocation(oWp04PC)))));
    AssignCommand(oNpc, ActionForceMoveToObject(oWp04, FALSE, 1.0));
    AssignCommand(oNpc, ActionWait(2.0));
    AssignCommand(oNpc, ActionDoCommand(SetFacingPoint(GetPosition(oWp06))));
    AssignCommand(oNpc, ActionSpeakString("Мой господин, "+GetName(oPC)+" уже здесь."));
    AssignCommand(oNpc, ActionPlayAnimation(ANIMATION_FIREFORGET_BOW, 0.5, 3.0));
    AssignCommand(oNpc, ActionWait(4.0));
    AssignCommand(oNpc, ActionDoCommand(SetFacingPoint(GetPosition(oPC))));
    AssignCommand(oNpc, ActionDoCommand(RemoveEffect(oNpc, eHaste)));
    AssignCommand(oNpc, ActionResumeConversation());
}
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
shadowdweller
сообщение Oct 1 2006, 13:26
Сообщение #177


Level 9
Иконки Групп

Класс: Вор
Характер: Chaotic Good
Раса: Эльф
МАСТЕР Переводов



Сеньк. Я бы без вашей помощи просто плюнула бы на все уже давно. (IMG:style_emoticons/kolobok_light/thank_you.gif)
Lex, я просто вчера поспешила с постом, Инет все время вырубался. Потом только вспомнила, что есть же и длительность, и тип, и все прочее. Просто с эффектами почти не работала еще. Буду пробовать.
Ту строчку, которая пункт 6, счас попробую поставить.
Aiwan, если я правильно поняла, ты просто ускорил НПС? Класс! (IMG:style_emoticons/kolobok_light/hi.gif) Попробую и этот вариант.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Белатрис
сообщение Feb 25 2007, 11:44
Сообщение #178


Level 11
***

Класс: Воин
Характер: Lawful Good
Раса: Человек



Кто-нибудь знает, как сделать так, чтобы при включении диалога позиция камеры не изменялась. А то она все портит!
Надеюсь, понятно изложился.

Сообщение отредактировал Белатрис - Feb 25 2007, 12:58
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Aiwan
сообщение Feb 25 2007, 22:26
Сообщение #179


Миловидный Бегрюссунг
Иконки Групп

Класс: Воин
Характер: Chaotic Good
Раса: Человек
NWN: Модмейкер
Проклятие Левора
Порядок Времени



В конце диалога в том месте где окно скриптов есть опция. Пощелкай увидишь. Отключить зум при начале диалога.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Белатрис
сообщение Mar 8 2007, 13:15
Сообщение #180


Level 11
***

Класс: Воин
Характер: Lawful Good
Раса: Человек



Как сделать, чтоб НПС с тэгом, допустим, "1", стрелял с лука по НПСу с тэгом "2"?
И как прекратить стрельбу?
Заранее благодарен! (IMG:style_emoticons/kolobok_light/thank_you.gif)
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Aiwan
сообщение Mar 8 2007, 22:16
Сообщение #181


Миловидный Бегрюссунг
Иконки Групп

Класс: Воин
Характер: Chaotic Good
Раса: Человек
NWN: Модмейкер
Проклятие Левора
Порядок Времени



Создать две фракции нейтральные к РС и ненавидящие друг друга. Скриптом помещать НПС в эту фракцию. Из оружия оставить одни арбалеты. Дальше проявить смекалку.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Esidor
сообщение Jun 18 2007, 05:30
Сообщение #182


Level 1


Класс: Маг
Характер: Neutral Good
Раса: Чудовище



Извините за то что не утруждал себя поиском данной сценке. Но поскольку я не умею сам писать скр. сценки то прошу вас уважаемые скриптеры спросить - Есть ли в этом разделе скрипт такой сценки:
После захода в Триггер ГГ начинается сценка:
Стоят вокруг платформы 4 НПС, за ними еще двое.
НПС 1 говорит НПС 2 *Тететете*, тот отвечает *Тетете*. После этого Из центра платформы (Точка маршрута?) исходит эффект как при Способности монстра "Рев, Смерть", умирают 4 НПС. НПС 2 говорит НПС 1 *Тетете* и бежит через открытую дверь-силовое поле к Точке маршрута и там исчезает. НПС 1 колдует как-будто заклинание "Луч негативной энергии" и силовое поле активизируется. После этого фракция НПС 1 становится "Вражденбый"
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Lex
сообщение Jun 18 2007, 08:32
Сообщение #183


Level 5
Иконки Групп

Класс: Обыватель
Характер: Lawful Neutral
Раса: Человек
NWN: Модмейкер
Проклятие Левора
Порядок Времени



тут готовых сценок всего пара штук, они для примера. Выкладывать готовые ролики нет никакого резона - они уникальны для каждого модуля, ибо в основном связаны или с сюжетом или с квестом. Ролики надо писать самому или искать скриптера. В этой теме можно посмотреть готовые работы для примера и задать вопросы.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Dik Morris
сообщение Jun 18 2007, 08:42
Сообщение #184


Вечно меняющийся
Иконки Групп

Класс: Монах
Характер: True Neutral
Раса: Человек
NWN: Скриптинг [Sn]



Раз уж про это зашла речь, есть (была точнее) такая тема (я всей душой люблю археологию и поиск).

Может быть, что нибуть, да и пригодится.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Esidor
сообщение Jun 18 2007, 08:48
Сообщение #185


Level 1


Класс: Маг
Характер: Neutral Good
Раса: Чудовище



Хорошая тема, Но там нет нужной сценки
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Lex
сообщение Jun 18 2007, 09:26
Сообщение #186


Level 5
Иконки Групп

Класс: Обыватель
Характер: Lawful Neutral
Раса: Человек
NWN: Модмейкер
Проклятие Левора
Порядок Времени



Цитата(Esidor @ Jun 18 2007, 09:48) [snapback]109559[/snapback]
Хорошая тема, Но там нет нужной сценки

повторяю еще раз, надеюсь, что последний: сценки, которая нужна вам не существует в природе. Все сценки по вышеописанным причинам уникальный и создаются под ситуацию. Я слабо верю в то, что в мире у какого-либо человека кроме вас была идея о точно такой же сценке, которую он воплотил в НВН.
Чтобы получить желаемое, придется приложить усилия. Или написать сценку самому или в частном порядке попросить скриптера.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
shadowdweller
сообщение Aug 1 2007, 13:56
Сообщение #187


Level 9
Иконки Групп

Класс: Вор
Характер: Chaotic Good
Раса: Эльф
МАСТЕР Переводов



Попыталась тут недавно расписать катсцену, и вот что у меня вышло:

Neverwinter Script Source
// Арест

void main()
{
// ::::::::::::: ДЕЙСТВУЮЩИЕ ЛИЦА :::::::::::
object oPC = GetPCSpeaker();
object oAlmero = GetObjectByTag("ALMERO"); // Альмеро Гарра - закоренелый преступник и рецидивист (IMG:style_emoticons/kolobok_light/biggrin.gif)
object oGuard1 = GetObjectByTag("GUARD_1");
object oGuard2 = GetObjectByTag("GUARD_2");
object oRugo = GetObjectByTag("RUGO"); // Руго - один из наших возможных хенчей, которому тоже есть чего бояться

//:::::::::::::: СТАТИСТЫ :::::::::::
object oAnimal = GetAssociate(ASSOCIATE_TYPE_ANIMALCOMPANION, oPC);
object oDominated = GetAssociate(ASSOCIATE_TYPE_DOMINATED); 
object oSummoned = GetAssociate(ASSOCIATE_TYPE_SUMMONED);
object oFamiliar = GetAssociate(ASSOCIATE_TYPE_FAMILIAR);
object oDarlan = GetObjectByTag("DARLAN"); // Дарлан, второй хенч - законопослушный. Если выбран именно он, будет стоять парализованный (IMG:style_emoticons/kolobok_light/smile.gif)
object oTard = GetObjectByTag("TARD");
object oCler1 = GetObjectByTag("TYR_CLERIC_1");
object oCler2 = GetObjectByTag("TYR_CLERIC_2");

// :::::::::::: ВЕЙПОЙНТЫ ::::::::::::::
object oWPC = GetObjectByTag("W_PC");
object oWPCRun = GetObjectByTag("W_PC_Run");
object oWAlmero = GetObjectByTag("W_Almero");
object oWAALeave = GetObjectByTag("W_Almero_Leave");
object oWGuard1 = GetObjectByTag("W_Guard1");
object oGuard12 = GetObjectByTag("W_Guard12");
object oWGuard2 = GetObjectByTag("W_Guard2");
object oGuard22 = GetObjectByTag("W_Guard22");
object oWRugo = GetObjectByTag("W_Rugo_Hide");
object oWRugofin = GetObjectByTag("W_Rugo_Fin");


// ::::::::::::: ЭФФЕКТЫ ::::::::::::
effect ePar  = EffectCutsceneParalyze();


// :::::::::::::: МИЗАНСЦЕНА ::::::::::::::

SetLocalInt(oPC, "CUT_1", 1);
BlackScreen (oPC);

AssignCommand(oPC, SetCutsceneMode(oPC));

SetAILevel(oGuard1, AI_LEVEL_HIGH);
SetAILevel(oGuard2, AI_LEVEL_HIGH);
SetAILevel(oAlmero, AI_LEVEL_HIGH);
SetAILevel(oRugo, AI_LEVEL_HIGH);

AssignCommand(oPC, ClearAllActions());
AssignCommand(oAlmero, ClearAllActions());
AssignCommand(oGuard1, ClearAllActions());
AssignCommand(oGuard1, ClearAllActions());
AssignCommand(oRugo, ClearAllActions());

AssignCommand(oPC, ActionJumpToObject (oWPC));
AssignCommand(oAlmero,ActionJumpToObject(oWAlmero)
;
AssignCommand(oGuard1, ActionJumpToObject(oWGuard1));
AssignCommand(oGuard2, ActionJumpToObject(oWGuard2));

AssignCommand(oCler1, ClearAllActions());
AssignCommand(oCler2, ClearAllActions());
AssignCommand(oTard, ClearAllActions());

AssignCommand(oCler1, ActionDoCommand(SetFacingPoint(GetPosition(oAlmero
)));
AssignCommand(oCler2, ActionDoCommand(SetFacingPoint(GetPosition(oAlmero
)));
AssignCommand(oTard, ActionDoCommand(SetFacingPoint(GetPosition(oAlmero
)));

ApplyEffectToObject (DURATION_TYPE_TEMPORARY, ePar, oCler1, 18.0);
ApplyEffectToObject (DURATION_TYPE_TEMPORARY, ePar, oCler2, 18.0);
ApplyEffectToObject (DURATION_TYPE_TEMPORARY, ePar, oTard, 18.0);
ApplyEffectToObject (DURATION_TYPE_TEMPORARY, ePar, oDarlan, 18.0);
ApplyEffectToObject (DURATION_TYPE_TEMPORARY, ePar, oAnimal, 18.0);
ApplyEffectToObject (DURATION_TYPE_TEMPORARY, ePar, oDominated, 18.0);
ApplyEffectToObject (DURATION_TYPE_TEMPORARY, ePar, oSummoned, 18.0);
ApplyEffectToObject (DURATION_TYPE_TEMPORARY, ePar, oFamiliar, 18.0);

DelayCommand(3.0, FadeFromBlack(oPC,FADE_SPEED_MEDIUM));

DelayCommand(3.5, AssignCommand(oPC, SetCameraFacing(30.0, 15.0, 40.0, CAMERA_TRANSITION_TYPE_SLOW)));

// ::::::::::::::::::::: НЕПОСРЕДСТВЕННО ДЕЙСТВИЕ :::::::::::::::::::::

DelayCommand(4.0, AssignCommand(oRugo, ActionDoCommand(SetFacingPoint(GetPosition(oGuard1
))));
DelayCommand(4.5, AssignCommand(oRugo, ActionPlayAnimation(ANIMATION_LOOPING_LOOK_FAR, 0.9, 0.5)));
DelayCommand(5.0, AssignCommand(oRugo, SpeakString("О, черт! Это за мной!")));
DelayCommand(5.5, AssignCommand(oPC, SetCameraFacing(225.0, 20.0, 40.0, CAMERA_TRANSITION_TYPE_MEDIUM)));
DelayCommand(6.0, AssignCommand(oRugo, ActionForceMoveToObject(oWRugo)));
DelayCommand(6.5, AssignCommand(oRugo, ActionPlayAnimation(ANIMATION_LOOPING_SIT_CROSS, 7.0)));
DelayCommand(7.0, AssignCommand(oPC, SetCameraFacing(30.0, 15.0, 40.0, CAMERA_TRANSITION_TYPE_SLOW)));


DelayCommand(7.5, AssignCommand(oGuard1, ActionMoveToObject(oGuard12)));
DelayCommand(7.5, AssignCommand(oGuard2, ActionMoveToObject(oGuard22)));

DelayCommand(9.0, AssignCommand(oGuard1, ActionDoCommand(SetFacingPoint(GetPosition(oAlmero
))));
DelayCommand(9.0, AssignCommand(oGuard2, ActionDoCommand(SetFacingPoint(GetPosition(oAlmero
))));
DelayCommand(9.5, AssignCommand(oPC, SpeakString("Альмеро, что происходит?")));
DelayCommand(10.0, AssignCommand(oGuard1, ActionPlayAnimation(ANIMATION_FIREFORGET_READ, 1.0)));

DelayCommand(11.0, AssignCommand(oGuard1, ActionSpeakString("Альмеро Гарра, ты обвиняешься в убийстве...")));
DelayCommand(12.0, AssignCommand(oGuard1, ActionSpeakString("...в побеге с места преступления, а также в воровстве и пиратстве.")));
DelayCommand(13.0, AssignCommand(oGuard1, ActionSpeakString("Ты будешь заключен в тюрьму, пока суд нашего милосердного правителя не решит твоей участи. Следуй за нами.")));
DelayCommand(14.0, AssignCommand(oAlmero, ActionSpeakString("Да, я иду.")));

DelayCommand(15.0, AssignCommand(oPC, SetCameraFacing(135.0, 20.0, 40.0, CAMERA_TRANSITION_TYPE_SLOW)));
DelayCommand(16.0, AssignCommand(oGuard1, ActionMoveToObject(oGuard1)));
DelayCommand(16.0, AssignCommand(oGuard2, ActionMoveToObject(oGuard2)));
DelayCommand(16.0, AssignCommand(oAlmero, ActionMoveToObject(oWAALeave)));

DelayCommand(17.0, AssignCommand(oPC, ActionForceMoveToObject(oWPCRun)));
DelayCommand(17.0, AssignCommand(oRugo, ActionForceMoveToObject(oWRugofin)));

DelayCommand(17.5, AssignCommand(oGuard1, ActionDoCommand(DestroyObject(oGuard1))));
DelayCommand(17.5, AssignCommand(oGuard2, ActionDoCommand(DestroyObject(oGuard2))));
DelayCommand(17.5, AssignCommand(oAlmero, ActionJumpToObject(GetObjectByTag("W_Almero_Prison"))));

DelayCommand(18.0, SetAILevel(oAlmero, AI_LEVEL_DEFAULT));
DelayCommand(18.0, SetAILevel(oRugo, AI_LEVEL_DEFAULT));
DelayCommand(18.5, AssignCommand(oPC, ClearAllActions()));
DelayCommand(18.5, AssignCommand(oRugo, ClearAllActions()));

DelayCommand(19.0, SetCutsceneMode(oPC, FALSE));
}


При тестировании обнаружилось, что:
1. Камера в первой части сцены вращается сама по себе, почти безо всяких задержек.
2. Руго послушно прячется там, куда я его направила, но никак не хочет потом идти на вейпойнт, который oWRugofin.
4. Охранник произносит только первую фразу, все остальные появляются только внизу.
5. Умный Альмеро ни в какую не хочет идти на последний вейпойнт (он в другой локации).

Что я делаю не так и как это исправить?
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
gennady
сообщение Aug 1 2007, 17:58
Сообщение #188


Level 9
Иконки Групп

Класс: Обыватель
Характер: Lawful Good
Раса: Человек
NWN: Модмейкер
Рыцарская Сага



Shadowdweller, есть небольшая ошибочка с анимацией, забыли проставить скорость…
Neverwinter Script Source
DelayCommand(6.5, AssignCommand(oRugo, ActionPlayAnimation(ANIMATION_LOOPING_SIT_CROSS, 1.0, 7.0)));

Остальное вроде правильно, только нужно ставить большую выдерку времени между фразами. Через секунду не годиться, нужно 5-7, поэтому и читаете все из панели отчета… Чем длинне фраза, тем нужно больше время, чтобы игрок смог это все прочитать. Небольшой совет: задайте общее время длительности катсценки
Neverwinter Script Source
float Time = 18.0;

Тогда будет легче настраивать время, например парализацию хенчей.
Что еще бросилось в глаза? Нужно выбирать или строй акций, или действия через счетчик времени на функции DelayCommand. На счетчике будет приоритет, и действие всегда произойдет, что может сбить стой акций… Так же функция дестроя имеет время, ее тоже в данном случае не нужно делать акцией и можно вообще обойтись без счетчика DelayCommand…
Цитата
5. Умный Альмеро ни в какую не хочет идти на последний вейпойнт (он в другой локации).

Почистете ему на всякий случай акции перед самым прыжком.

Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Aiwan
сообщение Aug 1 2007, 21:11
Сообщение #189


Миловидный Бегрюссунг
Иконки Групп

Класс: Воин
Характер: Chaotic Good
Раса: Человек
NWN: Модмейкер
Проклятие Левора
Порядок Времени



shadowdweller, я ж сказал тебе не делать одинаковых таймингов. Бывает что не срабатывают сразу несколько секунда и доля секунды одинаковые. Сделай вместо двух 18.0, 18.0 и 18.1

1. Камера встанет так как ты ее задала. Если от старта до финиша координат много, то она и будет ее крутить пока не встанет. Ты собственно чего хотела от камеры? Поставить четко, плавно повести или еще что? Ты от балды влепили координаты и что то ждешь. Так не пойдет.
2. Ошибка вот де:
Neverwinter Script Source
DelayCommand(17.0, AssignCommand(oRugo, ActionForceMoveToObject(oWRugofin)));
DelayCommand(18.5, AssignCommand(oRugo, ClearAllActions()));

oRugo получил команду и через 1.5 секунд ты почистила его стек и он все забыл. Соотвественно встал тупо на месте.

3. Вот эта строка появится через 5 секунд.
Neverwinter Script Source
DelayCommand(5.0, AssignCommand(oRugo, SpeakString("О, черт! Это за мной!")));

А вот эти начнутся в 11 секунд и так как вместо простой команды SpeakString ты юзаешь ActionSpeakString то каждая фраза будет иметь свою задержку и они накопятся в стек. То есть каждая фраза будет строго после того как проиграется перед ней и задержка уже не имеет значения. Ты мою статью читала? Там это разобрано. Твой oGuard1 будет трепать эти фразы секунд 10.
Neverwinter Script Source
DelayCommand(11.0, AssignCommand(oGuard1, ActionSpeakString("Альмеро Гарра, ты обвиняешься в убийстве...")));
DelayCommand(12.0, AssignCommand(oGuard1, ActionSpeakString("...в побеге с места преступления, а также в воровстве и пиратстве.")));
DelayCommand(13.0, AssignCommand(oGuard1, ActionSpeakString("Ты будешь заключен в тюрьму, пока суд нашего милосердного правителя не решит твоей участи. Следуй за нами.")));

5. Альмеро может не уметь ходить в другие локи. Поставь поинт в ЭТОЙ локе и после того как он к нему дойдет то отправь его в нужное место.
ActionMoveToObject отличается от ActionForceMoveToObject тем, что если первое действо НПС делает делает делает и бац! Застрял зацепившись за угол. Все. Конец. Акция невыполнена до места он не дошел цепочка порвалась. То вторая функция его отправит туда в принудиловку если он не дошел за контролькное время. По умолчанию там 30 сек. Ясно?
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
shadowdweller
сообщение Aug 1 2007, 23:43
Сообщение #190


Level 9
Иконки Групп

Класс: Вор
Характер: Chaotic Good
Раса: Эльф
МАСТЕР Переводов



Gennady, спасибо, обязательно учту. Правда, не совсем понятно со счетчиком. Что такое строй, а что такое счетчик? У меня, получается, все перепутано, что ли? Объясняйте мне на пальцах, плз, я не скриптер... (IMG:style_emoticons/kolobok_light/sad.gif)

Aiwan, я делала все так, как ты описал в статье.
1. Насчет камеры ты зря - я локацию сначала рисовала на бумаге со всеми вейпойнтами, плейсиблами и т.д., и прекрасно видела, как должна быть развернута камера. Другое дело - если проблема в скорости или в недостатке времени на разворот.
Мне нужно, чтобы участников сцены было видно всех по мере того, как они что-то делают. Вейп, куда бежит oRugo, находится от перса в совершенно противоположной стороне, если не вращать камеру, его элементарно не видно.
2. Про oRugo - спасибо. Исправлю. (IMG:style_emoticons/kolobok_light/biggrin.gif)
3. Т. е. задержку увеличить, я правильно поняла?
5. Ясно.
Спасибо.

Сообщение отредактировал shadowdweller - Aug 1 2007, 23:55
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
gennady
сообщение Aug 2 2007, 08:06
Сообщение #191


Level 9
Иконки Групп

Класс: Обыватель
Характер: Lawful Good
Раса: Человек
NWN: Модмейкер
Рыцарская Сага



Цитата
Gennady, спасибо, обязательно учту. Правда, не совсем понятно со счетчиком. Что такое строй, а что такое счетчик? У меня, получается, все перепутано, что ли? Объясняйте мне на пальцах, плз, я не скриптер...

Shadowdweller, строй акций это имеются ввиду команды, которые мы задаем НПС или герою, записав их ему в стек. Счетчик же работает с того объекта на который мы записываем команды. В вашей сценки это по-видимому будет последний НПС, с которым говорил герой… При его смерти накроются все записи счетчика с командами DelayCommand().
Строй акций в стеке НПС применяем, когда у него на ХБ записано исполнение каких-либо функций, типа ходьбы по точкам и прочего… Очистив стек, записываем акции и блокируем стек функцией:
Neverwinter Script
SetCommandable(FALSE, oNPC); // заблокировать очередь

Для задержки времени, используем акцию:
Neverwinter Script
AssignCommand(oNPC, ActionWait(float fSeconds));

Если же у вас в сценке ничего не прописано на НПС и нет атаки со стороны монстров, то нужно просто использовать запись на счетчик, посредством функции DelayCommand().
И… ActionSpeakString(”…”) тут неуместны, как правильно заметил Айв, это только путает… Просто пишем SpeakString(”…”) и задаем время, когда эта надпись должна появиться. Я тут пытался объяснить начинающим, как строить акции в разделе http://remmgen.narod.ru/tmonster.html NPC. Не знаю, доходчиво ли написал…
Для примера, запись через строй акций и счетчик:
Neverwinter Script
void JumpNPC(object oNPC, object oWP)
{
AssignCommand(oNPC, ClearAllActions());
AssignCommand(oNPC, ActionJumpToObject(oWP));
}
void main()
{
object oPC = GetPCSpeaker();
object oDarlan = GetObjectByTag("DARLAN"); // Дарлан, второй хенч - законопослушный.
object oGuard1 = GetObjectByTag("GUARD_1");
object oWGuard1 = GetNearestObjectByTag("W_Guard1"); // лучше использовать в локе Nearest
object oWP = GetObjectByTag("W_Guard2"); // в другой локе
string sSt1, sSt2, sSt3;
float Time = 25.0;
effect ePar  = EffectCutsceneParalyze();

ApplyEffectToObject (DURATION_TYPE_TEMPORARY, ePar, oDarlan, Time);
AssignCommand(oGuard1, ActionDoCommand(JumpNPC(oGuard1, oWGuard1)));
AssignCommand(oGuard1, ActionSpeakString(sSt1));
AssignCommand(oGuard1, ActionWait(7.0));
AssignCommand(oGuard1, ActionSpeakString(sSt2));
AssignCommand(oGuard1, ActionWait(7.0));
AssignCommand(oGuard1, ActionSpeakString(sSt3));
AssignCommand(oGuard1, ActionWait(7.0));
// разблокировать очередь
AssignCommand(oGuard1, ActionDoCommand(SetCommandable(TRUE, oGuard1)));
AssignCommand(oGuard1, ActionDoCommand(JumpNPC(oGuard1, oWP)));
DelayCommand(0.1, SetCommandable(FALSE, oGuard1)); // заблокировать очередь
}

Neverwinter Script
void JumpNPC(object oNPC, object oWP)
{
AssignCommand(oNPC, ClearAllActions());
AssignCommand(oNPC, ActionJumpToObject(oWP));
}
void main()
{
object oPC = GetPCSpeaker();
object oDarlan = GetObjectByTag("DARLAN"); // Дарлан, второй хенч - законопослушный.
object oGuard1 = GetObjectByTag("GUARD_1");
object oWGuard1 = GetNearestObjectByTag("W_Guard1"); // лучше использовать в локе Nearest
object oWP = GetObjectByTag("W_Guard2"); // в другой локе
string sSt1, sSt2, sSt3;
float Time = 25.0;
effect ePar  = EffectCutsceneParalyze();

ApplyEffectToObject (DURATION_TYPE_TEMPORARY, ePar, oDarlan, Time);
DelayCommand(0.1, JumpNPC(oGuard1, oWGuard1));
DelayCommand(1.0, AssignCommand(oGuard1, SpeakString(sSt1)));
DelayCommand(8.0, AssignCommand(oGuard1, SpeakString(sSt2)));
DelayCommand(15.0, AssignCommand(oGuard1, SpeakString(sSt3)));
DelayCommand(Time, JumpNPC(oGuard1, oWP));
}


Сообщение отредактировал gennady - Sep 4 2010, 16:54
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Aiwan
сообщение Aug 2 2007, 09:23
Сообщение #192


Миловидный Бегрюссунг
Иконки Групп

Класс: Воин
Характер: Chaotic Good
Раса: Человек
NWN: Модмейкер
Проклятие Левора
Порядок Времени



2 Ген, не путай ее. Пусть пока учится на задержках делать сценки.
2 Шад. Пришли мне свой модуль я тебе скажу где у тебя затык. На пальцах трудно объяснить и понять что и как.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
shadowdweller
сообщение Aug 2 2007, 22:56
Сообщение #193


Level 9
Иконки Групп

Класс: Вор
Характер: Chaotic Good
Раса: Эльф
МАСТЕР Переводов



2 gennady
Кажется, насчет строя и счетчика начинаю понимать, хоть и неясно, в чем у меня ошибка кроме того, что задержки слишком короткие. (IMG:style_emoticons/kolobok_light/smile.gif)
Ссылка очень полезная, спасиб. (IMG:style_emoticons/kolobok_light/smile.gif)

2 Aiwan
Ушло.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Aiwan
сообщение Aug 10 2007, 17:33
Сообщение #194


Миловидный Бегрюссунг
Иконки Групп

Класс: Воин
Характер: Chaotic Good
Раса: Человек
NWN: Модмейкер
Проклятие Левора
Порядок Времени



Отправил тебе позавчера назад письмо со сценкой. Жду...
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Topik
сообщение Aug 30 2007, 19:08
Сообщение #195


Level 2
*

Класс: Варвар
Характер: Lawful Neutral
Раса: Дварф



Что сдеся не так?

Neverwinter Script Source
void main()
{
  object oPC = GetLastUsedBy();  // Это герой
  object oObject = ActionJumpToObject("ARMOIRE_01"); // A Jump
  object oAnimal = GetAssociate(ASSOCIATE_TYPE_ANIMALCOMPANION, oPC);
  object oDominated = GetAssociate(ASSOCIATE_TYPE_DOMINATED, oPC);
  object oFamiliar = GetAssociate(ASSOCIATE_TYPE_FAMILIAR, oPC);
  object oHenchman = GetAssociate(ASSOCIATE_TYPE_HENCHMAN, oPC);
  object oSummoned = GetAssociate(ASSOCIATE_TYPE_SUMMONED, oPC);

  if (!GetIsPC(oPC) || GetLocalInt(OBJECT_SELF, "TRIGGER") == 1)
    return;
  {
  SetLocalInt(OBJECT_SELF, "TRIGGER", 1); // Сценка произошла
  SetCutsceneMode(oPC); // режим Cutscene
  AssignCommand(oPC, ClearAllActions()); // Почистим Action РС
  ActionDoCommand(AssignCommand(oPC, ActionMoveToObject(oObject)))
  ActionDoCommand(AssignCommand(oPC, SetCameraFacing(260.0, 19.0, 30.0, CAMERA_TRANSITION_TYPE_MEDIUM)));
  ActionDoCommand(AssignCommand(oPC, ActionWait (3);
  ActionDoCommand(AssignCommand(oPC, SpeakString("Надо одеться!");
  ActionDoCommand(AssignCommand(oPC, ActionWait (4.5);
  ActionDoCommand(AssignCommand(oNPC, ActionPlayAnimation(ANIMATION_LOOPING_TALK_PLEADIN
, 1.6,1.0)));
  ActionDoCommand(AssignCommand(oPC, SpeakString("Где мой трусы!");
  ActionDoCommand(AssignCommand(oNPC, ActionDoCommand(SetCutsceneMode(oPC, FALSE))))
{
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Lex
сообщение Aug 30 2007, 20:39
Сообщение #196


Level 5
Иконки Групп

Класс: Обыватель
Характер: Lawful Neutral
Раса: Человек
NWN: Модмейкер
Проклятие Левора
Порядок Времени



чтобы получить нормальный ответ, нужно задать нормально вопрос? Довольно простая истина, не кажется?
Где скрипт стоит?
Что в игре получается, когда запускается скрипт?
Что хотел автор, когда писал скрипт?
Наши форумные телепаты все в отпуске, так что придется (ах, какая досада) утрудить себя постановкой вопроса.

Навскидку могу только сказать, что
- Фразы тут все выдадутся разом, а не как надо бы, по мере выполнения анимации. Чтобы было как надо, надо использовать ActionSpeakString.
- ActionDoCommand тут не к месту
- нет синхронизации между действиями НПС и действиями ИГРОКА - они одновременно все делают.
- снятие эффекта катсцены не корректное. Те сниматься она по идее будет почти сразу (через 1 секунду, как закончится анимация)
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
gennady
сообщение Aug 31 2007, 06:33
Сообщение #197


Level 9
Иконки Групп

Класс: Обыватель
Характер: Lawful Good
Раса: Человек
NWN: Модмейкер
Рыцарская Сага



Neverwinter Script Source
void main()
{
  object oPC = GetLastUsedBy();  // Это герой
  /* Наверное, имелся в виду тэг объекта?
     Иначе просто бред…*/

  object oObject = GetObjectByTag("ARMOIRE_01"); // A Jump
  object oAnimal = GetAssociate(ASSOCIATE_TYPE_ANIMALCOMPANION, oPC);
  object oDominated = GetAssociate(ASSOCIATE_TYPE_DOMINATED, oPC);
  object oFamiliar = GetAssociate(ASSOCIATE_TYPE_FAMILIAR, oPC);
  object oHenchman = GetAssociate(ASSOCIATE_TYPE_HENCHMAN, oPC);
  object oSummoned = GetAssociate(ASSOCIATE_TYPE_SUMMONED, oPC);

  if (!GetIsPC(oPC) || GetLocalInt(OBJECT_SELF, "TRIGGER") == 1)
    return;

  SetLocalInt(OBJECT_SELF, "TRIGGER", 1); // Сценка произошла
  SetCutsceneMode(oPC); // режим Cutscene
  AssignCommand(oPC, ClearAllActions()); // Почистим Action РС
  /* Лучше использовать прыжок, на случай зависания сценки
     По умолчанию прыжок будет через 30 секунд, но время можно и задать... */

  AssignCommand(oPC, ActionForceMoveToObject(oObject));
  AssignCommand(oPC, ActionDoCommand(SetCameraFacing(260.0,19.0,30.0,CAMERA_TRANSITION_TYPE_MEDIUM)));
  AssignCommand(oPC, ActionWait(3.0));
  AssignCommand(oPC, ActionSpeakString("Надо одеться!"));
  AssignCommand(oPC, ActionWait(4.5));
  AssignCommand(oPC, ActionPlayAnimation
  (ANIMATION_LOOPING_TALK_PLEADING, 1.0, 1.6));
  AssignCommand(oPC, ActionSpeakString("Где мой трусы!"));
  AssignCommand(oPC, ActionDoCommand(SetCutsceneMode(oPC, FALSE)));
}

P.S. Вообще то скрипты нужно компилировать, иначе они не будут работать. (Первая верхняя кнопочка в левом углу редактора или жми кнопку F7). При компиляции редактор выдает ошибки и показывает строку и комментарий ошибки. По всей видимости объект oNPC не участвует в сценке, и все действие прописано для ГГ… Обратите внимание на число скобок в строке, должно быть равное количество открывающихся и закрывающихся скобок.

2 P.S. Айв, Нео, что-то в IE невозможно отредактировать пост, выбивае полность браузер с запросом отправки сообщения об ошибке... Плюс режет знаки если длинная строка. Например пропала буква в инте анимации, пришлось править перенос строки...

3 P.S. Сразу не догнал. но строй акций нужно стоить на РС, т.к. он является исполнителем, а не изабельный плейс…Скрипт поправил…
Айв, плюс менюшка быстрая или полная редакция не вылазит…

Сообщение отредактировал gennady - Aug 31 2007, 08:37
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Aiwan
сообщение Aug 31 2007, 07:58
Сообщение #198


Миловидный Бегрюссунг
Иконки Групп

Класс: Воин
Характер: Chaotic Good
Раса: Человек
NWN: Модмейкер
Проклятие Левора
Порядок Времени



Цитата(gennady @ Aug 31 2007, 09:33) *
2 P.S. Айв, Нео, что-то в IE невозможможно отредактировать пост, выбивае полность браузер с запросом отправки сообщения об ошибке... Плюс режит знаки если длинная строка. Например пропала буква в инте анимации, пришлось править перенос строки...

Скорее всего это либо глюк IE либо привет IPS... (IMG:style_emoticons/kolobok_light/nea.gif)
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
ZipovUA
сообщение Feb 9 2008, 12:05
Сообщение #199


Level 2
*

Класс: Маг
Характер: Chaotic Good
Раса: Человек



знаю, что повторюсь но все-таки:

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

(первый - это само собой главный персонаж)


писал
Код
void main
{
  object oPC=GetFirstPC();
  object oNPC=GetObjectByTag('SomePerc');
  
  //виполняем движения и диалоги
----------------------------------------
// само присоединение функцией
// Add oPC to oPartyLeader's party.  This will only work on two PCs.
// - oPC: player to add to a party
// - oPartyLeader: player already in the party
//void AddToParty(object oPC, object oPartyLeader)

AddToPary(oNPC, oPC);// oNPC не присоединяеться :(
}


но NPC принципиально не присоединяется. Подскажите пожалуйста, что делать и как присоединить непися в команду?....

2ой вопрос:
мне нужно добавить ефектности в сцену. А именно: я бы хотел, чтобы когда наш персонаж стреляет из лука (в сцене, а не в игре), создался об"ект "стрела", к нему привязалась камера (чтобы зритель прочуствувал полёт стрелы (IMG:style_emoticons/kolobok_light/smile.gif) ) и когда стрела поразила бы цель камера вернулась бы к игроку.....

Так как привязать камеру к стреле напрямую невозможно, мы привязуем стрелу к персонажу и перемещаем персонаж

итак:
1) каким то образом нужно зделать об"ект "стрела" (уменьшеное копье ?)
2) надобно запомнить место, откуда мы взяли персонажа
3) зделать персонажа невидимым
4) привязать персонажа к "стреле"
5) камеру максимально приблизить к "стреле"
6) в цикле (или функцией) передвигать стрелу (и персонажа с камерой соответственно)
7) когда стрела попадает в противника, смотрим ефект падения и смерти.
8) "убиваем" об"ект "стрела"
9) персонажа и камеру возвращаем на предидущее место.


Умом я это понимаю, но не понимаю как это написать.... (IMG:style_emoticons/kolobok_light/sad.gif)

Подскажите пожалуйста....

Сообщение отредактировал ZipovUA - Feb 9 2008, 12:06
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
ZipovUA
сообщение Feb 22 2008, 13:28
Сообщение #200


Level 2
*

Класс: Маг
Характер: Chaotic Good
Раса: Человек



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

AddToParty, а AddHenchman - и тогда всё работает отлично (IMG:style_emoticons/kolobok_light/smile.gif)
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения

9 страниц V  « < 6 7 8 9 >
Ответить в эту темуОткрыть новую тему
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



Текстовая версия Сейчас: 18th April 2024 - 05:20