Помощь - Поиск - Пользователи - Календарь
Полная версия: Вопросы новичков
Город Мастеров > РЕДАКТОРЫ > Neverwinter Nights Aurora Toolset
Страницы: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103
Elf-Drow
Я хотел просто избежать геморроя с фракциями, но можно, чтобы тот, кто бьет ПС был в отдельной фрации и проблем не будет. Я хотел, чтобы НПС один раз ударил ПС...короче проблем уже нет...
Solmyr2000
QUOTE
Сто раз говорили, как поменять required-версию ресурса.


Скажите в сто первый. biggrin.gif
Vhall
Нужно изменить строку Mod_MinGameVer в ресурсе module.ifo в нужном тебе модуле. Подойдет NWN Editor:
http://vhall.master-l.ru/nwn/nwn_editor.zip
ЗЫ Залейте на сайт, наконец. Даже если WRG Content Editor поддерживает эти функции.



LEX: залил. Финальная версия WRG Content Editor с этими форматами работать тоже будет, естественно. wink3.gif
Solmyr2000
yahoo.gif
Урряяя!!!!!! Заработало!!! yahoo.gif
Fifil
Здравствуйте! Прошу вашей помощи: У меня 3 вопроса smile.gif

1. Такая ситуация: предположим, есть некий предмет с тегом a1, и мне нужно, чтобы НПС во время диалога дал мне этот предмет. Я пробовал написать скрипт сам:

NSS
void main()
{
    CreateItemOnObject("a1", GetPCSpeaker(), 1);

}

Но не выходит sad.gif
Помогите, пожалуйста!)

2. Предположим, есть НПС с тегом z1 и есть НПС с тегом x1, НПС с тегом z1 принадлежит к фракции A, а НПС с тегом x1 к фракции B. Эти НПС находятся в одной комнате. Вот что нужно: Если НПС с тегом x1 выходит из комнаты, то НПС с тегом z1 начинает его бить, и когда у НПС с тегом x1 остается мало хелсов, z1 прекращает его бить и они оба возвращаются в комнату.

3. Предположим, что есть НПС с тегом a1 и есть стул с тегом b1. Нужно, чтобы НПС сел на этот стул.
__________
Заранее благодарю, только, пожалуйста, напишите подробно как что делать smile.gif
Dik Morris
1 - Нужно указывать не таг, а ResRef предмета.

2 - Если под комнатой подразумевается тайл, то рисуем триггер перед выходом из комнаты, на onEnter:

NSS
void main()
{
    object oNPC = GetObjectByTag("z1"); // NPC с тагом z1
    object oEnter = GetEnteringObject(); // NPC с тагом x1

    if (GetIsPC(oEnter))
     return;
    if (GetTag(oEnter) == "x1")
     {
      if (GetLocalInt(OBJECT_SELF, "Enter") == FALSE)
       {
         SetLocalInt(OBJECT_SELF, "Enter", 1);
         AssignCommand(oNPC, ClearAllActions());
         AssignCommand(oEnter, ClearAllActions());

         DelayCommand(0.2, AssignCommand(oNPC, ActionAttack(oEnter)));
      // Заставляем z1 атаковать x1
         DelayCommand(0.2, SetCommandable(FALSE, oEnter));
      // Забиваем стек-комманд, у x1
      // (Т.е он теперь стоит обездвиженный, если это не нужно строчку можно удалить)
      // (Но тогда неписи будут сражаться)
       }
     }
}

QUOTE
у НПС с тегом x1 остается мало хелсов, z1 прекращает его бить и они оба возвращаются в комнату

Выше Aiwan приводил, очень похожий скрипт, попробуй его маленько модифицировать, и получится то что нужно. smile.gif

3 - На onSpawn NPC.
NSS
void main()
{
object oNPC = OBJECT_SELF;
object oChair = GetNearestObjectByTag("Таг_стула");

AssignCommand(oNPC, ClearAllActions());
DelayCommand(0.2, AssignCommand(oNPC, ActionSit(oChair)));
}
Fifil
Спасибо большое smile.gif
Fremen
Приветы.

Вопросы :
1. Классы
а) Как редактировать существующий класс?
б) Как создать свой собственный класс?

