2. Никак ни могу найти проверку (gc_) на атрибуты тип Харизма Сила и т.д. не подскажете? rolleyes.gif
Neverwinter Script
gc_check_stats(int nStat, int nVal)
This script checks to see if the player (PC_Speaker) has stats above a certain number
nStat = The integer of which stat to check for (list boxes will be done later)
nVal = The value the stat needs to equal or exceed
This script checks to see if the player (PC_Speaker) has stats above a certain number
nStat = The integer of which stat to check for (list boxes will be done later)
nVal = The value the stat needs to equal or exceed
про волков. Самый самый тупой вариант. Добавить этот блок где-нить в начале стандартного скрипта смерти у волка (скрипт сохранить под новым именем)
Neverwinter Script
object oNPC = GetObjectByTag("Тэг НПС, выдающего и принимающего(это критичнее, если разные, лучше писать на принимающего) квест");
SetLocalInt(oNPC,"WOLVES",GetLocalInt(oNPC,"WOLVES")+1);
SetLocalInt(oNPC,"WOLVES",GetLocalInt(oNPC,"WOLVES")+1);
в диалоге с этим НПС сделать типа так:
НПС: О, мой герой! (проверка на то, что квест уже выполнен)
НПС: Ну что, убил гадов? (проверка на то, что квест взят)
| Игрок: Да (проверка на то, что переменная WOLVES у этого НПС равна 3)
| | НПС: Отлично! На награду. (установка переменной квеста в состояние "выполнен")
| Игрок: Нет
НПС: На квест.
| Игрок: Беру (ставим локалку что квест взят)
| Игрок: Не беру
примерно понятно?
зы: по хорошему конечно надо эти 2 переменные (квестовая и волки) сводить в одну. Те негоже для квеста иметь 2 разных переменных. Одна за состояния вроде как отвечает, но при этом не учитывает волков, за которых говорит другая. В принципе волковскую переменную можно оставить, но как вспомогательную, тогда скрипт в смерти волка будет чуть другой:
Neverwinter Script
object oNPC = GetObjectByTag("Тэг НПС, выдающего и принимающего(это критичнее, если разные, лучше писать на принимающего) квест");
int Wolves = GetLocalInt(oNPC,"WOLVES");
Wolves++;
if (Wolves==3)
SetLocalInt(oNPC,"QUEST",/*ставим статус квеста "выполнен, но не сдан"*/);
SetLocalInt(oNPC,"WOLVES",Wolves);
int Wolves = GetLocalInt(oNPC,"WOLVES");
Wolves++;
if (Wolves==3)
SetLocalInt(oNPC,"QUEST",/*ставим статус квеста "выполнен, но не сдан"*/);
SetLocalInt(oNPC,"WOLVES",Wolves);
собственно тут в кратце описана самая примитивная квестовая система. Это локальная переменная на НПС, которая отображает состояния квеста. Например
0 - не взят
1 - взят, не выполнен
2 - выполнен, не сдан
3 - выполнен, сдан
как видим, это именно примитивный квест без нелинейности. Однако (!) на такой схеме можно сварганить и нелинейность, просто надо не запутаться в состояниях будет.
хинт: рекомендую давать журнальным записям номер того состояния квеста, которому она соответствует. Будет меньше путаницы. Те если у вас состояния квеста 0, 10, 20, 30, то журнальным записям надо давать точно такие же номера.
в принципе, можно плясать от вышеприведенного каркаса, улучшая его до состояния нормальной системы. Но это уже сам. Могу подсказать куда идти:
1. отвязывать квестовые переменные от НПС (чтобы можно было без гемороя использовать в квесте несколько НПС, особенно если нужно с ними болтать)
2. расширять состояния квеста (например "не взят и не может быть взят")
3. написать общие скрипты проверки любого квеста на любое состояние (те скриптов для диалоговых проверок/установок на самом деле нужно всего 2. На все квесты. В идеале, те конечно так не бывает

4. Подумать еще и всетаки сделать лишь 2 скрипта установки/проверки, а квестовые действия занести в отдельный скрипт (по каждому квесту свой) и там, в одном месте, держать все действия, сопутствующие переходу из одного состояния в другое.
ну или придумать с 0 свою систему. (пункт 4 это в принципе сильный уход в сторону от того, что выше написано.)