Nick Parker
Jun 7 2005, 02:29
QUOTE (Aiwan @ Jun 6 2005, 21:51) |
А диалоги? Скриптинг, это сложно но возможно. |
Сделать можно все, что можно вообразить, а я вообразил о себе невообразуемое. Но буду пытаться до потери зрения, но никак интереса.
QUOTE (Lex @ Jun 6 2005, 22:14) |
Начал весной 2003, прошло 2 года... |
Это очень смешно Lex, очень. Я минуту смеялся, а потом плакал не меньше.
Вопрос к бывалым модулестроителям: как Вы избегаете половой неразберихи в диалогах ( иногда в играх встречаются реплики девушек с мужскими окончаниями (сделал, убил....))? Пишете нейтральные (... смотришь, делаешь...) или вообще не заморачиваетесь над этими вопросами?
Дело в том, что для русских это действительно сложгый вопрос. В аглицком нет родОв... Им проще.
Можно конечно писать диалоги нейтральные... Но чтобы подчеркнуть "половую привязанность" действительно нужно писать УНИКАЛЬНЫЕ диалоги для мужчины и для женщины. А это двойной объем работы. Именно поэтому, допустим, мы в ПЛ ограничились 210 000 слов диалогов для МУЖЧИНЫ. И судьба расских модулей гораздо сложнее, если он расчитан на универсальных диалогах. Их очень трудно писать...

Легче, естественно не заморачиваться.
Таким образом в начале диалога делалась проверка на Пол игрока?
-fenix-
Jun 7 2005, 11:24
В заклатке "текст появляется при" есть изображение шляпки, нажимай на нее и там найдешь много стандартных проверок: способность, класс, раса, пол...
Вот еще такой вопрос. Игрок встречает в модуле непись, которая сообщает ему, что через определенное время (скажем 20 дней) найдет игрока и "грохнет". Существует ли возможность заставить непись появится через этот промежуток времени перед персонажем?
Да, возможно. Для этого прежде всего надо написать свою функцию перевода любой даты в секунды от 0 года, 0 месяца, 0 дня и тп.. (DateToSeconds). Расчитать с помощью ее время через 20 дней и запомнить де-нить на локалках. Затем ввести условие в ХБ модуля, что при наступлении этой даты (в секундах) срабатывает тот-то скрипт... Вот и все. Главное написать функцию DateToSeconds или ..ToMinute...

DelayCommand не стоит юзать в таких разрывах, ибо много факторов, которые этот делэй могут притормозить или того хуже сбить... Как-то например иногда бывает даже при загрузке сохраненки...
Убо-Сатло
Jun 7 2005, 12:38
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 сек
QUOTE (Garou @ Jun 7 2005, 13:20) |
Вопрос к бывалым модулестроителям: как Вы избегаете половой неразберихи в диалогах |
Мои 5 юаней. ИМХО. Сделать унисексовый сюжет очень трудно и в любом случае это бяка... Чем меньше разброса, тем сочнее. Определитесь с полом, модуль за даму тоже прикольно сделать, и в путь
Шпасибо, Шпасибо!!! Буду внедрять это в жизнь. Позвольте еще спросить:
Хочу, чтоб при юзании следов выскакивало диалоговое окно, в котором писалась инфа. Сделал следы юзабельными, написал ветку диалога вставил ее в поле Conversation и на onUse поставил скрипт StartConversation и ничего... (Вы там ишо дружно не смеетесь?)

Как это сделать правильно?
Добавлено в [mergetime]1118152690[/mergetime] Еще. Хотел создать книгу (журнал NPC) все хорошо, но в игре она отображается в мешке!!! Что за бред. Я могу конечно ее запхнуть в ящик, но хотелось бы на столике выложить... Подскажите, а заодно и где находятся эти "...

" листики бумаги на которых в игре писалась инфа???
Фух... Вроде все спрсил че хотел
QUOTE (Aiwan @ Jun 7 2005, 15:53) |
Чем меньше разброса, тем сочнее. |
Согласен на все 100%

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