2. Фиты
а) Как изменять существующие фиты?
б) Как создавать собственные фиты?

3. Спеллы
а) Как изменять существующие спеллы?
б) Как создавать свои?

4. Вопросы по "Игрок атакует" и "Игрок получает ранение"
а) Как сделать так, чтобы при ударе другого игрока использовался нужный скрипт?
б) Как сделать так, чтобы при ранении игрока использовался нужный скрипт?


Просьба отвечать знающих людей, а не любителей.
Так, как любители мне уже насоветовали кучу нерабочих алгоритмов и методов работы с 2да.

Заранее благодарен.
User
1,2,3 - http://www.wrg.ru/forums/index.php?showtopic=78
4 - нормально никак. Не нормально:
а) на все оружие повесить уникальный закл по линии onHitCastSpell (закл прописать как надо, там 2 2дашки). НО не будет работать в рукопашке
б) на всю одежду и броню повесить уникальный закл по линии onHitCastSpell (так же прописать)
НО не будет работать на голых (вариант лечения: шкурка.. не пробовал голым, но в одежде не канает)
в) на default отслеживать изменение ХП игрока.
НО.. сам видишь я думаю
Dik Morris
По 1, 2 и 3 вопросам - Сюда

По поводу 4...
Эвента по типу onDamaget применимого к игроку, не существует, поэтому отслеживай игрока, другим способом, к примеру через XB модуля.
-fenix-
Fremen, по первым трем вопросам тебе уже дали ссылки на соответствующий форум, там в темах найдешь готовые ответы на твои вопросы.
По четвертому - зайди на сайт в раздел Файлы -> Aurora Toolset и качни Alternative Core. Там уже отслеживаются события по атаке и изменении жизней у игрока. С системой поставляется хелп, если что будет не понятно, то спроси на форуме.

Fremen, по первым трем вопросам тебе уже дали ссылки на соответствующий форум, там в темах найдешь готовые ответы на твои вопросы.
По четвертому - зайди на сайт в раздел Файлы -> Aurora Toolset и качни Alternative Core. Там уже отслеживаются события по атаке и изменении жизней у игрока. С системой поставляется хелп, если что будет не понятно, то спроси на форуме.
Fremen
Биг Сенкс. good.gif
Aiwan
QUOTE(Fremen @ May 14 2006, 00:37) [snapback]81656[/snapback]
Просьба отвечать знающих людей, а не любителей.

Хоть бы один кому ответили показал готовую работу...

LEX: ладно те, не бурчи как старый дед lol.gif
Mandrake
Не знаю задавали ли подобный вопрос или нет(если был, скажите пойду искать в теме bb.gif )

Как заставить нпса ШД активно использовать хипс во время боя.
Т.е. нужно, чтобы в каждом раунде он уходил в хипс, а потом атаковал игрока. И нечто вроде проверки на нахождение уже в хайде, если вдруг за раунд он не будет успевать спрятаться и атаковать =) Плюс проверка видит игрок его или нет(если у игрока есть трусинг или высокий параметр спота\листена), чтобы зря не уходил в хайд. Помогите пожалуйста rolleyes.gif
mamuc
QUOTE
Просьба отвечать знающих людей, а не любителей.

а тут все любители biggrin.gif
..::SERGO::..
Влом мне читать все 100 страниц... Какой скрипт повесить на OnEnter триггера, чтобы дверь сломалась?
(да, и что такое синька unsure.gif )
Lex
а какие у тебя трудности?
соединить
NSS
// Get the nNth object with the specified tag.
// - sTag
// - nNth: the nth object with this tag may be requested
// * Returns OBJECT_INVALID if the object cannot be found.
// Note: The module cannot be retrieved by GetObjectByTag(), use GetModule() instead.
object GetObjectByTag(string sTag, int nNth=0)

// Destroy oObject (irrevocably).
// This will not work on modules and areas.
void DestroyObject(object oDestroy, float fDelay=0.0f)

// Get oObject's local string variable sVarName
// * Return value on error: ""
string GetLocalString(object oObject, string sVarName)

// The value returned by this function depends on the object type of the caller:
// 1) If the caller is a door it returns the object that last
//    triggered it.
// 2) If the caller is a trigger, area of effect, module, area or encounter it
//    returns the object that last entered it.
// * Return value on error: OBJECT_INVALID
//  When used for doors, this should only be called from the OnAreaTransitionClick
//  event.  Otherwise, it should only be called in OnEnter scripts.
object GetEnteringObject()

