![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() ![]() |
![]() |
![]()
Сообщение
#2041
|
|
Миловидный Бегрюссунг ![]() Класс: Воин Характер: Chaotic Good Раса: Человек NWN: Модмейкер Проклятие Левора Порядок Времени ![]() |
Я же говорил, надо через юзерДеф делать. каждая локалка - блок задач. У тебя не просто задачи, они сложные и просто ей не забъешь стек.
У тебя целый блок AI... Попробуй так. Этот код верный на 100%. Все на актионах даже локалки в одном блоке. Должна успевать все понимать... NSS void ActionCreateObject(int nObjType, string sCreature, location lLoc, int iAnimation, string sNewTag="")
{ CreateObject(nObjType, sCreature, lLoc, FALSE, sNewTag); } void CheckIsHere(object oTarget, string sOrder) { object oSelf = OBJECT_SELF; if(GetDistanceBetween(oSelf, oTarget) < 4.0) { AssignCommand(oSelf, PlayAnimation(ANIMATION_LOOPING_GET_MID, 1.0, 1.0)); CreateItemOnObject(sOrder, oTarget, 1); // Тут никакой блокировки не надо. Действия простые } else { SpeakString("Куда вы ушли??"); AssignCommand(oSelf, ActionPlayAnimation(ANIMATION_LOOPING_GET_LOW, 1.0, 5.0)); AssignCommand(oSelf, ActionCreateObject(OBJECT_TYPE_ITEM, sOrder, GetLocation(OBJECT_SELF), TRUE)); AssignCommand(oSelf, ActionDoCommand(SetLocalInt(oSelf, "vir_waiter_busy", FALSE))); AssignCommand(oSelf, ActionDoCommand(SetCommandable(TRUE, oSelf))); DelayCommand(0.3, SetCommandable(FALSE, oSelf)); } } |
![]()
Сообщение
#2042
|
|
Level 17 ![]() Класс: Волшебник Характер: Neutral Good Раса: Человек NWN: Скриптинг [PW] Axistown SR 1.9 NWNX ![]() |
CheckIsHere - это только одна из вложенных функций. Она вызывается после того, как официантка дошла до указанной локации:
NSS void GoToPlayer(object oTarget, string sOrder, float fTimeout) { ActionForceMoveToLocation(GetLocation(oTarget), TRUE, fTimeout); ActionDoCommand(SetFacingPoint(GetPosition(oTarget))); ActionDoCommand(CheckIsHere(oTarget, sOrder)); //заблокировать и разблокировать очередь DelayCommand(0.2, SetCommandable(FALSE)); AssignCommand(OBJECT_SELF, ActionDoCommand(SetCommandable(TRUE))); } По отдельности эта функция работать будет, но со вложенностью официантка дойдёт до точки, а функция CheckIsHere не выполнится. Там же из main вызывается GiveBottleTo, оттуда - GoToPlayer, а оттуда - уже CheckIsHere. Ой, блин, не подумал. Может, просто разблокировку сделать перед вызовом функции. (IMG:style_emoticons/kolobok_light/smile.gif) З.Ы. Не помогло.. Сообщение отредактировал virusman - Mar 8 2006, 12:08 |
![]()
Сообщение
#2043
|
|
Level 13 ![]() ![]() ![]() ![]() Класс: Ниндзя Характер: Chaotic Evil Раса: Танар'ри ![]() |
Народ, существует ли скрипт, меняющий части тела? И если есть, то какой?
|
![]()
Сообщение
#2044
|
|
Level 6 ![]() Класс: Некромант Характер: Chaotic Evil Раса: Нежить NWN: Скриптинг [PW] ![]() |
у ПЦ через лето помойму можно, только не пойму - зачем?
проще целый апиренс изменить Сообщение отредактировал [MoF]Darth_Nick - Mar 11 2006, 10:37 |
![]()
Сообщение
#2045
|
|
Level 5 ![]() Класс: Обыватель Характер: Lawful Neutral Раса: Человек NWN: Модмейкер Проклятие Левора Порядок Времени ![]() |
QUOTE(Вишес @ Mar 11 2006, 08:51) [snapback]72284[/snapback] Народ, существует ли скрипт, меняющий части тела? И если есть, то какой? в 1.67 будут такие функции. Сейчас только целиком. |
![]()
Сообщение
#2046
|
|
Level 3 ![]() Класс: Некромант Характер: Chaotic Neutral Раса: Человек ![]() |
Большое спасибо Azathoth`у и Zirrex`у.
Скрипт заработал. Еще вопрос. Как сделать, чтобы зомби сначала лежали на земле (Анимация смерти) а потом вставали и дралисьс чаром. Спасибо за внимание. |
![]()
Сообщение
#2047
|
|
Level 5 ![]() Класс: Волшебник Характер: Chaotic Good Раса: Дракон NWN: Скриптинг [Sn] ![]() |
Nuprahtor, попробуй так:
на зомби на onSpawn NSS SetIsDestroyable(FALSE, TRUE, FALSE); effect eDeath = EffectDeath(); ApplyEffectToObject(DURATION_TYPE_INSTANT, eDeath, OBJECT_SELF); далее смотря через что, допустим это триггер, тогда на onEnter добавь строчки NSS object oDead = GetObjectByTag("ZOMBI");
effect eRes = EffectResurrection(); effect eHeal = EffectHeal(GetMaxHitPoints(oDead)); ApplyEffectToObject(DURATION_TYPE_INSTANT, eRes, oDead); ApplyEffectToObject(DURATION_TYPE_INSTANT, eHeal, oDead); |
![]() ![]()
Сообщение
#2048
|
|
Level 5 ![]() ![]() Класс: Друид Характер: Neutral Good Раса: Человек ![]() |
Скрипт незнаю но область с зомби которые ожывают могу сделать.
|
![]()
Сообщение
#2049
|
|
Level 3 ![]() Класс: Некромант Характер: Chaotic Neutral Раса: Человек ![]() |
Может на OnPerception?
Зомби просто лежат, чар к ним подходит они встают и драка. |
![]()
Сообщение
#2050
|
|
Level 6 ![]() Класс: Некромант Характер: Chaotic Evil Раса: Нежить NWN: Скриптинг [PW] ![]() |
повесь на спаун кат_сцен паралайз или иммобилиз...или и то и то, когда надо удали
Сообщение отредактировал [MoF]Darth_Nick - Mar 12 2006, 15:16 |
![]()
Сообщение
#2051
|
|
Level 9 ![]() ![]() ![]() Класс: Волшебник Характер: Neutral Good Раса: Эльф ![]() |
Если зомби всегда будут лежать на одних и тех же местах (или может это убитые на случайном месте персонажи?) то имхо, легче всего нарисовать тригер со скриптом на OnEnter.
Если нет, можно убить чара на спауне (не забыв поставить нон-дестроибл) а на хертбите организовать подобие персепшена: как увидел игрока лечиться и делаться хостайлом (при мертвом персонаже персепшен работать вроде не будет). Кстати можно сделать так чтобы зомби не просто вскакивал, а поднимался с анимацией. Точно не знаю, но для этого похоже нужно его заставить либо "использовать" самого себя либо идти на локацию где он лежал. Надо выяснять эксперементально (IMG:style_emoticons/kolobok_light/smile.gif) |
![]()
Сообщение
#2052
|
|
Level 5 ![]() Класс: Волшебник Характер: Chaotic Good Раса: Дракон NWN: Скриптинг [Sn] ![]() |
Lorendroll
QUOTE Если нет, можно убить чара на спауне (не забыв поставить нон-дестроибл) а на хертбите организовать подобие персепшена Не смотря на то, что тушка зомби не исчезла, формально для движка зомби мертв, а потому не один эвент с него не сработает, в тч и ХБ. Имхо удобнее в данной ситуации все же триггер, соответственно всю анимацию туда же...какую - на вкус автора модуля, я бы предложил туже что и при закле воскрешения. (IMG:style_emoticons/kolobok_light/smile.gif) |
![]()
Сообщение
#2053
|
|
Level 9 ![]() Класс: Друид Характер: True Neutral Раса: Эльф NWN: Скриптинг [PW] Амен ![]() |
Есть один прекрасный скрипт, который создает скелетов из сложенных черепов. Работает не на основе триггера, а проверяет, есть ли рядом игрок, если есть, пересоздать объект. Также можно и тут. Лежат, к примеру, мертвые зомби (каламбур; куда уж мертвее), а проходящий мимо игрок их поднимает. Учуяли свежую кровь и душу (IMG:style_emoticons/kolobok_light/smile.gif)
самим зомби сделать в момент появления анимацию. Я так создавал Таннари. Вначале кидал на них эффект нулевого объекта, потом пересоздавал через 1-2 секунды в нормальном облике, чтобы монстры не тупили, а сразу шли в бой. В нашем случае это нужно, чтобы зомби положить на землю, а потом через анимацию их плавно поднять. Но необходимо так подгадать время исчезновения трупов, чтобы это не казалось пропущенными кадрами в плохом кино. |
![]()
Сообщение
#2054
|
|
Level 3 ![]() Класс: Некромант Характер: Chaotic Neutral Раса: Человек ![]() |
Спасибо вам всем.Придется ставить на триггер.
|
![]()
Сообщение
#2055
|
|
Mystery ![]() Класс: Маг Характер: Lawful Evil Раса: Тварь NWN: Контент Амен ![]() |
QUOTE(Zirrex @ Mar 13 2006, 10:26) [snapback]72517[/snapback] Есть один прекрасный скрипт, который создает скелетов из сложенных черепов. Работает не на основе триггера, а проверяет, есть ли рядом игрок, если есть, пересоздать объект. Также можно и тут. Лежат, к примеру, мертвые зомби (каламбур; куда уж мертвее), а проходящий мимо игрок их поднимает. Учуяли свежую кровь и душу Хм-хм... более того, есть такой объект среди стандартных, во вкладке Battlefield... даже два - Zombie Corpse и одна из Pile of Sculls. Они ровненько это и делают. (скрипты там назначены на hb) |
![]() ![]()
Сообщение
#2056
|
|
Level 5 ![]() ![]() Класс: Друид Характер: Neutral Good Раса: Человек ![]() |
КТО ЗНАЕТ ГДЕ МОЖНО НАЙТИ ЛЕКСИКОН РУССКОЙ ВЕРСИИ?
|
![]()
Сообщение
#2057
|
|
Level 19 ![]() Класс: Воин Характер: Lawful Good Раса: Человек NWN: Скриптинг [Sn] ![]() |
QUOTE(Артём @ Mar 13 2006, 22:07) [snapback]72578[/snapback] КТО ЗНАЕТ ГДЕ МОЖНО НАЙТИ ЛЕКСИКОН РУССКОЙ ВЕРСИИ? НИ КТО НЕ ЗНАЕТ - НЕТ ЕГО!!! (IMG:style_emoticons/kolobok_light/biggrin.gif) Есть на сайте перевод некоторых статей, а так - промт или сократ в руки и вперед. Я так лексикон и читаю, вроде успешно. |
![]() ![]()
Сообщение
#2058
|
|
Level 5 ![]() ![]() Класс: Друид Характер: Neutral Good Раса: Человек ![]() |
То-что на сайте я давно скачал.Попробую абайтися переводчиком!
|
![]()
Сообщение
#2059
|
|
Level 9 ![]() Класс: Друид Характер: True Neutral Раса: Эльф NWN: Скриптинг [PW] Амен ![]() |
Артём, подобные вещи редко переводят, если только не нужно их пускать в большой тираж и знакомить множество людей с их тематикой. Но если человека интересует данный предмет, он сделает все, чтобы его изучить. Мне хватает английской версии, да и все познается экспериментальным путем.
|
![]()
Сообщение
#2060
|
|
Level 9 ![]() Класс: Обыватель Характер: Lawful Good Раса: Человек NWN: Модмейкер Рыцарская Сага ![]() |
QUOTE(mamuc @ Feb 27 2006, 09:33) [snapback]71143[/snapback] Вот кусок скрипта официантки. Нужно, чтобы она шла так, как нужно, и при этом не зависала и не прерывалась. Попробовал делать блокировку/разблокировку очереди - официантка подбегает и ничего не делает. (Скрипт висит на OnConversation) Нужно отделить мух от котлет. Не все команды станут в очередь, а тем более проверки идут мгновенно. Попробуй повесить подобный скрипт на ХБ официантки. Написан по твой идеи, для 4 персов. Блокировка на весь маршрут, но в конце можно поговорить с персом. NSS void GoToObject(object oTarget, object oPC)
{ AssignCommand(oPC, ActionMoveToObject(oTarget, FALSE)); AssignCommand(oPC, ActionSpeakString("Получите ваш заказ.")); AssignCommand(oPC, ActionPlayAnimation(ANIMATION_FIREFORGET_READ, 1.0, 3.0)); AssignCommand(oPC, ActionPlayAnimation(ANIMATION_LOOPING_GET_MID, 1.0, 2.0)); } void WalkToObject(object oTarget, object oPC, vector vFace) { AssignCommand(oTarget, ClearAllActions()); AssignCommand(oTarget, SetFacingPoint(vFace)); DelayCommand(3.0, AssignCommand(oTarget, ActionSpeakString("Спасибо!"))); DelayCommand(5.0, AssignCommand(oTarget, ActionPlayAnimation(ANIMATION_FIREFORGET_DRINK, 1.0, 5.0))); } void main() { object oPC = OBJECT_SELF; object oTarget = GetNearestObjectByTag("POSIT_1"); object oTarget2 = GetNearestObjectByTag("POSIT_2"); object oTarget3 = GetNearestObjectByTag("HOZYAIN"); vector vFace = GetPosition(oPC); //================ МАРШРУТ ==================================================== if(GetLocalInt(OBJECT_SELF, "MARSH") != 1) { SetLocalInt(oPC,"MARSH",1); AssignCommand(OBJECT_SELF, ClearAllActions()); DelayCommand(0.3, SetCommandable(FALSE, oPC)); // заблокировать очередь GoToObject(oTarget, oPC); GoToObject(oTarget2, oPC); AssignCommand(oPC, ActionMoveToObject(oTarget3, FALSE)); AssignCommand(oPC, ActionSpeakString("Получите выручку. Ох, и жаркий денек!")); AssignCommand(oPC, ActionPlayAnimation(ANIMATION_LOOPING_GET_MID, 1.0, 3.0)); DelayCommand(30.1,SetCommandable(TRUE,oPC)); // разблокировать очередь DelayCommand(30.5, AssignCommand(oPC, SpeakString("Ох, жара!"))); DelayCommand(40.0,SetLocalInt(OBJECT_SELF,"MARSH",FALSE)); // длительность маршрута } //---------------- проверки каждый раунд --------------------------------------- if (GetDistanceBetween(oTarget, oPC) < 3.0) WalkToObject(oTarget, oPC, vFace); if (GetDistanceBetween(oTarget2, oPC) < 3.0) WalkToObject(oTarget2, oPC, vFace); if (GetDistanceBetween(oTarget3, oPC) < 4.0) { switch (Random(3)+1) { case 1: AssignCommand(oPC, SpeakString("Ох, и жаркий денек!")); AssignCommand(oTarget3, SpeakString("Давай работай!")); AssignCommand(oTarget3, SetFacingPoint(vFace)); break; case 2: AssignCommand(oPC, SpeakString("Давай пива и рыбу, есть еще заказ.")); AssignCommand(oTarget3, SpeakString("Бойко торгуем!")); AssignCommand(oTarget3, SetFacingPoint(vFace)); break; case 3: AssignCommand(oPC, SpeakString("Ноги уже не держат...")); AssignCommand(oTarget3, SpeakString("Вперед и с песней!")); AssignCommand(oTarget3, SetFacingPoint(vFace)); break; } } } Сообщение отредактировал gennady - Mar 15 2006, 06:05 |
![]() ![]()
Сообщение
#2061
|
|
Level 5 ![]() ![]() Класс: Друид Характер: Neutral Good Раса: Человек ![]() |
У меня вопрос.Как в он спаун одного непися, сделать анимацыю другого непися?
К примеру:После того как непись поздаровался (Аним преветствия) другой непись поклонился (Аним поклон)? |
![]()
Сообщение
#2062
|
|
Level 19 ![]() Класс: Воин Характер: Lawful Good Раса: Человек NWN: Скриптинг [Sn] ![]() |
Артём, тебе ведь уже писали.
NSS object oNPC = OBJECT_SELF;//это тот на ком стоит скрипт object oNPC1 = GetOBjectByTag("ТАГ");//это тот другой //непись, нак отором стоит скрипт, что-то делает. //2.0 - время, через которое нужно выполнить действие. Ставь скока там надо. //AssignCommand - дать команду oNPC. //ActionPlayAnimation - команда проиграть анимацию DelayCommand(2.0, AssignCommand(oNPC, ActionPlayAnimation(ТУТ_НУЖНАЯ _АНИМАЦИЯ))); //другая непись что-то делает //2.0 - время, через которое нужно выполнить действие. Ставь скока там надо. //AssignCommand - дать команду oNPC. //ActionPlayAnimation - команда проиграть анимацию DelayCommand(3.0, AssignCommand(oNPC1, ActionPlayAnimation(ТУТ_НУЖНАЯ _АНИМАЦИЯ))); Читай на форуме тему по анимации! ТУТ Сообщение отредактировал -fenix- - Mar 19 2006, 12:32 |
![]() ![]()
Сообщение
#2063
|
|
Level 5 ![]() ![]() Класс: Друид Характер: Neutral Good Раса: Человек ![]() |
Феникс я написал так как ты сказал.Но всеровно анимацыя второго неиграит.
NSS void main()
{ object oNPC = OBJECT_SELF; object oNPC1 = GetOBjectByTag("GAD_3"); DelayCommand(2.0, AssignCommand(oNPC, ActionPlayAnimation(ANIMATION_LOOPING_LISTEN,1.0,3.0f)));; DelayCommand(0.5, SpeakString("?? ??… ??????? ????????, ??? ???? !")); DelayCommand(PlaySound("vs_favhen5m_say")(IMG:style_emoticons/kolobok_light/wink3.gif) ; DelayCommand(3.0, AssignCommand(oNPC1, ActionPlayAnimation(ANIMATION_LOOPING_LISTEN,1.0,3.0f))); object oNPC=GetObjectByTag("GAD_3"); DelayCommand(3.5, AssignCommand(oNPC, SpeakString("? ??????? ??? ?? ?????? ????????!"))); DelayCommand(2.0, AssignCommand(oNPC, ActionPlayAnimation(ANIMATION_LOOPING_LISTEN,1.0,3.0f))); DelayCommand(6.5, SpeakString("?? ??? ?????? ????? !")); DelayCommand(PlaySound("vs_favhen5m_yes")(IMG:style_emoticons/kolobok_light/wink3.gif) ; } |
![]()
Сообщение
#2064
|
|
Level 6 ![]() Класс: Некромант Характер: Chaotic Evil Раса: Нежить NWN: Скриптинг [PW] ![]() |
QUOTE DelayCommand(PlaySound("vs_favhen5m_say"); - неправельно QUOTE object oNPC = OBJECT_SELF; ... object oNPC=GetObjectByTag("GAD_3"); - неправельно QUOTE object oNPC1 = GetOBjectByTag("GAD_3"); - неправельно научись смотреть на ошибки компилятора.. 1. DelayCommand, 1й аргумент всегда время через которое действие будет воспроизводится! 2. нельзя так делать..если хочеш переменой задать другое значение, то тип нельзя указывать( object oPC = GetEnteringObject(); ... oPC=GetExitingObject(); к примеру) 3. компилятор различает регистр..( GETENTERINGOBJECT() - неправельно, GetEnteringObject() - правельно.... )... GetObjectByTag надо... З.Ы. QUOTE object oNPC = OBJECT_SELF; необязательноQUOTE object oNPC = OBJECT_SELF; object oNPC1 = GetOBjectByTag("GAD_3"); .. object oNPC=GetObjectByTag("GAD_3"); брет... Сообщение отредактировал [MoF]Darth_Nick - Mar 19 2006, 23:10 |
![]()
Сообщение
#2065
|
|
Level 5 ![]() Класс: Обыватель Характер: Lawful Neutral Раса: Человек NWN: Модмейкер Проклятие Левора Порядок Времени ![]() |
QUOTE(Артём @ Mar 19 2006, 22:32) [snapback]73339[/snapback] Феникс я написал так как ты сказал.Но всеровно анимацыя второго неиграит. а ЭТО скомпилировалось? (IMG:style_emoticons/kolobok_light/shok.gif) |
![]() ![]() |
Текстовая версия | Сейчас: 30th April 2025 - 08:28 |