Короче на OnUse ставь:
Neverwinter Script Source |
void main() { ActionStartConversation(GetLastUsedBy()); } |
QUOTE (Garou @ Jun 7 2005, 19:54) |
но в игре она отображается в мешке!!! |
Правильно, это же итем. Я не совсем понял о чем ты. Возможно про ПЛ наш? Если да, то листики это хак. И к тому же, эти листики PLS-объекты а не ITM-ы как книги.
Garouесли что-то не работает, описывай точнее. ибо, например, StartConversation вообще не существует. листики - создавай новый item типа Miscellaneous Medium и в Description/Unidentified desc вписывай текст листика. можно плэйс Book Piles на стол положить, а в него уже вложить листик
Убо-Сатло
Jun 7 2005, 20:04
QUOTE (Garou @ Jun 7 2005, 17:54) |
Хотел создать книгу (журнал NPC) все хорошо, но в игре она отображается в мешке... хотелось бы на столике выложить |
Можно выложить на столик плэйсовую книгу, юзабельную. И на онюзе воткнуть
Neverwinter Script Source |
void main() { CreateItemOnObject("resref книги", GetLastUsedBy(), 1); DestroyObject(OBJECT_SELF); } |
Только не забудь в палитре создать саму книгу с нужным резрефом.
Правда, если потом перс ее на землю положит, она все равно мешком станет. Можно, конечно сделать скрипт в хеарбите модуля, чтобы выброшеный предмет снова в плэйс превращался, но в данном случае это скорее всего не принципиально.
QUOTE (Убо-Сатло @ Jun 7 2005, 21:04) |
скрипт в хеарбите модуля |
не в ХБ а в unaquire..вроде так пишется.
Dark@ngel
Jun 7 2005, 20:21
1.Как сделать чтобы НПС лежал мертвым?
2.Куда вствлять анимационные константы?
3.Скачала скрипт банка, а там написано "Все эти действия а так же ответы ДА и НЕТ производятся посредством обыкновенного чата(НЕ диалога)". Как понять чата?Куда нужно ставить?
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 И текст появится над игроком. Это и есть чат.
Убо-Сатло
Jun 7 2005, 20:57
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?
QUOTE (Убо-Сатло @ Jun 7 2005, 21:57) |
Lex, OnAcquireItem'ом я еще не разу не пользовался, но я так понял, это когда перс теряет итем, не обязательно бросает на пол, продал например. Нет? |
да. Но ничего не мешает это дело отследить попробовать. (вариант 1 это в скриптах открыть/закрыть магазин прописать установку локалок.. Вариант 2...надо подумать)
по поводу перевоплощения выложенной вещи - 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()); } |
Ого!!! Столько советов!!! Супер

Спасибо Всем, кто откликнулся на мой зов!
Archangel
Jun 8 2005, 10:27
Извините, я понимаю, что скорее всего этот вопрос где-то уже был, но я просто не имею возможности искать его(инет нерезиновый),немог бы кто-нибудь мне написать скрипт, дающий + или - к направленности Игрока? Оч важно.
QUOTE (Убо-Сатло @ Jun 7 2005, 20:57) |
З.Ы. Кто-нибудь, подскажите, пожалуйста: как выдрать из игры иконку, чтобы она открывалась в каком-нибудь человеческом формате, а не в mdl, pwk, tga? |
Иконки лежат в 24битном tga-формате. Нормальный формат, который открывается любым просмотрщиком или растровым редактором (фотожоп, корел и тп..)

QUOTE (Archangel @ Jun 8 2005, 10:27) |
Извините, я понимаю, что скорее всего этот вопрос где-то уже был, но я просто не имею возможности искать его(инет нерезиновый),немог бы кто-нибудь мне написать скрипт, дающий + или - к направленности Игрока? Оч важно. |
AdjustAlignment(oPC, ...); //смотри ее описание.
Archangel
Jun 8 2005, 13:27
QUOTE |
AdjustAlignment(oPC, ...); //смотри ее описание. |
Сенкс
Айван: И что это за содержательный пост? Еще раз и влеплю пред.
Сел в лужу

!!! Непись после разговора должна идти к вейпоинту, там постоять несколько секунд, потом сказать фразу(при этом над ее головой появится эта фраза) и исчезнуть. Сожалею, что не могу привести ниже свой скрипт, я выхожу в нет из различных инет-кафе

(нет здесь НВН и близко!!!). Как заставить его сказать фразу (ее я предварительно записал в вавовском файле и добавил в свой хак), для этого будет использоваться PlayVoiceChat? PlaySound? Или что-то другое! За синтаксис извините. Нет под рукой тулсета чтоб правильность глянуть. И есть ли разница, поставить этот скрипт в конец диалога на ActionTaken или на Normal завершение диалога?
Dark@ngel
Jun 8 2005, 17:52
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.И последнее, как сделать,чтобы НПС превращался например в оборотня и наоборот?
Заранее премного благодарна!
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.