// * Returns TRUE if oCreature is a Player Controlled character.
int GetIsPC(object oCreature)

в 1 скрипт?

NSS
void main()
{
// наступивший на триггер объект
object oPC = GetEnteringObject();
// если не игрок - выходим
if (!GetIsPC(oPC)) return;
// берем ближайший к триггеру объект с тэгом, записаным в локалку DELETE
object oToDel = GetNearestObjectByTag(GetLocalString(OBJECT_SELF,"DELETE"));
// или это юзаем, если объект для удаления в другой локации
// object oToDel = GetObjectByTag(GetLocalString(OBJECT_SELF,"DELETE"));
// удалить объект
DestroyObject(oToDel);
// удалить триггер, чтобы больше не срабатывал.
DestroyObject(OBJECT_SELF,0.2);
}

надо сделать на триггере строковую переменную с именем DELETE и тэгом двери, которую будешь удалять

Учи мат. часть, а не спрашивай готовое, так далеко не уедешь. smile.gif
..::SERGO::..
блин, не успел сказать, сам разобрался
NSS
void main()
{
object oPC = GetEnteringObject();
object oDoor = GetObjectByTag("KONDOORIN");

DelayCommand(0.1, ApplyEffectToObject(DURATION_TYPE_PERMANENT,EffectDeath(TRUE),oDoor));
}

А удалять триггер мне не обязательно. По сюжету плеер больше никогда не попадет в эту комнату, да и удалять будет уже нечего. Встал другой вопрос! Когда я ставлю триггер, то он либо ловушка! либо на него можно щелкнуть! (у меня самая первая НВН)
Dik Morris
QUOTE
Когда я ставлю триггер, то он либо ловушка! либо на него можно щелкнуть! (у меня самая первая НВН)


1. В св-вах триггера выбери его тип: Generic.

2. Если не ошибаюсь EffectDeath применим только к NPC и игроку, в этом случае используй: EffectDamage.

PS:
QUOTE
Palette (палитра, синька) – этот термин употребляется для описания групп, которые содержат какие-либо предметы или создания. Все монстры, предметы, магазины и т.д. распределены по группам и составляют в сумме палитру.

© Aiwan
..::SERGO::..
EffectDeath - рулит для двери, у мен пашет!
В реале никак не получается создать триггер! я даже смотрел триггеры в стандартной кампании, делаю как там, и ... попа
Dik Morris
Trigger Wizard -> Generic Trigger, все там есть.

QUOTE
EffectDeath - рулит для двери, у мен пашет!


Эм, это не я - кот на клаве полежал. )))
..::SERGO::..
Итак делал, и по всякому... один хрен, ладно, сам как нить разберусь!
Lex
..::SERGO::..
приведенный тобой скрипт
1. сработает при наступании любого НПС на него (если так и надо, то там лишняя строка)
2. будет работать многократно, что не гут если у тебя объектов с таким тэгом не один. (даже если 1, все равно такие шероховатости могут потом вылезти, лучше сразу нормально делать)
3. если тебе потребуется еще такой же триггер, но там тэг у двери будет уже другой, придется писать новый скрипт (в то время как предложенный мною вариант универсальный, на все возможные тэги)

про триггеры уже все сказал Дик.
в первой закладке есть менюшка "Тип Триггера". Там 3 позиции: ловушка, общий, переход местности. Тебе нужен соотв. общий.
или ищи в стандартной палитре триггер с названием New Generic (новое поколение могли перевести у тебя, я unknw.gif)
KoYuKi
Тут такое дело, вобщем нужно мне сделать проверку левела PC, вот только функции я сей не знаю, может кто подскажет?
Dik Morris
NSS
// Get the number of hitdice for oCreature.
// * Return value if oCreature is not a valid creature: 0
int GetHitDice(object oCreature)


Либо:

NSS
// Get oCreature's experience.
int GetXP(object oCreature)
..::SERGO::..
В cutscene я создал
NSS
effect eInv = EffectVisualEffect(VFX_DUR_CUTSCENE_INVISIBILITY);

