![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() ![]() |
![]() |
![]()
Сообщение
#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)))) { |
![]()
Сообщение
#196
|
|
Level 5 ![]() Класс: Обыватель Характер: Lawful Neutral Раса: Человек NWN: Модмейкер Проклятие Левора Порядок Времени ![]() |
чтобы получить нормальный ответ, нужно задать нормально вопрос? Довольно простая истина, не кажется?
Где скрипт стоит? Что в игре получается, когда запускается скрипт? Что хотел автор, когда писал скрипт? Наши форумные телепаты все в отпуске, так что придется (ах, какая досада) утрудить себя постановкой вопроса. Навскидку могу только сказать, что - Фразы тут все выдадутся разом, а не как надо бы, по мере выполнения анимации. Чтобы было как надо, надо использовать ActionSpeakString. - ActionDoCommand тут не к месту - нет синхронизации между действиями НПС и действиями ИГРОКА - они одновременно все делают. - снятие эффекта катсцены не корректное. Те сниматься она по идее будет почти сразу (через 1 секунду, как закончится анимация) |
![]()
Сообщение
#197
|
|
Level 9 ![]() Класс: Обыватель Характер: Lawful Good Раса: Человек NWN: Модмейкер Рыцарская Сага ![]() |
Neverwinter Script Source void main() { object oPC = GetLastUsedBy(); // Это герой /* Наверное, имелся в виду тэг объекта? Иначе просто бред…*/ object oObject = GetObjectByTag("ARMOIRE_01"); // A Jump object oAnimal = GetAssociate(ASSOCIATE_TYPE_ANIMALCOMPANION, oPC); object oDominated = GetAssociate(ASSOCIATE_TYPE_DOMINATED, oPC); object oFamiliar = GetAssociate(ASSOCIATE_TYPE_FAMILIAR, oPC); object oHenchman = GetAssociate(ASSOCIATE_TYPE_HENCHMAN, oPC); object oSummoned = GetAssociate(ASSOCIATE_TYPE_SUMMONED, oPC); if (!GetIsPC(oPC) || GetLocalInt(OBJECT_SELF, "TRIGGER") == 1) return; SetLocalInt(OBJECT_SELF, "TRIGGER", 1); // Сценка произошла SetCutsceneMode(oPC); // режим Cutscene AssignCommand(oPC, ClearAllActions()); // Почистим Action РС /* Лучше использовать прыжок, на случай зависания сценки По умолчанию прыжок будет через 30 секунд, но время можно и задать... */ AssignCommand(oPC, ActionForceMoveToObject(oObject)); AssignCommand(oPC, ActionDoCommand(SetCameraFacing(260.0,19.0,30.0,CAMERA_TRANSITION_TYPE_MEDIUM))); AssignCommand(oPC, ActionWait(3.0)); AssignCommand(oPC, ActionSpeakString("Надо одеться!")); AssignCommand(oPC, ActionWait(4.5)); AssignCommand(oPC, ActionPlayAnimation (ANIMATION_LOOPING_TALK_PLEADING, 1.0, 1.6)); AssignCommand(oPC, ActionSpeakString("Где мой трусы!")); AssignCommand(oPC, ActionDoCommand(SetCutsceneMode(oPC, FALSE))); } P.S. Вообще то скрипты нужно компилировать, иначе они не будут работать. (Первая верхняя кнопочка в левом углу редактора или жми кнопку F7). При компиляции редактор выдает ошибки и показывает строку и комментарий ошибки. По всей видимости объект oNPC не участвует в сценке, и все действие прописано для ГГ… Обратите внимание на число скобок в строке, должно быть равное количество открывающихся и закрывающихся скобок. 2 P.S. Айв, Нео, что-то в IE невозможно отредактировать пост, выбивае полность браузер с запросом отправки сообщения об ошибке... Плюс режет знаки если длинная строка. Например пропала буква в инте анимации, пришлось править перенос строки... 3 P.S. Сразу не догнал. но строй акций нужно стоить на РС, т.к. он является исполнителем, а не изабельный плейс…Скрипт поправил… Айв, плюс менюшка быстрая или полная редакция не вылазит… Сообщение отредактировал gennady - Aug 31 2007, 08:37 |
![]()
Сообщение
#198
|
|
Миловидный Бегрюссунг ![]() Класс: Воин Характер: Chaotic Good Раса: Человек NWN: Модмейкер Проклятие Левора Порядок Времени ![]() |
2 P.S. Айв, Нео, что-то в IE невозможможно отредактировать пост, выбивае полность браузер с запросом отправки сообщения об ошибке... Плюс режит знаки если длинная строка. Например пропала буква в инте анимации, пришлось править перенос строки... Скорее всего это либо глюк IE либо привет IPS... (IMG:style_emoticons/kolobok_light/nea.gif) |
![]()
Сообщение
#199
|
|
Level 2 ![]() Класс: Маг Характер: Chaotic Good Раса: Человек ![]() |
знаю, что повторюсь но все-таки:
мне нужно было, чтобы один персонаж подошел к другому, они перебросились бы парой фраз и второй персонаж присоиденился бы к первому. (первый - это само собой главный персонаж) писал Код void main { object oPC=GetFirstPC(); object oNPC=GetObjectByTag('SomePerc'); //виполняем движения и диалоги ---------------------------------------- // само присоединение функцией // Add oPC to oPartyLeader's party. This will only work on two PCs. // - oPC: player to add to a party // - oPartyLeader: player already in the party //void AddToParty(object oPC, object oPartyLeader) AddToPary(oNPC, oPC);// oNPC не присоединяеться :( } но NPC принципиально не присоединяется. Подскажите пожалуйста, что делать и как присоединить непися в команду?.... 2ой вопрос: мне нужно добавить ефектности в сцену. А именно: я бы хотел, чтобы когда наш персонаж стреляет из лука (в сцене, а не в игре), создался об"ект "стрела", к нему привязалась камера (чтобы зритель прочуствувал полёт стрелы (IMG:style_emoticons/kolobok_light/smile.gif) ) и когда стрела поразила бы цель камера вернулась бы к игроку..... Так как привязать камеру к стреле напрямую невозможно, мы привязуем стрелу к персонажу и перемещаем персонаж итак: 1) каким то образом нужно зделать об"ект "стрела" (уменьшеное копье ?) 2) надобно запомнить место, откуда мы взяли персонажа 3) зделать персонажа невидимым 4) привязать персонажа к "стреле" 5) камеру максимально приблизить к "стреле" 6) в цикле (или функцией) передвигать стрелу (и персонажа с камерой соответственно) 7) когда стрела попадает в противника, смотрим ефект падения и смерти. 8) "убиваем" об"ект "стрела" 9) персонажа и камеру возвращаем на предидущее место. Умом я это понимаю, но не понимаю как это написать.... (IMG:style_emoticons/kolobok_light/sad.gif) Подскажите пожалуйста.... Сообщение отредактировал ZipovUA - Feb 9 2008, 12:06 |
![]()
Сообщение
#200
|
|
Level 2 ![]() Класс: Маг Характер: Chaotic Good Раса: Человек ![]() |
Узнал ответ на первый вопрос. Оказывается для того, чтобы забросить NPC в команду к вашему персонажу необходимо писать команду не
AddToParty, а AddHenchman - и тогда всё работает отлично (IMG:style_emoticons/kolobok_light/smile.gif) |
![]() ![]() |
Текстовая версия | Сейчас: 29th April 2025 - 23:08 |