Помощь - Поиск - Пользователи - Календарь
Полная версия: ПОСТРОЕНИЕ СКРИПТОВЫХ СЦЕН
Город Мастеров > РЕДАКТОРЫ > Neverwinter Nights Aurora Toolset
Страницы: 1, 2, 3, 4, 5
Noah
QUOTE(Dik Morris @ Jun 1 2006, 20:00) [snapback]83520[/snapback]

поиск у меня не юзается,если можно подробно про атаку в катсцене раскажите,работа стоит.
Dik Morris
В ссылке приводимой мною выше смотри посты за 1 мая, там все разобрано.
Белатрис
Как сделать так, чтобы во время кутсцены начался диалог, и когда он заканчивается, заканчивается и кутсцена? Это как в Кингмэйкере, после битвы (когда заходишь в город).
Aiwan
Мы тут это уже рассматривали. Я в частности приводил скрипты. Ищи.
Белатрис
Я все просмотрел, но того, что мне нужно не нашел. Вот, буквально 5 минут назад закончил смотреть.
Dik Morris
QUOTE(Белатрис @ Jun 11 2006, 07:46) [snapback]84402[/snapback]

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

NSS
DelayCommand(Задержка, если нужна конечно,
AssignCommand(Тот кто начинает диалог,
ActionStartConversation(С кем начинают диалог)));

QUOTE(Белатрис @ Jun 11 2006, 09:40) [snapback]84402[/snapback]

Я все просмотрел, но того, что мне нужно не нашел. Вот, буквально 5 минут назад закончил смотреть.


См. 131 сообщение.
Aiwan
Делаешь триггер, ставишь на онЕнтр мой код. Таг НПС с которым начинается диалог должен быть равен тагу триггера: TR_CONV_[ТАГ_НПС_ДЛЯ_ДИАЛОГА]. Имя триггера фраза над НПС, типа "Эй, стой засранец!"
NSS
//:://////////////////////////////////////////////
//:: OnEnter  am_ten_convr_npc
//:: Copyright © 2005 WRG!
//:://////////////////////////////////////////////
/*
  Старт диалога с РС. Текст над NPC - Name триггера
  KeyTag - если больше 0, то непись ПОДБЕЖИТ.
  TR_CONV_[ТАГ_НПС_ДЛЯ_ДИАЛОГА]
*/

//:://////////////////////////////////////////////
//:: Created By: Aiwan
//:: Original idea By: DBColl
//:: Created On: 22.04.2005
//:://////////////////////////////////////////////

void main()
{
    object oPC = GetEnteringObject();
    object oTrig = OBJECT_SELF;
    string sTag = GetTag(oTrig); // Таг триггера
    string sNPC = GetStringRight(sTag, (GetStringLength(sTag)- 8)); // Таг НПС
    object oNPC = GetNearestObjectByTag(sNPC);
    string sSpeak = GetName(oTrig); // Фраза
    vector vD = GetPosition(oNPC) - GetPosition(oPC);
    float fDir = VectorToAngle(vD);
    int bRun = StringToInt(GetLockKeyTag(oTrig));
    if (!GetIsPC(oPC)) return;
    if (GetLocalInt(oTrig, "HAS_OPERATED")) return;
    if (!GetIsObjectValid(oNPC)) return;
    if (GetArea(OBJECT_SELF)!=GetArea(oNPC)) return;
    if (GetIsEnemy(oNPC, oPC)) return;
    if (GetObjectType(oNPC)!=OBJECT_TYPE_CREATURE) return;
    FadeToBlack(oPC, FADE_SPEED_FASTEST);
    AssignCommand(oPC, ClearAllActions());
    AssignCommand(oNPC, ClearAllActions());
    SetCutsceneMode(oPC);
    DelayCommand(0.8, AssignCommand(oPC, SetCameraFacing(fDir, 25.0, 60.0, CAMERA_TRANSITION_TYPE_SNAP)));
    AssignCommand(oNPC, ActionDoCommand(SetFacingPoint(GetPosition(oPC))));
    DelayCommand(1.2, FadeFromBlack(oPC, FADE_SPEED_FAST));
    DelayCommand(2.0, AssignCommand(oPC, SetCameraFacing(fDir+35.0, 8.0, 50.0, CAMERA_TRANSITION_TYPE_SLOW)));
    AssignCommand(oPC, ActionDoCommand(SetFacingPoint(GetPosition(oNPC))));
    if (GetDeity(oNPC)!="")
      {
        int iAnim = StringToInt(GetDeity(oNPC));
        DelayCommand(3.0, AssignCommand(oNPC, ActionPlayAnimation(iAnim, 0.8, 2.0)));
      }
    DelayCommand(3.5, AssignCommand(oNPC, SpeakString(sSpeak)));
    DelayCommand(4.5, AssignCommand(oNPC, ActionForceMoveToObject(oPC, bRun)));
//  DelayCommand(5.5, AssignCommand(oNPC, ActionDoCommand(SetCutsceneMode(oPC, FALSE))));
    DelayCommand(6.0, AssignCommand(oNPC, ActionStartConversation(oPC)));
    SetLocalInt(oTrig, "HAS_OPERATED", TRUE);
}


