![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() ![]() |
![]() |
![]()
Сообщение
#2676
|
|
Level 1 Класс: Страж Тьмы Характер: Chaotic Evil Раса: Гном ![]() |
Подскажите плиз функцию которая определяет левел NPSа, а лутше оценивает его сложность
|
![]()
Сообщение
#2677
|
|
Миловидный Бегрюссунг ![]() Класс: Воин Характер: Chaotic Good Раса: Человек NWN: Модмейкер Проклятие Левора Порядок Времени ![]() |
NSS // Get the number of hitdice for oCreature.
// * Return value if oCreature is not a valid creature: 0 int GetHitDice(object oCreature) |
![]()
Сообщение
#2678
|
|
Level 5 ![]() Класс: Обыватель Характер: Lawful Neutral Раса: Человек NWN: Модмейкер Проклятие Левора Порядок Времени ![]() |
QUOTE(Astoret @ Jul 7 2006, 17:06) [snapback]87338[/snapback] а лутше оценивает его сложность GetChallengeRating |
![]()
Сообщение
#2679
|
|
Level 5 ![]() ![]() Класс: Убийца Характер: Chaotic Neutral Раса: Полуэльф ![]() |
Люди!!Обьяснитe мне про flag и event я вроде врубаюсь но не совсем.Может гdе-то есть про это тема?
|
![]()
Сообщение
#2680
|
|
Level 4 ![]() ![]() Класс: Маг Характер: Chaotic Neutral Раса: Танар'ри ![]() |
Dik Morris спасибо за помощь. Панель выскакивает “на ура” (к сожалению, часть скрипта так и осталась для меня “туманной загадкой”, но видимо не все сразу…).
-fenix- благодарю за решение первого вопроса, с присвоением другой функции оРС – никаких чудес больше не наблюдается. И… Вы абсолютно правы неписи по саркофагам не лазят… Бездумное копирование поставило меня в глупейшую ситуацию. “Если это не РС” – исправлено, осталась только обычная поверка переменной. gennady , проверка на “фиксовый” предмет к сожалению проблемы не решает. Возможно я плохо объяснила ситуацию – юзанье любым предметом в инвентаре саркофага вызывает клонов. Может я зря заостряю на этом внимание (опыта в модулестроении у меня нет), но опыт “настолок” говорит, что при малейшем проколе ДМ(а), “Великий и Ужасный Манч бросает все дела, берет большую ложку и хавает до тех пор пока халява не закончится”… А в этом случае она никогда не закончится. Наверное можно сделать проверку и на любой предмет, но для меня это к сожалению слишком сложное решение. В любом случае, спасибо за помощь. -fenix- и gennady спасибо за подсказку функции для “надгробной эпитафии” персонажей различных рас. Вроде бы получилось. (Аналог скрипта взят из "Левора" + подсказка с функцией GetRacialType(object)) NSS void main() { object oPlayer = GetLastPlayerDied(); string sDeathMessage = "Текст"; { if(GetRacialType(oPlayer) == RACIAL_TYPE_ELF) sDeathMessage = " Текст _001 "; DelayCommand(1.0, ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_DEATH), oPlayer)); DelayCommand(4.0,PopUpDeathGUIPanel(oPlayer, FALSE, TRUE, 0, sDeathMessage)); } { if(GetRacialType(oPlayer) == RACIAL_TYPE_HALFORC) sDeathMessage = " Текст _002"; DelayCommand(1.0, ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_DEATH), oPlayer)); DelayCommand(4.0,PopUpDeathGUIPanel(oPlayer, FALSE, TRUE, 0, sDeathMessage)); } { DelayCommand(1.0, ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_DEATH), oPlayer)); DelayCommand(4.0, PopUpDeathGUIPanel(oPlayer, FALSE, TRUE, 0, sDeathMessage)); } } Компилится и работает, хотелось уточнить все ли верно с точки зрения “правописания” скриптов. Сообщение отредактировал Artlira - Jul 8 2006, 07:55 |
![]()
Сообщение
#2681
|
|
Вечно меняющийся ![]() Класс: Монах Характер: True Neutral Раса: Человек NWN: Скриптинг [Sn] ![]() |
Noah, это подробно описывается в Лексиконе.
Artlira, gennady исправил первый скрипт. Теперь все должно работать. |
![]()
Сообщение
#2682
|
|
Миловидный Бегрюссунг ![]() Класс: Воин Характер: Chaotic Good Раса: Человек NWN: Модмейкер Проклятие Левора Порядок Времени ![]() |
QUOTE(Artlira @ Jul 8 2006, 10:08) [snapback]87372[/snapback] Компилится и работает, хотелось уточнить все ли верно с точки зрения “правописания” скриптов. Я бы настоятельно не рекомендовал использовать одинаковое время таймингов команды DelayCommand() Будут проблемы. Меняй хотя бы на сотую долю секунды. |
![]()
Сообщение
#2683
|
|
Level 19 ![]() Класс: Воин Характер: Lawful Good Раса: Человек NWN: Скриптинг [Sn] ![]() |
Artlira, скрипт компилится и работает, но работает не совсем правильно и просто так получилось, что он вообще работает. (IMG:style_emoticons/kolobok_light/smile.gif)
Ты не так блоки сформировала. Скобки нужны для формирования блоков кода. Первая пара скобок относит все написанное к функции void main(), которая запускает весь скрипт на выполнение. Блоки же в условии группируют несколько функций под данным условием. Тобишь, если условие верно, то выполнить все функции включенные в блок условия. Поэтому блок начинается и скобка открывается, после условия, а не перед ним. Так же превыкай правильно оформлять скрипт, а именно, пользоваться пробелами и пропуском строки. Так будет куда удобнее разбираться. Данный скрипт должен выглядеть так: NSS void main() { object oPlayer = GetLastPlayerDied(); string sDeathMessage = "Текст"; if(GetRacialType(oPlayer) == RACIAL_TYPE_ELF) { sDeathMessage = " Текст _001 "; DelayCommand(1.0, ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_DEATH), oPlayer)); DelayCommand(4.0,PopUpDeathGUIPanel(oPlayer, FALSE, TRUE, 0, sDeathMessage)); } if(GetRacialType(oPlayer) == RACIAL_TYPE_HALFORC) { sDeathMessage = " Текст _002"; DelayCommand(1.0, ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_DEATH), oPlayer)); DelayCommand(4.0,PopUpDeathGUIPanel(oPlayer, FALSE, TRUE, 0, sDeathMessage)); } else { DelayCommand(1.0, ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_DEATH), oPlayer)); DelayCommand(4.0, PopUpDeathGUIPanel(oPlayer, FALSE, TRUE, 0, sDeathMessage)); } } Почемуже твой скрипт работает? Дело в том, что можно формировать блоки просто для себя (анонимные блоки), для удобства, чтобы проще и нагляднее можно было разобраться в скрипте. Такие блоки ни к чему не относятся, если только не сделали ошибку и не поставили их перед, скажем, условием, без собственного блока, они служат просто как выделители, компилятор на них не ругается. В твоем случае так и получилось. Так как блок открывался ДО условия, то все, включая условие и кончая функцией открытия панельки, было воспринято, как анонимный блок. Дальше включилась в работу особенность условия. Дело в том, что один оператор относится к условию без формирования блока, нужно чтобы он просто шел после. Поэтому твой текст, согласно условию, менялся в зависимости от расы игрока. Все остальные функции выполняются столько раз, сколько написанны, так как условия на их выполнения нет. А не заметно это, потому что время их выполнения стоит одинаковым. QUOTE(Aiwan @ Jul 8 2006, 10:01) [snapback]87375[/snapback] Меняй хотя бы на сотую долю секунды. Вот если поменяшь время, то сразу все увидешь. Ток разницу не в долю секунды поставь, а в пару секунд Сообщение отредактировал -fenix- - Jul 8 2006, 12:16 |
![]() ![]()
Сообщение
#2684
|
|
Level 9 ![]() Класс: Друид Характер: True Neutral Раса: Эльф NWN: Скриптинг [PW] Амен ![]() |
Гм, скрипты без оптимизации, верный путь к усложнению. Тот же скрипт, только гораздо короче:
NSS void main() { object oPlayer = GetLastPlayerDied(); string sDeathMessage = "Текст"; if (GetRacialType(oPlayer) == RACIAL_TYPE_ELF) sDeathMessage = "Текст_001"; else if (GetRacialType(oPlayer) == RACIAL_TYPE_HALFORC) sDeathMessage = "Текст_002"; DelayCommand(1.0, ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_DEATH), oPlayer)); DelayCommand(4.0, PopUpDeathGUIPanel(oPlayer, FALSE, TRUE, 0, sDeathMessage)); } У нас же меняется только строковая переменная, а значит, все остальное остается постоянным. Так зачем же этот код внедрять в условия? Да, значение "FALSE" в функции "PopUpDeathGUIPanel" не позволит воскреснуть игроку. Так и нужно? По поводу саркофага, во-первых, почему Вампир появляется на локации сундука? Лучше ему назначить свое место появления, рассчитав точку появления от сундука, а во-вторых, скрипт, который представлен выше, работает как часы. Один раз взял вещь, больше вампир не появится, так как этому мешает переменная, которая переключается в момент взятия вещи. Немного измененный скрипт: NSS void main() { object oItem = GetInventoryDisturbItem(); effect eVis = EffectVisualEffect(VFX_FNF_SUMMON_UNDEAD); vector vSpawn = GetPositionFromLocation(GetLocation(OBJECT_SELF)); float fFacing = GetFacing(OBJECT_SELF); vSpawn.x += cos(fFacing) * -4.0; vSpawn.y += sin(fFacing) * -4.0; location lVampire = Location(GetArea(OBJECT_SELF), vSpawn, fFacing); if (GetLocalInt(OBJECT_SELF, "Nosferatu") == 1) return; if (GetTag(oItem) == "item_tag") { object oWamp = CreateObject(OBJECT_TYPE_CREATURE, "vampire_nosferatu", lVampire); ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eVis, GetLocation(oWamp)); SetLocalInt(OBJECT_SELF, "Nosferatu", 1); } } Значение "-4" устанавливает расстояние от сундука. По-умолчанию, когда берешь требуемую вещь, вампир появляется за спиной у берущего. Правда, если берущий не стоит ровно лицом к сундуку, то вампир появится не за спиной, а лицом по отношению к сундуку. Это можно легко исправить, переориентировав точку отсчета, взяв за основу локацию берущего. Сообщение отредактировал Zirrex - Jul 8 2006, 17:48 |
![]()
Сообщение
#2685
|
|
Level 4 ![]() ![]() Класс: Маг Характер: Chaotic Neutral Раса: Танар'ри ![]() |
1. gennady! Примите мои искренние извинения. Ваш второй скрипт действительно работает как часы. Во всем виновата моя невнимательность. Разобраться почему не работал скрипт не смогла, неграмотно списала на “фиксовый” предмет. С моими навыками в скриптах, мне гораздо легче было присвоить значение другой функции оРС. Огромное спасибо за помощь, и поскольку вам извиняться не за что, то саркофаг теперь вещает: “Artlira! Внимательно читай отредактированные посты!”.
Dik Morris и Zirrex благодарю за указание на отредактированный пост gennady. Буду внимательнее. 2. Aiwan и -fenix- поменяла время на 1,2,3 и.т д. сек. в каждом случае, вошла в модуль: “умер эльф”, “умер полуорк”, “умер человек”…. Ой-ой, а так радовалась, что чего-то сработало “из своего”. -fenix- огромное спасибо за пояснения. Прочитала, скопировала - буду учиться. 3.Zirrex ваш укороченный вариант очень пригодился, наверно так правильнее – если условия одинаковые, зачем их писать 3 раза. Да, значение "FALSE" в функции "PopUpDeathGUIPanel" не позволит воскреснуть игроку. Так и нужно? Да, меня интересовала именно запись о смерти. По поводу саркофага, во-первых, почему Вампир появляется на локации сундука? Вот это мне даже в голову не приходило, “оно” меня так утомило клонированием, что мне уже все равно было где эта нежить появится, лишь бы один раз! Но теперь когда, благодаря скрипту gennady, оно определилось с появлением пусть теперь и является где положено! Спасибо за помощь, попробую сама хотя бы настроить точку появления. Еще раз спасибо всем, кто помог с решением моих вопросов. Увы, боюсь не последних… |
![]() ![]()
Сообщение
#2686
|
|
Level 5 ![]() ![]() Класс: Друид Характер: Neutral Good Раса: Человек ![]() |
Я тут набрел на прикольный модуль, (так мне кажется) "Eye of the Beholder", но скачать боюсь.
Кто-нибудь знает, идет этот модуль и его дополнение на пиратский диск? |
![]()
Сообщение
#2687
|
|
Вечно меняющийся ![]() Класс: Монах Характер: True Neutral Раса: Человек NWN: Скриптинг [Sn] ![]() |
Нет, я лично не видел.
|
![]()
Сообщение
#2688
|
|
Level 1 Класс: Страж Тьмы Характер: Chaotic Evil Раса: Гном ![]() |
Помогите плиз написать простинький скрипт на респаун NPS пи их смерти
и подскажите плиз почему не работает скрипт уборщика все зделал как написано , а в игре пишет : Ошибка скрипта, слишком много инструкций (IMG:style_emoticons/kolobok_light/shout.gif) |
![]()
Сообщение
#2689
|
|
Вечно меняющийся ![]() Класс: Монах Характер: True Neutral Раса: Человек NWN: Скриптинг [Sn] ![]() |
|
![]()
Сообщение
#2690
|
|
Level 5 ![]() ![]() Класс: Друид Характер: Lawful Neutral Раса: Человек ![]() |
QUOTE подскажите плиз почему не работает скрипт уборщика все зделал как написано , а в игре пишет : Ошибка скрипта, слишком много инструкций В скрипте лишняя строка ClearAllActions(); Вцелом скрипт выгледит так CODE void main()
{ object oItem = GetFirstObjectInArea(GetArea(OBJECT_SELF)); while (GetIsObjectValid(oItem) == TRUE) { if (GetObjectType(oItem) == OBJECT_TYPE_ITEM) { ActionPickUpItem(oItem); } oItem = GetNextObjectInArea(GetArea(OBJECT_SELF)); } } |
![]()
Сообщение
#2691
|
|
Вечно меняющийся ![]() Класс: Монах Характер: True Neutral Раса: Человек NWN: Скриптинг [Sn] ![]() |
Milfes, желательно включить в скрипт проверку на диалог + сначала подойти к предмету, а потом уже подбирать, и чистить акции, NPC ведь может быть занят.
NSS void main()
{ object oItem = GetFirstObjectInArea(GetArea(OBJECT_SELF)); if (IsInConversation(OBJECT_SELF)) return; while (GetIsObjectValid(oItem) == TRUE) { if (GetObjectType(oItem) == OBJECT_TYPE_ITEM) { ClearAllActions(); ActionMoveToObject(oItem); ActionPickUpItem(oItem); } oItem = GetNextObjectInArea(GetArea(OBJECT_SELF)); } } |
![]()
Сообщение
#2692
|
|
Level 5 ![]() ![]() Класс: Друид Характер: Lawful Neutral Раса: Человек ![]() |
QUOTE желательно включить в скрипт проверку на диалог + сначала подойти к предмету, а потом уже подбирать, и чистить акции, NPC ведь может быть занят Dik Morris, с этим я согласен, но есть не большая проблемка! Так как это действие происходит раз в 6 секунд, может возникнуть проблема если NPS находиться в движение! Он просто пройдёт мимо. Есть идеи, как это исправаить? |
![]()
Сообщение
#2693
|
|
Mystery ![]() Класс: Маг Характер: Lawful Evil Раса: Тварь NWN: Контент Амен ![]() |
QUOTE(Артём @ Jul 10 2006, 19:03) [snapback]87503[/snapback] Я тут набрел на прикольный модуль, (так мне кажется) "Eye of the Beholder", но скачать боюсь. Это - полный аналог оригинального Eye of the Beholder. QUOTE(Артём @ Jul 10 2006, 19:03) [snapback]87503[/snapback] Кто-нибудь знает, идет этот модуль и его дополнение на пиратский диск? Нет. |
![]()
Сообщение
#2694
|
|
Level 5 ![]() ![]() Класс: Убийца Характер: Chaotic Neutral Раса: Полуэльф ![]() |
У меня лексикон перевод leх'а,но там нет про флаги.Качал его весной, может разбирали где про это?Киньте ссылку,плс!
|
![]()
Сообщение
#2695
|
|
Вечно меняющийся ![]() Класс: Монах Характер: True Neutral Раса: Человек NWN: Скриптинг [Sn] ![]() |
Milfes, например с помощью локальных переменных, еще М/Б GetCurrentAction подойдет.
Noah, про какие флаги ? М/б NW_FLAG_* ? Если да: QUOTE Used to cause events to fire various numeric signals to OnUserDefined and set other attributes of a creature during the OnSpawn script using SetSpawnInCondition. The OnUserDefined event can thus be used to customize the behavior of an object without actually modifying the default behavior. PS: Перевод Lex'a ? Первый раз слышу. Сообщение отредактировал Dik Morris - Jul 11 2006, 18:06 |
![]()
Сообщение
#2696
|
|
Level 5 ![]() Класс: Обыватель Характер: Lawful Neutral Раса: Человек NWN: Модмейкер Проклятие Левора Порядок Времени ![]() |
QUOTE(Dik Morris @ Jul 11 2006, 18:59) [snapback]87598[/snapback] PS: Перевод Lex'a ? Первый раз слышу. я тоже. о каких флагах речь? если те, что в спавне ставятся типа *_FLAG_*, то они все там в коментах и описаны. + почитай в топике..Готовые скрипты или Скрипты для хенчей, там есть Айвановские варианты спавна с русскими комментариями. |
![]()
Сообщение
#2697
|
|
Level 5 ![]() ![]() Класс: Убийца Характер: Chaotic Neutral Раса: Полуэльф ![]() |
Да?А я где-то читал,что он твой...Спасиб,за подсказку(о флагах)
|
![]()
Сообщение
#2698
|
|
Level 2 ![]() Класс: Волшебник Характер: Neutral Good Раса: Эльф ![]() |
я ДИКО извеняюсь, но у меня вопрос как можно чтобы после разговора существо ушло к двери и изчезло?
|
![]()
Сообщение
#2699
|
|
Level 4 ![]() ![]() Класс: Маг Характер: Chaotic Neutral Раса: Танар'ри ![]() |
Симирель, здесь на форуме, в теме "Скрипты для новичков" есть скрипт с уходом Nps на WP(где он и дестроится), сам WP_EXSIT можно где угодно поставить. У меня, с помощью этого скрипта одно чудо даже в озере утопилось.
|
![]()
Сообщение
#2700
|
|
Level 5 ![]() ![]() Класс: Друид Характер: Lawful Neutral Раса: Человек ![]() |
Подскажите, как сделать что бы фонарь включался в 20 и выключался в 8 часов?
И ещё кто-нибудь знает скрипт, что бы если ты берёш что-то из контейнера, а рядом стоит NPC, то он к тебе подбегал и что-то говорил? |
![]() ![]() |
Текстовая версия | Сейчас: 28th April 2025 - 13:45 |