Город Мастеров
IPB

Здравствуйте, гость ( Вход | Регистрация )

 Правила этого форума ПРАВИЛА РАЗДЕЛА
147 страниц V  « < 133 134 135 136 137 > »   
Ответить в эту темуОткрыть новую тему
> Скрипты, Все вопросы и ответы по скриптам
greye
сообщение Aug 24 2010, 15:55
Сообщение #3336


Level 7
**

Класс: Некромант
Характер: True Neutral
Раса: Нежить



Цитата(Iceman157 @ Aug 24 2010, 16:27) *
object oNPC = GetLastRespawnButtonPresser();

Просто OBJECT_SELF, ибо не нажимают боты на кнопки...
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Iceman157
сообщение Aug 25 2010, 19:27
Сообщение #3337


Level 1


Класс: Теневой Танцор
Характер: Lawful Good
Раса: Человек



Цитата(greye @ Aug 24 2010, 18:55) *
Просто OBJECT_SELF, ибо не нажимают боты на кнопки...

Хорошо, понятно, но вот что изменять на OBJECT_SELF не понятно..
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Talarasha
сообщение Aug 25 2010, 20:20
Сообщение #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
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Iceman157
сообщение Aug 26 2010, 10:35
Сообщение #3339


Level 1


Класс: Теневой Танцор
Характер: Lawful Good
Раса: Человек



Изменил, но теперь нпц не просто не ресается, теперь его нет вообще =\

Цитата(Iceman157 @ Aug 26 2010, 13:30) *
Изменил, но теперь нпц не просто не ресается после смерти, теперь его нет вообще =\

Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Talarasha
сообщение Aug 26 2010, 14:36
Сообщение #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
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Iceman157
сообщение Aug 26 2010, 15:13
Сообщение #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);

Выдаёт ошибку. ИМХО не компелируется.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Talarasha
сообщение Aug 26 2010, 15:17
Сообщение #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
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Iceman157
сообщение Aug 26 2010, 15:22
Сообщение #3343


Level 1


Класс: Теневой Танцор
Характер: Lawful Good
Раса: Человек



Ооооо... хых. Спасибо тебе большое =) Работает.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
bern
сообщение Oct 23 2010, 17:35
Сообщение #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)
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
bern
сообщение Oct 26 2010, 10:52
Сообщение #3345


Level 2
*

Класс: Ученик Дракона
Характер: Chaotic Neutral
Раса: Человек



Скажите, как можно добавить +1 или другое число к переменной, учитывая ее текущее значение, а не устанавливая конкретное значение? И можно ли через скрипт добавить запись в дневник?
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Laajin
сообщение Oct 26 2010, 11:10
Сообщение #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
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Talarasha
сообщение Oct 26 2010, 13:07
Сообщение #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
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
greye
сообщение Oct 26 2010, 15:02
Сообщение #3348


Level 7
**

Класс: Некромант
Характер: True Neutral
Раса: Нежить



Цитата(Laajin @ Oct 26 2010, 12:10) *
int nNum = GetLocalInt(.... , ".....");
SetLocalInt(.... , ".....", nNum++);

Постфиксное инкрементирование (var_name++) увеличит содержимое переменной, но вернёт _предыдущее_ значение. Т.е. в данном случае значение локальной переменной не изменится.
Правильно либо
Neverwinter Script
SetLocalInt(<object>, <var_name>, ++nNum);

, либо
Neverwinter Script
SetLocalInt(<object>, <var_name>, nNum + 1);
.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Laajin
сообщение Oct 26 2010, 15:19
Сообщение #3349


Level 5
**

Класс: Пьяный Мастер
Характер: Chaotic Good
Раса: Человек



сколько занимался нвн то

Neverwinter Script
int nNum;

while(nNum < 10)
{



nNum++;
}


всегда работало

Сообщение отредактировал Laajin - Oct 26 2010, 15:19
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
PaiNt
сообщение Oct 26 2010, 15:30
Сообщение #3350


Level 8
***

Класс: Псионик
Характер: Chaotic Neutral
Раса: Хафлинг



Цитата(Laajin @ Oct 26 2010, 23:19) *
сколько занимался нвн то

Neverwinter Script
int nNum;

while(nNum < 10)
{



nNum++;
}


всегда работало

Я вот поидее сам также пользуюсь но поидее должно работать и так?
Neverwinter Script
int nNum;
while( nNum++ < 10)
{
}
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Laajin
сообщение Oct 26 2010, 15:35
Сообщение #3351


Level 5
**

Класс: Пьяный Мастер
Характер: Chaotic Good
Раса: Человек



while состоит:

1. Условие, определяющее, будет ли выполняться тело цикла. Это условие записывается после слова while и может быть произвольным арифметическим выражением, в котором должен быть хотя бы один из операторов ==, !=, <, >, <=, >= .
2. Тело цикла, состоящее из одной или нескольких инструкций. (в примере выше опущено =))
3. Инструкции, изменяющие значения переменных, входящих в проверяемое условие. Если бы этой инструкции не было, то значение переменной не менялось бы и проверяемое условие всегда было бы истинным, что привело бы к бесконечному циклу. (если оно, конечно, изначально цикл запустился хотя бы раз)