Вопрос: Как его убрать внутри сценки?
Тобишь мне надо чтобы НПС был невидим, а как понадобился - стал видимым.
(Я пытался перед нужным действием ClearAllActions - но увы)
P.S. я конечно не исключаю, что юзаю совсем не то для невидимости, и вообще, что написал полный бред
Dik Morris
1.

Использовать функцию:
NSS
// Remove eEffect from oCreature.
// * No return value
void RemoveEffect(object oCreature, effect eEffect)


2

Налаживать временный эффект.
int DURATION_TYPE_TEMPORARY
..::SERGO::..
Я вообще не вьехал! Как, блин начать разговор с дверью при FailToOpen?
По разно писал ActionStartConversation и... в свалку... не поможете?
Dik Morris
..::SERGO::..

Попробуй так:
NSS
void main()
{
//На FallToOpen
    object oPC = GetClickingObject();
    AssignCommand(oPC, ActionStartConversation(OBJECT_SELF,"название_диалога"));
}
Sayran
Уважаемые мастера игростроя,подскажите пожалуйсто как заставить НПС сидеть на стуле,програмист наш приболел,а мод надо делать,буду благодарен !!!
[MoF]Darth_Nick
NSS
object oNPC = GetObjectByTag("таг"); // <-- нпц
object oStul = GetObjectByTag("таг"); // <-- стул
AssignCommand(oNPC,ActionSit(oStul));

o.O
Sayran
Спасибо работает,а как его заставить допустим после диалога сесть обратно,я думаю этот скрипт надо зациклить,а как это реализовать незнаю ....
Dik Morris
Sayran

ActionTakens диалога,
NSS
void main(){
AssignCommand(OBJECT_SELF, ActionSit(GetNearestObjectByTag("таг_стула"))); }


PS:
QUOTE
Спасибо работает,а как его заставить допустим после диалога сесть обратно,я думаю этот скрипт надо зациклить,а как это реализовать незнаю ....

А, если вышеприведенный код подделал то с этим то, какие проблемы ? wink3.gif
Sayran
У меня со скриптами туго,понемногу буду разбираться,спасибо все вставил,все работает !!! smile.gif
Noah
Привет,кто знает какой функцией отображаются броски кубиков?
Dik Morris
Если я правильно тебя понял:
d2(), d3(), d4(), d6(), d8(), d12(), d20(), d100()
[MoF]Darth_Nick
если тебе надо знать сколько кубик выкинул. то можно так
NSS
int nDice; // см. выше
object oPC; // не забудь инициализировать
SendMessageToPC(oPC,IntToString(nDice));
Lordeath
Скажите пожалуйста, как сделать, чтобы на определенной территории каждые 2 мин появлялись монстры в разных местах? ph34r.gif
Aiwan
Опиши задачи. Зачем и где при каких условиях.
Zirrex
Lordeath, а место появления каждый раз должно быть случайным или все же выбрано заранее? На ваулте есть множество спавн систем, которые создают выбранных монстров по вайпоинтам. Можно посмотреть их.

Если описать вкратце, то на локации создается невидимый объект, в свойствах которого на его хартбит вешается скрипт, который будет проверять по переменной, жив монстр или нет. Если нет, то запустить 2-х минутный таймер, если же жив, оставить как есть.

Посмотри хотя бы эту систему
Noah
QUOTE(Lordeath @ Jun 5 2006, 18:41) [snapback]83785[/snapback]

Скажите пожалуйста, как сделать, чтобы на определенной территории каждые 2 мин появлялись монстры в разных местах? :ph34r:

можно сделать просто несколько спавнов растянуть на нужную площадь и выставить в св-х нужное время,место появления указать точкой входа.
..::SERGO::..
"Абсолютная глупость"
Почему вместо диалога вылетает только первая ветка диалога или как назначить диалог двери(я повторяюсь, тк. в прошлый раз не получилось)
Dik Morris
QUOTE(..::SERGO::.. @ Jun 6 2006, 14:55) [snapback]83830[/snapback]

"Абсолютная глупость"
Почему вместо диалога вылетает только первая ветка диалога или как назначить диалог двери(я повторяюсь, тк. в прошлый раз не получилось)


