![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() ![]() |
![]() |
![]()
Сообщение
#136
|
|
Epic Level ![]() Класс: Бард Характер: Chaotic Neutral Раса: Животное МАСТЕР Пера ![]() |
Не волнуйся, милая, буржуям я такой вопрос тоже задал.
|
![]()
Сообщение
#137
|
|
Миловидный Бегрюссунг ![]() Класс: Воин Характер: Chaotic Good Раса: Человек NWN: Модмейкер Проклятие Левора Порядок Времени ![]() |
Поиск сделай через локацию и на ней ищи нужных неписей.
Neverwinter Script Source object oSelf = OBJECT_SELF; // тут укажи любой объект в нужной локе. Тег уникальный.
object oObject = GetFirstObjectInArea(GetArea(oSelf)); while (GetIsObjectValid(oObject)) { if(GetObjectType(oObject)==OBJECT_TYPE_CREATURE) { if (GetTag(oObject)== "RIV_NPC_ALR") { AssignCommand(oObject, ClearAllActions(TRUE)); AssignCommand(oObject, ActionDoCommand(ApplyEffectToObject(EFFECT_TYPE_SL P, eEffect, oObject,99999.0))); C_GoDown(oObject); } } oObject = GetNextObjectInArea(GetArea(oSelf)); } |
![]()
Сообщение
#138
|
|
Epic Level ![]() Класс: Бард Характер: Chaotic Neutral Раса: Животное МАСТЕР Пера ![]() |
Задумался над таким моментом: как в скриптах менять параметр static у предметов? Допустим есть тайная дверь, которую игрок никак не должен увидеть до момента, когда ей нужно открыться. То есть логично сделать ее до этого static, а после наступления условия - этот static снять... каким образом это сделать?
|
![]()
Сообщение
#139
|
|
Level 5 ![]() Класс: Обыватель Характер: Lawful Neutral Раса: Человек NWN: Модмейкер Проклятие Левора Порядок Времени ![]() |
никак.
|
![]()
Сообщение
#140
|
|
Level 11 ![]() ![]() ![]() Класс: Воин Характер: Lawful Good Раса: Человек ![]() |
Я, конечно, скрипты не так хорошо знаю, но на С++ можно изменить, например Visible( виден объект, или нет).
Выглядет все так: Имя_объекта(в НВН тег или ResRef) -> Visible = true; Так может, в НВН так: Тег\ResRef -> static = true/false; ? (IMG:style_emoticons/kolobok_light/prankster2.gif) Сообщение отредактировал Белатрис - Sep 4 2007, 13:19 |
![]()
Сообщение
#141
|
|
Level 17 ![]() Класс: Волшебник Характер: Neutral Good Раса: Человек NWN: Скриптинг [PW] Axistown SR 1.9 NWNX ![]() |
Я, конечно, скрипты не так хорошо знаю, но на С++ можно изменить, например Visible( виден объект, или нет). NWScript - не C++. Если уж на то пошло, то больше похоже на C.
Выглядет все так: Имя_объекта(в НВН тег или ResRef) -> Visible = true; Так может, в НВН так: Тег\ResRef -> static = true/false; ? (IMG:style_emoticons/kolobok_light/prankster2.gif) Сообщение отредактировал virusman - Sep 4 2007, 21:45 |
![]()
Сообщение
#142
|
|
Epic Level ![]() Класс: Бард Характер: Chaotic Neutral Раса: Животное МАСТЕР Пера ![]() |
идиотия. Неужто все тайные двери в официальной кампании НВН2 - просто запертые участки стены? о.О
|
![]()
Сообщение
#143
|
|
Вечно меняющийся ![]() Класс: Монах Характер: True Neutral Раса: Человек NWN: Скриптинг [Sn] ![]() |
Не асилил что есть запертые участки стены. Но что есть тайные двери - можно посмотреть в тулсете НВН2 (точнее как они реализованы).
Если запертая дверь, будет иметь галочку "Статик", то дверь будет отображаться. Если не будет "статики", объект опять будет видим, тут тоже логики не уловил. Если не ошибаюсь, в официальной компании НВН1 тайные двери были соответствующим плейсом, со скриптом на onXB, укрытые эффектом прозрачности (невидимки). Скрипт проверял: есть ли игрок в пределах XX метров, если есть, идет проверка его навыка "Spot" - и только в том случае, если игрок обойдет заданное ДЦ, эффект прозрачности удаляется с двери, а сама она открывается. Готовый скрипт, стало быть, нужно искать в компаниях первой или второй части игры (или писать самому). |
![]()
Сообщение
#144
|
|
Level 12 ![]() Класс: Оборотень Характер: Chaotic Neutral Раса: Нежить NWN: Скриптинг [Sn] ![]() |
Что до статиков, то до них скриптами не добраться. Они вообще хранятся отдельно и загружаются только один раз.
P.S. Эх, а хорошо ведь было бы так: ScriptName "00door" Begin GameMode foreach (object in module as nwn2::placeable) WHERE *$1 IS DOOR with (.pop) { if (Detected(%PC%)) Static = true; } the end. P.P.S. Надо создать топик: не знаю как тут, но в нвн1 можно сделать так... |
![]()
Сообщение
#145
|
|
Epic Level ![]() Класс: Бард Характер: Chaotic Neutral Раса: Животное МАСТЕР Пера ![]() |
Цитата Если запертая дверь, будет иметь галочку "Статик", то дверь будет отображаться. Если не будет "статики", объект опять будет видим, тут тоже логики не уловил. Логика в том, что если объект static -то мы не можем выбрать его курсором и совершить с ним какие-то действия.Цитата Что до статиков, то до них скриптами не добраться. Они вообще хранятся отдельно и загружаются только один раз. Типичная ёпсидиановская идиотия. Я уж решил поступить изящно и двери просто удалить, вместо того чтобы их открывать, но выяснилось что статичные двери даже не удаляются. Придется опускаться до кретинизма вроде "неоткрываемых секретных дверей, про существование которых персонаж догадываться не должен" или дедовским способом перегораживать проходы шкафами, ящиками и камнями.
|
![]()
Сообщение
#146
|
|
Level 19 ![]() Класс: Обыватель Характер: True Neutral Раса: Дварф NWN: Контент ![]() |
У Door State есть вариант "No visible model" (он же Destroyed), которым можно воспользоваться при ситуации:
Допустим есть тайная дверь, которую игрок никак не должен увидеть до момента, когда ей нужно открыться. Вопрос в том, можно ли его менять через скрипты. Сообщение отредактировал Vhall - Sep 4 2007, 21:09 |
![]()
Сообщение
#147
|
|
Level 5 ![]() Класс: Обыватель Характер: Lawful Neutral Раса: Человек NWN: Модмейкер Проклятие Левора Порядок Времени ![]() |
Логика в том, что если объект static -то мы не можем выбрать его курсором и совершить с ним какие-то действия. этого же эффекта можно добиться и просто не поставив галочку Статик и Активный. (IMG:style_emoticons/kolobok_light/smile.gif) У Door State есть вариант "No visible model" (он же Destroyed), которым можно воспользоваться при ситуации раньше 100 пудов можно было такое проделывать с плейсами. В нвн2 и с дверьми - я не пробовал.
|
![]()
Сообщение
#148
|
|
Level 11 ![]() Класс: Вор Характер: Neutral Evil Раса: Эльф NWN: Скриптинг [PW] Validor2 ![]() |
Цитата Если не ошибаюсь, в официальной компании НВН1 тайные двери были соответствующим плейсом, со скриптом на onXB, укрытые эффектом прозрачности (невидимки). Скрипт проверял: есть ли игрок в пределах XX метров, если есть, идет проверка его навыка "Spot" - и только в том случае, если игрок обойдет заданное ДЦ, эффект прозрачности удаляется с двери, а сама она открывается. Готовый скрипт, стало быть, нужно искать в компаниях первой или второй части игры (или писать самому). впринципе это все скриптами и без спец плейсов реализуется... рисуется тригер, у него на входе проверка спота.... если чек прошел, то в нужном месте появляется плейс типа двери, у которого на он клик стоит скрипт переноса чара в нужное место... короче тупо плейс сделаный под дверь (IMG:style_emoticons/kolobok_light/smile.gif) а так в палитре нвн2 видел какие то секретные двери, но что у них за фичи и как ими пользоваться я честно говоря не пробовал... |
![]()
Сообщение
#149
|
|
Level 18 ![]() Класс: Страж Тьмы Характер: True Neutral Раса: Человек МАСТЕР D&D ![]() |
Задумался над таким моментом: как в скриптах менять параметр static у предметов? Допустим есть тайная дверь, которую игрок никак не должен увидеть до момента, когда ей нужно открыться. То есть логично сделать ее до этого static, а после наступления условия - этот static снять... каким образом это сделать? В кампании это, вроде сделано предметами - сама секретная дверь и шкаф, который ее закрывает. Так вот этот шкаф имел static - false, collision - true. И поскольку эти двери становились видны только после надевания очков, то почему не сделалать так же? |
![]()
Сообщение
#150
|
|
Level 1 Класс: Дварф-Защитник Характер: Neutral Good Раса: Дварф ![]() |
Здравствуйте уважаемые мастера.
Вот наткнулся в скриптах на отладочную функцию: Neverwinter Script Source PrettyDebug( sOut ); PrettyDebug( "Total influence with " + GetStringByStrRef( GetCompanionNameStringRef( nCompanion )) + " = " + IntToString( nNewInfluence )); ИМХО понятно, что срабатывает она при включении отладки и выводит текст. Вопрос: 1.где и как включается этот отладочный режим. 2. куда выводиться отладочная информация(окно сообщений,экран, что нить особое...). P.S. Сорри, если вопрос нубский или написал не в том топике, прошу не бить больно (IMG:style_emoticons/kolobok_light/smile.gif) P.P.S.(поиск юзал (IMG:style_emoticons/kolobok_light/sad.gif) ) |
![]()
Сообщение
#151
|
|
Миловидный Бегрюссунг ![]() Класс: Воин Характер: Chaotic Good Раса: Человек NWN: Модмейкер Проклятие Левора Порядок Времени ![]() |
Обычно функция описывается. надо навести на нее курсор и в инфопанели внизу будет описание. Но честно, говоря лучше сделать простую дебаг инклюду и пользоваться. Вы собсвенно что хотите увидеть в дебаге? Дебаг НВН-а это место куда идут все сообщения во время игры. Внизу окно такое растягивается.
|
![]()
Сообщение
#152
|
|
Level 1 Класс: Дварф-Защитник Характер: Neutral Good Раса: Дварф ![]() |
Обычно функция описывается. надо навести на нее курсор и в инфопанели внизу будет описание. Как ни печально, но описания этих отладочных функций(PrettyDebug,PrettyError) в инфопанели я не нашел. Цитата Но честно, говоря лучше сделать простую дебаг инклюду и пользоваться. Подключать к рабочему скрипту свой отладочный? Зачем писать свой, если есть уже написанные? Цитата Вы собсвенно что хотите увидеть в дебаге? Давайте попробуем по порядку: Возьмем глобальный скрипт : Neverwinter Script Source // ga_influence( int nCompanion, int nChange ) /* This adjusts the influence rating of the companion to the PC ( the players as a whole technically ). The influence rating is based on a scale between -100( worst ) and 100( best ). ( 0 being neutral ) Parameters: int nCompanion = This is the integer value of the companion to adjust. ( See ginc_companions ) int nChange = This is the amount to adjust influence by. 1 Khelgar 2 Neeshka 3 Elanee 4 Qara 5 Sand 6 Grobnar 7 Casavir 8 Bishop 9 ShandraJerro 10 Construct 11 Zhjaeve 12 AmmonJerro 13 Bevil */ // FAB 10/4 // ChazM 5/4/05 // BMA 5/5/05 ginc_companions id look up // BMA-OEI 8/22/05 added companion id table // ChazM 12/16/05 added bevil // ChazM 4/18/06 prepped for adding influence indicator // ChazM 4/25/06 added string ref constants // ChazM 5/1/06 fixed "temp text" bug. // EPF 7/10/06 - added debug strings for balance testing // BMA-OEI 7/10/06 -- Updated to use GetInfluenceByNumber( ) #include "kinc_companion" const int STRING_REF_LOST_INFLUENCE = 178842; const int STRING_REF_GAINED_INFLUENCE = 178841; int GetCompanionNameStringRef( int nCompanion ) { // companions str refs are 178843 - 178855 return ( 178842 + nCompanion ); } void main( int nCompanion, int nChange ) { if ( nChange == 0 ) { PrettyError( "ga_influence: companion " + IntToString( nCompanion ) + " no influence change" ); return; } int nOldInfluence = GetInfluenceByNumber( nCompanion ); IncInfluenceByNumber( nCompanion, nChange ); int nNewInfluence = GetInfluenceByNumber( nCompanion ); string sOut; int nDelta = nNewInfluence - nOldInfluence; //nChange; // Actual nDelta may not == nChange if ( nDelta > 0 ) sOut = GetStringByStrRef( STRING_REF_GAINED_INFLUENCE ); else sOut = GetStringByStrRef( STRING_REF_LOST_INFLUENCE ); sOut += " " + GetStringByStrRef( GetCompanionNameStringRef( nCompanion )) + ": " + IntToString( nDelta ); object oPC = ( GetPCSpeaker( )==OBJECT_INVALID?OBJECT_SELF:GetPCSpeaker( ) ); SendMessageToPC( oPC, sOut ); PrettyDebug( sOut ); PrettyDebug( "Total influence with " + GetStringByStrRef( GetCompanionNameStringRef( nCompanion )) + " = " + IntToString( nNewInfluence )); } 31 строка: Цитата // EPF 7/10/06 - added debug strings for balance testing и далее в теле идут отладочные функции PrettyError и PrettyDebug Раз авторы их добавлялм ,они ими пользовались. Значит режим отладки где то должен включаться. Во встроенных функциях этих нет. Вопросы: могут эти функции быть только в тулсете, а не в игре? Возможно ли их как то задействовать в самой игре? Как вариант , могут ли они после завершения создания модуля удалены из тулсета/игры? Существует ли в тулсете система отладки скриптов, (которая мне не известна,но может быть известна вам)? Цитата Дебаг НВН-а это место куда идут все сообщения во время игры. Внизу окно такое растягивается. Мы говорим об окне сообщений, или о чем то другом? В режиме DebugMode 0 все сообщения в игре отправляются в окно сообщений, в частности строка : Цитата SendMessageToPC( oPC, sOut ); А при включенном режиме DebugMode 1 некоторые команды ,например showfps выводятся просто на экран. Значит стандартный вывод можно менять? А вэтих строках получается , что выводится 3 сообщения: Цитата SendMessageToPC( oPC, sOut ); // вывод в окно сообщений PrettyDebug( sOut ); // повторение той же строки не понятно куда PrettyDebug("Total influence with " + GetStringByStrRef(GetCompanionNameStringRef(nCompa ion)) + " = " + IntToString(nNewInfluence)); // и вывод третьей строки с отладочной информацией Вот и все же хотелось бы узнать как режим включить если это возможно, и как сделать такой вывод отладки во время игры(с возможностью отключения конечно) как в своих скриптах,так и в оригинальных(раз уж функции там уже прописаны). Как вариант ,как выводить просто текст на экран в любом произвольном месте,накладывая на игру, возможно ли это? |
![]()
Сообщение
#153
|
|
Level 3 ![]() Класс: Рейнджер Характер: Neutral Good Раса: Человек ![]() |
Здравствуйте уважаемые мастера!
Вот, скопилась целая порция вопросов. 1. Относительно точек приложения скриптов. Пока вижу, что их можно вешать на эвенты (события) из выпадающих списков в пропертях для модуля, для локации, для NPC кажется... И для каждого случая этот набор событий похоже фиксирован. Можно ли его расширить? Можно ли сделать обработку событий с клавиатуры, например? И как можно использовать событие UserDefinеdEvent? 2. Пожалуйста, посоветуйте, каким образом лучше и проще делать информационную печать в скрипте? Например, чтобы без перехода в отладочный режим можно было видеть - вызвался ли скрипт и с какими данными вызвался. Другими словами есть ли тут аналог функции printf? 3. В готовом игровом модуле nv2 - туториал (это нулевой акт) обнаружила заюзанный скрипт на onRest. Скрипт не принадлежал этому модулю, а был взят из длинного выпадающего списка готовых скриптов. Без проблем загрузила энтот чужой скрипт в редактор, изменила, скомпилила - после чего запущенный модуль вполне себе воспринял эти изменения. И догадываюсь, что если перекомпилить остальные модули, которые его используют, то с ними будет тож самое.... Вопрос - а где все эти готовые скрипты живут на уровне исходных текстов? По другим модулям разложены что ли? Или есть где-то для них общее место? Сообщение отредактировал Zmeika - Dec 24 2007, 18:11 |
![]()
Сообщение
#154
|
|
Level 5 ![]() Класс: Обыватель Характер: Lawful Neutral Раса: Человек NWN: Модмейкер Проклятие Левора Порядок Времени ![]() |
1. Относительно точек приложения скриптов. Пока вижу, что их можно вешать на эвенты (события) из выпадающих списков в пропертях для модуля, локации, для NPC кажется... И для каждого случая этот набор событий похоже фиксирован. Можно ли его расширить? Можно ли сделать обработку событий с клавиатуры, например? И как можно использовать событие UserDefinеdEvent? можно расширить (см систему SSS AC на нашем сайте, как вариант). Другое дело что насколько оно вам необходимо? С клавиатурой.. так как вы описали - нельзя. Но можно сделать обработку написанного в чат текста. Разбиралось много раз для НВН1, возможно годится для НВН2. Надо экспериментировать. 2. Пожалуйста, посоветуйте, каким образом лучше и проще делать информационную печать в скрипте? Например, чтобы без перехода в отладочный режим можно было видеть - вызвался ли скрипт и с какими данными вызвался. Другими словами есть ли тут аналог функции printf? я пользуюсь SendMessageToPC - она выдает текст в игровой лог. Мне удобнее в режиме онлайн отслеживать происходящее, чем потом читать текстовой файл с логами. Хотя факт - в таком файле больше полезной инфы относительно некорректной работы скриптов.. например при проблеме с памятью или кэшэм. . В готовом игровом модуле nv2 - туториал (это нулевой акт) обнаружила заюзанный скрипт на onRest. Скрипт не принадлежал этому модулю, а был взят из длинного выпадающего списка готовых скриптов. Без проблем загрузила энтот чужой скрипт в редактор, изменила, скомпилила - после чего запущенный модуль вполне себе воспринял эти изменения. И догадываюсь, что если перекомпилить остальные модули, которые его используют, то с ними будет тож самое.... не совсем. дело в том, что все стандартные скрипты живут в ресурсах игры. Если скрипт меняется - он перекачовывает в модуль. Соотв изменив стандартный скрипт, вы изменили его лишь для данного модуля. Все остальные модули будут работать как работали, сколько бы вы их не перекомпиливали. |
![]()
Сообщение
#155
|
|
Level 3 ![]() Класс: Рейнджер Характер: Neutral Good Раса: Человек ![]() |
можно расширить (см систему SSS AC на нашем сайте, как вариант). Другое дело что насколько оно вам необходимо? Пока не знаю. Мне нужно засечь момент, когда солнышко заходит, причем точное время заката (в часах) известно. Такое ощущение, что только на onHeartBeat проверку по времени суток вешать. Пока не уверена, что это оправдано. (IMG:style_emoticons/kolobok_light/sad.gif) Правда, с другой стороны оч может быть, что сама игра определяет ход небес по этому же самому таймеру я пользуюсь SendMessageToPC - она выдает текст в игровой лог. Мне удобнее в режиме онлайн отслеживать происходящее, чем потом читать текстовой файл с логами. Хотя факт - в таком файле больше полезной инфы относительно некорректной работы скриптов.. ага, мне тоже так удобно, уже подключила, спасип дело в том, что все стандартные скрипты живут в ресурсах игры. Если скрипт меняется - он перекачовывает в модуль. Соотв изменив стандартный скрипт, вы изменили его лишь для данного модуля. Все остальные модули будут работать как работали, сколько бы вы их не перекомпиливали. Странно, у меня не перекочевывается. Остается на прежнем месте в исправленном состоянии, и все другие модули начинают видеть исправленную версию. Правда, перкомпиляцию не пробовала... |
![]()
Сообщение
#156
|
|
Level 12 ![]() Класс: Оборотень Характер: Chaotic Neutral Раса: Нежить NWN: Скриптинг [Sn] ![]() |
так и хочется сказать "не знаю как там у вас в нвн2, а в нвн1 было так..." (IMG:style_emoticons/kolobok_light/smile.gif)
лучше всего создать новый скрипт с новым именем, который будет храниться в модуле, и уже его вешать на эвенты. если необходимо то же имя скрипта (например, заклинание нужно поменять) опять же в модуле создать скрипт с таким же названием, в этом модуле он будет заменять исходный. в общем сначала игруха ищет нужный ресурс в папке override (удобно для патчей-хотфиксов-дебагов) потом в кампейне потом в модуле (хотя логичнее было бы сначала в модуле, а потом в кампейне) потом в ресурсах игры. |
![]()
Сообщение
#157
|
|
Level 2 ![]() Класс: Клерик Характер: Lawful Evil Раса: Человек ![]() |
Блин хочу написать скрипт для простейшего квеста и не могу (IMG:style_emoticons/kolobok_light/sad.gif) (IMG:style_emoticons/kolobok_light/scratch_one-s_head.gif) ктонибудь помогите. хочу поставить локальную переменную ИНТ под названием "deathwolf"
Код void main() { SetLocalInt(OBJECT_SELF, "deathWolf", 0); } уверен что делаю что то не так после постановки в нужный слот (Респаун) НПС ставлю скрипт волку Код void main() { SetLocalInt(OBJECT_SELF, "deathWolf", 2); } создаю диалог Код Переменная не работает----------------------\ убей волка (deathwolf = 0)-----------------\ молодец (deathwolf = 2) Плиз ПОМАГИТЕ (IMG:style_emoticons/kolobok_light/help.gif) (IMG:style_emoticons/kolobok_light/help.gif) (IMG:style_emoticons/kolobok_light/help.gif) А то я уже с ума схожу (IMG:style_emoticons/kolobok_light/crazy.gif) (IMG:style_emoticons/kolobok_light/prankster2.gif) |
![]()
Сообщение
#158
|
|
Level 5 ![]() Класс: Обыватель Характер: Lawful Neutral Раса: Человек NWN: Модмейкер Проклятие Левора Порядок Времени ![]() |
проблема у тебя в том, что ты ставишь 2 локалки, а не 1, как ты думаешь.
Ибо deathWolf у НПС и deathWolf у волка - 2 совершенно разные локалки. Мысль ясна? Чтобы это была одна локалка, тебе в скрипте волка (кстати почему в Респаун ты поставил скрипт? А не в Death?) написать не Neverwinter Script Source SetLocalInt( OBJECT_SELF, "deathWolf", 2 ); а Neverwinter Script Source SetLocalInt( GetObjectByTag( "Тэг НПС, который выдает квест" ), "deathWolf", 2 ); Я тебе в соседней теме не зря советовал использовать SetGlobal*/GetGlobal. Самое незамороченное решение, подходящее для начала (IMG:style_emoticons/kolobok_light/smile.gif) |
![]()
Сообщение
#159
|
|
Level 3 ![]() Класс: Обыватель Характер: Chaotic Evil Раса: Человек ![]() |
QUOTE я пользуюсь SendMessageToPC - она выдает текст в игровой лог. Мне удобнее в режиме онлайн отслеживать происходящее, чем потом читать текстовой файл с логами. Хотя факт - в таком файле больше полезной инфы относительно некорректной работы скриптов.. например при проблеме с памятью или кэшэм. Небольшой оффтоп, про какой именно кэш идет речь? Сообщение отредактировал Edwin - Jan 3 2008, 08:46 |
![]()
Сообщение
#160
|
|
Level 2 ![]() Класс: Клерик Характер: Lawful Evil Раса: Человек ![]() |
Arigato Спасибо Mersi Thenx кое что понял щас попробую (IMG:style_emoticons/kolobok_light/rolleyes.gif)
|
![]() ![]() |
Текстовая версия | Сейчас: 17th July 2025 - 05:33 |