Вот так это делается.
Добавлено в [mergetime]1118243330[/mergetime] QUOTE (Dark@ngel @ Jun 8 2005, 17:52) |
1.Как сделать чтобы НПС лежал/спал? |
На heartbeat непися вешай ActionPlayAnimation(ANIMATION_LOOPING_DEADFRONT, 1.0, 9999.0); - будет долго спать.
Dark@ngel Слишком много вопросов, на которые ты хочешь получить ответы СРАЗУ. Большинство из них простым тычком не решаются. Скачай и почитай документацию Айвана у нас на сайте, много вопросов отпадет и в целом многие вопросы ты станешь задавать более конкретно.
Как из bmu в wav переименовать? Расширение изменить (только не бейте

!!) или? 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 они оба работать будут? Или из-за противоречий вообще не будет ничего происходить?
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 НПС. Превращал его в оборотня (Злые языки утверждают, что иногда он попросту сбегал с локации. Я им не верю. Мой мальчик хороший, если его не бить... 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)); // ФАС! Натравим на игрока } } |
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 последняя, то сначала запустится этот скрипт, потом конец диалога. Почти одновременно.
Агрессинг
Jun 8 2005, 19:25
Вещи в двадцать раз сложнее у мя получаются, а вот фигня всякая... Помогите пожалста..
Какой скрипт ставится на ветку диалога, чтобы она появилась при повторном начинании диалога?
Какой скрипт ставится на ветку диалога, чтобы она появилась при определенной записи в дневнике?
Aiwan!!! Вижу ты на форуме... Если не сильно занят, посмотри на мой сегодняшний пост в 17:50 (...Сел в лужу!!! Непись после...) Нужна помщь. Сам никак...
Archangel
Jun 8 2005, 20:36
Здравствуйте, я тут уже 2й час мучаю ф-ию AdjustAlignment(). И вот, что у меня получилось:
Neverwinter Script Source |
void main() { object oPC = GetPCSpeaker(); object oNPC1 = GetObjectByTag("P_M41"); int nShift = -60 AdjustAlignment(oPC, oNPC1); } |
Сразу видно, что последняя строчка - это не ф-ия, а ошибка природы. Исправьте пожалуйста, сам я
не допираю...
QUOTE |
Вещи в двадцать раз сложнее у мя получаются, а вот фигня всякая... Помогите пожалста.. |
У меня такая же фигня... Вон, видишь над какой шнягой мучаюсь...
QUOTE |
Какой скрипт ставится на ветку диалога, чтобы она появилась при повторном начинании диалога? |
Посмотри в теме "Часто задаваемые вопросы" там это есть. Сам оттуда брал.
void AdjustAlignment(object oSubject, int nAlignment, int nShift)
oSubject - объект, алигмент каторава миняицца
nAligment - собсна сам алигмент(памари в константах, как они там пишуцца. Что-то вроде ALIGNMENT_LAWFUL, ALIGNMENT_GOOD и т.д. Какой нужен ставь)
nShift - эт я думаю пнятна
Далее не пнятна, что ты хочешь. Каму что поменять?
Tiger Greyhawk
Jun 9 2005, 03:00
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)); } |
Убо-Сатло
Jun 9 2005, 08:06
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); } |
И у тебя сразу в игре наступает нужное время
Низкий Вам поклон, Убо-Сатло, Auren и TigerGrayhawk