Опиши ситуацию.
По поводу диалога с дверью, нужно писать скрипт.


NSS
//FallToOpen двери
void main(){AssignCommand(GetClickingObject(),ActionStartConversation(OBJECT_SELF,"Название_диалога")); }
Lex
QUOTE(..::SERGO::.. @ Jun 6 2006, 12:55) [snapback]83830[/snapback]
Почему вместо диалога вылетает только первая ветка диалога

проверь наличие остальных веток после нее и условий их появления (мы на них стоят скрипты-условия, кот. не выполняются).
QUOTE(..::SERGO::.. @ Jun 6 2006, 12:55) [snapback]83830[/snapback]
как назначить диалог двери

в сингле я делал так:
NSS
void main()
{
object oPC = GetFirstPC();
ActionStartConversation(oPC); // Диалог у двери стоял в свойствах
}
Elf-Drow
Кстати, кстати...Вот я и вернулся...хе-хе. Наверняка, мой последний вопрос...

Вот я хочу сделать спавн НПС, дружелюбно относящихся к ПС. Ставлю спавн и точки выхода, в списке пишу нужных НПС...но ничего не происходит!! Ха-ха! Они просто не появляются! А вот с врагами респ работает... Так что пожалуйста помогите сумасшедшему...хе-хе...скорее всего в последний раз...так как я практически (не хвастаюсь) все узнал о редакторе...
dumbo
если нажать F1, находясь в advanced свойствах encounter'a на выборе фракции, то тебе подскажут:
QUOTE
The Encounter will only fire for Creatures that are hostile to the selected Faction.

триггер срабатывает только тогда, когда на него наступит крича, враждебная к выбранной в свойствах триггера фракции.

т.е. в твоем случае нужно фракцию триггера ставить враждебной(Hostile), а уже кричей суй тех, каких надо.
..::SERGO::..
Эмм... вот такой вот вопросик... Есть в палитре Визуал дым, есть на локе три точки. Как дым поставить на вейпы эти, а потом удалить?(Простите ламера)
Lex
QUOTE(..::SERGO::.. @ Jun 6 2006, 17:11) [snapback]83850[/snapback]
Эмм... вот такой вот вопросик... Есть в палитре Визуал дым, есть на локе три точки. Как дым поставить на вейпы эти, а потом удалить?(Простите ламера)

функция CreateObject + GetLocation + GetObjectByTag (последние 2 для определения того, куда креетить дым)
Deus
здравствуйте.мне оч нужна помощь.поднимаю сервер и мне нужен "административный" скрипт.нужно чтобы после диалога (накатать жалобу NPC на перса) можно было бы проверить как напр. почту(тривиально,в ящик класть свитки с именами и под замок) но скрипт не умею писать.помогите плз.
Artlira
Неуверенна, что правильно помещаю вопрос, плохо ориентируюсь в Интернете вообще и на вашем форуме в частности.
Проблема в следующем: есть Вороги с одной стороны, Кууши с другой (“псевдохенчи”). При определенных условиях могут присоединяться к игроку, но не хотелось бы злоупотребления “пушечным мясом”, т.е. при смерти одного из них не должно быть возможности присоединить следующего.
В базе вашего форума нашла следующие скрипты:
SetLocalInt(GetLastKiller(),"Kill",1); - ставится на OnDeath зверя и

В диалоге проверка на строчке типа: “Ворог злобно смотрит на вас, видимо помня, что один из них и т.д.”
int StartingConditional()
{
return(GetLocalInt(GetPCSpeaker(),"Kill")==1);
}

Все вороги и куши имеют один Teg и ResRef, строка с проверкой стоит впереди основного диалога, но почему-то никакой реакции на смерть “товарища”. Может каждому нужно свое значение “Kill” (2,3 и т.д.)? А как тогда проверку делать? “Kill”==1, или 2 или 3? Или несколько веток, с проверкой на каждого?
Может, я смысл скрипта не улавливаю – он фиксирует факт смерти или именно убийство от руки Игрока? В скриптах полный ноль, поэтому такие глупые вопросы. Ума хватает только на “визард” и на то, что бы “утащить” чего-нибудь с вашего сайта.
Заранее благодарю за помощь.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.
Invision Power Board © 2001-2024 Invision Power Services, Inc.