Помощь - Поиск - Пользователи - Календарь
Полная версия: Вопросы новичков
Город Мастеров > РЕДАКТОРЫ > 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
Nick Parker
QUOTE (Aiwan @ Jun 6 2005, 21:51)
А диалоги?  Скриптинг, это сложно но возможно.

Сделать можно все, что можно вообразить, а я вообразил о себе невообразуемое. Но буду пытаться до потери зрения, но никак интереса.

QUOTE (Lex @ Jun 6 2005, 22:14)
Начал весной 2003, прошло 2 года...

Это очень смешно Lex, очень. Я минуту смеялся, а потом плакал не меньше.
Garou
Вопрос к бывалым модулестроителям: как Вы избегаете половой неразберихи в диалогах ( иногда в играх встречаются реплики девушек с мужскими окончаниями (сделал, убил....))? Пишете нейтральные (... смотришь, делаешь...) или вообще не заморачиваетесь над этими вопросами?
DBColl
Дело в том, что для русских это действительно сложгый вопрос. В аглицком нет родОв... Им проще.
Можно конечно писать диалоги нейтральные... Но чтобы подчеркнуть "половую привязанность" действительно нужно писать УНИКАЛЬНЫЕ диалоги для мужчины и для женщины. А это двойной объем работы. Именно поэтому, допустим, мы в ПЛ ограничились 210 000 слов диалогов для МУЖЧИНЫ. И судьба расских модулей гораздо сложнее, если он расчитан на универсальных диалогах. Их очень трудно писать... pardon.gif Легче, естественно не заморачиваться.
Garou
Таким образом в начале диалога делалась проверка на Пол игрока?
-fenix-
В заклатке "текст появляется при" есть изображение шляпки, нажимай на нее и там найдешь много стандартных проверок: способность, класс, раса, пол...

Garou
Вот еще такой вопрос. Игрок встречает в модуле непись, которая сообщает ему, что через определенное время (скажем 20 дней) найдет игрока и "грохнет". Существует ли возможность заставить непись появится через этот промежуток времени перед персонажем?
DBColl
Да, возможно. Для этого прежде всего надо написать свою функцию перевода любой даты в секунды от 0 года, 0 месяца, 0 дня и тп.. (DateToSeconds). Расчитать с помощью ее время через 20 дней и запомнить де-нить на локалках. Затем ввести условие в ХБ модуля, что при наступлении этой даты (в секундах) срабатывает тот-то скрипт... Вот и все. Главное написать функцию DateToSeconds или ..ToMinute... wink.gif

DelayCommand не стоит юзать в таких разрывах, ибо много факторов, которые этот делэй могут притормозить или того хуже сбить... Как-то например иногда бывает даже при загрузке сохраненки... pardon.gif
Убо-Сатло
QUOTE (Garou @ Jun 7 2005, 12:34)
Существует ли возможность заставить непись появится через этот промежуток времени перед персонажем?


В любом месяце NWN 28 дней. Следовательно можно повесить локалинт на перса, равный дате угрозы.
Neverwinter Script Source
void main()
{
object oPC = GetPCSpeaker();
int d = GetLocalInt(oPC, "data");
SetLocalInt(oPC, "data", GetCalendarDay());
if(d<=8)
{
  SetLocalInt(GetModule(), "STRELKA", d+20);
}
else
{
  SetLocalInt(GetModule(), "STRELKA", (d+20)-28);
}
}

Это надо вставить в действие на окончании диалога.
А в Хеарбит модуля вот такой фрагмент:
Neverwinter Script Source
void main()
{
object oPC = GetFirstPC();
object oNPC = GetObjectByTag("ТВОЙ NPC");
int S = GetLocalInt(OBJECT_SELF, "STRELKA");
if(S == GetCalendarDay()
&& GetTimeHour() == xz // во сколько непись придет
&& GetLocalInt(oPC, "RAZBORKA")!= TRUE)
{
   AssignCommand(oNPC, ActionJumpToObject(oPC));
  // и дальше или
  AssignCommand(oNPC, ActionAttack(oPC));
  //если сразу нападет, или
AssignCommand(oNPC, ActionStartConversation(oPC));
  // если поговорить сначала захочет
}
}

Ну, и как они встретятся, куда-нибудь воткни
Neverwinter Script Source
SetLocalInt(oPC, "RAZBORKA", TRUE);

чтобы непись не джампал, как идиот каждые 6 сек
Aiwan
QUOTE (Garou @ Jun 7 2005, 13:20)
Вопрос к бывалым модулестроителям: как Вы избегаете половой неразберихи в диалогах

