![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() ![]() |
![]() |
![]()
Сообщение
#2036
|
|
Level 1 Класс: Варвар Характер: Lawful Good Раса: Полуэльф ![]() |
Про средние настройки сложности понятно. Мне просто хотелось бы чтобы на максимальной сложности они не задевали друг-друга.
QUOTE Объясни ситуацию? Я не знаю важно ли это, но я забыл сказать что монстры эти вылазят когда наступаешь на триггер, тоесть я их через редактор встреч сделал. Ну а подробнее если: вот я вхожу в него они вылазят, начинают меня мочить, как и другие монстры которые рядом в этот момент были, потом я юзую камень возврата, потом телепортируюсь обратно к монстрам, а они там во всю гасятся магией(такой как стена огня, инферно и все что с огнем короче связано у них есть). Вот. QUOTE Dimanische, можно пойти путем, как описал dumbo, а можно подредактировать все площадные заклинания, в которых указать, что если противник враг, то атаковать его, а если нет, то игнорировать. - я в этом деле новичок и че-то не врубаюсь как так сделать. Может у меня версия ToolSet Старая и нет такого? Ваще спасибо что не пропустили мимо мой вопрос. И еще можно вопросик? Какой скрипт делает завершение игры после выполнения последного задания. Выложите пожалуйста если не лень. Сообщение отредактировал Dimanische - Mar 7 2006, 10:01 |
![]()
Сообщение
#2037
|
|
Миловидный Бегрюссунг ![]() Класс: Воин Характер: Chaotic Good Раса: Человек NWN: Модмейкер Проклятие Левора Порядок Времени ![]() |
NSS void main() { string sMovie = "Твой финальный ролик"; EndGame(sMovie); } QUOTE(Dimanische @ Сегодня, 11:51) [snapback]71930[/snapback] И еще можно вопросик? Какой скрипт делает завершение игры после выполнения последного задания. Выложите пожалуйста если не лень. |
![]()
Сообщение
#2038
|
|
Level 17 ![]() Класс: Волшебник Характер: Neutral Good Раса: Человек NWN: Скриптинг [PW] Axistown SR 1.9 NWNX ![]() |
QUOTE(Aiwan @ Feb 27 2006, 22:09) [snapback]71209[/snapback] Везде где юзаешь Делей, попробуй сделать так: 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("Куда вы ушли??"); ActionPlayAnimation(ANIMATION_LOOPING_GET_LOW, 1.0, 1.0); 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)); } Тот же результат... Ничего не изменилось. Сообщение отредактировал virusman - Mar 8 2006, 00:39 |
![]()
Сообщение
#2039
|
|
Level 5 ![]() Класс: Обыватель Характер: Lawful Neutral Раса: Человек NWN: Модмейкер Проклятие Левора Порядок Времени ![]() |
а что не так?
|
![]()
Сообщение
#2040
|
|
Level 17 ![]() Класс: Волшебник Характер: Neutral Good Раса: Человек NWN: Скриптинг [PW] Axistown SR 1.9 NWNX ![]() |
QUOTE(Lex @ Mar 8 2006, 01:35) [snapback]72016[/snapback] а что не так? http://www.wrg.ru/forums/index.php?s=&show...indpost&p=71193 Если снять блокировки/разблокировки - всё работает, но тогда официантку легко сбить. |
![]()
Сообщение
#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 |
![]() ![]() |
Текстовая версия | Сейчас: 30th April 2025 - 05:15 |