![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() ![]() |
![]() |
![]()
Сообщение
#296
|
|
Level 5 ![]() Класс: Обыватель Характер: Lawful Neutral Раса: Человек NWN: Модмейкер Проклятие Левора Порядок Времени ![]() |
|
![]()
Сообщение
#297
|
|
Level 9 ![]() ![]() ![]() Класс: Фея Характер: Chaotic Evil Раса: Фея ![]() |
Здрасте, мастера.
Либо я вконец отупел за лето, либо садиться за тулсет после сурового рабочего дня не такая уж и хорошая идея. Суть вот в чем, нужен скрипт, который вешается на хартбит и заставляет непися вещать каждые две минуты какую-нибудь стринговую строку. Neverwinter Script void main() { if (GetLocalInt(OBJECT_SELF, "script_fired") != TRUE) { SetLocalInt(OBJECT_SELF, "script_fired", TRUE); ClearAllActions(); //AssignCommand(OBJECT_SELF, (ActionWait(2.0))); AssignCommand(OBJECT_SELF, (ActionSpeakString("строка1"))); AssignCommand(OBJECT_SELF, (ActionWait(120.0))); AssignCommand(OBJECT_SELF, (ActionSpeakString("строка2"))); AssignCommand(OBJECT_SELF, (ActionWait(120.0))); AssignCommand(OBJECT_SELF, (ActionSpeakString("строка3"))); SetLocalInt(OBJECT_SELF, "script_fired", FALSE); } } Проблема в том, что несмотря на проверку в начале, непись все равно говорит лишь только первую строку каждые шесть секунд... |
![]()
Сообщение
#298
|
|
Level 19 ![]() Класс: Воин Характер: Lawful Good Раса: Человек NWN: Скриптинг [PW] Gem of the North Край Лесов ![]() |
Wait-ы тормозят непися, а не исполнение скрипта. Флаг запуска скидывается сразу же после установки, поэтому через 6 сек скрипт срабатывает по новой.
|
![]()
Сообщение
#299
|
|
Level 9 ![]() ![]() ![]() Класс: Фея Характер: Chaotic Evil Раса: Фея ![]() |
Ну и как же мне тогда поступить?
А то я хз вообще. |
![]()
Сообщение
#300
|
|
Level 8 ![]() ![]() ![]() Класс: Псионик Характер: Chaotic Neutral Раса: Хафлинг ![]() |
Делай удаление переменной таймера с какии-то периодом. Типа
Neverwinter Script void main() { if(GetLocalInt(OBJECT_SELF, "TIMEOUT")) return; SetLocalInt(OBJECT_SELF, "TIMEOUT", TRUE); DelayCommand(3600.0, DeleteLocalInt(OBJECT_SELF, "TIMEOUT")); ...Твой код } Правда проверки сердцебиения проводятся раз в 6с так что действия не кратные этому промежутку сделать проблематично. Сообщение отредактировал PaiNt - Sep 24 2010, 06:16 |
![]()
Сообщение
#301
|
|
Level 9 ![]() ![]() ![]() Класс: Фея Характер: Chaotic Evil Раса: Фея ![]() |
Спасибо, работает как надо...
|
![]()
Сообщение
#302
|
|
Level 19 ![]() Класс: Воин Характер: Lawful Good Раса: Человек NWN: Скриптинг [PW] Gem of the North Край Лесов ![]() |
Для шарда промежутки, большие хб, делаются через деление с остатком аптайма на нужный интервал. Аптайм - переменная на модуле, равна времени работы мода в секундах (каждый хб просто аптайм+=6).
Скажем так: Neverwinter Script if (nUptime % 120 == 0) // остаток равен нулю, срабатывает раз в 120 секунд Плюсы - не требует делеев вообще. |
![]() ![]()
Сообщение
#303
|
|
Level 3 ![]() Класс: Маг Характер: True Neutral Раса: Нежить ![]() |
Не, чувак, все немного не так. Будешь писать не в тему (или в такой же нагловатой манере, как сейчас) - схлопочешь пред. Я имел в виду что буду стараться искать подходяшие темы для вопросов,а вовсе не хотел кого то оскорбить (IMG:style_emoticons/kolobok_light/unsure.gif) Просто в тругих темах моих вопросов (на которые так и не ответили) дофига.Я решил найти по темам хоть кого то,кто мне поможет (IMG:style_emoticons/kolobok_light/unsure.gif) |
![]()
Сообщение
#304
|
|
Level 18 ![]() Класс: Страж Тьмы Характер: True Neutral Раса: Человек МАСТЕР D&D ![]() |
Если не отвечают - значит не сталкивался никто. Если тебе нужно получить ответ быстро, пиши лучше на официальном форуме.
|
![]()
Сообщение
#305
|
|
Level 19 ![]() Класс: Воин Характер: Lawful Good Раса: Человек NWN: Скриптинг [PW] Gem of the North Край Лесов ![]() |
Имхо нвн2 сам по себе тут настолько популярен, что лучше вопросы вообще гуглить (IMG:style_emoticons/kolobok_light/smile.gif) А скрипты искать в разделе нвн1 (хотя бы потому, что скрипты по сути не менялись, и огромные гайды и сборники оттуда сюда никто не переносил).
Нвн1 живёт всего в 2 раза дольше нвн2, однако в его разделе в 3 раза больше топиков и в 4 раза больше постов. |
![]()
Сообщение
#306
|
|
Level 5 ![]() Класс: Обыватель Характер: Lawful Neutral Раса: Человек NWN: Модмейкер Проклятие Левора Порядок Времени ![]() |
а смысл гуглить.. есть еще русскоязычные форумы по НВН2 где чуть больше чем 2 темы и последний ответ был полгода назад? (IMG:style_emoticons/kolobok_light/smile.gif)
я не в плане поглумиться, я просто таких площадок сам не знаю, мне любопытно. |
![]()
Сообщение
#307
|
|
Level 19 ![]() Класс: Воин Характер: Lawful Good Раса: Человек NWN: Скриптинг [PW] Gem of the North Край Лесов ![]() |
По-английски гуглить (IMG:style_emoticons/kolobok_light/smile.gif) По очень многим вопросам (не только по нвн или играм вообще) приходится делать именно так, ибо "гайдовых" русских ресурсов довольно мало, да и те забиты как правило переводами чужих работ, причём опять же - переводами неполными (ну вот как тут с доками по нвн2 - часть русские, часть английские уже 4 года как, и никто их уже не переведёт).
|
![]() ![]()
Сообщение
#308
|
|
Level 3 ![]() Класс: Маг Характер: True Neutral Раса: Нежить ![]() |
Я то и сам Гуглил тока вот тех ответов которые я ищу я не нахожу.Город мастеров самое лучшее что мне удавалось найти. (IMG:style_emoticons/kolobok_light/rolleyes.gif) (в смысле:найти (IMG:style_emoticons/kolobok_light/ph34r.gif) )
|
![]()
Сообщение
#309
|
|
Level 9 ![]() ![]() ![]() Класс: Фея Характер: Chaotic Evil Раса: Фея ![]() |
В общем, такая фигня:
накалякал скрипт, чтобы непись говорил, указанные у него в вариэйблах, строки. Создал парочку вайпоинтов, между которыми тот должен ходить. Ходить-то он ходит, а строки не произносит. Если вайпионты удалить - скрипт работает нормально. Нужно, чтобы работало и то, и другое. Скрипт висит на хартбите Непися. Neverwinter Script void main()
{ if(GetLocalInt(OBJECT_SELF, "script_fired")) return; { SetLocalInt(OBJECT_SELF, "script_fired", TRUE); float fInterval = GetLocalFloat(OBJECT_SELF, "interval"); int n=(GetLocalInt(OBJECT_SELF, "amount")); DelayCommand((n*fInterval), DeleteLocalInt(OBJECT_SELF, "script_fired")); if ((GetLocalString(OBJECT_SELF, "string1")) != ""){AssignCommand(OBJECT_SELF, (ActionSpeakString(GetLocalString(OBJECT_SELF, "string1"))));} if ((GetLocalString(OBJECT_SELF, "string2")) != ""){AssignCommand(OBJECT_SELF, (ActionWait(fInterval))); AssignCommand(OBJECT_SELF, (ActionSpeakString(GetLocalString(OBJECT_SELF, "string2"))));} if ((GetLocalString(OBJECT_SELF, "string3")) != ""){AssignCommand(OBJECT_SELF, (ActionWait(fInterval))); AssignCommand(OBJECT_SELF, (ActionSpeakString(GetLocalString(OBJECT_SELF, "string3"))));} if ((GetLocalString(OBJECT_SELF, "string4")) != ""){AssignCommand(OBJECT_SELF, (ActionWait(fInterval))); AssignCommand(OBJECT_SELF, (ActionSpeakString(GetLocalString(OBJECT_SELF, "string4"))));} if ((GetLocalString(OBJECT_SELF, "string5")) != ""){AssignCommand(OBJECT_SELF, (ActionWait(fInterval))); AssignCommand(OBJECT_SELF, (ActionSpeakString(GetLocalString(OBJECT_SELF, "string5"))));} } } |
![]()
Сообщение
#310
|
|
Level 19 ![]() Класс: Воин Характер: Lawful Good Раса: Человек NWN: Скриптинг [PW] Gem of the North Край Лесов ![]() |
Движок вейпоинтов стандартный? Если да, то там куча действий внутри плюс clearallactions должен быть, ессно всё вместе не работает. Пиши полную систему на ходьбу и разговор.
|
![]()
Сообщение
#311
|
|
Level 8 ![]() ![]() ![]() Класс: Псионик Характер: Chaotic Neutral Раса: Хафлинг ![]() |
Можно попробовать выключать на время реплик выполнение функции WalkWayPpoints(), функцией SetWalkCondition(NW_WALK_FLAG_CONSTANT, FALSE), с предварительной очисткой стека действий ClearAction()-ом, если проблема действительно в движке вейпойнтов. (#include "nw_i0_generic")
Также можно мутить с текущей точкой обхода с помощью SetLocalInt(oNPC, "WP_CUR"), где это номер вейпойнта от 0-99 для стандартной системы. Сообщение отредактировал PaiNt - Sep 29 2010, 02:42 |
![]()
Сообщение
#312
|
|
Level 5 ![]() Класс: Обыватель Характер: Lawful Neutral Раса: Человек NWN: Модмейкер Проклятие Левора Порядок Времени ![]() |
вместо ActionSpeakString используй SpeakString. Дело в том, что пока работает хотьба по точкам, у тебя в стеке акций все время что-то есть и новое туда встанет только если стек почистить. Фразы же можно говорить и минуя стек, через указанную мной функцию. Либо, как сказал Денисок (и это более правильно на самом деле), нужно делать свою систему. Ибо в конечном итоге наверняка упрешься в невозможность расширения в ту или иную сторону.
|
![]()
Сообщение
#313
|
|
Level 9 ![]() ![]() ![]() Класс: Фея Характер: Chaotic Evil Раса: Фея ![]() |
Ясно. Отложу, тогда, на неопределенный срок.
Как, блин, пользоваться функцией return? К примеру, мне нужно чтобы выполнение скрипта приостановилось до тех пор, пока нпс занят разговором. Я повесил такой скрипт на OnConversation Neverwinter Script void main() { ClearAllActions(); BeginConversation(); while (IsInConversation(OBJECT_SELF)) return; Какие-то функции. } Пример на нвн.лексиконе прочитал, понятней не стало. |
![]()
Сообщение
#314
|
|
Level 19 ![]() Класс: Воин Характер: Lawful Good Раса: Человек NWN: Скриптинг [PW] Gem of the North Край Лесов ![]() |
Я конечно не силён в диалогах, но я бы разбил скрипт на два. Начинаем диалог твоим скриптом, а в конце диалога запускаем отдельно продолжение. Return вообще не при чём, это ф-я возврата значения с прекращением работы.
|
![]()
Сообщение
#315
|
|
Level 9 ![]() ![]() ![]() Класс: Фея Характер: Chaotic Evil Раса: Фея ![]() |
Я конечно не силён в диалогах, но я бы разбил скрипт на два. Начинаем диалог твоим скриптом, а в конце диалога запускаем отдельно продолжение. Я именно этого и хотел избежать. Цитата Return вообще не при чём, это ф-я возврата значения с прекращением работы. Цитата In the case of void functions, return statements are optional, but can still be used to prematurely halt execution Т.е. запаузить в таком случае никак чтоли? (IMG:style_emoticons/kolobok_light/scratch_one-s_head.gif) Сообщение отредактировал Kcapra - Sep 29 2010, 11:02 |
![]()
Сообщение
#316
|
|
Level 5 ![]() Класс: Обыватель Характер: Lawful Neutral Раса: Человек NWN: Модмейкер Проклятие Левора Порядок Времени ![]() |
Ясно. Отложу, тогда, на неопределенный срок. ты все-таки попробуй просто SpeakString поюзать. Имхо должно для твоей ситуации прокатить опиши подробнее, какой ты скрипт прервать хочешь диалогом. Так, как описано выше - делать бесполезно. Делать в скрипте цикл, ждущий окончания диалога - можно, но имхо ни разу не рационально. Скорее всего есть варианты проще. зы: я анимацию нормально прерывал диалогом, она сама восстанавливалась, все в пределах одного управляющего скрипта + пары помощников. |
![]()
Сообщение
#317
|
|
Level 9 ![]() ![]() ![]() Класс: Фея Характер: Chaotic Evil Раса: Фея ![]() |
Пока для теста там функция ActionRandomWalk()
В будущем планируется расписать для каждой группы неписей свое поведение. SpeakString работает Сообщение отредактировал Kcapra - Sep 29 2010, 11:56 |
![]()
Сообщение
#318
|
|
Level 5 ![]() Класс: Обыватель Характер: Lawful Neutral Раса: Человек NWN: Модмейкер Проклятие Левора Порядок Времени ![]() |
Хм.. тогда рекомендую (весьма нескромно) вот это почитать: http://nwnmod.narod.ru/stat_anim_npc2.htm
проблема прерывания диалогом там освещена |
![]()
Сообщение
#319
|
|
Level 14 ![]() ![]() ![]() ![]() Класс: Обыватель Характер: Lawful Neutral Раса: Эльф ![]() |
Часть скрипта висит на входе игрока на шард. У него в инвентаре есть итем-паспорт на который все пишется.
1. Коллеги, посмотрите, пож, в чем проблема в строчке? Нужно, чтобы, если у него локалка на паспорте стоит 1, то в журнале открывался квест в стадии 1: if (GetLocalInt(it_playerpassport,"goharbeetle") == 1) AddJournalQuestEntry("beetlequest", 1, GetEnteringObject(), FALSE, FALSE, FALSE)); 2. Подскажите, что вставить вместо вопросиков, чтобы генерилось случайное количество голда в инвентаре от 500 до 1000 монет: if (HasItem(GetEnteringObject(), "it_playerpassport") == FALSE) GiveGoldToCreature(??????????????, ?????????????, FALSE)); Сообщение отредактировал Celestial - Sep 30 2010, 02:00 |
![]()
Сообщение
#320
|
|
Level 19 ![]() Класс: Воин Характер: Lawful Good Раса: Человек NWN: Скриптинг [PW] Gem of the North Край Лесов ![]() |
Цитата Нужно, чтобы, если у него локалка на паспорте стоит 1 Не знаю как там в нвн2, но в нвн1 локалки с итемов случайным образом спадали при перезаходах.Цитата GiveGoldToCreature(??????????????, ?????????????, FALSE) Объект-игрок, Random(501) + 500.
|
![]() ![]() |
Текстовая версия | Сейчас: 17th July 2025 - 15:10 |