![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() ![]() |
![]() |
![]() ![]()
Сообщение
#3326
|
|
Level 5 ![]() ![]() Класс: Убийца Характер: Lawful Evil Раса: Человек ![]() |
Большое спасибо благодаря вам всё заработало (IMG:style_emoticons/kolobok_light/yahoo.gif) (IMG:style_emoticons/kolobok_light/yahoo.gif) (IMG:style_emoticons/kolobok_light/yahoo.gif)
|
![]()
Сообщение
#3327
|
|
Level 2 ![]() Класс: Ученик Дракона Характер: Chaotic Neutral Раса: Человек ![]() |
Всем доброго дня!
Не нашел нигде одного очень важного для меня скрипта. Тыкните меня пожалуйста носом если где-то на форуме уже обсуждался данный вопрос. Я хочу сделать небольшой но продуманный мирок по подобию первой Готики. И я хочу сделать чтобы каждый непись имел свой распорядок дня. Для этого мне нужен универсальный шаблон-заготовка. Например: 9.00 - непись встает(не обязательно с анимацией, достаточно чтобы просто появился возле кровати), потом с вероятностью 50\50 или умывается или ест за столом 9.30 - одевается(меняет одёжку в слоте брони) и идет работать в поле\ идет к лавочке поговорить с соседом и т.д. Для меня главное - это привязка к времени суток и различные действия с долей вероятности, чтобы он не повторял как робот одну и ту же последовательность действий каждый день. Думаю и другим модостроителям это пригодится, прошу профи тулсета помочь мне. |
![]()
Сообщение
#3328
|
|
Level 5 ![]() Класс: Обыватель Характер: Lawful Neutral Раса: Человек NWN: Модмейкер Проклятие Левора Порядок Времени ![]() |
Анимация НПС, часть 1
Анимация НПС, часть 2 + файл с демонстрационным модулем Более подробно эту задачу никто не освещал. но там описана идеальная ситуация (игрок находится на той же локации, что и НПС, НПС не перемещается между локациями). Когда дело доходит до реализации в модуле, то все более сложно и грустно. В итоге система немного более сложная чем описана в статье, но эти изменения можно и самому проделать, в принципе (проверки наличия игрока, телепорты кое-где и тд) |
![]()
Сообщение
#3329
|
|
Level 2 ![]() Класс: Ученик Дракона Характер: Chaotic Neutral Раса: Человек ![]() |
Lex, спасибо! В той статье есть все что мне может понадобится. Пока буду изучать и пробовать. Но еще у меня такой вопрос: можно так сделать чтобы нпс выполняли свой распорядок вне зависимости есть ли игрок в локации? А то заходит главный герой посреди ночи в дом (например чтобы ограбить его) а хозяин вдруг спохватывается из-за стола и бежит в постель быстренько спать, не замечая грабителя, так как должен был лечь 4 часа назад (IMG:style_emoticons/kolobok_light/declare.gif)
|
![]()
Сообщение
#3330
|
|
Level 5 ![]() Класс: Обыватель Характер: Lawful Neutral Раса: Человек NWN: Модмейкер Проклятие Левора Порядок Времени ![]() |
я именно об этих усложнениях говорил, когда сказал что условия, рассматриваемые в статье идеальные.
Конечно скрипты выполняются пока игрок не на локации. Но гораздо медленнее. И вообще говоря этим баловаться не следует - будут заметные тормоза. Чтобы реализовать описанную тобой ситуацию, надо имхо скриптовать отдельно вход игрока в дом (те на вход игрока НПСу в локе задаются нужные параметры, которые определяются временем и чем там тебе еще надо + производятся нужные действия с НПС - он куда надо телепортируется, запускается анимация и тд). Если таких мест будет много.. ну сам понимаешь. Другого приличного варианта, чтобы не тормозило, я не нашел. Да и этот не сказать что простой - требует усидчивости и внимания. в итоге для себя я сделал такой вывод: реальный уход спать НПС делать только тем, кому это реально нужно (те на это завязан квест). Для антуража таких сложностей не делать. Для антуража у меня прохожие уходят спать просто войдя в некий дом и исчезнув (при этом игрок туда войти не может). А не прохожие, скажем торговцы, через скрипт выставляют игрока за дверь и запирают дом. Сами понятное дело стоят столбом в лавке, никакой анимации. Каждый сам решает какой уровень детализации ему нужен и что он готов за это заплатить. Но готовых решений круче тех, что я в той статье описал, тебе врядли кто даст. Просто потому что их скорее всего никто и не делал. Я видел пару систем на волте.. но в них реально многовато дыр, требуется серьезная доработка, а по функционалу и удобству они ничем не лучше моего варианта. |
![]()
Сообщение
#3331
|
|
Level 2 ![]() Класс: Ученик Дракона Характер: Chaotic Neutral Раса: Человек ![]() |
Спасибо за столь доходчивый ответ (IMG:style_emoticons/kolobok_light/good.gif) Теперь все стало понятно. Буду мудровать теперь как все закрутить наиболее реалистично и чтобы не сидеть часами за доработкой деталей которые игрок может даже не заметить. Наверно нужно делать только самые основные анимации, как вы советовали, необходимые по сюжету и которые игрок просто обязан заметить(IMG:style_emoticons/kolobok_light/smile.gif) . Спасибо за ваши советы!
|
![]()
Сообщение
#3332
|
|
Level 9 ![]() Класс: Обыватель Характер: Lawful Good Раса: Человек NWN: Модмейкер Рыцарская Сага ![]() |
Почитай еще вот здесь про скрипты ХБ НПС: http://remmgen.narod.ru/tscript3.html#SC_HB
Сообщение отредактировал gennady - Sep 4 2010, 16:22 |
![]()
Сообщение
#3333
|
|
Level 2 ![]() Класс: Ученик Дракона Характер: Chaotic Neutral Раса: Человек ![]() |
Очень полезное инфо, благодарю. Я сейчас кстати играю в вашу Рыцарскую Сагу. Интересно и продумано, а наиболее понравилось что в близком русской душе стиле сделано (IMG:style_emoticons/kolobok_light/good.gif) Извиняюсь за спойлер (IMG:style_emoticons/kolobok_light/rolleyes.gif)
|
![]()
Сообщение
#3334
|
|
Level 1 Класс: Теневой Танцор Характер: Lawful Good Раса: Человек ![]() |
Подскажите плиз как сделать точку респа нпц и героя. В скрипте я не очень разбираюсь, пробовал копировать респ из другого модуля - не получилось. Буду очень благодарен. (Имеется ввиду чтобы ресался после смерти и бежал по вейпоинтам точка1,точка2 и т.д., а не просто одноразовое появление появление)
|
![]()
Сообщение
#3335
|
|
Level 1 Класс: Теневой Танцор Характер: Lawful Good Раса: Человек ![]() |
С игроком разобрался как делать точку респа, но вот НПЦ не хочет ресаться (IMG:style_emoticons/kolobok_light/nea.gif) . народ помогите плиз, чтобы НПЦ ресался, вот что у НПЦ на OnDeath.
Neverwinter Script void main() { object oNPC = GetLastRespawnButtonPresser(); ApplyEffectToObject(DURATION_TYPE_INSTANT,EffectRe surrection(),oNPC); ApplyEffectToObject(DURATION_TYPE_INSTANT,EffectHe al(GetMaxHitPoints(oNPC)), oNPC); RemoveEffects(oNPC); string sDestTag = "WP_Death_Hero"; int iEnteredCastle = GetLocalInt(GetModule(), "EnteredCastle"); if (iEnteredCastle == TRUE) { sDestTag = "WP_Death_Hero2"; } if (GetIsObjectValid(GetObjectByTag(sDestTag))) { object oSpawnPoint = GetObjectByTag(sDestTag); AssignCommand(oNPC,JumpToLocation(GetLocation(oSpa wnPoint))); } else { } } Подскажите что не так, или лучше напишите пожалуйста скрипт. |
![]()
Сообщение
#3336
|
|
Level 7 ![]() ![]() Класс: Некромант Характер: True Neutral Раса: Нежить ![]() |
|
![]()
Сообщение
#3337
|
|
Level 1 Класс: Теневой Танцор Характер: Lawful Good Раса: Человек ![]() |
|
![]()
Сообщение
#3338
|
|
Level 6 ![]() ![]() Класс: Маг Характер: Lawful Evil Раса: Нежить ![]() |
Там написано, что. В цитате. Скрипт оперирует переменной oNPC, которая ссылается на мертвый объект. Мертвый объект в скрипте отслеживается функцией GetLastRespawnButtonPresser(), которая возвращает последнего персонажа, который щелкнул кнопку воскрешения. Но воскреснуть с помощью кнопки могут только игроки, а не NPC. Поэтому тебе сказали заменить на OBJECT_SELF, объект, который вызвал событие onDeath - он сам.
Вот это: Neverwinter Script object oNPC = GetLastRespawnButtonPresser(); Заменить на: Neverwinter Script object oNPC = OBJECT_SELF;
Сообщение отредактировал Talarasha - Aug 25 2010, 20:22 |
![]()
Сообщение
#3339
|
|
Level 1 Класс: Теневой Танцор Характер: Lawful Good Раса: Человек ![]() |
|
![]()
Сообщение
#3340
|
|
Level 6 ![]() ![]() Класс: Маг Характер: Lawful Evil Раса: Нежить ![]() |
Я вообще удивляюсь, как это у тебя компилируется. В базовой библиотеке нет функции RemoveEffects, а никаких инклюдов не указано. Не говоря уже про условия, вероятно вырванные из оригинального скрипта?
Neverwinter Script void main() { object oSpawn = GetObjectByTag("WP_SPAWN"); // Тэг точки спавна SetIsDestroyable(FALSE,TRUE,FALSE); DelayCommand(3.0,ApplyEffectToObject(DURATION_TYPE_INSTANT,EffectR esurrection(),OBJECT_SELF)); DelayCommand(3.2,ApplyEffectToObject(DURATION_TYPE_INSTANT,EffectH eal(GetMaxHitPoints(OBJECT_SELF)), OBJECT_SELF); //DelayCommand(3.2,RemoveEffects(OBJECT_SELF)); DelayCommand(3.2,JumpToObject(oSpawn)); } Все сохранить и повесить на onDeath объекта. Закомментированный DelayCommand раскомментируешь, когда найдешь, откуда берется функция. Для общего развития: 1)NPC не может быть воскрешен, если ему об этом не сказано с помощью SetIsDestroyable(*,TRUE,*); 2)Когда скрипт висит на onDeath, не нужно использовать AssignCommand, он итак выполняется объектом, вызвавшим событие. 3)Мертвые тела - не переносятся через JumpToObject. 4)В этом скрипте предполагается, что нужно воскрешение именно этого конкретного экземпляра NPC. Если бы мне понадобился респ, я бы сделал его через CopyObject. Сообщение отредактировал Talarasha - Aug 26 2010, 14:45 |
![]()
Сообщение
#3341
|
|
Level 1 Класс: Теневой Танцор Характер: Lawful Good Раса: Человек ![]() |
Ну RemoveEffects берется из #include "nw_i0_plot" , забыл написать.
А вот твоя строка Neverwinter Script DelayCommand(3.2,ApplyEffectToObject(DURATION_TYPE_INSTANT,EffectH eal(GetMaxHitPoints(OBJECT_SELF)), OBJECT_SELF); Выдаёт ошибку. ИМХО не компелируется. |
![]()
Сообщение
#3342
|
|
Level 6 ![]() ![]() Класс: Маг Характер: Lawful Evil Раса: Нежить ![]() |
Neverwinter Script DelayCommand(3.2,ApplyEffectToObject(DURATION_TYPE_INSTANT,EffectH eal(GetMaxHitPoints(OBJECT_SELF)), OBJECT_SELF)); Скобка пропущена. Полностью тогда будет так: Neverwinter Script #include "nw_i0_plot"
void main() { object oSpawn = GetObjectByTag("WP_SPAWN"); // Тэг точки спавна SetIsDestroyable(FALSE,TRUE,FALSE); DelayCommand(3.0,ApplyEffectToObject(DURATION_TYPE_INSTANT,EffectR esurrection(),OBJECT_SELF)); DelayCommand(3.2,ApplyEffectToObject(DURATION_TYPE_INSTANT,EffectH eal(GetMaxHitPoints(OBJECT_SELF)), OBJECT_SELF)); DelayCommand(3.2,RemoveEffects(OBJECT_SELF)); DelayCommand(3.2,JumpToObject(oSpawn)); } Сообщение отредактировал Talarasha - Aug 26 2010, 15:22 |
![]()
Сообщение
#3343
|
|
Level 1 Класс: Теневой Танцор Характер: Lawful Good Раса: Человек ![]() |
Ооооо... хых. Спасибо тебе большое =) Работает.
|
![]()
Сообщение
#3344
|
|
Level 2 ![]() Класс: Ученик Дракона Характер: Chaotic Neutral Раса: Человек ![]() |
Добрый вечер, уважаемые модмейкеры и те кто этому учится (IMG:style_emoticons/kolobok_light/rolleyes.gif) .
Мне пришла одна интересная (на мой взгляд) идея. Может такое уже есть и кем-то используется, а возможно некоторым людям будет интересной находкой и толчком к размышлениям и фантазии. Магия переменных. Многие функции игры можно перенести на плечи переменных. Даже некоторые системные функции. Использоваться для этого будет игровой мир модуля и дневник персонажа. Привожу несколько примеров (проанализировав некоторую информацию форума, мне кажется что это возможно): 1. Встреча каравана на большой дороге. На большую часть локации ставится триггер с скриптом появления всех частей каравана при входе игрока (глава каравана, повозки с мулами, охранники, путники и т.д.). Размер триггера побольше, чтобы караван не возник прям под носом игрока. На появление ставиться вероятность - можно вообще никого не встретить, а можно караваны разных видов и состава. А дальше поле для фантазии - действия с участниками каравана (ограбить, подсказать, поторговать, наняться на работу и т.д...). А в конце процедуры установка различных значений переменным, которые имеют отображение в дневнике персонажа - убито столько-то людей, помог столько-то караванам... На этом можно строить отношение к игроку населением модуля. 2. Крафтинг, ремесла и навыки. Изучив за неимоверные испытания навык алхимии у алхимика, игрок получает +1 к переменной навыка "алхимия" (IMG:style_emoticons/kolobok_light/yahoo.gif) - сразу отображение в соответствующем разделе дневника, созданном зараннее модмейкером. Это открывает возможности к созданию зелий через диалог со столом алхимика (IMG:style_emoticons/kolobok_light/rolleyes.gif) Очевидно, что все возможные виды зелий нужно прописать в диалоге алхим. стола и поставить ограничения по навыку через переменные. Так и с другими ремеслами и вообще с чем душа пожелает. 3. Лут с монстров. Получив например от охотника навык снимания шкуры с зверей, игрок получает шкуру в останках убитого волка. Тоже делается через переменную и проводится проверка скриптом какую вещь ложить в лут определенного монстра. Также за каждое действие в игре игроку можно давать репутацию, звания (убил столько-то монстров, создал столько-то мечей, помог столько-то бабушкам, отнял завтрак у столько-то школьников (IMG:style_emoticons/kolobok_light/rolleyes.gif) ) Короче, поле для фантазии (IMG:style_emoticons/kolobok_light/crazy.gif) . От этого будут зависеть различные аспекты игры - отношение различных персонажей, возможность взять в компанию определенных спутников, дающиеся игроку квесты и т.д. Да, это не быстро воплотить в жизнь и местами не так уж и просто, но возможности игры можно расширить значительно. Главная фича - отображение всей инфы в дневнике, используя возможность замены текста в его разделах. Не нужно программировать новые навыки, ремесла и т.д. Да, возможно это не совсем хорошая услуга для тех людей, кто хочет научиться программировать Невер по настоящему, но это выход для тех кто хочет сделать интересный полифункциональный мод, не располагая большими знаниями программирования. Здесь на форуме есть все необходимые готовые скрипты и ответы по различным манипуляциям с переменными и ветками дневника. Так что можно дерзать и дорогу осилит идущий (IMG:style_emoticons/kolobok_light/biggrin.gif) Если модераторы захотят, это можно сделать отдельной темой и туда уже кидать необходимые по ходу скрипты и отвечать на вопросы. Для удобства (IMG:style_emoticons/kolobok_light/rolleyes.gif) |
![]()
Сообщение
#3345
|
|
Level 2 ![]() Класс: Ученик Дракона Характер: Chaotic Neutral Раса: Человек ![]() |
Скажите, как можно добавить +1 или другое число к переменной, учитывая ее текущее значение, а не устанавливая конкретное значение? И можно ли через скрипт добавить запись в дневник?
|
![]()
Сообщение
#3346
|
|
Level 5 ![]() ![]() Класс: Пьяный Мастер Характер: Chaotic Good Раса: Человек ![]() |
Neverwinter Script int nNum = GetLocalInt(.... , "....."); SetLocalInt(.... , ".....", nNum++); если нужно определенное число тогда Neverwinter Script int nNum = GetLocalInt(.... , "....."); nNum += 4; SetLocalInt(.... , ".....", nNum); На ваулте есть модули переведенные Аваддоном (прошу прощения если не правильно написал имя)по крафтингу, системы банкинга и Гильдинга Имхо, проще изменить что-то чем писать с 0. например 1, 2, 3 Сообщение отредактировал Laajin - Oct 26 2010, 17:44 |
![]()
Сообщение
#3347
|
|
Level 6 ![]() ![]() Класс: Маг Характер: Lawful Evil Раса: Нежить ![]() |
Цитата И можно ли через скрипт добавить запись в дневник? Чем спрашивать на форуме, быстрее и проще вскрыть ту же prelude.mod и посмотреть скрипт на заход. Neverwinter Script AddJournalQuestEntry("TAG", #, oPC, TRUE, TRUE); TAG - тэг журнальной ветки, # - номер записи, oPC - игрок, на которого вешать, можно например GetPCSpeaker() - если в диалоге. Проверка номера ветки делается через локальную переменную: Neverwinter Script GetLocalInt(oPC, "NW_JOURNAL_ENTRYTAG") Нужно только помнить, что имя переменной формируется методом NW_JOURNAL_ENTRY+TAG, т.е. первая часть так и остается, а вместо TAG пишем тэг журнальной ветки. Сообщение отредактировал Talarasha - Oct 26 2010, 13:09 |
![]()
Сообщение
#3348
|
|
Level 7 ![]() ![]() Класс: Некромант Характер: True Neutral Раса: Нежить ![]() |
int nNum = GetLocalInt(.... , "....."); SetLocalInt(.... , ".....", nNum++); Постфиксное инкрементирование (var_name++) увеличит содержимое переменной, но вернёт _предыдущее_ значение. Т.е. в данном случае значение локальной переменной не изменится. Правильно либо Neverwinter Script SetLocalInt(<object>, <var_name>, ++nNum); , либо Neverwinter Script SetLocalInt(<object>, <var_name>, nNum + 1); .
|
![]()
Сообщение
#3349
|
|
Level 5 ![]() ![]() Класс: Пьяный Мастер Характер: Chaotic Good Раса: Человек ![]() |
сколько занимался нвн то
Neverwinter Script int nNum; while(nNum < 10) { nNum++; } всегда работало Сообщение отредактировал Laajin - Oct 26 2010, 15:19 |
![]()
Сообщение
#3350
|
|
Level 8 ![]() ![]() ![]() Класс: Псионик Характер: Chaotic Neutral Раса: Хафлинг ![]() |
|
![]() ![]() |
Текстовая версия | Сейчас: 27th April 2025 - 15:33 |