Мои 5 юаней. ИМХО. Сделать унисексовый сюжет очень трудно и в любом случае это бяка... Чем меньше разброса, тем сочнее. Определитесь с полом, модуль за даму тоже прикольно сделать, и в путь wink.gif
Garou
Шпасибо, Шпасибо!!! Буду внедрять это в жизнь. Позвольте еще спросить:
Хочу, чтоб при юзании следов выскакивало диалоговое окно, в котором писалась инфа. Сделал следы юзабельными, написал ветку диалога вставил ее в поле Conversation и на onUse поставил скрипт StartConversation и ничего... (Вы там ишо дружно не смеетесь?) smile.gif Как это сделать правильно?
Добавлено в [mergetime]1118152690[/mergetime]
Еще. Хотел создать книгу (журнал NPC) все хорошо, но в игре она отображается в мешке!!! Что за бред. Я могу конечно ее запхнуть в ящик, но хотелось бы на столике выложить... Подскажите, а заодно и где находятся эти "...sad.gif" листики бумаги на которых в игре писалась инфа???
Фух... Вроде все спрсил че хотелsmile.gif
DBColl
QUOTE (Aiwan @ Jun 7 2005, 15:53)
Чем меньше разброса, тем сочнее.

Согласен на все 100% wink.gif.
Добавлено в [mergetime]1118154850[/mergetime]
QUOTE (Garou @ Jun 7 2005, 16:54)
Сделал следы юзабельными, написал ветку диалога вставил ее в поле Conversation и на onUse поставил скрипт StartConversation и ничего... (Вы там ишо дружно не смеетесь?)Как это сделать правильно?

Это неправильно и ты до этого уже догадался. wink.gif
Короче на OnUse ставь:
Neverwinter Script Source
void main()
{
    ActionStartConversation(GetLastUsedBy());
}
Aiwan
QUOTE (Garou @ Jun 7 2005, 19:54)
но в игре она отображается в мешке!!!

Правильно, это же итем. Я не совсем понял о чем ты. Возможно про ПЛ наш? Если да, то листики это хак. И к тому же, эти листики PLS-объекты а не ITM-ы как книги.
dumbo
Garou
если что-то не работает, описывай точнее. ибо, например, StartConversation вообще не существует. листики - создавай новый item типа Miscellaneous Medium и в Description/Unidentified desc вписывай текст листика. можно плэйс Book Piles на стол положить, а в него уже вложить листик smile.gif
Убо-Сатло
QUOTE (Garou @ Jun 7 2005, 17:54)
Хотел создать книгу (журнал NPC) все хорошо, но в игре она отображается в мешке... хотелось бы на столике выложить

Можно выложить на столик плэйсовую книгу, юзабельную. И на онюзе воткнуть
Neverwinter Script Source
void main()
{
  CreateItemOnObject("resref книги", GetLastUsedBy(), 1);
  DestroyObject(OBJECT_SELF);
}

Только не забудь в палитре создать саму книгу с нужным резрефом.
Правда, если потом перс ее на землю положит, она все равно мешком станет. Можно, конечно сделать скрипт в хеарбите модуля, чтобы выброшеный предмет снова в плэйс превращался, но в данном случае это скорее всего не принципиально.
Lex
QUOTE (Убо-Сатло @ Jun 7 2005, 21:04)
скрипт в хеарбите модуля

не в ХБ а в unaquire..вроде так пишется.
Dark@ngel
1.Как сделать чтобы НПС лежал мертвым?
2.Куда вствлять анимационные константы?
3.Скачала скрипт банка, а там написано "Все эти действия а так же ответы ДА и НЕТ производятся посредством обыкновенного чата(НЕ диалога)". Как понять чата?Куда нужно ставить?
Lex
QUOTE (Dark@ngel @ Jun 7 2005, 21:21)
1.Как сделать чтобы НПС лежал мертвым?

в скрипт, что в слоте onSpawn добавить
Neverwinter Script Source
SetIsDestroyable(FALSE);
ApplyEffectToObject(DURATION_TYPE_INSTANT,EffectDeath(),OBJECT_SELF);

Добавлено в [mergetime]1118165889[/mergetime]
QUOTE (Dark@ngel @ Jun 7 2005, 21:21)
2.Куда вствлять анимационные константы?

в функцию
Neverwinter Script Source
// Cause the action subject to play an animation
// - nAnimation: ANIMATION_*
// - fSpeed: Speed of the animation
// - fDurationSeconds: Duration of the animation (this is not used for Fire and
//  Forget animations)
void ActionPlayAnimation(int nAnimation, float fSpeed=1.0, float fDurationSeconds=0.0)


Добавлено в [mergetime]1118165984[/mergetime]
QUOTE (Dark@ngel @ Jun 7 2005, 21:21)
3.Скачала скрипт банка, а там написано "Все эти действия а так же ответы ДА и НЕТ производятся посредством обыкновенного чата(НЕ диалога)". Как понять чата?Куда нужно ставить?

