![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() ![]() |
![]() |
![]()
Сообщение
#3341
|
|
Level 1 Класс: Теневой Танцор Характер: Lawful Good Раса: Человек ![]() |
Ну RemoveEffects берется из #include "nw_i0_plot" , забыл написать.
А вот твоя строка Neverwinter Script DelayCommand(3.2,ApplyEffectToObject(DURATION_TYPE_INSTANT,EffectH eal(GetMaxHitPoints(OBJECT_SELF)), OBJECT_SELF); Выдаёт ошибку. ИМХО не компелируется. |
![]()
Сообщение
#3342
|
|
Level 6 ![]() ![]() Класс: Маг Характер: Lawful Evil Раса: Нежить ![]() |
Neverwinter Script DelayCommand(3.2,ApplyEffectToObject(DURATION_TYPE_INSTANT,EffectH eal(GetMaxHitPoints(OBJECT_SELF)), OBJECT_SELF)); Скобка пропущена. Полностью тогда будет так: Neverwinter Script #include "nw_i0_plot"
void main() { object oSpawn = GetObjectByTag("WP_SPAWN"); // Тэг точки спавна SetIsDestroyable(FALSE,TRUE,FALSE); DelayCommand(3.0,ApplyEffectToObject(DURATION_TYPE_INSTANT,EffectR esurrection(),OBJECT_SELF)); DelayCommand(3.2,ApplyEffectToObject(DURATION_TYPE_INSTANT,EffectH eal(GetMaxHitPoints(OBJECT_SELF)), OBJECT_SELF)); DelayCommand(3.2,RemoveEffects(OBJECT_SELF)); DelayCommand(3.2,JumpToObject(oSpawn)); } Сообщение отредактировал Talarasha - Aug 26 2010, 15:22 |
![]()
Сообщение
#3343
|
|
Level 1 Класс: Теневой Танцор Характер: Lawful Good Раса: Человек ![]() |
Ооооо... хых. Спасибо тебе большое =) Работает.
|
![]()
Сообщение
#3344
|
|
Level 2 ![]() Класс: Ученик Дракона Характер: Chaotic Neutral Раса: Человек ![]() |
Добрый вечер, уважаемые модмейкеры и те кто этому учится (IMG:style_emoticons/kolobok_light/rolleyes.gif) .
Мне пришла одна интересная (на мой взгляд) идея. Может такое уже есть и кем-то используется, а возможно некоторым людям будет интересной находкой и толчком к размышлениям и фантазии. Магия переменных. Многие функции игры можно перенести на плечи переменных. Даже некоторые системные функции. Использоваться для этого будет игровой мир модуля и дневник персонажа. Привожу несколько примеров (проанализировав некоторую информацию форума, мне кажется что это возможно): 1. Встреча каравана на большой дороге. На большую часть локации ставится триггер с скриптом появления всех частей каравана при входе игрока (глава каравана, повозки с мулами, охранники, путники и т.д.). Размер триггера побольше, чтобы караван не возник прям под носом игрока. На появление ставиться вероятность - можно вообще никого не встретить, а можно караваны разных видов и состава. А дальше поле для фантазии - действия с участниками каравана (ограбить, подсказать, поторговать, наняться на работу и т.д...). А в конце процедуры установка различных значений переменным, которые имеют отображение в дневнике персонажа - убито столько-то людей, помог столько-то караванам... На этом можно строить отношение к игроку населением модуля. 2. Крафтинг, ремесла и навыки. Изучив за неимоверные испытания навык алхимии у алхимика, игрок получает +1 к переменной навыка "алхимия" (IMG:style_emoticons/kolobok_light/yahoo.gif) - сразу отображение в соответствующем разделе дневника, созданном зараннее модмейкером. Это открывает возможности к созданию зелий через диалог со столом алхимика (IMG:style_emoticons/kolobok_light/rolleyes.gif) Очевидно, что все возможные виды зелий нужно прописать в диалоге алхим. стола и поставить ограничения по навыку через переменные. Так и с другими ремеслами и вообще с чем душа пожелает. 3. Лут с монстров. Получив например от охотника навык снимания шкуры с зверей, игрок получает шкуру в останках убитого волка. Тоже делается через переменную и проводится проверка скриптом какую вещь ложить в лут определенного монстра. Также за каждое действие в игре игроку можно давать репутацию, звания (убил столько-то монстров, создал столько-то мечей, помог столько-то бабушкам, отнял завтрак у столько-то школьников (IMG:style_emoticons/kolobok_light/rolleyes.gif) ) Короче, поле для фантазии (IMG:style_emoticons/kolobok_light/crazy.gif) . От этого будут зависеть различные аспекты игры - отношение различных персонажей, возможность взять в компанию определенных спутников, дающиеся игроку квесты и т.д. Да, это не быстро воплотить в жизнь и местами не так уж и просто, но возможности игры можно расширить значительно. Главная фича - отображение всей инфы в дневнике, используя возможность замены текста в его разделах. Не нужно программировать новые навыки, ремесла и т.д. Да, возможно это не совсем хорошая услуга для тех людей, кто хочет научиться программировать Невер по настоящему, но это выход для тех кто хочет сделать интересный полифункциональный мод, не располагая большими знаниями программирования. Здесь на форуме есть все необходимые готовые скрипты и ответы по различным манипуляциям с переменными и ветками дневника. Так что можно дерзать и дорогу осилит идущий (IMG:style_emoticons/kolobok_light/biggrin.gif) Если модераторы захотят, это можно сделать отдельной темой и туда уже кидать необходимые по ходу скрипты и отвечать на вопросы. Для удобства (IMG:style_emoticons/kolobok_light/rolleyes.gif) |
![]()
Сообщение
#3345
|
|
Level 2 ![]() Класс: Ученик Дракона Характер: Chaotic Neutral Раса: Человек ![]() |
Скажите, как можно добавить +1 или другое число к переменной, учитывая ее текущее значение, а не устанавливая конкретное значение? И можно ли через скрипт добавить запись в дневник?
|
![]()
Сообщение
#3346
|
|
Level 5 ![]() ![]() Класс: Пьяный Мастер Характер: Chaotic Good Раса: Человек ![]() |
Neverwinter Script int nNum = GetLocalInt(.... , "....."); SetLocalInt(.... , ".....", nNum++); если нужно определенное число тогда Neverwinter Script int nNum = GetLocalInt(.... , "....."); nNum += 4; SetLocalInt(.... , ".....", nNum); На ваулте есть модули переведенные Аваддоном (прошу прощения если не правильно написал имя)по крафтингу, системы банкинга и Гильдинга Имхо, проще изменить что-то чем писать с 0. например 1, 2, 3 Сообщение отредактировал Laajin - Oct 26 2010, 17:44 |
![]()
Сообщение
#3347
|
|
Level 6 ![]() ![]() Класс: Маг Характер: Lawful Evil Раса: Нежить ![]() |
Цитата И можно ли через скрипт добавить запись в дневник? Чем спрашивать на форуме, быстрее и проще вскрыть ту же prelude.mod и посмотреть скрипт на заход. Neverwinter Script AddJournalQuestEntry("TAG", #, oPC, TRUE, TRUE); TAG - тэг журнальной ветки, # - номер записи, oPC - игрок, на которого вешать, можно например GetPCSpeaker() - если в диалоге. Проверка номера ветки делается через локальную переменную: Neverwinter Script GetLocalInt(oPC, "NW_JOURNAL_ENTRYTAG") Нужно только помнить, что имя переменной формируется методом NW_JOURNAL_ENTRY+TAG, т.е. первая часть так и остается, а вместо TAG пишем тэг журнальной ветки. Сообщение отредактировал Talarasha - Oct 26 2010, 13:09 |
![]()
Сообщение
#3348
|
|
Level 7 ![]() ![]() Класс: Некромант Характер: True Neutral Раса: Нежить ![]() |
int nNum = GetLocalInt(.... , "....."); SetLocalInt(.... , ".....", nNum++); Постфиксное инкрементирование (var_name++) увеличит содержимое переменной, но вернёт _предыдущее_ значение. Т.е. в данном случае значение локальной переменной не изменится. Правильно либо Neverwinter Script SetLocalInt(<object>, <var_name>, ++nNum); , либо Neverwinter Script SetLocalInt(<object>, <var_name>, nNum + 1); .
|
![]()
Сообщение
#3349
|
|
Level 5 ![]() ![]() Класс: Пьяный Мастер Характер: Chaotic Good Раса: Человек ![]() |
сколько занимался нвн то
Neverwinter Script int nNum; while(nNum < 10) { nNum++; } всегда работало Сообщение отредактировал Laajin - Oct 26 2010, 15:19 |
![]()
Сообщение
#3350
|
|
Level 8 ![]() ![]() ![]() Класс: Псионик Характер: Chaotic Neutral Раса: Хафлинг ![]() |
|
![]()
Сообщение
#3351
|
|
Level 5 ![]() ![]() Класс: Пьяный Мастер Характер: Chaotic Good Раса: Человек ![]() |
while состоит:
1. Условие, определяющее, будет ли выполняться тело цикла. Это условие записывается после слова while и может быть произвольным арифметическим выражением, в котором должен быть хотя бы один из операторов ==, !=, <, >, <=, >= . 2. Тело цикла, состоящее из одной или нескольких инструкций. (в примере выше опущено =)) 3. Инструкции, изменяющие значения переменных, входящих в проверяемое условие. Если бы этой инструкции не было, то значение переменной не менялось бы и проверяемое условие всегда было бы истинным, что привело бы к бесконечному циклу. (если оно, конечно, изначально цикл запустился хотя бы раз) Сообщение отредактировал Laajin - Oct 26 2010, 15:55 |
![]()
Сообщение
#3352
|
|
Level 7 ![]() ![]() Класс: Некромант Характер: True Neutral Раса: Нежить ![]() |
сколько занимался нвн то Neverwinter Script int nNum; while(nNum < 10) { nNum++; } всегда работало Так ты здесь и не проверяешь возвращаемое значение операции. Как я сказал, значение переменной изменится, но в выражении будет использоваться старое значение. Проверь: Neverwinter Script int nNum = 0;
if (nNum++ == 0) { SendMessageToPC(GetFirstPC(), "Greye is right."); } else { SendMessageToPC(GetFirstPC(), "Greye is wrong."); } if (++nNum == 1) { SendMessageToPC(GetFirstPC(), "Greye is wrong."); } else { SendMessageToPC(GetFirstPC(), "Greye is right again."); } Сообщение отредактировал greye - Oct 26 2010, 16:24 |
![]()
Сообщение
#3353
|
|
Level 5 ![]() ![]() Класс: Пьяный Мастер Характер: Chaotic Good Раса: Человек ![]() |
Цитата bern Скажите, как можно добавить +1 или другое число к переменной, учитывая ее текущее значение, а не устанавливая конкретное значение? И можно ли через скрипт добавить запись в дневник? все же мне думается я верно ответил greye если ты имеешь ввиду обновление переменной сразу - то да. Тогда я просто не понял в чем я не прав, но для bern разницы я думаю не много - суть одна - число увеличится. |
![]()
Сообщение
#3354
|
|
Level 7 ![]() ![]() Класс: Некромант Характер: True Neutral Раса: Нежить ![]() |
Переменная в скрипте - да, увеличится, а вот значение локальной переменной на объекте - нет.
|
![]()
Сообщение
#3355
|
|
Level 5 ![]() ![]() Класс: Пьяный Мастер Характер: Chaotic Good Раса: Человек ![]() |
о_О
ну....ладно, нет так нет, у меня короче Сообщение отредактировал Laajin - Oct 26 2010, 16:32 |
![]()
Сообщение
#3356
|
|
Level 5 ![]() Класс: Обыватель Характер: Lawful Neutral Раса: Человек NWN: Модмейкер Проклятие Левора Порядок Времени ![]() |
TAG - тэг журнальной ветки, # - номер записи, oPC - игрок, на которого вешать, можно например GetPCSpeaker() - если в диалоге. Проверка номера ветки делается через локальную переменную: Neverwinter Script GetLocalInt(oPC, "NW_JOURNAL_ENTRYTAG") Нужно только помнить, что имя переменной формируется методом NW_JOURNAL_ENTRY+TAG, т.е. первая часть так и остается, а вместо TAG пишем тэг журнальной ветки. связывать журнальную запись и имя переменной именно таким методом не обязательно, к слову. Можно выбрать конструкцию попроще. сколько занимался нвн то Neverwinter Script int nNum; while(nNum < 10) { nNum++; } всегда работало По поводу присовения локальной переменной и вообще про nNum++ greye прав. А в приведенном тобой примере немного другая ситуация. И она не входит в противоречие с действительностью. |
![]()
Сообщение
#3357
|
|
Level 5 ![]() ![]() Класс: Пьяный Мастер Характер: Chaotic Good Раса: Человек ![]() |
Neverwinter Script int nNum = GetLocalInt(.... , "....."); SetLocalInt(.... , ".....", nNum++); nNum++ это тоже самое что nNum+1 следовательно не вижу особой разницы для bern |
![]()
Сообщение
#3358
|
|
Level 2 ![]() Класс: Ученик Дракона Характер: Chaotic Neutral Раса: Человек ![]() |
Всем спасибо! Буду пробовать разные варианты если что. Laajin, спасибо за полезные ссылки, нужно будет покопаться. Также посмотреть скрипты из готовых модов - отличная идея.
|
![]()
Сообщение
#3359
|
|
Level 6 ![]() ![]() Класс: Маг Характер: Lawful Evil Раса: Нежить ![]() |
Цитата связывать журнальную запись и имя переменной именно таким методом не обязательно, к слову. Можно выбрать конструкцию попроще. Запрашиваю подробную инфу. Пошарил по форуму, видел лишь реализацию связкой "добавить запись"+"установить переменную о том, что добавили записи", затем "проверить переменную с записи". Это то, что имелось ввиду или в дебрях NSS от меня прячутся реально клевые ништяки? Сообщение отредактировал Talarasha - Oct 26 2010, 20:00 |
![]()
Сообщение
#3360
|
|
Level 11 ![]() Класс: Волшебник Характер: Lawful Evil Раса: Эльф NWN: Скриптинг [PW] Gem of the North ![]() |
Цитата nNum++ это тоже самое что nNum+1 Ты не прав, есть разница в возвращаемом значении. Результаты выполнения SetLocalInt(.... , ".....", nNum++) и SetLocalInt(.... , ".....", nNum + 1) будут существенно различны.Вообще, не имея опыта в программировании, лучше этими не пользоваться значениями, возвращаемыми операторами присваивания и инкрементирования/декрементирования, - это приводит к долгим и муторным поискам ошибок с точностью до единицы. Сообщение отредактировал Ilerien - Oct 26 2010, 21:31 |
![]()
Сообщение
#3361
|
|
Level 5 ![]() ![]() Класс: Пьяный Мастер Характер: Chaotic Good Раса: Человек ![]() |
мне уже даже интересно - в чем различие будет в данном примере? - тогда уж объясни
я прекрасно понимаю что вообще nNum++ nNum+1 отличаются, но в данном примере разве не произойдет увеличение на 1, при установки локалки? |
![]()
Сообщение
#3362
|
|
Level 7 ![]() ![]() Класс: Некромант Характер: True Neutral Раса: Нежить ![]() |
я прекрасно понимаю что вообще nNum++ nNum+1 отличаются, но в данном примере разве не произойдет увеличение на 1, при установки локалки? Не произойдёт. SetLocalInt поставит то значение, которое указано третьим параметром. nNum + 1 честно посчитается и локалка выставится в nNum + 1, а значение самого nNum не изменится.nNum++ вернёт nNum, поэтому локалка станет nNum, а сам nNum увеличится на единицу. Так как мне всё равно нечего делать: представим, что наша переменная nNum это ящик. У ящика есть некоторый вес, который можно регистрировать весами (в качестве весов возьмём значение локальной переменной после SetLocalInt). nNum + 1 это как положить на весы этот ящик и _рядом_ ещё один брусок. ++nNumber это как сначала положить брусок _внутрь_ ящик, а потом взвесить. nNum++ это сначала взвесить ящик без бруска, а потом положить брусок внутрь. Сообщение отредактировал greye - Oct 26 2010, 21:36 |
![]()
Сообщение
#3363
|
|
Level 5 ![]() ![]() Класс: Пьяный Мастер Характер: Chaotic Good Раса: Человек ![]() |
Все верно. Поставил нвн и проверил сам.
Neverwinter Script int nNum = GetLocalInt(.... , "....."); SetLocalInt(.... , ".....", nNum++); в этом случае действительно не произойдет увеличение, а вот в это случае Neverwinter Script int nNum = GetLocalInt(.... , "....."); nNum++; SetLocalInt(.... , ".....", nNum); уже произойдет. Спасибо, такой нюанс, а сцукО. Сообщение отредактировал Laajin - Oct 26 2010, 22:04 |
![]()
Сообщение
#3364
|
|
Level 19 ![]() Класс: Воин Характер: Lawful Good Раса: Человек NWN: Скриптинг [PW] Gem of the North Край Лесов ![]() |
1. Всё же неплохо сначала проверять, а потом советовать (IMG:style_emoticons/kolobok_light/smile.gif)
2. Ну вы ещё часов 12 поспорьте, чему равно ++nNum++, строя разные теории и аналогии, но не утруждая себя запустить на 3 минуты тулсет (IMG:style_emoticons/kolobok_light/smile.gif) |
![]()
Сообщение
#3365
|
|
Level 17 ![]() Класс: Волшебник Характер: Neutral Good Раса: Человек NWN: Скриптинг [PW] Axistown SR 1.9 NWNX ![]() |
Оператор n++ заменяет выражение n=n+1, но вот от его положения зависит то, будет ли это выполняться до выражения, где он фигурирует или нет.
Neverwinter Script x = ++n; эквивалентноNeverwinter Script n = n+1; ,x = n; Neverwinter Script x = n++; ЭквивалентноNeverwinter Script x = n; n = n+1; Для самого n результат одинаковый, для выражения, в котором оно участвует - нет. Как обычно, напомню, что всё это, и многое другое, описано в Лексиконе. Чем догадываться, лучше один раз прочитать. |
![]() ![]() |
Текстовая версия | Сейчас: 8th May 2025 - 21:00 |