![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() ![]() |
![]() |
![]()
Сообщение
#171
|
|
Миловидный Бегрюссунг ![]() Класс: Воин Характер: Chaotic Good Раса: Человек NWN: Модмейкер Проклятие Левора Порядок Времени ![]() |
Когда все понятно как 2х2, то ответ не в напряг, было бы время и чувство что ответ не уйдет в песок... Изучай статью. (IMG:style_emoticons/kolobok_light/biggrin.gif)
|
![]()
Сообщение
#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. А еще, я хотела сделать так, чтобы комендант на реплику чего-нибудь ответил, но он упорно молчит, какую команду я бы ни добавляла... Но не все сразу. |
![]()
Сообщение
#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. Без проблем можно, чтобы комендант ответил. Поставь это в очередь стражника. |
![]()
Сообщение
#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("Можете идти. я с ним поговорю.")));
|
![]()
Сообщение
#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("Можете идти. я с ним поговорю.")))); а сработает такая конструкция или нет - черт его знает, я давно в таком ключе сценки делал, уже не помню. попробуй. |
![]()
Сообщение
#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()); } |
![]()
Сообщение
#177
|
|
Level 9 ![]() Класс: Вор Характер: Chaotic Good Раса: Эльф МАСТЕР Переводов ![]() |
Сеньк. Я бы без вашей помощи просто плюнула бы на все уже давно. (IMG:style_emoticons/kolobok_light/thank_you.gif)
Lex, я просто вчера поспешила с постом, Инет все время вырубался. Потом только вспомнила, что есть же и длительность, и тип, и все прочее. Просто с эффектами почти не работала еще. Буду пробовать. Ту строчку, которая пункт 6, счас попробую поставить. Aiwan, если я правильно поняла, ты просто ускорил НПС? Класс! (IMG:style_emoticons/kolobok_light/hi.gif) Попробую и этот вариант. |
![]()
Сообщение
#178
|
|
Level 11 ![]() ![]() ![]() Класс: Воин Характер: Lawful Good Раса: Человек ![]() |
Кто-нибудь знает, как сделать так, чтобы при включении диалога позиция камеры не изменялась. А то она все портит!
Надеюсь, понятно изложился. Сообщение отредактировал Белатрис - Feb 25 2007, 12:58 |
![]()
Сообщение
#179
|
|
Миловидный Бегрюссунг ![]() Класс: Воин Характер: Chaotic Good Раса: Человек NWN: Модмейкер Проклятие Левора Порядок Времени ![]() |
В конце диалога в том месте где окно скриптов есть опция. Пощелкай увидишь. Отключить зум при начале диалога.
|
![]()
Сообщение
#180
|
|
Level 11 ![]() ![]() ![]() Класс: Воин Характер: Lawful Good Раса: Человек ![]() |
Как сделать, чтоб НПС с тэгом, допустим, "1", стрелял с лука по НПСу с тэгом "2"?
И как прекратить стрельбу? Заранее благодарен! (IMG:style_emoticons/kolobok_light/thank_you.gif) |
![]()
Сообщение
#181
|
|
Миловидный Бегрюссунг ![]() Класс: Воин Характер: Chaotic Good Раса: Человек NWN: Модмейкер Проклятие Левора Порядок Времени ![]() |
Создать две фракции нейтральные к РС и ненавидящие друг друга. Скриптом помещать НПС в эту фракцию. Из оружия оставить одни арбалеты. Дальше проявить смекалку.
|
![]()
Сообщение
#182
|
|
Level 1 Класс: Маг Характер: Neutral Good Раса: Чудовище ![]() |
Извините за то что не утруждал себя поиском данной сценке. Но поскольку я не умею сам писать скр. сценки то прошу вас уважаемые скриптеры спросить - Есть ли в этом разделе скрипт такой сценки:
После захода в Триггер ГГ начинается сценка: Стоят вокруг платформы 4 НПС, за ними еще двое. НПС 1 говорит НПС 2 *Тететете*, тот отвечает *Тетете*. После этого Из центра платформы (Точка маршрута?) исходит эффект как при Способности монстра "Рев, Смерть", умирают 4 НПС. НПС 2 говорит НПС 1 *Тетете* и бежит через открытую дверь-силовое поле к Точке маршрута и там исчезает. НПС 1 колдует как-будто заклинание "Луч негативной энергии" и силовое поле активизируется. После этого фракция НПС 1 становится "Вражденбый" |
![]()
Сообщение
#183
|
|
Level 5 ![]() Класс: Обыватель Характер: Lawful Neutral Раса: Человек NWN: Модмейкер Проклятие Левора Порядок Времени ![]() |
тут готовых сценок всего пара штук, они для примера. Выкладывать готовые ролики нет никакого резона - они уникальны для каждого модуля, ибо в основном связаны или с сюжетом или с квестом. Ролики надо писать самому или искать скриптера. В этой теме можно посмотреть готовые работы для примера и задать вопросы.
|
![]()
Сообщение
#184
|
|
Вечно меняющийся ![]() Класс: Монах Характер: True Neutral Раса: Человек NWN: Скриптинг [Sn] ![]() |
Раз уж про это зашла речь, есть (была точнее) такая тема (я всей душой люблю археологию и поиск).
Может быть, что нибуть, да и пригодится. |
![]()
Сообщение
#185
|
|
Level 1 Класс: Маг Характер: Neutral Good Раса: Чудовище ![]() |
Хорошая тема, Но там нет нужной сценки
|
![]()
Сообщение
#186
|
|
Level 5 ![]() Класс: Обыватель Характер: Lawful Neutral Раса: Человек NWN: Модмейкер Проклятие Левора Порядок Времени ![]() |
Цитата(Esidor @ Jun 18 2007, 09:48) [snapback]109559[/snapback] Хорошая тема, Но там нет нужной сценки повторяю еще раз, надеюсь, что последний: сценки, которая нужна вам не существует в природе. Все сценки по вышеописанным причинам уникальный и создаются под ситуацию. Я слабо верю в то, что в мире у какого-либо человека кроме вас была идея о точно такой же сценке, которую он воплотил в НВН. Чтобы получить желаемое, придется приложить усилия. Или написать сценку самому или в частном порядке попросить скриптера. |
![]()
Сообщение
#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. Умный Альмеро ни в какую не хочет идти на последний вейпойнт (он в другой локации). Что я делаю не так и как это исправить? |
![]()
Сообщение
#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. Умный Альмеро ни в какую не хочет идти на последний вейпойнт (он в другой локации). Почистете ему на всякий случай акции перед самым прыжком. |
![]()
Сообщение
#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 сек. Ясно? |
![]()
Сообщение
#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 |
![]()
Сообщение
#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 |
![]()
Сообщение
#192
|
|
Миловидный Бегрюссунг ![]() Класс: Воин Характер: Chaotic Good Раса: Человек NWN: Модмейкер Проклятие Левора Порядок Времени ![]() |
2 Ген, не путай ее. Пусть пока учится на задержках делать сценки.
2 Шад. Пришли мне свой модуль я тебе скажу где у тебя затык. На пальцах трудно объяснить и понять что и как. |
![]()
Сообщение
#193
|
|
Level 9 ![]() Класс: Вор Характер: Chaotic Good Раса: Эльф МАСТЕР Переводов ![]() |
2 gennady
Кажется, насчет строя и счетчика начинаю понимать, хоть и неясно, в чем у меня ошибка кроме того, что задержки слишком короткие. (IMG:style_emoticons/kolobok_light/smile.gif) Ссылка очень полезная, спасиб. (IMG:style_emoticons/kolobok_light/smile.gif) 2 Aiwan Ушло. |
![]()
Сообщение
#194
|
|
Миловидный Бегрюссунг ![]() Класс: Воин Характер: Chaotic Good Раса: Человек NWN: Модмейкер Проклятие Левора Порядок Времени ![]() |
Отправил тебе позавчера назад письмо со сценкой. Жду...
|
![]()
Сообщение
#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)))) { |
![]() ![]() |
Текстовая версия | Сейчас: 7th July 2025 - 11:48 |