внизу под панелью, где идут логи и фразы есть поле. Туда можно ткнуть и набить текст. После этого ENTER И текст появится над игроком. Это и есть чат. smile.gif
Убо-Сатло
QUOTE (Lex @ Jun 7 2005, 21:16)
не в ХБ а в unaquire..вроде так пишется.

Lex, OnAcquireItem'ом я еще не разу не пользовался, но я так понял, это когда перс теряет итем, не обязательно бросает на пол, продал например. Нет?
А на ХБ модуля я ставил такой скрипт, у меня перс им в порту корабль разгружал:
void main()
Neverwinter Script Source
{
object oPC = GetFirstPC();
object oGrIt = GetObjectByTag("it_gruz");// груз-итем
location lGI = GetLocation(oGrIt);
object oGrPl = CreateObject(OBJECT_TYPE_PLACEABLE, "pl_gruz", lGI, FALSE, "pl_gruz");// груз-плэйс
object oItem;
object oIP = GetItemPossessor(oItem);
DestroyObject(oGrPl, 120.0);// типа унесли сундук дальше
if(!GetIsPC(GetItemPossessor(oGrIt)))
{
  DestroyObject(oGrIt, 0.5);
}
}

А груз-итем создавался при юзанье груз-плэйса.
Не знаю, может это и через ж..., но у меня работает.
З.Ы. Кто-нибудь, подскажите, пожалуйста: как выдрать из игры иконку, чтобы она открывалась в каком-нибудь человеческом формате, а не в mdl, pwk, tga?
Lex
QUOTE (Убо-Сатло @ Jun 7 2005, 21:57)
Lex, OnAcquireItem'ом я еще не разу не пользовался, но я так понял, это когда перс теряет итем, не обязательно бросает на пол, продал например. Нет?

да. Но ничего не мешает это дело отследить попробовать. (вариант 1 это в скриптах открыть/закрыть магазин прописать установку локалок.. Вариант 2...надо подумать)
dumbo
по поводу перевоплощения выложенной вещи - OnUnAcquireItem
Neverwinter Script Source
void TransormBook()
{
  object oBook = GetNearestObjectByTag("ITEM_book_tag");
  if (!GetIsObjectValid(oBook)) return;
  location lBook = GetLocation(oBook);
  DestroyObject(oBook);
  CreateObject(OBJECT_TYPE_PLACEABLE, "PLACE_book_resref", lBook);
}

void main()
{
  object oItem = GetModuleItemLost();
  if (GetTag(oItem)=="ITEM_book_tag")
    AssignCommand(GetModuleItemLostBy(), TransormBook());
}
Garou
Ого!!! Столько советов!!! Суперsmile.gif Спасибо Всем, кто откликнулся на мой зов!
Archangel
Извините, я понимаю, что скорее всего этот вопрос где-то уже был, но я просто не имею возможности искать его(инет нерезиновый),немог бы кто-нибудь мне написать скрипт, дающий + или - к направленности Игрока? Оч важно. this.gif
DBColl
QUOTE (Убо-Сатло @ Jun 7 2005, 20:57)
З.Ы. Кто-нибудь, подскажите, пожалуйста: как выдрать из игры иконку, чтобы она открывалась в каком-нибудь человеческом формате, а не в mdl, pwk, tga?

Иконки лежат в 24битном tga-формате. Нормальный формат, который открывается любым просмотрщиком или растровым редактором (фотожоп, корел и тп..) pardon.gif
QUOTE (Archangel @ Jun 8 2005, 10:27)
Извините, я понимаю, что скорее всего этот вопрос где-то уже был, но я просто не имею возможности искать его(инет нерезиновый),немог бы кто-нибудь мне написать скрипт, дающий + или - к направленности Игрока? Оч важно.

AdjustAlignment(oPC, ...); //смотри ее описание.
Archangel
QUOTE
AdjustAlignment(oPC, ...); //смотри ее описание.

Сенкс wink.gif
Айван: И что это за содержательный пост? Еще раз и влеплю пред.
Garou
Сел в лужуsad.gif!!! Непись после разговора должна идти к вейпоинту, там постоять несколько секунд, потом сказать фразу(при этом над ее головой появится эта фраза) и исчезнуть. Сожалею, что не могу привести ниже свой скрипт, я выхожу в нет из различных инет-кафеsad.gif (нет здесь НВН и близко!!!). Как заставить его сказать фразу (ее я предварительно записал в вавовском файле и добавил в свой хак), для этого будет использоваться PlayVoiceChat? PlaySound? Или что-то другое! За синтаксис извините. Нет под рукой тулсета чтоб правильность глянуть. И есть ли разница, поставить этот скрипт в конец диалога на ActionTaken или на Normal завершение диалога?
Dark@ngel
1.Как сделать чтобы НПС лежал/спал?
2.Как сделать чтобы на столе можно было смешивать определенные предметы и из этого получался какой-нибудь предмет или зелье. Если я не ошибаюсь, то для этого нужны скрипты?
3.Не могу разобраться с анимационными константами.В функцию сначала надо вводить:
Neverwinter Script Source
// Cause the action subject to play an animation
// - nAnimation: ANIMATION_*
// - fSpeed: Speed of the animation
// - fDurationSeconds: Duration of the animation (this is not used for Fire and
// Forget animations)
void ActionPlayAnimation(int nAnimation, float fSpeed=1.0, float fDurationSeconds=0.0)