На последнюю строку диалога пишешь такой скрипт:
NSS
//:://////////////////////////////////////////////
//:: Отключает РС режим катсцены
//:: Copyright © 2005 WRG!
//:://////////////////////////////////////////////
//:: Created By: Aiwan
//:: Created On: 30.12.2005
//:://////////////////////////////////////////////

void main()
{
    object oPC = GetPCSpeaker();
    if(GetCutsceneMode(oPC)==TRUE)
    {
      SetCutsceneMode(oPC, FALSE);
    }
}
Dik Morris
Aiwan

У него все это происходит в кутсцене, т.е тут триггер не понадобиться.

QUOTE
Как сделать так, чтобы во время кутсцены начался диалог, и когда он заканчивается, заканчивается и кутсцена? Это как в Кингмэйкере, после битвы (когда заходишь в город).
Aiwan
*Шум падающего тела, которое соскребает со стола клавиатуру и матерится неприличными словам*
Я что то не видел, что бы было об этом написано конкретно... Придется заняться телепатией... scratch_one-s_head.gif
*Встал на пол, ноги поставил на ширине плеч. Чуть присел. Совершаю вращательные движения тазом.*
Раз два три четыре пять. Начинаю телепать!
Белатрис
Как сделать, чтобы сначала на ПС наложилось заклинание "Цепь молний", а потом его убило, чтоб на части разлетелся?..
Dik Morris
Белатрис

Скажи мне, а каким боком это относиться к этой темe...?

QUOTE
ПОСТРОЕНИЕ СКРИПТОВЫХ СЦЕН.
Основы написания Cutscene


PS: разлететься на части он никак не сможет, налаживай молнию через: ActionCastFakeSpellAtObject, потом добавляй виз. эффект, (скажем побольше крови), и после этого - EffectDeath();.
Белатрис
bad.gif Не понял......
dumbo
QUOTE(Lexicon)

effect EffectDeath(
int nSpectacularDeath = FALSE,
int nDisplayFeedback = TRUE
);

Parameters
nSpectacularDeath
If this is TRUE, the creature to which this effect is applied will die in an extraordinary fashion (Default: FALSE)

nDisplayFeedback
(Default: TRUE)

тот самый "разлет" на части...

а "взрывать" трупы - это как раз сюда в тему вроде... smile.gif
Aiwan
Белатрис, устное предупреждение за то что вопросы не по теме. Иди в раздел вопросы новичков.
Noah
Доброе утро!Айван,вопрос персонально тебе,так как этого я в этой теме не нашел,а в катсценах дока ты.Так вот,в тулсете есть классный инклюд"x1_?_cutscene"точное название не помню,но найти его в скриптах не проблема.Там очень удобная система cut+действие не надо писать все эти ассигн и делай(добавляешь только время между действиями,а не от начала скрипта)вообщем супер!Написал сценку, еще одну,еще.Первая играет,а вторая...На триге она не запускается,иду на тригер другой третей сценки: запускает 2 сцену!:-|
Waromon
2 Noah

Дык та инклюда не простая wink3.gif, там нужно указывать номер сценки (что-то типа того) примеры кодов погляди в СоУ, там точно есть. wink3.gif


ЗЫ: вообще согласен, библиотечка оч удобная.
Noah
[quote name='Waromon' date='Aug 30 2006, 10:28' post='90753']
2 Noah