!!!
Вчера создал книгу (item) с квестовой инфой. Как сделать обновление дневника игрока при ее чтении? Куда ставится этот скрипт?
Добавлено в 08:47 Да, сори, а ...int /*какой нужен месяц*/ ), int /*какое нужно число*/))...*какой нужен месяц* и *какое нужно число* - числа?
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 - тэг категории журнала |
Агрессинг
Jun 9 2005, 14:02
Хмхмхмх. посмотрел в часто задаваемых вопросах как сделать, чтобы при повторном подходе Непись говорил другую фразу. Там написанно так
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"); } |
Но у меня нпс все равно говорит первоначальную фразу! Я ставил скрипты и на фразу героя и на фразу НПСа, но ничего не выходит! В чем может быть проблема, подскажите пожалуйста.
2Агрессинг
Скажи подробней, что тибе надо, плиз.
Агрессинг
Jun 9 2005, 14:18
Auren
Ну как вот ты это делаешь? На чью реплику ставишь 2ой скрипт? А первый? В этом скрипте точно все верно? "FirstTalk" можно назвать, например "FirstTalkNPC"?
Ответь пожалуйста, а я проверю и отпишусь об результате. Мне бы модуль с этой ф-ней, я бы сравнил, но тут на форуме привязывать файлы только админы имеют право..
Переменную мона обзывать практически как угодно, не в ней дело.
Я прошу тебя описать ситуацию, чтобы понять, что тебе нужно.
Тебе нужно чтобы типа когда разговариваешь с неписем первый раз, он гварил адну фразу, а птом все время вторую? Или у тебя список этих фраз(10 например) и непись должен говорить их поочереди или рандомна?
QUOTE (Агрессинг @ Jun 9 2005, 15:02) |
Но у меня нпс все равно говорит первоначальную фразу! Я ставил скрипты и на фразу героя и на фразу НПСа, но ничего не выходит! В чем может быть проблема, подскажите пожалуйста. |
Я писал не так давно о том, как там правильно ставить проверки. Повторю наверное:
ВЫБОР ФРАЗЫ НПС:
берет первую. Если подходит условие, то НИЖЕ НЕ ИДЕТ И ВЫДАЕТ ЕЕ. (те если условия там нет, то фразы под ней НИКОГДА не вылезут)
Если условие не подошло, то берет слуд. фразу. и так до тех пор, пока не выполнится условие или не кончатся фразы (в этом случае диалог оборвется).
ВЫБОР ФРАЗ-ВАРИАНТОВ ИГРОКА:
проверка условия. Если выполняется, то фразу можно выбрать. Иначе - нельзя.
А теперь смотри, что ты там у себя в диалоге наворотил.
Агрессинг
Jun 9 2005, 15:30
Я взял
Lex Ну это понятно. У меня две корневые фразы. 1-ая вылезает при первом начале диалога. На Actions ей я ставлю 1ый скрипт
2-ая должна вылезать при условии, заданной первой фразой. На text appears when ставлю 2ой скрипт. Все вроде правильно, но НПС всегда говорит одну фразу.
может дело в глючном toolsetе ? Я для проверки встроенным визардом сделал скрипт на текст, чтобы он появлялся при вещи в инвентаре, но текст опять же не появился!
Эх..... ты читаешь недостаточно внимательно (думая наверное, что сам это отлично знаешь).
ПЕРВАЯ фраза должна быть с ПРОВЕРКОЙ
ВТОРАЯ фраза с УСТАНОВКОЙ локалки.
диалог. Начало. Фразы НПС.
>> Привет, снова ты? Что тебе нужно? (ТУТ СКРИПТ d_ch_firsttalk в закладке text appears when )
>> Привет, я тебя тут раньше не видел...... (ТУТ СКРИПТ d_st_firsttalk в закладке Actions)
Archangel
Jun 9 2005, 19:19
Есть вопросик... А сколько можно вешать локальных переменных на Игрока за один скрипт? А то уменя есть скрипт:
Neverwinter Script Source |
void main() { SetLocalInt(OBJECT_SELF,"10",TRUE); SetLocalInt(OBJECT_SELF,"11",TRUE); SetLocalInt(OBJECT_SELF,"12",TRUE); } |
Но так получается, что работает только самая верхняя пременная, а другие нет. Я уже по 5-6 раз
проверил правильность скриптов, вызывающих лок. перменные '11' и '12'. Все верно. Каждая пременная
служит для разных диалогов с разными НПС. Но работает только та, которая вызывает другой диалог у НПС, на ветке которого этот скрипт и стоит. И что же делать?
если это скрипт в диалоге, то ты вешаешь локалки на НПС, с которым НАЧАЛ диалог. (не важно на чьей фразе стоит скрипт)
Если тебе нужен игрок, юзай
Neverwinter Script Source |
object oPC = GetPCSpeaker(); SetLocalInt(oPC,"LOCAL",1); // и тд |
Агрессинг иди как сливай мой мануал и смотри. Там это все разжевано, только в рот клади.
Archangel во первых, мы тут видим только один из четырех скриптов. Во вторых не знаем структуру твоего диалога. Подумай своей тыковкой, если у тебя стоит три строки в ряд и ВСЕ ТРИ СРАБАТЫВАЮТ? Ну? И на какой он будет работать? На самой верхней, верно. К тому же OBJECT_SELF это чаще всего НПС на которм стоит диалог. Игрока лови так: GetPCSpeaker(); И если ты скажешь что нет примера такого сложного диалога в моей статье, то я тебе влеплю второй пред.
QUOTE (Tiger Greyhawk @ Jun 9 2005, 03:00) |
Сначала конвертнуть два раза, а потом просто заменить расширение. |
Может это глюк, но я сегодня вставил в хак файл WAV без двойных конвертаций... (правда сделал его изначально моно) и он PlaySound() воспроизвелся. Кому я "открыл Америку" проверте плиз, а то я начинаю думать, что достал свой тулсет настолько, что он уже на все согласен
Добавлено в 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); } |
Но в модуле ничего не происходит. Где моя ошибка?

Также пробовал
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); } } } |
Результкт тот же
LEX: ЕЩЕ РАЗ УВИЖУ СКРИПТЫ, НАПИСАННЫЕ НЕ В NSS - СРАЗУ ПРЕД.
Dark@ngel
Jun 9 2005, 22:37
Добрый вечер всем! Хотела поинтересоваться какой скрипт надо вешать, чтобы НПС дал НП определенный предмет. И если не затруднит-не подкинете пару скриптиков на головоломку (скачала уже одну-где на плиты нажимаешь и слово составляешь, а потом дергаешь за рычаг и дверь открывается).