![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() ![]() |
![]() |
![]()
Сообщение
#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)
|
![]()
Сообщение
#161
|
|
Level 5 ![]() Класс: Обыватель Характер: Lawful Neutral Раса: Человек NWN: Модмейкер Проклятие Левора Порядок Времени ![]() |
про какой именно кэш идет речь? спроси у шардовиков, я от них это слышал, сам этим логом не пользуюсь (IMG:style_emoticons/kolobok_light/smile.gif) |
![]()
Сообщение
#162
|
|
Level 17 ![]() Класс: Волшебник Характер: Neutral Good Раса: Человек NWN: Скриптинг [PW] Axistown SR 1.9 NWNX ![]() |
Я тоже не понял, что за кэш и память и как они выводятся в лог.
|
![]()
Сообщение
#163
|
|
Level 5 ![]() Класс: Обыватель Характер: Lawful Neutral Раса: Человек NWN: Модмейкер Проклятие Левора Порядок Времени ![]() |
ну раз даже вирь не знает, значит я перепутал НВН с другим приложением (IMG:style_emoticons/kolobok_light/smile.gif) сам я натыкался только на переполнение стека, деление на 0 и какие-то ошибки с памятью (слово memory было (IMG:style_emoticons/kolobok_light/smile.gif) )
|
![]()
Сообщение
#164
|
|
Level 3 ![]() Класс: Обыватель Характер: Chaotic Evil Раса: Человек ![]() |
Ну если про память еще можно понять (сегментейшен фолт, хоть ни в каких логах ее ессесно не будет), то про кеш меня ввело в ступор, т.к. кеш абсолютно прозрачен для людей и управляется только хардвэйром. Даже через ассамблер в него не влезть.
Сообщение отредактировал Edwin - Jan 3 2008, 13:57 |
![]()
Сообщение
#165
|
|
Level 17 ![]() Класс: Волшебник Характер: Neutral Good Раса: Человек NWN: Скриптинг [PW] Axistown SR 1.9 NWNX ![]() |
Ну если про память еще можно понять (сегментейшен фолт, хоть в логах ее не будет), то про кеш меня ввело в ступор, т.к. кеш абсолютно прозрачен для людей и управляется только хардвэйром. Даже через ассамблер в него не влезть. Кэшей много разных, и в НВНе есть кэш (2da, скриптов и ресурсов), но в лог инфа о нём не выводится (даже через DummyLog).Ошибки стека в скриптах, TMI, деление на ноль - да, бывает, но это тоже в лог не идёт, насколько я помню. |
![]()
Сообщение
#166
|
|
Level 5 ![]() Класс: Обыватель Характер: Lawful Neutral Раса: Человек NWN: Модмейкер Проклятие Левора Порядок Времени ![]() |
Ошибки стека в скриптах, TMI, деление на ноль - да, бывает, но это тоже в лог не идёт, насколько я помню. в НВН1 вроде идет и в лог файл и в лог в игре. А иначе очень странный лог получается, никакой инфы по ошибкам? (IMG:style_emoticons/kolobok_light/smile.gif) А вот в НВН2 мб и не идет, я лог-файлом тут и подавно не пользуюсь. зы: что-то мы с оффтопом перебрали, пора завязывать (IMG:style_emoticons/kolobok_light/ph34r.gif) |
![]()
Сообщение
#167
|
|
Level 3 ![]() Класс: Обыватель Характер: Chaotic Evil Раса: Человек ![]() |
А в обычном компиляторе у тебя много информации об ошибках во время экзекуции? stderr, try-catch и руки - все что надо для отладки. Ффс.....
Сообщение отредактировал Edwin - Jan 3 2008, 14:58 |
![]()
Сообщение
#168
|
|
Level 9 ![]() Класс: Фея Характер: Chaotic Evil Раса: Тварь NWN: Скриптинг [PW] ![]() |
кеш абсолютно прозрачен для людей и управляется только хардвэйром. Даже через ассамблер в него не влезть. prefetch/prefetchw/prefetchnta/prefetcht0(1,2) (IMG:style_emoticons/kolobok_light/whistle3.gif)
|
![]()
Сообщение
#169
|
|
Level 3 ![]() Класс: Обыватель Характер: Chaotic Evil Раса: Человек ![]() |
Ок, про асм я загнул. Можно. Но ненужно, т.к. этим вероятнее всего пользуются только в написании мега симуляторов и софта для посадки шаттлов.
|
![]()
Сообщение
#170
|
|
Level 5 ![]() Класс: Обыватель Характер: Lawful Neutral Раса: Человек NWN: Модмейкер Проклятие Левора Порядок Времени ![]() |
софта для посадки шаттлов. тады уж Бурана, ибо только он садился на автопилоте, Шаттлы - вручную. завязываем асм, компиляторы и дебагеры. тема не про это. Если хочется всетаки об этом - выделю вам отдельный топик (IMG:style_emoticons/kolobok_light/smile.gif) А то что выше почищу завтра, чтобы не пугать скриптеров (IMG:style_emoticons/kolobok_light/smile.gif) |
![]()
Сообщение
#171
|
|
Level 12 ![]() Класс: Оборотень Характер: Chaotic Neutral Раса: Нежить NWN: Скриптинг [Sn] ![]() |
Есть очень удобная такая вещь: SetGlobalXXX, но только вот когда переменных становится много, то некоторые почему-то тупо игнорируются (IMG:style_emoticons/kolobok_light/sad.gif) другие можно продолжать добавлять (IMG:style_emoticons/kolobok_light/unknw.gif) зависимости он имён переменных или их количества установить не удалось, то после 200 начинает корявить, то 5000 спокойно держит. так что предупреждаю и спрашиваю: кто нибудь сталкивался и как с этим бороться?
зы: а чего тема не прикреплена? |
![]()
Сообщение
#172
|
|
Level 5 ![]() Класс: Обыватель Характер: Lawful Neutral Раса: Человек NWN: Модмейкер Проклятие Левора Порядок Времени ![]() |
у меня пока наверное около 100 глобалок - никаких глюков ниразу не видел.
зы: а чего тема не прикреплена? тады тут пол раздела будет прикреплено (IMG:style_emoticons/kolobok_light/smile.gif) |
![]()
Сообщение
#173
|
|
Level 1 Класс: Обыватель Характер: Chaotic Neutral Раса: Человек ![]() |
Интересует возможность создания весьма специфического скрипта... Дело в том, что на мой взгляд в НВН2 сильно не хватает возможности взаимодействия объктов между собой (из инвентаря с окружающей средой). Диалоговый вариант не устраивает, так как с ним не построишь нормальных головоломок - если тебе уже очевидный путь предоставляют в качестве варианта.
И так - можно ли сделать следующее: при перетаскивании вещи из инвентаря на какой нибудь объект происходило "событие" - открывался диалог, или ещё что - это уже детали. На вскидку - перетаскиваем факел из инвентаря на стог сена - стог сена заменяется костром (первое пришедшее в голову) |
![]()
Сообщение
#174
|
|
Level 5 ![]() Класс: Обыватель Характер: Lawful Neutral Раса: Человек NWN: Модмейкер Проклятие Левора Порядок Времени ![]() |
На вскидку - перетаскиваем факел из инвентаря на стог сена - стог сена заменяется костром (первое пришедшее в голову) лучше тыкнуть в стог сена, если есть факел в руке - зажечь. Если нужен выбор - предоставлять выбор. или диалогом или гуи окном. с предметами и объектами "взаимодействие" возможно в принципе, но это лишний не очень нужный гемор. Самый простой вариант - положить в инвентарь. Скажем положить в стог сена факел - загорится. |
![]()
Сообщение
#175
|
|
Level 1 Класс: Обыватель Характер: Chaotic Neutral Раса: Человек ![]() |
со стогом сена - это лишь пример, чтоб описать, что нужно... существуют куча вариантов использования - верёвок, воды, денег ну и т.д. и т.п. - так что интересует именно такой вариант... но если в принципе возможно - то буду искать.
"Если нужен выбор - предоставлять выбор. или диалогом или гуи окном." в том то и проблема - что предоставляешь выбор, а не делаешь возможность сделать это игроку. Чтоб он сказал " о, я сам догадался!" Добавлено через 6 минут хотя - идея сделать объекты помещаемыми в руку и проверку на то ли есть в руки при взаимодействие - самый простой вариант... спасибо. |
![]() ![]() |
Текстовая версия | Сейчас: 2nd April 2023 - 09:23 |