Дык та инклюда не простая ;), там нужно указывать номер сценки (что-то типа того) примеры кодов погляди в СоУ, там точно есть. ;)
Иногда мозг встает и отказывается работать!Как работает этот инклюд?Кто работал подскажите,а то сейчас все сцены не корректно работают,а режим катсцены не работают.
shadowdweller
Доброго времени суток всем!

Помогите, плз. опять у меня проблемы. sad.gif
Пытаюсь написать небольшую катсцену. Игрок сидит в камере. Сам выбраться не может - на двери флажок "plot", чтобы ее открыть, нужен ключ с тэгом "Cell_key". Приходит охранник. После разговора с ПС он должен открыть дверь ключом, выпустить ПС и отвести к коменданту. Ключ от двери у охранника в инвентаре (проверяла неоднократно - он там присутствует, тэги ключа и замка на двери совпадают).

Компилится. НО: охранник пытается открыть дверь, но не открывает. Пробовала через ActionUnlockObject(GetObjectByTag("MYCELL")) - результат тот же.

Сама катсцена ставится на ActionTaken в беседе с охранником. Выглядит так:
NSS
void main()
{
object oPC = GetPCSpeaker();
object oCap = GetObjectByTag("Cap_001"); // Охранник
object oWard = GetObjectByTag("Warden"); // Комендант тюрьмы
object oDoor = GetObjectByTag("MYCELL"); // Дверь камеры (заперта, нужен ключ)

SetCommandable(FALSE, oPC);
DelayCommand(20.0, SetCommandable(TRUE, oPC));
AssignCommand(oCap, ActionUnlockObject(oDoor));
AssignCommand(oCap, ActionOpenDoor(oDoor));
AssignCommand(oCap, ActionMoveToObject(oWard));
AssignCommand(oPC, ActionForceFollowObject(oCap));
AssignCommand(oCap, ActionSpeakString("Комендант, заключенный доставлен."));
AssignCommand(oPC, ClearAllActions());
}

Что я делаю неправильно? scratch_one-s_head.gif

ЗЫ: Только не смейтесь, пожалуйста, над этим шедевром очень громко - у меня тьюториал по катсценам для патчей ниже версии 1.30, а со статьей Aiwan'a мне пока трудно разобраться.
Aiwan
Трудно судить что тебе надо. Ведь не вижу ни расстояний ни предметов рядом и прочее. Нужна очень подробная инфа: НПС подошел, повернулся, пукнул, ойкнул, повернулся, отошел. Сел, поковырял в носу... Как тольк оты составишь эти действия. Написать будет тебе проще.
NSS
AssignCommand(oPC, ClearAllActions());
SetLocked(oDoor, FALSE);
AssignCommand(oCap, ActionMoveToObject(oDoor));
AssignCommand(oCap, ActionPlayAnimation(ANIMATION_LOOPING_GET_MID, 0.5, 3.0));
AssignCommand(oCap, ActionDoCommand(AssignCommand(oDoor, ActionOpenDoor(oDoor))));
AssignCommand(oCap, ActionMoveToObject(oWard));
AssignCommand(oCap, ActionDoCommand(AssignCommand(oPC, ActionForceFollowObject(oCap, 1.5))));
AssignCommand(oCap, ActionDoCommand(SetCommandable(FALSE, oPC)));
AssignCommand(oCap, ActionSpeakString("Комендант, заключенный доставлен."));
AssignCommand(oCap, ActionDoCommand(SetCommandable(TRUE, oPC)));
shadowdweller
Спасибо!!! thank_you.gif
Надеюсь, не очень напрягла. Буду, все-таки, с твоей статьей разбираться.
Aiwan
Когда все понятно как 2х2, то ответ не в напряг, было бы время и чувство что ответ не уйдет в песок... Изучай статью. biggrin.gif
shadowdweller
Айв, а катсцена глючит... sad.gif
В общем, сначала добавила все как ты написал - у меня охранник стал открывать дверь, все нормально, но он почему-то идет не по коридору, а хочет пройти через стену, ПС - за ним. Оччень смешно... 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)); // Здесь ПС очень прикольно бежит вприпрыжку 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));
}