Сообщение отредактировал Laajin - Oct 26 2010, 15:55
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
greye
сообщение Oct 26 2010, 16:22
Сообщение #3352


Level 7
**

Класс: Некромант
Характер: True Neutral
Раса: Нежить



Цитата(Laajin @ Oct 26 2010, 16:19) *
сколько занимался нвн то
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
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Laajin
сообщение Oct 26 2010, 16:28
Сообщение #3353


Level 5
**

Класс: Пьяный Мастер
Характер: Chaotic Good
Раса: Человек



Цитата
bern
Скажите, как можно добавить +1 или другое число к переменной, учитывая ее текущее значение, а не устанавливая конкретное значение? И можно ли через скрипт добавить запись в дневник?

все же мне думается я верно ответил

greye
если ты имеешь ввиду обновление переменной сразу - то да. Тогда я просто не понял в чем я не прав, но для bern разницы я думаю не много - суть одна - число увеличится.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
greye
сообщение Oct 26 2010, 16:29
Сообщение #3354


Level 7
**

Класс: Некромант
Характер: True Neutral
Раса: Нежить



Переменная в скрипте - да, увеличится, а вот значение локальной переменной на объекте - нет.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Laajin
сообщение Oct 26 2010, 16:32
Сообщение #3355


Level 5
**

Класс: Пьяный Мастер
Характер: Chaotic Good
Раса: Человек



о_О
ну....ладно, нет так нет, у меня короче

Сообщение отредактировал Laajin - Oct 26 2010, 16:32
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Lex
сообщение Oct 26 2010, 17:06
Сообщение #3356


Level 5
Иконки Групп

Класс: Обыватель
Характер: Lawful Neutral
Раса: Человек
NWN: Модмейкер
Проклятие Левора
Порядок Времени



Цитата(Talarasha @ Oct 26 2010, 13:07) *
TAG - тэг журнальной ветки, # - номер записи, oPC - игрок, на которого вешать, можно например GetPCSpeaker() - если в диалоге. Проверка номера ветки делается через локальную переменную:
Neverwinter Script
GetLocalInt(oPC, "NW_JOURNAL_ENTRYTAG")

Нужно только помнить, что имя переменной формируется методом NW_JOURNAL_ENTRY+TAG, т.е. первая часть так и остается, а вместо TAG пишем тэг журнальной ветки.

связывать журнальную запись и имя переменной именно таким методом не обязательно, к слову. Можно выбрать конструкцию попроще.

Цитата(Laajin @ Oct 26 2010, 15:19) *
сколько занимался нвн то

Neverwinter Script
int nNum;

while(nNum < 10)
{



nNum++;
}


всегда работало

По поводу присовения локальной переменной и вообще про nNum++ greye прав. А в приведенном тобой примере немного другая ситуация. И она не входит в противоречие с действительностью.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Laajin
сообщение Oct 26 2010, 17:53
Сообщение #3357


Level 5
**

Класс: Пьяный Мастер
Характер: Chaotic Good
Раса: Человек



Neverwinter Script
int nNum = GetLocalInt(.... , ".....");

SetLocalInt(.... , ".....", nNum++);


nNum++ это тоже самое что nNum+1
следовательно не вижу особой разницы для bern
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
bern
сообщение Oct 26 2010, 18:35
Сообщение #3358


Level 2
*

Класс: Ученик Дракона
Характер: Chaotic Neutral
Раса: Человек



Всем спасибо! Буду пробовать разные варианты если что. Laajin, спасибо за полезные ссылки, нужно будет покопаться. Также посмотреть скрипты из готовых модов - отличная идея.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Talarasha
сообщение Oct 26 2010, 19:55
Сообщение #3359


Level 6
**

Класс: Маг
Характер: Lawful Evil
Раса: Нежить



Цитата
связывать журнальную запись и имя переменной именно таким методом не обязательно, к слову. Можно выбрать конструкцию попроще.

Запрашиваю подробную инфу. Пошарил по форуму, видел лишь реализацию связкой "добавить запись"+"установить переменную о том, что добавили записи", затем "проверить переменную с записи". Это то, что имелось ввиду или в дебрях NSS от меня прячутся реально клевые ништяки?

Сообщение отредактировал Talarasha - Oct 26 2010, 20:00
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Ilerien
сообщение Oct 26 2010, 20:34
Сообщение #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
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения

147 страниц V  « < 133 134 135 136 137 > » 
Ответить в эту темуОткрыть новую тему
3 чел. читают эту тему (гостей: 3, скрытых пользователей: 0)
Пользователей: 0

 



Текстовая версия Сейчас: 3rd May 2025 - 02:48