а потом вставлять анимацию?Например:
ANIMATION_FIREFORGET_DRINK
ANIMATION_PLACEABLE_OPEN и т.д. Верно? И ещё-куда вообще вставлять анимацию, в OnSpawn?
4.И последнее, как сделать,чтобы НПС превращался например в оборотня и наоборот? diablo.gif
Заранее премного благодарна!
DBColl
QUOTE (Garou @ Jun 8 2005, 17:50)
И есть ли разница, поставить этот скрипт в конец диалога на ActionTaken или на Normal завершение диалога?

Без разницы. Если на ActionTaken последней строки, то все равно, что на EndNormal.
QUOTE (Garou @ Jun 8 2005, 17:50)
Как заставить его сказать фразу (ее я предварительно записал в вавовском файле и добавил в свой хак), для этого будет использоваться PlayVoiceChat? PlaySound? Или что-то другое! За синтаксис извините.

PlaySound("имя файла");
Еще есть такая особенность для звуков. Он должен быть ПРЕОБРАЗОВАН из wav в mp3, затем этот mp3 ПРЕОБРАЗОВАН утилиткой в формат bmu, а уже в самом конце ПЕРЕИМЕНОВАН в wav. swoon.gif Вот так это делается.
Добавлено в [mergetime]1118243330[/mergetime]
QUOTE (Dark@ngel @ Jun 8 2005, 17:52)
1.Как сделать чтобы НПС лежал/спал?

На heartbeat непися вешай ActionPlayAnimation(ANIMATION_LOOPING_DEADFRONT, 1.0, 9999.0); - будет долго спать. wink.gif
Dark@ngel Слишком много вопросов, на которые ты хочешь получить ответы СРАЗУ. Большинство из них простым тычком не решаются. Скачай и почитай документацию Айвана у нас на сайте, много вопросов отпадет и в целом многие вопросы ты станешь задавать более конкретно. wink.gif
Garou
Как из bmu в wav переименовать? Расширение изменить (только не бейте smile.gif!!) или? DBColl а как в конечном итоге будет выглядеть этот скрипт? Плиииз!!!
Добавлено в [mergetime]1118244242[/mergetime]
Вот еще что: Убо-Сатло мне описал, как сделать встречу с неписью через 20 дней, там есть
&& GetTimeHour() == xz // во сколько непись придет (х - это часы, а z - минуты? такой формат 0100 значит час ночи?) Дальше:
void main()
{
object oPC = GetFirstPC();
SetLocalInt(oPC, "RAZBORKA", TRUE);
}
Это можно ставить на начало разговора в ActionTaken?
И как можно проверить, работает ли вся эта конструкция? Ждать 20 дней проблемно...
Добавлено в [mergetime]1118244448[/mergetime]
Да, а если разные скрипты поставить в ActionTaken и EndNormal они оба работать будут? Или из-за противоречий вообще не будет ничего происходить?
Aiwan
Dark@ngel.
1. Ответил ДБ.
2. Это КРАФТ. Жутко сложно для новичков. Но если есть желание поищи тут или на Валуте системы крафтовые. Но ИМХО не рекомендую.
3.
Neverwinter Script Source
void ActionPlayAnimation(int nAnimation, float fSpeed=1.0, float fDurationSeconds=0.0)
void ActionPlayAnimation(Константа Анимации, скорость, продолжительность)