Вообще, когда в последний раз тестировала в таком виде, получилось нормально так...
Но все равно возникает куча вопросов: scratch_one-s_head.gif
1. Почему камера устанавливается, но потом мышью вращается как угодно?
2. Почему из катсцены можно элементарно выйти, просто задав ПС мышью другой маршрут движения?
Правда, он потом пытается опомниться и идти все-таки за охранником, но весь шарм теряется...
3. И куда бы на время катсцены убрать эту самую мышь совсем?..
4. Как сделать, чтобы ПС шел на более медленной скорости? (Прикольно, конечно, что ПС прыгает, как отравленный страус, но, по-моему, это все-таки баг)
5. Как заставить охранника развернуться?
6. А еще, я хотела сделать так, чтобы комендант на реплику чего-нибудь ответил, но он упорно молчит, какую команду я бы ни добавляла... Но не все сразу.
Lex
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
Пасибо, Lex. thank_you.gif
С тем, где что поменять, понятно. И почему поменять, тоже.
Можно, еще спрошу:
4. По точкам уже пробовала отправить ПС, до того, как сюда зашла, так он вообще никуда не идет. Сложновато мне в точки превращать, лучше через эффект буду.
Это пойдет
NSS
AssignCommand(oPC,ApplyEffectToObject(oPC,EffectSlow()));
? Или опять не то?
6. Это будет так?
NSS
AssignCommand(oCap, ActionDoCommand(oWard,ActionSpeakString("Можете идти. я с ним поговорю.")));
Lex
4 - попробуй разные варианрты (у слоу бяка есть: на персе будут шмотки с имуном к слоу и все обломается smile.gif)
ты хоть почитай описание ApplyEffectToObject. Там еще требуется длительность указать (INSTANCE, PERMANENT, TEMPORARY)

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

а сработает такая конструкция или нет - черт его знает, я давно в таком ключе сценки делал, уже не помню. попробуй.
Aiwan
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
Сеньк. Я бы без вашей помощи просто плюнула бы на все уже давно. thank_you.gif
Lex, я просто вчера поспешила с постом, Инет все время вырубался. Потом только вспомнила, что есть же и длительность, и тип, и все прочее. Просто с эффектами почти не работала еще. Буду пробовать.
Ту строчку, которая пункт 6, счас попробую поставить.
Aiwan, если я правильно поняла, ты просто ускорил НПС? Класс! hi.gif Попробую и этот вариант.
Белатрис
Кто-нибудь знает, как сделать так, чтобы при включении диалога позиция камеры не изменялась. А то она все портит!
Надеюсь, понятно изложился.
Aiwan
В конце диалога в том месте где окно скриптов есть опция. Пощелкай увидишь. Отключить зум при начале диалога.
Белатрис
Как сделать, чтоб НПС с тэгом, допустим, "1", стрелял с лука по НПСу с тэгом "2"?
И как прекратить стрельбу?
Заранее благодарен! thank_you.gif
Aiwan
Создать две фракции нейтральные к РС и ненавидящие друг друга. Скриптом помещать НПС в эту фракцию. Из оружия оставить одни арбалеты. Дальше проявить смекалку.
Esidor
Извините за то что не утруждал себя поиском данной сценке. Но поскольку я не умею сам писать скр. сценки то прошу вас уважаемые скриптеры спросить - Есть ли в этом разделе скрипт такой сценки:
После захода в Триггер ГГ начинается сценка:
Стоят вокруг платформы 4 НПС, за ними еще двое.
НПС 1 говорит НПС 2 *Тететете*, тот отвечает *Тетете*. После этого Из центра платформы (Точка маршрута?) исходит эффект как при Способности монстра "Рев, Смерть", умирают 4 НПС. НПС 2 говорит НПС 1 *Тетете* и бежит через открытую дверь-силовое поле к Точке маршрута и там исчезает. НПС 1 колдует как-будто заклинание "Луч негативной энергии" и силовое поле активизируется. После этого фракция НПС 1 становится "Вражденбый"
Lex
тут готовых сценок всего пара штук, они для примера. Выкладывать готовые ролики нет никакого резона - они уникальны для каждого модуля, ибо в основном связаны или с сюжетом или с квестом. Ролики надо писать самому или искать скриптера. В этой теме можно посмотреть готовые работы для примера и задать вопросы.
Dik Morris
Раз уж про это зашла речь, есть (была точнее) такая тема (я всей душой люблю археологию и поиск).

Может быть, что нибуть, да и пригодится.
Esidor
Хорошая тема, Но там нет нужной сценки
Lex
Цитата(Esidor @ Jun 18 2007, 09:48) [snapback]109559[/snapback]
Хорошая тема, Но там нет нужной сценки

