![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() ![]() |
![]() |
![]()
Сообщение
#3336
|
|
Level 7 ![]() ![]() Класс: Некромант Характер: True Neutral Раса: Нежить ![]() |
|
![]()
Сообщение
#3337
|
|
Level 1 Класс: Теневой Танцор Характер: Lawful Good Раса: Человек ![]() |
|
![]()
Сообщение
#3338
|
|
Level 6 ![]() ![]() Класс: Маг Характер: Lawful Evil Раса: Нежить ![]() |
Там написано, что. В цитате. Скрипт оперирует переменной oNPC, которая ссылается на мертвый объект. Мертвый объект в скрипте отслеживается функцией GetLastRespawnButtonPresser(), которая возвращает последнего персонажа, который щелкнул кнопку воскрешения. Но воскреснуть с помощью кнопки могут только игроки, а не NPC. Поэтому тебе сказали заменить на OBJECT_SELF, объект, который вызвал событие onDeath - он сам.
Вот это: Neverwinter Script object oNPC = GetLastRespawnButtonPresser(); Заменить на: Neverwinter Script object oNPC = OBJECT_SELF;
Сообщение отредактировал Talarasha - Aug 25 2010, 20:22 |
![]()
Сообщение
#3339
|
|
Level 1 Класс: Теневой Танцор Характер: Lawful Good Раса: Человек ![]() |
|
![]()
Сообщение
#3340
|
|
Level 6 ![]() ![]() Класс: Маг Характер: Lawful Evil Раса: Нежить ![]() |
Я вообще удивляюсь, как это у тебя компилируется. В базовой библиотеке нет функции RemoveEffects, а никаких инклюдов не указано. Не говоря уже про условия, вероятно вырванные из оригинального скрипта?
Neverwinter Script 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)); } Все сохранить и повесить на onDeath объекта. Закомментированный DelayCommand раскомментируешь, когда найдешь, откуда берется функция. Для общего развития: 1)NPC не может быть воскрешен, если ему об этом не сказано с помощью SetIsDestroyable(*,TRUE,*); 2)Когда скрипт висит на onDeath, не нужно использовать AssignCommand, он итак выполняется объектом, вызвавшим событие. 3)Мертвые тела - не переносятся через JumpToObject. 4)В этом скрипте предполагается, что нужно воскрешение именно этого конкретного экземпляра NPC. Если бы мне понадобился респ, я бы сделал его через CopyObject. Сообщение отредактировал Talarasha - Aug 26 2010, 14:45 |
![]()
Сообщение
#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 |
![]() ![]() |
Текстовая версия | Сейчас: 3rd May 2025 - 02:48 |