Neverwinter Script Source
4. Скрипт на OnDamge НПС. Превращал его в оборотня (Злые языки утверждают, что иногда он попросту сбегал с локации. pardon.gif Я им не верю. Мой мальчик хороший, если его не бить...
void main()
{
    effect eMind = EffectVisualEffect(VFX_COM_BLOOD_CRT_GREEN); // Немного зеленой крови
    effect eShape = EffectPolymorph(POLYMORPH_TYPE_WEREWOLF); // Выбираем себе костюм на рождество...
    object oPC = GetFirstPC(); // Тут сам решай, кто это оРС.
    object oBoy = OBJECT_SELF; // Этот скрипт стоит на НПС мальчик, у меян в ПЛ

    if (GetLocalInt(OBJECT_SELF, "WERWOLF_YES") == 1)
      return; // если он сработал то больше не запустится код
    {
    SetLocalInt(OBJECT_SELF, "WERWOLF_YES", 1);
    ChangeToStandardFaction(oBoy, STANDARD_FACTION_HOSTILE); // Даем команду мальчику, А НУ СТАНЬ ЗЛОЙ!
    AssignCommand(oBoy, ClearAllActions());
    // Трем ему все что он задумал сделать (в носу поковырять или еще где...)
    ApplyEffectToObject(DURATION_TYPE_INSTANT, eShape, oBoy);
    ApplyEffectToObject(DURATION_TYPE_INSTANT, eMind, oBoy);
    SetImmortal(oBoy, FALSE); // Это он у меня типа бессмертный был. Щас он нормальный (если можно сказать)
    AssignCommand(oBoy, ActionAttack(oPC, FALSE)); // ФАС! Натравим на игрока
    }
}

Lex
QUOTE (Dark@ngel @ Jun 8 2005, 18:52)
2.Как сделать чтобы на столе можно было смешивать определенные предметы и из этого получался какой-нибудь предмет или зелье. Если я не ошибаюсь, то для этого нужны скрипты?

нужны. Тебе для примера накатать простенький вариант?
QUOTE (Dark@ngel @ Jun 8 2005, 18:52)
3.Не могу разобраться с анимационными константами.

Мм... я бы посоветовал сначала:
- http://www.wrg.ru/old/stat_anim_npc1.htm мое мыло в начале статьи уже другое. Слать туда что-то бесполезно.
потом
- http://www.wrg.ru/old/stat_anim_npc2.htm
после этого пости вопросы по этому направлению.
Добавлено в [mergetime]1118245713[/mergetime]
QUOTE (Garou @ Jun 8 2005, 19:08)
Да, а если разные скрипты поставить в ActionTaken и EndNormal они оба работать будут? Или из-за противоречий вообще не будет ничего происходить?

если фраза со скриптом ActionTaken последняя, то сначала запустится этот скрипт, потом конец диалога. Почти одновременно.
Агрессинг
Вещи в двадцать раз сложнее у мя получаются, а вот фигня всякая... Помогите пожалста..
Какой скрипт ставится на ветку диалога, чтобы она появилась при повторном начинании диалога?
Какой скрипт ставится на ветку диалога, чтобы она появилась при определенной записи в дневнике?
Garou
Aiwan!!! Вижу ты на форуме... Если не сильно занят, посмотри на мой сегодняшний пост в 17:50 (...Сел в лужу!!! Непись после...) Нужна помщь. Сам никак...sad.gif
Archangel
Здравствуйте, я тут уже 2й час мучаю ф-ию AdjustAlignment(). И вот, что у меня получилось:
Neverwinter Script Source
void main()
{
object oPC = GetPCSpeaker();
object oNPC1 = GetObjectByTag("P_M41");
int nShift = -60
AdjustAlignment(oPC, oNPC1);
}

Сразу видно, что последняя строчка - это не ф-ия, а ошибка природы. Исправьте пожалуйста, сам я
не допираю... this.gif

QUOTE
Вещи в двадцать раз сложнее у мя получаются, а вот фигня всякая... Помогите пожалста..

У меня такая же фигня... Вон, видишь над какой шнягой мучаюсь... swoon.gif
QUOTE
Какой скрипт ставится на ветку диалога, чтобы она появилась при повторном начинании диалога?

Посмотри в теме "Часто задаваемые вопросы" там это есть. Сам оттуда брал. wink.gif
Auren
void AdjustAlignment(object oSubject, int nAlignment, int nShift)


oSubject - объект, алигмент каторава миняицца
nAligment - собсна сам алигмент(памари в константах, как они там пишуцца. Что-то вроде ALIGNMENT_LAWFUL, ALIGNMENT_GOOD и т.д. Какой нужен ставь)
nShift - эт я думаю пнятна

Далее не пнятна, что ты хочешь. Каму что поменять?
Tiger Greyhawk
To Garou
QUOTE (Garou @ Jun 8 2005, 19:08)
Вот еще что: Убо-Сатло мне описал, как сделать встречу с неписью через 20 дней, там есть && GetTimeHour() == xz // во сколько непись придет (х - это часы, а z - минуты? такой формат 0100 значит час ночи?)

GetTimeHour(); вернет только час. Без всяких минут. Это тот час, в который твой непись должен встретиться с игроком.
QUOTE (Garou @ Jun 8 2005, 19:08)
void main() { object oPC = GetFirstPC(); SetLocalInt(oPC, "RAZBORKA", TRUE); } Это можно ставить на начало разговора в ActionTaken?

Проще, имо, добавить это в скрипт начала разборки. Например, после атаки или начала разговора. Это переменная, которая не даст неписю (скрипту) еще раз начать разборку или диалог. А то он у тебя в течении часа (GetTimeHour(); ) каждые шесть секунд (у тебя на хертбите модуля скрипт) будет начинать все сначала.
QUOTE (Garou @ Jun 8 2005, 19:08)
И как можно проверить, работает ли вся эта конструкция? Ждать 20 дней проблемно...

Дык, замени GetCalendarDay(); на GetTimeHour(); и поставь на один-два часа вперед. Вот и проверишь.
QUOTE (Garou @ Jun 8 2005, 19:08)
Как из bmu в wav переименовать? Расширение изменить (только не бейте smile.gif!!) или? DBColl а как в конечном итоге будет выглядеть этот скрипт?

Сначала конвертнуть два раза, а потом просто заменить расширение.
Скрипт будет выглядеть:
Neverwinter Script Source
void main()
{
PlaySound("имя файла");
}

еще главный (насколько я понял) момент. Файл ОБЯЗАТЕЛЬНО должен быть моно.



To Archangel
QUOTE (Auren @ Jun 8 2005, 22:47)
nShift - эт я думаю пнятна

Судя по скрипту Archangel`а ему как раз это-то и непонятно... Это на какую позицию ты хочешь поставить элаймент. пример: AdjustAlignment(oPC, ALIGNMENT_LAWFUL, 100) - сдвинет элаймент по оси LAWFUL/EVIL на отметку LAWFUL 100% (вроде так)
Добавлено в [mergetime]1118281784[/mergetime]
Эмс... сорри, пропустил:
QUOTE (Garou @ Jun 8 2005, 18:50)
Непись после разговора должна идти к вейпоинту, там постоять несколько секунд, потом сказать фразу(при этом над ее головой появится эта фраза) и исчезнуть.


вот:
Neverwinter Script Source
void main()
{
object oNPC = GetObjectByTag("NPC");
object oWayPoint = GetWaypointByTag("WP");
ActionMoveToObject(oWayPoint);
ActionWait(3.0);
ActionSpeakString("текст фразы");
ActionDoCommand(PlaySound("имя_файла")); // <-- не проверял
ActionDoCommand(DestroyObject(oNPC, 3.0));
}
Убо-Сатло
QUOTE (Garou @ Jun 8 2005, 19:08)
&& GetTimeHour() == xz // во сколько непись придет (х - это часы, а z - минуты?

xz - по русски "хз" это самая неопределенная переменная какую я знаю. В своем скрипте вместо этого вставь цифру от 0 до 23, во сколько хочешь, чтоб непись пришел.
QUOTE (Garou @ Jun 8 2005, 19:08)
SetLocalInt(oPC, "RAZBORKA", TRUE);

А это можно вставить в разные места, я не знаю как у тебя в модуле развиваются события. Я бы, чтоб не писать отдельный скрипт, вставил в ХБ модуля вот так:
Neverwinter Script Source
void main()
{
  object oPC = GetFirstPC();
  object oNPC = GetObjectByTag("ТВОЙ NPC");
  int S = GetLocalInt(OBJECT_SELF, "STRELKA");
  if(S == GetCalendarDay()
  && GetTimeHour() == xz;
  && GetLocalInt(oPC, "RAZBORKA")!= TRUE)
{
    AssignCommand(oNPC, ActionJumpToObject(oPC));
    AssignCommand(oNPC, ActionAttack(oPC));
    //или
    AssignCommand(oNPC, ActionStartConversation(oPC));
    if(GetDistanceBetween(oPC, oNPS)<=2.0)//когда непись будет
    // в 2 или  меньше(метрах или футах? точно не знаю от PC)
    {
    SetLocalInt(oPC, "RAZBORKA", TRUE);
    }
}
}

QUOTE (Garou @ Jun 8 2005, 19:08)
И как можно проверить, работает ли вся эта конструкция? Ждать 20 дней

Я для проверки таких скриптов использую вот такую "машину времени":
Делаю любой юзабельный плэйс, рычаг, например и на онюзе ставлю скрипт:
Neverwinter Script Source
void main()
{
SetCalendar(GetCalendarYear(), int  /*какой нужен месяц*/ ),  int  /*какое нужно число*/));
SetTime(int nHour(/*какой нужен час*/), 0, 0, 0);
}

И у тебя сразу в игре наступает нужное время
Garou
Низкий Вам поклон, Убо-Сатло, Auren и TigerGrayhawk good.gif !!!
Вчера создал книгу (item) с квестовой инфой. Как сделать обновление дневника игрока при ее чтении? Куда ставится этот скрипт?
Добавлено в 08:47
Да, сори, а ...int /*какой нужен месяц*/ ), int /*какое нужно число*/))...*какой нужен месяц* и *какое нужно число* - числа?
Auren
QUOTE (Garou @ Jun 9 2005, 08:44)
Вчера создал книгу (item) с квестовой инфой. Как сделать обновление дневника игрока при ее чтении? Куда ставится этот скрипт?



Должно быть на OnActivateItem в свойствах модуля. Вылгядеть должно примерно так:


Neverwinter Script Source
void main()
{
    object oPC = GetItemActivator();
    object oBook = GetItemActivated();
    string sBookTag = GetTag( oBook );
    if ( sBookTag == "BOOK_TAG" )
    {
        AddJournalQuestEntry("JC_TAG", k, oPC, FALSE, FALSE, FALSE);//три последних параметра ставь, как те нуна
    }
}

//k - integer. Это ID dfkjwhjg
//BOOK_TAG - тэг книги
//JK_TAG - тэг категории журнала
Агрессинг
Хмхмхмх. посмотрел в часто задаваемых вопросах как сделать, чтобы при повторном подходе Непись говорил другую фразу. Там написанно так
Neverwinter Script Source
1. d_st_firsttalk

Neverwinter Script Source
void main()
{
SetLocalInt(OBJECT_SELF,"FirstTalk",TRUE);
}


2. d_ch_firsttalk

Neverwinter Script Source
int StartingConditional()
{
return GetLocalInt(OBJECT_SELF,"FirstTalk");
}

Но у меня нпс все равно говорит первоначальную фразу! Я ставил скрипты и на фразу героя и на фразу НПСа, но ничего не выходит! В чем может быть проблема, подскажите пожалуйста.
Auren
2Агрессинг

Скажи подробней, что тибе надо, плиз.
Агрессинг
Auren
Ну как вот ты это делаешь? На чью реплику ставишь 2ой скрипт? А первый? В этом скрипте точно все верно? "FirstTalk" можно назвать, например "FirstTalkNPC"?
Ответь пожалуйста, а я проверю и отпишусь об результате. Мне бы модуль с этой ф-ней, я бы сравнил, но тут на форуме привязывать файлы только админы имеют право..
Auren
Переменную мона обзывать практически как угодно, не в ней дело.
Я прошу тебя описать ситуацию, чтобы понять, что тебе нужно.
Тебе нужно чтобы типа когда разговариваешь с неписем первый раз, он гварил адну фразу, а птом все время вторую? Или у тебя список этих фраз(10 например) и непись должен говорить их поочереди или рандомна?
Lex
QUOTE (Агрессинг @ Jun 9 2005, 15:02)
Но у меня нпс все равно говорит первоначальную фразу! Я ставил скрипты и на фразу героя и на фразу НПСа, но ничего не выходит! В чем может быть проблема, подскажите пожалуйста.

Я писал не так давно о том, как там правильно ставить проверки. Повторю наверное:
ВЫБОР ФРАЗЫ НПС:
берет первую. Если подходит условие, то НИЖЕ НЕ ИДЕТ И ВЫДАЕТ ЕЕ. (те если условия там нет, то фразы под ней НИКОГДА не вылезут)
Если условие не подошло, то берет слуд. фразу. и так до тех пор, пока не выполнится условие или не кончатся фразы (в этом случае диалог оборвется).
ВЫБОР ФРАЗ-ВАРИАНТОВ ИГРОКА:
проверка условия. Если выполняется, то фразу можно выбрать. Иначе - нельзя.


А теперь смотри, что ты там у себя в диалоге наворотил.
Агрессинг
Я взялLex

Ну это понятно. У меня две корневые фразы. 1-ая вылезает при первом начале диалога. На Actions ей я ставлю 1ый скрипт
2-ая должна вылезать при условии, заданной первой фразой. На text appears when ставлю 2ой скрипт. Все вроде правильно, но НПС всегда говорит одну фразу.
может дело в глючном toolsetе ? Я для проверки встроенным визардом сделал скрипт на текст, чтобы он появлялся при вещи в инвентаре, но текст опять же не появился! swoon.gif
Lex
Эх..... ты читаешь недостаточно внимательно (думая наверное, что сам это отлично знаешь).
ПЕРВАЯ фраза должна быть с ПРОВЕРКОЙ
ВТОРАЯ фраза с УСТАНОВКОЙ локалки.

диалог. Начало. Фразы НПС.
>> Привет, снова ты? Что тебе нужно? (ТУТ СКРИПТ d_ch_firsttalk в закладке text appears when )
>> Привет, я тебя тут раньше не видел...... (ТУТ СКРИПТ d_st_firsttalk в закладке Actions)
Archangel
Есть вопросик... А сколько можно вешать локальных переменных на Игрока за один скрипт? А то уменя есть скрипт:
Neverwinter Script Source
void main()
{
SetLocalInt(OBJECT_SELF,"10",TRUE);
SetLocalInt(OBJECT_SELF,"11",TRUE);
SetLocalInt(OBJECT_SELF,"12",TRUE);
}

Но так получается, что работает только самая верхняя пременная, а другие нет. Я уже по 5-6 раз
проверил правильность скриптов, вызывающих лок. перменные '11' и '12'. Все верно. Каждая пременная
служит для разных диалогов с разными НПС. Но работает только та, которая вызывает другой диалог у НПС, на ветке которого этот скрипт и стоит. И что же делать? swoon.gif
Lex
если это скрипт в диалоге, то ты вешаешь локалки на НПС, с которым НАЧАЛ диалог. (не важно на чьей фразе стоит скрипт)
Если тебе нужен игрок, юзай
Neverwinter Script Source
object oPC = GetPCSpeaker();
SetLocalInt(oPC,"LOCAL",1); // и тд
Aiwan
Агрессинг иди как сливай мой мануал и смотри. Там это все разжевано, только в рот клади.
Archangel во первых, мы тут видим только один из четырех скриптов. Во вторых не знаем структуру твоего диалога. Подумай своей тыковкой, если у тебя стоит три строки в ряд и ВСЕ ТРИ СРАБАТЫВАЮТ? Ну? И на какой он будет работать? На самой верхней, верно. К тому же OBJECT_SELF это чаще всего НПС на которм стоит диалог. Игрока лови так: GetPCSpeaker(); И если ты скажешь что нет примера такого сложного диалога в моей статье, то я тебе влеплю второй пред. this.gif
Garou
QUOTE (Tiger Greyhawk @ Jun 9 2005, 03:00)
Сначала конвертнуть два раза, а потом просто заменить расширение.

Может это глюк, но я сегодня вставил в хак файл WAV без двойных конвертаций... (правда сделал его изначально моно) и он PlaySound() воспроизвелся. Кому я "открыл Америку" проверте плиз, а то я начинаю думать, что достал свой тулсет настолько, что он уже на все согласен bad.gif
Добавлено в 21:47
Теперь к проблемам, у меня их всегда много...
Этот скрипт я поставил в ActionTaken на последней реплике PC в ветке диалога
Neverwinter Script Source
void main()
{
object oPC = GetPCSpeaker();
int d = GetLocalInt(oPC, "data");
SetLocalInt(oPC, "data", GetCalendarDay());
if(d<=8)
{
  SetLocalInt(GetModule(), "STRELKA", d+20);
}
else
{
  SetLocalInt(GetModule(), "STRELKA", (d+20)-28);
}
}


Этот – стоит на хартбите модуля
Neverwinter Script Source
void main()
{
  object oPC = GetFirstPC();
  object oNPC = GetObjectByTag("моя непись");
  int S = GetLocalInt(OBJECT_SELF, "STRELKA");
  if(S == GetCalendarDay()
  && GetTimeHour() == 14
  && GetLocalInt(oPC, "RAZBORKA")!= TRUE)
{
    AssignCommand(oNPC, ActionJumpToObject(oPC));
    AssignCommand(oNPC, ActionStartConversation(oPC));
    if(GetDistanceBetween(oPC, oNPC)<=2.0)
    {
    SetLocalInt(oPC, "RAZBORKA", TRUE);
    }
}
}


А этим рычагом я прокручиваю время, дабы проверить эту конструкцию в работе:
Neverwinter Script Source
void main()
{
SetCalendar(GetCalendarYear(), GetCalendarMonth(), GetCalendarDay()+19); /Странно, но если поставить 20, то при узании с 1го числа идет переход в 22?!/
SetTime(13, 0, 0, 0);
}


Но в модуле ничего не происходит. Где моя ошибка?sad.gif
Также пробовал
Neverwinter Script Source
void main()
{
object oPC = GetPCSpeaker();
int d = GetLocalInt(oPC, "data");
SetLocalInt(oPC, "data", GetTimeHour());
if(d==13)
{
  SetLocalInt(GetModule(), "STRELKA", d+1);
}
}

Neverwinter Script Source
void main()
{
  object oPC = GetFirstPC();
  object oNPC = GetObjectByTag("моя непись");
  int S = GetLocalInt(OBJECT_SELF, "STRELKA");
  if(S == GetTimeHour()
  && GetLocalInt(oPC, "RAZBORKA")!= TRUE)
{
    AssignCommand(oNPC, ActionJumpToObject(oPC));
    AssignCommand(oNPC, ActionStartConversation(oPC));
        if(GetDistanceBetween(oPC, oNPC)<=2.0)
    {
    SetLocalInt(oPC, "RAZBORKA", TRUE);
    }
}
}


Результкт тот же shout.gif




LEX: ЕЩЕ РАЗ УВИЖУ СКРИПТЫ, НАПИСАННЫЕ НЕ В NSS - СРАЗУ ПРЕД.
Dark@ngel
Добрый вечер всем! Хотела поинтересоваться какой скрипт надо вешать, чтобы НПС дал НП определенный предмет. И если не затруднит-не подкинете пару скриптиков на головоломку (скачала уже одну-где на плиты нажимаешь и слово составляешь, а потом дергаешь за рычаг и дверь открывается). dirol.gif
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.
Invision Power Board © 2001-2024 Invision Power Services, Inc.