![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() ![]() |
![]() |
![]()
Сообщение
#3796
|
|
Level 9 ![]() Класс: Вор Характер: Chaotic Good Раса: Эльф МАСТЕР Переводов ![]() |
Урра! Заработала! Ребята, спасибо! (IMG:style_emoticons/kolobok_light/thank_you.gif)
|
![]()
Сообщение
#3797
|
|
Level 11 ![]() Класс: Волшебник Характер: Lawful Evil Раса: Эльф NWN: Скриптинг [PW] Gem of the North ![]() |
Потестил, плейс умеет начинать диалог (IMG:style_emoticons/kolobok_light/smile.gif)
|
![]()
Сообщение
#3798
|
|
Level 3 ![]() Класс: Клерик Характер: Chaotic Good Раса: Эльф ![]() |
У меня вот тоже с диалогом проблема, только другая - NPC должен (бы!), когда 1-й раз видит PC, бежать к нему и начинать диалог. Пробовал ставить триггер, при наступании на который этот NPC делал бы, что ему надо - не работает. Поставил NPC OnPerception, чтоб бежал - он начал таскаться за PC, как привязанный=( Попробовал добавить условие, чтоб бегал, только пока не говорили 1-й раз (на диалоге ставится переменная)
Neverwinter Script void main() { object oNPC = OBJECT_SELF; object oPC = GetFirstPC(); if(GetIsPC(oPC) && GetLocalInt(GetPCSpeaker(), "AineTalk") < 1 && GetLocalInt(oPC,"NW_L_Init" + GetTag(oNPC)) == FALSE && IsInConversation(oNPC) == FALSE) { AssignCommand(oPC,ClearAllActions()); AssignCommand(oNPC,ClearAllActions()); AssignCommand(oNPC,ActionForceMoveToObject(oPC)); AssignCommand(oNPC,ActionStartConversation(oPC)); } } Все равно таскается! Может я в скрипте что-то не так сделал? Сообщение отредактировал Lirulin - Jul 6 2008, 17:25 |
![]()
Сообщение
#3799
|
|
Level 12 ![]() Класс: Оборотень Характер: Chaotic Neutral Раса: Нежить NWN: Скриптинг [Sn] ![]() |
Цитата Пробовал ставить триггер, при наступании на который этот NPC делал бы, что ему надо - не работает ну дык сделай чтобы рабатало, а не виласепедры придумывай. 1. не видно где устанавливается локалка 2. GetPCSpeaker() на онПерсепшен? |
![]()
Сообщение
#3800
|
|
Level 9 ![]() Класс: Вор Характер: Chaotic Good Раса: Эльф МАСТЕР Переводов ![]() |
Lirulin, у меня работает так:
1. Создаешь триггер, при входе на который игрока к нему будет бежать НПС. Нужен триггер типа NewGeneric. 2. Внутри триггера создаешь вэйпойнт - точку, куда будет возвращаться НПС, если игрок вышел из области триггера, и присваиваешь ему тэг "WP_RETURN_ТЭГ_НПС" (без кавычек, разумеется) 3. На этот вэйпойнт ставишь НПС 4. В скриптах триггера на OnEnter ставишь вот это: Neverwinter Script void main() { object oNPC = GetObjectByTag("ЗДЕСЬ_ТЭГ_НПС"); object oPC = GetEnteringObject(); if(GetIsPC(oPC) && GetLocalInt(oPC,"Dlg_Init_" + GetTag(oNPC)) == FALSE && !IsInConversation(oNPC)) { AssignCommand(oPC,ClearAllActions()); AssignCommand(oNPC,ClearAllActions()); AssignCommand(oNPC,ActionMoveToObject(oPC)); AssignCommand(oNPC,ActionStartConversation(oPC)); } } 5. И на OnExit - вот это: Neverwinter Script void main(){ string sTag = "ЗДЕСЬ_ТЭГ_НПС"; object oExit = GetExitingObject(); if(GetTag(oExit) == sTag) { AssignCommand(oExit,ClearAllActions()); AssignCommand(oExit,ActionMoveToObject(GetNearestO bjectByTag("WP_RETURN_" + sTag))); } } Вот это - как раз для того, чтобы НПС не ходил за героем хвостом. Кажется, все. Сообщение отредактировал shadowdweller - Jul 6 2008, 19:27 |
![]()
Сообщение
#3801
|
|
Level 3 ![]() Класс: Клерик Характер: Chaotic Good Раса: Эльф ![]() |
shadowdweller, огромное спасибо! Я и сам понимаю, что с триггером проще, но видимо я там где-то тож лопухнулся в скрипте - и...
(я знаю, что тэги без кавычек (IMG:style_emoticons/kolobok_light/rolleyes.gif) ) ну дык сделай чтобы рабатало, а не виласепедры придумывай. 1. не видно где устанавливается локалка 2. GetPCSpeaker() на онПерсепшен? Устанавливалась в диалоге, в другом скрипте. Про Speaker - OnPerception - поправлю, вдруг получися. А придумывать велосипеды я престану, когда научусь нормально. Пока же я выкручиваюсь.. Сообщение отредактировал Lirulin - Jul 6 2008, 20:37 |
![]()
Сообщение
#3802
|
|
Level 9 ![]() Класс: Вор Характер: Chaotic Good Раса: Эльф МАСТЕР Переводов ![]() |
(я знаю, что тэги без кавычек) А я вот не знала. Сколько мучилась из-за этого... Теперь неосознанное стремление всем разжевать. (IMG:style_emoticons/kolobok_light/smile.gif) Вот только единственное - НПС у меня не бежит, а вразвалочку прогулочным шагом идет. Слышала, что есть какая-то переменная Neverwinter Script int bRun , но вот как задавать - не знаю...Думаю, из более солидных специалистов кто поможет (IMG:style_emoticons/kolobok_light/smile.gif) |
![]()
Сообщение
#3803
|
|
Level 5 ![]() Класс: Обыватель Характер: Lawful Neutral Раса: Человек NWN: Модмейкер Проклятие Левора Порядок Времени ![]() |
за отсутствием солидных спецов могу помочь я.
nRun - параметр в функции ActionMoveToObject (и всех других Move'ов), подробнее см. помощник в скрипт эдиторе или лексикон. |
![]()
Сообщение
#3804
|
|
Level 3 ![]() Класс: Клерик Характер: Chaotic Good Раса: Эльф ![]() |
А я вот не знала. Сколько мучилась из-за этого... Теперь неосознанное стремление всем разжевать. (IMG:style_emoticons/kolobok_light/smile.gif) Вот только единственное - НПС у меня не бежит, а вразвалочку прогулочным шагом идет. Ну, я вот хоть и знаю, а иногда забываю! Однажды скопировал нужный мне тэг из скрипта, придал этот тэг объекту (не помню, что это было), а кавычки забыл убрать. Долго не мог понять, почему не работает=) А вроде еще можно просто скорость перемещения задать? float'ом... то ли после того, какой собсно, объект перемещается, писать этот float, то ли... не помню! (IMG:style_emoticons/kolobok_light/unsure.gif) У меня у самого вразвалочку топают! (но им вроде бегать по статусу не положено, потому я не задумывался над этим=)) |
![]()
Сообщение
#3805
|
|
Level 5 ![]() Класс: Обыватель Характер: Lawful Neutral Раса: Человек NWN: Модмейкер Проклятие Левора Порядок Времени ![]() |
Если чару, то через Leto. (IMG:style_emoticons/kolobok_light/biggrin.gif) Скорость можно менять и через эффект. EffectMovementIncrease (и Decrease или что-то похоже. Поиск по слову movement рулит)
|
![]()
Сообщение
#3806
|
|
Level 9 ![]() Класс: Вор Характер: Chaotic Good Раса: Эльф МАСТЕР Переводов ![]() |
nRun - параметр в функции ActionMoveToObject (и всех других Move'ов), подробнее см. помощник в скрипт эдиторе или лексикон. Lex, спасибо огромное! По секрету, именно из скрипт-эдитора в тулсете я про эту функцию и узнала. Даже прочитала, перевела и догадалась, что она значит, правда! Проблема не в том, где найти, а в том, как пользоваться. Но твое внимание льстит, однозначно. |
![]()
Сообщение
#3807
|
|
Level 5 ![]() Класс: Обыватель Характер: Lawful Neutral Раса: Человек NWN: Модмейкер Проклятие Левора Порядок Времени ![]() |
Проблема не в том, где найти, а в том, как пользоваться. (IMG:style_emoticons/kolobok_light/pardon.gif) проще, как говорится, некуда: ставишь TRUE - бежит. Ставишь FALSE (или ничего не ставишь) - не бежит. Думал такие вещи ты уже знаешь. TINT: чтобы указать необязательный параметр у функции, необходимо обязательно указывать все параметры до него, даже если вас устраивают значения по умолчанию. TINT2: обязательный параметр это тот параметр, который не имеет значения по умолчанию. Они идут первыми, только после того как закончатся все обязательные параметры, идут необязательные, со значением по умолчанию. Перемешать порядок параметров нельзя. Создавая свои функции, учитывайте это. Старайтесь, так же, ставить необязательные параметры в порядке частоты их изменения. Те тот парамерт, который чаще всего будет настраиваться разработчиком нужно ставить как можно раньше. Тот, который будет настраиваться редко, в самый конец списка. |
![]()
Сообщение
#3808
|
|
Миловидный Бегрюссунг ![]() Класс: Воин Характер: Chaotic Good Раса: Человек NWN: Модмейкер Проклятие Левора Порядок Времени ![]() |
Чертишь триггер, в таг триггера пишешь TR_CONV_ТАГ_ТВОЕГО_НПС Скрипт в слот на OnEnter. Имя триггера - фраза которую скажет НПС увидев РС. В свойствах KeyTag - больше 0 - подбежит. Все.
Neverwinter Script //::////////////////////////////////////////////// //:: OnEnter am_ten_speak_npc //:: Copyright © 2005 WRG! //::////////////////////////////////////////////// /* Текст над NPC KeyTag - Количество раз. Если 0, то бесконечно. TAG НПС приписываем к четырем знакам к TAG-у триггера. НПС SubRace - анимации, НПС Deity - Длительность анимаций. */ //::////////////////////////////////////////////// //:: Created By: Aiwan //:: Created On: 21.04.2005 //::////////////////////////////////////////////// void main() { object oPC = GetEnteringObject(); // PC object oTrig = OBJECT_SELF; string sTag = GetTag(oTrig); // Таг триггера TR_SPK_ string sNPC = GetStringRight(sTag, (GetStringLength(sTag)- 7)); // Таг НПС object oNPC = GetNearestObjectByTag(sNPC); string sSpeak = GetName(oTrig); // Фраза int i = StringToInt(GetLockKeyTag(oTrig)); // Количество раз int iSp = GetLocalInt(oTrig, "SPEAK"); int iAnim = StringToInt(GetSubRace(oNPC)); // Анимации float fAnim = StringToFloat(GetDeity(oNPC)); // Длительность анимаций if (!GetIsObjectValid(oNPC) || !GetIsPC(oPC) || iSp >= i && i!=0) { return; } AssignCommand(oNPC, ClearAllActions()); AssignCommand(oNPC, ActionDoCommand(SetFacingPoint(GetPosition(oPC)))) ; DelayCommand(1.0, AssignCommand(oNPC, SpeakString(sSpeak))); if (GetSubRace(oNPC)!="") { if (GetDeity(oNPC)=="") fAnim = 1.0; AssignCommand(oNPC, ActionPlayAnimation(iAnim, 1.0, fAnim)); } if (i!=0) { SetLocalInt(oTrig, "SPEAK", (iSp+1)); } } Есть скрипт для НПС, который будетбегать за РС и говорить типа: "Великий воин, последователь Темпуса! Подойди ко мне, базар есть!" Настраивается дистанция. Напирмер, вы отбежали от НПС на 15 метров и все, он успокоился пока вас снова не увидит. |
![]() ![]()
Сообщение
#3809
|
|
Level 4 ![]() ![]() Класс: Друид Характер: True Neutral Раса: Человек ![]() |
Я тут недавно узнал что есть такая 2да таблица как hen_companion ( hen_familiar).
Вообщем я долго искал, и 2да.биф смотрел, но не нашел, кто может сказать как это таблица выглядит? (IMG:style_emoticons/kolobok_light/scratch_one-s_head.gif) |
![]()
Сообщение
#3810
|
|
Level 12 ![]() Класс: Оборотень Характер: Chaotic Neutral Раса: Нежить NWN: Скриптинг [Sn] ![]() |
Цитата Вообщем я долго искал, и 2да.биф смотрел, но не нашел наверное плохо смотрели, как раз там она и находится. (хотя для начала я всегда советовал бы заглядывать в xp2patch.bif и xp2.bif для последний версий тулсета). получите и распишитесь: hen_companion.2da Код 2DA V2.0 NAME BASERESREF STRREF DESCRIPTION 0 Badger NW_AC_BADGER 1993 5569 1 Wolf NW_AC_WOLF 1578 5929 2 Bear NW_AC_BEAR 1580 5986 3 Boar NW_AC_BOAR 1577 5988 4 Hawk NW_AC_HAWK 5989 5990 5 Panther NW_AC_PANT 5991 5992 6 Spider NW_AC_SPID 1573 5993 7 Direwolf NW_AC_DWLF 10526 5994 hen_familiar.2da Код 2DA V2.0
NAME BASERESREF STRREF DESCRIPTION 0 Bat NW_FM_BAT 1995 5636 1 Panther NW_FM_CRAG 5995 5996 2 Hellhound NW_FM_HELL 5997 5998 3 Imp NW_FM_IMP 5999 6000 4 Firemephit NW_FM_FIRE 6001 6002 5 Icemephit NW_FM_ICE 6003 6004 6 Pixie NW_FM_PIXI 6005 6007 7 Raven NW_FM_RAVE 6008 6009 |
![]()
Сообщение
#3811
|
|
Level 3 ![]() Класс: Клерик Характер: Chaotic Good Раса: Эльф ![]() |
Есть скрипт для НПС, который будетбегать за РС и говорить типа: "Великий воин, последователь Темпуса! Подойди ко мне, базар есть!" Настраивается дистанция. Напирмер, вы отбежали от НПС на 15 метров и все, он успокоился пока вас снова не увидит. И он, этот скрипт, на Perception ставится, да? Или куда-то еще, а дистанция задается произвольно, независимо Perception'а NPC? Сообщение отредактировал Lirulin - Jul 9 2008, 21:48 |
![]()
Сообщение
#3812
|
|
Level 4 ![]() ![]() Класс: Друид Характер: True Neutral Раса: Человек ![]() |
Да, наверно действительно плохо искал.
Спасибо! |
![]()
Сообщение
#3813
|
|
Level 3 ![]() Класс: Обыватель Характер: Neutral Good Раса: Человек ![]() |
Опять о триггерах и разговорах. Мы уже когда-то спрашивали тут, что делать с тем, что при 1 хенче реплика есть, при двух - нет=( Но это-то ладно... А как быть, если надо чтобы некоторые хенчи говорили что-то, а другие - нет? Только через их тэги устанавливать, какие говорят нужную фразу, а какие нет?
|
![]()
Сообщение
#3814
|
|
Level 5 ![]() Класс: Обыватель Характер: Lawful Neutral Раса: Человек NWN: Модмейкер Проклятие Левора Порядок Времени ![]() |
Да
|
![]()
Сообщение
#3815
|
|
Level 3 ![]() Класс: Обыватель Характер: Neutral Good Раса: Человек ![]() |
Спасибо! А если хенчи по расе отличаются, то через racial type можно? Или все равно только тэгами?
|
![]() ![]()
Сообщение
#3816
|
|
Level 4 ![]() ![]() Класс: Друид Характер: True Neutral Раса: Человек ![]() |
Я недавно скачал СЕР 2.1 и начал разбираться с системой лошадок, практически во всем разобрался, но 1 вопрос остался, где брать радиальное меню, которое управляет этими лошадками?
|
![]()
Сообщение
#3817
|
|
Миловидный Бегрюссунг ![]() Класс: Воин Характер: Chaotic Good Раса: Человек NWN: Модмейкер Проклятие Левора Порядок Времени ![]() |
|
![]()
Сообщение
#3818
|
|
Level 9 ![]() Класс: Вор Характер: Chaotic Good Раса: Эльф МАСТЕР Переводов ![]() |
Очередной дурацкий вопрос из моей коллекции (IMG:style_emoticons/kolobok_light/smile.gif)
Хочу НПС OnSpawn прописать последовательность действий, которую он должен постоянно выполнять - пошел на первый вейп, сделал там что-нибудь, пошел на второй, постоял, пошел на третий, и так далее. Потом так же - обратно. Перешел к одному - действие - ко второму - действие, и т.д. Как пишется анимация, я знаю и напишу. Вопрос в другом - нужно, чтобы НПС делал это все постоянно. Насколько я знаю, скрипт OnSpawn срабатывает только один раз. Как сделать, чтобы он работал постоянно. Вариант OnHeartbeat отпадает - за 6 секунд НПС с такой последовательностью действий не управится. Кам к мне поступить? |
![]()
Сообщение
#3819
|
|
Level 11 ![]() Класс: Волшебник Характер: Lawful Evil Раса: Эльф NWN: Скриптинг [PW] Gem of the North ![]() |
Я бы через хербит делал, только надо воткнуть туда проверку (мы рядом с нужным вейпом? да - делаем то, что надо, идём дальше, нет - выходим).
|
![]()
Сообщение
#3820
|
|
Level 12 ![]() Класс: Оборотень Характер: Chaotic Neutral Раса: Нежить NWN: Скриптинг [Sn] ![]() |
можно вставить в экшен несколько экшенов, в том числе тот, который их вставляет... (IMG:style_emoticons/kolobok_light/scratch_one-s_head.gif) хз как сказать нормально - чтобы объяснить рекурсию нужно сначала объяснить рекурсию... так что пример:
Neverwinter Script void DoItAgain()
{ SetCommandable(TRUE); ActionMoveToLocation(...); ActionPlayAnimation(...); // ... // и прочие непотребства ActionDoCommand(DoItAgain()); SetCommandable(FALSE); // а это чтобы наш "шатун" не отвлекался на настырного игрока } void main() { // ещё какая-то инициализация по умолчанию // ... DoItAgain(); } Сообщение отредактировал azathoth - Jul 17 2008, 16:00 |
![]() ![]() |
Текстовая версия | Сейчас: 10th August 2025 - 00:12 |