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

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

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


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

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



Когда все понятно как 2х2, то ответ не в напряг, было бы время и чувство что ответ не уйдет в песок... Изучай статью. (IMG:style_emoticons/kolobok_light/biggrin.gif)
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
shadowdweller
сообщение Oct 1 2006, 00:00
Сообщение #172


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

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



Айв, а катсцена глючит... (IMG:style_emoticons/kolobok_light/sad.gif)
В общем, сначала добавила все как ты написал - у меня охранник стал открывать дверь, все нормально, но он почему-то идет не по коридору, а хочет пройти через стену, ПС - за ним. Оччень смешно... (IMG:style_emoticons/kolobok_light/crazy.gif)
Ну, подкорректировала я по мере возможности и вот что вышло:
NSS
void main()
{
object oPC = GetPCSpeaker();
object oCap = GetObjectByTag("Cap_001");
object oWard = GetObjectByTag("WARD");
object oDoor = GetObjectByTag("MYCELL");
object oLoc1 = GetObjectByTag("CAP_STAND1"); // Иначе выманить охранника 
object oLoc2 = GetObjectByTag("CAP_STAND2"); // из камеры не было никакой
object oLoc3 = GetObjectByTag("CAP_STAND3"); // возможности

AssignCommand(oPC,SetCutsceneMode(oPC));
AssignCommand(oPC, ClearAllActions());
AssignCommand(oCap, ClearAllActions());
ActionDoCommand(AssignCommand(oPC, SetCameraFacing(225.0, 20.0, 45.0, CAMERA_TRANSITION_TYPE_MEDIUM)));
SetLocked(oDoor, FALSE);
ActionDoCommand(AssignCommand(oCap, SetFacingPoint(GetPosition(oPC)))); // Потому что когда  вносила первые изменения, мы почему-то открывали дверь, повернувшись к замку спиной
AssignCommand(oCap, ActionWait(1.0));
AssignCommand(oCap, ActionPlayAnimation(ANIMATION_LOOPING_GET_MID, 0.5, 3.0));
AssignCommand(oCap, ActionWait(1.0));
AssignCommand(oCap, ActionDoCommand(AssignCommand(oDoor, ActionOpenDoor(oDoor))));
AssignCommand(oCap, ActionWait(1.0));
ActionDoCommand(AssignCommand(oCap, SetFacingPoint(GetPosition(oLoc1)))); // Это он развернулся к вэйпойнту, к которому сейчас пойдет, ПС  в противоположной стороне.
AssignCommand(oCap, ActionMoveToObject(oLoc1));
AssignCommand(oCap, ActionMoveToObject(oLoc2));
AssignCommand(oCap, ActionMoveToObject(oLoc3));
AssignCommand(oPC, ActionForceFollowObject(oCap, 1.5)); // Здесь ПС очень прикольно бежит вприпрыжку (IMG:style_emoticons/kolobok_light/sad.gif)
AssignCommand(oCap, ActionDoCommand(SetCommandable(FALSE, oPC)));
AssignCommand(oCap, ActionPlayAnimation(ANIMATION_FIREFORGET_SALUTE));
AssignCommand(oCap, ActionWait(1.0));
AssignCommand(oCap, ActionDoCommand(SetCommandable(TRUE, oPC)));
AssignCommand(oCap, ActionSpeakString("Комендант, заключенный доставлен."));
AssignCommand(oCap, ActionWait(1.0));
AssignCommand(oCap, ActionMoveToObject(GetObjectByTag("PRISON_CAP")));
ActionDoCommand(AssignCommand(oCap, SetFacingPoint(GetPosition(oWard)))); // И никуда он не разворачивается
AssignCommand(oPC,SetCutsceneMode(oPC,FALSE));
}

Вообще, когда в последний раз тестировала в таком виде, получилось нормально так...
Но все равно возникает куча вопросов: (IMG:style_emoticons/kolobok_light/scratch_one-s_head.gif)
1. Почему камера устанавливается, но потом мышью вращается как угодно?
2. Почему из катсцены можно элементарно выйти, просто задав ПС мышью другой маршрут движения?
Правда, он потом пытается опомниться и идти все-таки за охранником, но весь шарм теряется...
3. И куда бы на время катсцены убрать эту самую мышь совсем?..
4. Как сделать, чтобы ПС шел на более медленной скорости? (Прикольно, конечно, что ПС прыгает, как отравленный страус, но, по-моему, это все-таки баг)
5. Как заставить охранника развернуться?
6. А еще, я хотела сделать так, чтобы комендант на реплику чего-нибудь ответил, но он упорно молчит, какую команду я бы ни добавляла... Но не все сразу.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Lex
сообщение Oct 1 2006, 00:08
Сообщение #173


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

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



1,2,3 - ты сразу катсцену отрубаешь, ибо
NSS
AssignCommand(oPC,SetCutsceneMode(oPC,FALSE));
выполнится сразу. Тебе надо поставить снятие катсцены в очередь. Судя по тому, что у тебя главный персонаж - Охранник, имеет смысл привязать к нему. Например так:
NSS
AssignCommand(oCap, ActionDoCommand(SetCutsceneMode(oPC,FALSE)));


4. не баг. По умолчанию ПС бегает, ходить он может только если
- его замедлить (EffectSlow, EffectMovementDecrease)
- его направить в точку, а не к объкту (в принципе тут это можно устроить, у тебя по ходу движения поинты, их можно в точки превратить через GetLocation() и игрока направить не в след за стражником, а по точкам)
- включит режим Search (и то если игрок - эльф, все равно будет бегать).

5. поменяй
NSS
ActionDoCommand(AssignCommand(oCap, SetFacingPoint(GetPosition(oWard)))); // И никуда он не разворачивается

на вот это:
NSS
AssignCommand(oCap, ActionDoCommand(SetFacingPoint(GetPosition(oWard)))); // повернется как миленький


6. Без проблем можно, чтобы комендант ответил. Поставь это в очередь стражника.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
shadowdweller
сообщение Oct 1 2006, 00:44
Сообщение #174


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

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



Пасибо, Lex. (IMG:style_emoticons/kolobok_light/thank_you.gif)
С тем, где что поменять, понятно. И почему поменять, тоже.
Можно, еще спрошу:
4. По точкам уже пробовала отправить ПС, до того, как сюда зашла, так он вообще никуда не идет. Сложновато мне в точки превращать, лучше через эффект буду.
Это пойдет
NSS
AssignCommand(oPC,ApplyEffectToObject(oPC,EffectSlow()));
? Или опять не то?
6. Это будет так?
NSS
AssignCommand(oCap, ActionDoCommand(oWard,ActionSpeakString("Можете идти. я с ним поговорю.")));
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Lex
сообщение Oct 1 2006, 00:59
Сообщение #175


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

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



4 - попробуй разные варианрты (у слоу бяка есть: на персе будут шмотки с имуном к слоу и все обломается (IMG:style_emoticons/kolobok_light/smile.gif) )
ты хоть почитай описание ApplyEffectToObject. Там еще требуется длительность указать (INSTANCE, PERMANENT, TEMPORARY)

6 - нет. Посмотри описание ActionDoCommand - там 1 параметр, а ты передаешь 2. Теоретически там должно быть:
NSS
AssignCommand(oCap, ActionDoCommand(AssignCommand(oWard,SpeakString("Можете идти. я с ним поговорю."))));

а сработает такая конструкция или нет - черт его знает, я давно в таком ключе сценки делал, уже не помню. попробуй.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
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))))
{
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения

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

 



Текстовая версия Сейчас: 7th July 2025 - 11:48