повторяю еще раз, надеюсь, что последний: сценки, которая нужна вам не существует в природе. Все сценки по вышеописанным причинам уникальный и создаются под ситуацию. Я слабо верю в то, что в мире у какого-либо человека кроме вас была идея о точно такой же сценке, которую он воплотил в НВН.
Чтобы получить желаемое, придется приложить усилия. Или написать сценку самому или в частном порядке попросить скриптера.
shadowdweller
Попыталась тут недавно расписать катсцену, и вот что у меня вышло:

Neverwinter Script Source
// Арест

void main()
{
// ::::::::::::: ДЕЙСТВУЮЩИЕ ЛИЦА :::::::::::
object oPC = GetPCSpeaker();
object oAlmero = GetObjectByTag("ALMERO"); // Альмеро Гарра - закоренелый преступник и рецидивист 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"); // Дарлан, второй хенч - законопослушный. Если выбран именно он, будет стоять парализованный 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
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
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
Gennady, спасибо, обязательно учту. Правда, не совсем понятно со счетчиком. Что такое строй, а что такое счетчик? У меня, получается, все перепутано, что ли? Объясняйте мне на пальцах, плз, я не скриптер... sad.gif

Aiwan, я делала все так, как ты описал в статье.
1. Насчет камеры ты зря - я локацию сначала рисовала на бумаге со всеми вейпойнтами, плейсиблами и т.д., и прекрасно видела, как должна быть развернута камера. Другое дело - если проблема в скорости или в недостатке времени на разворот.
Мне нужно, чтобы участников сцены было видно всех по мере того, как они что-то делают. Вейп, куда бежит oRugo, находится от перса в совершенно противоположной стороне, если не вращать камеру, его элементарно не видно.
2. Про oRugo - спасибо. Исправлю. biggrin.gif
3. Т. е. задержку увеличить, я правильно поняла?
5. Ясно.
Спасибо.
gennady
Цитата
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));
}
Aiwan
2 Ген, не путай ее. Пусть пока учится на задержках делать сценки.
2 Шад. Пришли мне свой модуль я тебе скажу где у тебя затык. На пальцах трудно объяснить и понять что и как.
shadowdweller
2 gennady
Кажется, насчет строя и счетчика начинаю понимать, хоть и неясно, в чем у меня ошибка кроме того, что задержки слишком короткие. smile.gif
Ссылка очень полезная, спасиб. smile.gif

2 Aiwan
Ушло.
Aiwan
Отправил тебе позавчера назад письмо со сценкой. Жду...
Topik
Что сдеся не так?

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

Навскидку могу только сказать, что
- Фразы тут все выдадутся разом, а не как надо бы, по мере выполнения анимации. Чтобы было как надо, надо использовать ActionSpeakString.
- ActionDoCommand тут не к месту
- нет синхронизации между действиями НПС и действиями ИГРОКА - они одновременно все делают.
- снятие эффекта катсцены не корректное. Те сниматься она по идее будет почти сразу (через 1 секунду, как закончится анимация)
gennady
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. Сразу не догнал. но строй акций нужно стоить на РС, т.к. он является исполнителем, а не изабельный плейс…Скрипт поправил…
Айв, плюс менюшка быстрая или полная редакция не вылазит…
Aiwan
Цитата(gennady @ Aug 31 2007, 09:33) *
2 P.S. Айв, Нео, что-то в IE невозможможно отредактировать пост, выбивае полность браузер с запросом отправки сообщения об ошибке... Плюс режит знаки если длинная строка. Например пропала буква в инте анимации, пришлось править перенос строки...

Скорее всего это либо глюк IE либо привет IPS... nea.gif
ZipovUA
знаю, что повторюсь но все-таки:

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

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


писал
Код
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ой вопрос:
мне нужно добавить ефектности в сцену. А именно: я бы хотел, чтобы когда наш персонаж стреляет из лука (в сцене, а не в игре), создался об"ект "стрела", к нему привязалась камера (чтобы зритель прочуствувал полёт стрелы smile.gif ) и когда стрела поразила бы цель камера вернулась бы к игроку.....

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

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


Умом я это понимаю, но не понимаю как это написать.... sad.gif

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

AddToParty, а AddHenchman - и тогда всё работает отлично smile.gif
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.
Invision Power Board © 2001-2025 Invision Power Services, Inc.