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

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

 Правила этого форума ПРАВИЛА РАЗДЕЛА
 
Тема закрытаОткрыть новую тему
> Вопросы и Ответы по Toolsetу
Lex
сообщение Jan 22 2005, 00:00
Сообщение #1


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

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



********************************************************************************
Статьи, ссылки + выжимка из темы "Вопросы новичков, ТОМ 1" + выжимка из темы "Вопросы новичков, ТОМ 2" + выжимка из старых тем.


ПОСТИТЬ ЗАПРЕЩЕНО ВСЕМ, КРОМЕ МОДЕРАТОРОВ РАЗДЕЛА.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Lex
сообщение Feb 12 2005, 22:02
Сообщение #2


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

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



BioWare Aurora Neverwinter Nights Toolset (На русском языке от Aiwan)

Далее ответы на некоторые распространенные вопросы. (могут быть пересечения с тутором)


**************************************************
******************************

<span style='color:red'>ВОПРОС</span>
Как пользоваться хаками?

<span style='color:red'>ОТВЕТЫ</span>
Тема по хакам 1
Тема по хакам 2
В том же резделе еще про них есть.

1) Кидай хак в папку haks.
2) В модуле в свойствах найди закладку, посвященную хакам (Custom Content).
3) Подключи нужный тебе хак и работай.

**************************************************
******************************

<span style='color:red'>ВОПРОС</span>
CreateObject(...); - создает по Blueprint ResRef или по тэгу?

<span style='color:red'>ОТВЕТЫ</span>
CreateObject(...); - создает по Blueprint ResRef
Создавать можно только итемы, NPC, плейсы, магазины и вейпоинты.

**************************************************
******************************

<span style='color:red'>ВОПРОС</span>
Как сделать чтоб гадкая маленькая буковка "я" не делала ошибки в скриптах?

<span style='color:red'>ОТВЕТЫ</span>
Neverwinter Script
//================  Буква Я в стрингах (Автор Lex) ============================
string ya = GetName(GetWaypointByTag("YA")); // "+ya+" - так ее использовать
//================  Буква Я в стрингах (Автор Lex) ============================

DelayCommand(5.0, SpeakString("Да. Ключика у теб"+ya+" нет."));

Для работы этой схемы необходимо, чтобы в модуле был waypoint с tagом "YA" и именем "я"
--------------------------------------------------
в скриптах я делаю так:
- пишу сначала весь тест, какой должен быть в скрипте с буквами я.
- запускаю find and replace и меняю я на "+ya+"

**************************************************
******************************

<span style='color:red'>ВОПРОС</span>
Для того чтобы садиться на стулья скрипт нужен?

<span style='color:red'>ОТВЕТЫ</span>
Да. ActionSit(object oChair); на OnUsed стула.

**************************************************
******************************

<span style='color:red'>ВОПРОС</span>
В упор не могу найти в палитре стойку бара (или что-то вроде). Облазил все, что можно, но всеже нигде нету. Не ужели ее в стандартной палитре нету?

<span style='color:red'>ОТВЕТЫ</span>
Нет, но можно составить стойку из квадратных столов. Составляешь в ряд, и получается стойка.

**************************************************
******************************

<span style='color:red'>ВОПРОС</span>
Есть диалог, в котором должно быть две ветки. Первая, в случае истинности условия, вторая в случае его ложности. Объясните поподробнее, куда должен вставляться скрипт и как его писать.
(условие - наличие оружие в руках героя).

<span style='color:red'>ОТВЕТЫ</span>
Ставишь один лишь скрипт на TextAppearsWhen в первой ветке.
Neverwinter Script
int StartingConditional()
{
  object oPC = GetPCSpeaker();
  if (GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oPC) != OBJECT_INVALID){
    // оружие в руке
    return FALSE;
  }
  return TRUE;
}


**************************************************
******************************

<span style='color:red'>ВОПРОС</span>
У меня есть охранник в таверне, он предупреждает о том, что оружием размахивать нельзя. У всех НПС и предметов, onDamaged висит скрипт действий - менять факцию дебошира на хостайл, но это не логично: он ведь не напал ни на кого лично. Он просто чуть-чуть побуянил. Как поступить? Если его факцию выставить хостайлом по отношению с гардом, то остальные ПС могут обидится - они то не причем.. Что делать: Делать отдельную факцию для дебоширов или есть другой способ? Проблемма с тем, что если PC обидит гарда (сломав стул, напав на НПС), то другой РС зашедший в таверну, тоже получит от тролля в носяру.

<span style='color:red'>ОТВЕТЫ</span>
Сделай в таверне фракцию, чтобы каждый из коммонеров был друг к другу нейтрален.
--------------------------------------------------

Делай гардов обсалютно нейтральными ко всем кроме друг друга и если ты напал на кого-то из посетителей, то вешай через он OnDamaged на оРС локалку а у гардов проверяй ее на OnPerception.
Можно стереть ее через часик, типа оттаял и спеак стринг типа: "А, это ты, ну входи...входи..."
--------------------------------------------------

Для этого существует PersonalReputation... Хотя... проще наверное действительно, как написано выше. Если, охранник обижается, то на нем ставится переменная: OBJECT_SELF - охранник, oPC - игрок, на которого обиделся.
Neverwinter Script
SetLocalObject(OBJECT_SELF, ObjectToString(oPC), oPC);

и сразу за ней
Neverwinter Script
DelayCommand(240.0, SetLocalObject(OBJECT_SELF, ObjectToString(oPC), OBJECT_INVALID)); // 4 минуты реального времени (2 часа игрового)
// Это чтобы "стиралась" репутация через 4 минуты...

Ну а в OnPerception ставишь типа:
Neverwinter Script
if (GetLocalObject(OBJECT_SELF, ObjectToString(oSeen)) == oSeen)
{
  ClearAllActions();
  SpeakString("Вандал! Банзай!");
  ActionAttack(oSeen);
  // и тд..
}
else
{
  SpeakString("Проходи, присаживайсЯ.");
}

ЗЫ. Этa "система" не претендует на звание отработаной и отлаженой. В нее надо еще вносить и вносить. Это лишь каркас.

**************************************************
******************************

<span style='color:red'>ВОПРОС</span>
И как сделать чтоб Визуал эффект был без звука?

<span style='color:red'>ОТВЕТЫ</span>
Отредактировав соответствующий 2da. Скриптами нельзя.

**************************************************
******************************

<span style='color:red'>ВОПРОС</span>
Есть ли возможность открыть аврору без установленной игры?

<span style='color:red'>ОТВЕТЫ</span>
Заходишь на nwnights.ru и качаешь там тулсет-бета 240 метров с гаком. Но это будет уже не полноценный редактор.

**************************************************
******************************

<span style='color:red'>ВОПРОС</span>
Есть какой нибудь учебничек для начинающих?

<span style='color:red'>ОТВЕТЫ</span>
1. Статьи у нас на сайте (на русском).
2. NWN Lexicon (на инглише).

**************************************************
******************************

<span style='color:red'>ВОПРОС</span>
Можно ли сделать так, чтобы при создании персонажа вместо ПБ кидались кубики (как по AD&D).

<span style='color:red'>ОТВЕТЫ</span>
Для однопользовательской игры можно сначало создать персонажа, а потом руками отредактировать его характеристики, самостоятельно эмулируя броски кубиков. Для редактирования можно воспользоваться программой LETO, которую можно найти на ваулте.

**************************************************
******************************

<span style='color:red'>ВОПРОС</span>
Можно ли персонажу крылья прикрутить или что-нибудь такой супер-клёвое как у монстров?

<span style='color:red'>ОТВЕТЫ</span>
Это можно сделать редактором LETO.

**************************************************
******************************

<span style='color:red'>ВОПРОС</span>
Можно ли поменять экран при загрузке модуля или локации?

<span style='color:red'>ОТВЕТЫ</span>
Можно, редактированием loadscreens.2da. Есть утила специальная на ваульте, которая делает в нужном формате этот скрин.

**************************************************
******************************

<span style='color:red'>ВОПРОС</span>
Как сделать чтоб корабль плыл (ковер-самолет летал, повозка ездила и т.д.)?

<span style='color:red'>ОТВЕТЫ</span>
Для этого необходимо переделать плейс (placeable) корабля в крича (creature). Тогда этим объектом можно будет управлять с помощью процедуры ActionMoveToObject(). Однако, по воде передвигать корабль всё равно не получится, т.к. по воде нельзя двигаться вообще - это запрещено движком.

**************************************************
******************************

<span style='color:red'>ВОПРОС</span>
Можно ли в Aurora Toolse'ере изменить или создать свою систему боя и создать новые классы? Или если можно другой прогой то скажите плиз какой.

<span style='color:red'>ОТВЕТЫ</span>
Систему боя скорее всего нельзя...
А вот классы вполне можно. Но не программой, а ручками, поковыряв и дополнив некоторые 2da-файлы (classes.2da, ссылка на тему 2да ТАБЛИЦЫ в начале поста)

**************************************************
******************************

<span style='color:red'>ВОПРОС</span>
как правильно управлятся с освещением в Toolset'е?

<span style='color:red'>ОТВЕТЫ</span>
Делай так: выбери работу с тайлами в тулсете и выдели комнату, нажав Del и зажав левой кнопкой выбери группу тайлов заключающую в себя весь периметр. Дальше нажми правой кнопкой мыши и выбери свойства. Там будут опции овещения тайлов (палитра квадратиков). Она содержит общий свет, отражение, свет факелов и их отражение. Вот возьми и окрась темным светом в одной комнате и светлым в другой. Один цвет это общий оттенок, другой вроде как отражение.

**************************************************
******************************

<span style='color:red'>ВОПРОС</span>
Как сделать так, чтобы игрок мог подниматься выше 40 уровня.

<span style='color:red'>ОТВЕТЫ</span>
Никак.

**************************************************
******************************

<span style='color:red'>ВОПРОС</span>
Когда локацию делаешь, теги и ресрефы менять абсолютно на все плейсеблы?

<span style='color:red'>ОТВЕТЫ</span>
Нет. Все зависит от того, будешь ли ты использовать эти (что находятся в локации) объекты из скриптов. Если да, то лучше сделать им уникальный тэг.
поменать резреф объекта, что стоит в локе все равно нельзя.

**************************************************
******************************

<span style='color:red'>ВОПРОС</span>
Нужно ли все, что есть в локации добавлять в палитру?

<span style='color:red'>ОТВЕТЫ</span>
Нет, не обязательно. Кастомная палитра сделана для 2-х целей:
1. Ты планируешь делать из скрипта CreateObject данного объекта.
2. Для удобства заполнения других лок (если вломы юзать Ctrl+C, Ctrl+V).

**************************************************
******************************

<span style='color:red'>ВОПРОС</span>
Можно ли добавить плейсеблы из хака в палитру скопом?

<span style='color:red'>ОТВЕТЫ</span>
Нет. Плэйсы появятся при добавлении хака только в Appearance (model view). Для того, чтобы юзать плэйс в модуле, ему впервую очередь нужен уникальный ResRef и собсна описание модели в этом ресрефе. Потому и делается все ручками.

**************************************************
******************************

<span style='color:red'>ВОПРОС</span>
Где в модульных свойствах прописано с какими вещами и количеством голда будет появляться игрок впервые вошедший в модуль?

<span style='color:red'>ОТВЕТЫ</span>
Это делается не в модульных свойствах, а в скрипте на событии OnClientEnter (в свойствах модуля):

Neverwinter Script
void main()
{
    object oPC = GetEnteringObject();
    if (GetLocalInt(oPC, "ENTERING_ONCE") == 0)
    {
        GiveGoldToCreature(oPC, 1000); // даст 1000 "зелени"
        CreateItemOnObject("resref_item", oPC, количество); // вроде так... функция эта, но могу ошибаться в параметрах.
        SetLocalInt(oPC, "ENTERING_ONCE", 1);
    }
}


PS. Вполне допускаю, что это не самый правильный скрипт для шарда, потому как значение "первый-непервый раз" лучше хранить в БД, а не на чаре.

**************************************************
******************************

<span style='color:red'>ВОПРОС</span>
Как сделать так, чтобы дверь закрывалась сама после открытия?

<span style='color:red'>ОТВЕТЫ</span>
Neverwinter Script
void main()
{
DelayCommand(14.9,ClearAllActions()); // Через 15 секунд
DelayCommand(15.0,ActionCloseDoor(OBJECT_SELF)); // захлопнет дверь
DelayCommand(20.0,SetLocked(OBJECT_SELF, TRUE)); // и закроет дверь на ключ через 20 сек
}


**************************************************
*****************************

<span style='color:red'>ВОПРОС</span>
Как сделать так, чтобы отдыхать можно было только в определенных зонах?

<span style='color:red'>ОТВЕТЫ</span>
1. рисуем тригер и растягиваем его во всю комнату, где можно будет отдыхать.
на OnEnter тригера вешаем скрипт:

Neverwinter Script
void main()
{
object oPC = GetEnteringObject();
if (!GetIsPC(oPC)) return;
SetLocalInt(oPC, "REST_ALLOWED", 1);
}

на OnExit:

Neverwinter Script
void main()
{
object oPC = GetExitingObject();
if (!GetIsPC(oPC)) return;
SetLocalInt(oPC, "REST_ALLOWED", 0);
}

идем в скрипт на OnPlayerRest и в самом начале скрипта добавляем проверку:

Neverwinter Script
object oPC = GetLastPCRested();
if(GetLocalInt(oPC, "REST_ALLOWED") !=1) AssignCommand(oPC, ClearAllActions());

теперь игрок сможет отдыхать только если он находиться внутри специального тригера

**************************************************
******************************

<span style='color:red'>ВОПРОС</span>
Как у непися сделать диалог, зависящий от расы, класса и пола? Например, девушку приветствует одним образом, девушку-воина другим, эльфа-мага -- третьим, и так далее..

<span style='color:red'>ОТВЕТЫ</span>
Вариант 1: Через токены.
Neverwinter Script
SetCustomToken(int,string);

int номер кастомного токена, а string это собсна текст.
ПРИМЕР:
SetCustomToken(100,"эльфийка"). потом в диалоге написать:
"Привет, <CUSTOM100>"
А в игре будет так:
"Привет, эльфийка"

Если вы эти токены хотите определить и не менять (те создать свой набор и пользоваться ими в диалогах) то удобнее всего оформить их создание при загрузке модуля.

Вариант 2: выбираешь опцию text appears when, туда ставишь скрипт проверки на рассу/класс/пол и пишешь соответствующий диалог.
Единственное неудобство - приходится писать много разных вариантов для обоих полов каждой расы.
пример скрипта:
Neverwinter Script
int StartingConditional()
{
    int iPassed = 0; // Число iPassed равно нулю
  if(GetLevelByClass(CLASS_TYPE_FIGHTER, GetPCSpeaker()) >= 1)
// если уровень класса воин у говорЯщего РС больше или равен единички то
      iPassed = 1; // ТО число iPassed равно единицы

// а то что снизу это уровнение как бы с сокращением. Вверху это как бы записи:
// пусть Х=тому то У= тому то бла бла а внизу в чистом виде y=x+z
// Если число iPassed равно нулю, то ничего не произойдет и ...
    if(iPassed == 0)
        return FALSE;

// возврат (return) ЛОЖЬ (FALSE), то есть скрипт не вернется в самый верх
// к функции int StartingConditional() и не прикажет ей начать диалог с
// персонажем показав именно ЭТУ строку удовлетворЯющую ее запросам
  return TRUE;

// Это второе условие, т.е. скрипт как бы пробежал по коду и если iPassed = 1;
// то он даже не опустится к  return FALSE;  так как у нас единичка и он сразу
// побежит читать что еще там ниже. А ниже "return TRUE;" что значит возврат
// ИСТИНА, и он типа: ОПА!  И запускает функцию ктороая быстренько тормозит
// пролетающую проверку движком по всем корневым строкам НПС сверху вниз
}

ставим этот скрипт на в слоте text appears when на той строке, где у нас ветка для воинов.

Скрипты такого рода делаются ScriptWizardом. Только не забудте удалить русские буквы "я" в комментариях, если у вас русская версия НВН

**************************************************
******************************

<span style='color:red'>ВОПРОС</span>
Как заставить НПС говорить подругому в диалоге если игрок уже с ним 1 раз поговорил.

<span style='color:red'>ОТВЕТЫ</span>
Скриптами.
1. d_st_firsttalk
Neverwinter Script
void main()
{
SetLocalInt(OBJECT_SELF,"FirstTalk",TRUE);
}

2. d_ch_firsttalk
Neverwinter Script
int StartingConditional()
{
return GetLocalInt(OBJECT_SELF,"FirstTalk");
}


Ставим скрипт 1 в том месте диалога (в закладку Actions), после прохождения которого НПС будет "знать" игрока и в след. диалоге уже говорить с ним как с знакомым. (например после того, как игрок представился)

Ставим скрипт 2 на той ветке, которая должна быть, если НПС знает игрока. (в закладке text appears when)

**************************************************
******************************

<span style='color:red'>ВОПРОС</span>
Вобщем нужен скрипт, чтоб в разговоре при фразе например: "Я слаб, вылечи меня" с перса снимались все вредные эффекты, полностью востанавливалисб хитпоинты и было это бесплатно...

<span style='color:red'>ОТВЕТЫ</span>
Вешаешь как действие на ветке диалога. Лечит все ХП и снимает эффекты.

Neverwinter Script
#include "nw_i0_plot"
void main()
{
object oPC = GetPCSpeaker();
int iHP =GetMaxHitPoints();
effect eHeal = EffectHeal (iHP);
effect eHealVis = EffectVisualEffect (VFX_IMP_HEALING_X);
ActionCastFakeSpellAtLocation(SPELL_HEALING_CIRCLE
,GetLocation(oPC));
DelayCommand (2.0,ApplyEffectToObject(DURATION_TYPE_INSTANT,eHeal,o
PC));
DelayCommand (2.0,ApplyEffectToObject(DURATION_TYPE_TEMPORARY,eHeal
Vis,oPC,10.0));
DelayCommand (2.0, RemoveEffects(oPC));
}


**************************************************
******************************

<span style='color:red'>ВОПРОС</span>
Как сделать так, чтоы у NPC с самого начала было не максимальное количество здоровья? Чтобы NPC был раненый.

<span style='color:red'>ОТВЕТЫ</span>
В слот OnSpawn добавить такой код:

Neverwinter Script
object oNPC = OBJECT_SELF;
    int iD = 30; // Величина повреждений
    effect eDamage = EffectDamage(iD);
    ApplyEffectToObject(DURATION_TYPE_INSTANT,eDamage,
oNPC);


**************************************************
******************************

<span style='color:red'>ВОПРОС</span>
В НВН ХотУ у хенчей можно просмотреть инвентарь из радиального меню. А у простых НПС которые к тебе присоединяются - нельзя. Как сделать чтобы это стало возможным?

<span style='color:red'>ОТВЕТЫ</span>
поставить НПСу скрипты хенчшей. (важен именно скрипт onConversation. Там подключается библиотека, где прописаны все реакции на радиальное меню, ведь это на самом деле слова, сказанные шепотом)

**************************************************
******************************

<span style='color:red'>ВОПРОС</span>
напишите полный скрипт с объяснением, как перепрыгуть NPC`у в другую локацию

<span style='color:red'>ОТВЕТЫ</span>
Neverwinter Script
...
  objectoHome = GetObjectByTag("mn_Portal");
  location lHome = GetLocation(oHome);
  JumpToLocation(lHome);
...


Существует объект с тэгом mn_portal. Это любой размещаемый объект, можно (и желательно) WayPoint (точка пути). Объект может быть размещен где угодно. Даже на другой зоне (area).
Во-первых получаем сам объект:
Тип данных object хранит объект (на самом деле лишь ссылку на него, но это не важно).
object oHome = GetObjectByTag("mn_Portal");
Функция GetObjectByTag возвращает "ссылку" на объект с тэгом, заданным параметром.
В данном случае мы передаем тэг объекта "mn_portal" (string) получаем объект с тэгом "mn_portal" (object).
Во вторых получаем координаты объекта:
location lHome = GetLocation(oHome);
Тип данных location хранит координаты (и много чего другого).
Функция GetLocation возвращает координаты объекта, заданного параметром.
В данном случае, параметром является объект с тэгом "mn_portal" (object), и получаем полные координаты размещаемого объекта (location).
В-третьих совершаем само перемещение:
JumpToLocation(lHome);
Функция JumpToLocation перемещает объект OBJECT_SELF (в основном это будет PC) в место как можно ближе к координатам, указаным в параметре. Т.е. если в точке приземления будет стол, то перс окажется рядом со столом. Если точка перемещения окажется слишком близко, объект перемещения может просто сделать шаг.

**************************************************
******************************

<span style='color:red'>ВОПРОС</span>
Есть НПС у которого диалог. Игрок может выбрать что ответить, а может просто нажать "Esc" и диалог убереться. Как отследить что игрок снимает диалог?

<span style='color:red'>ОТВЕТЫ</span>
Последняя вкладка в диалог эдиторе там типа события End Normal и End Abort...

**************************************************
******************************

<span style='color:red'>ВОПРОС</span>
В тулсете под палитрой есть чекбокс "Show Plot". Если на нем поставить галочку появляется Plot Wizard, Non Plot Wizard. Что это такое и с чем его едят?

<span style='color:red'>ОТВЕТЫ</span>
Это для того, чтобы писать простые (принеси, убей) квесты визардом. Никогда не пользовался, хотя разобраться, вроде разобрался с ним. Ничего сложного.

**************************************************
******************************

<span style='color:red'>ВОПРОС</span>
Как игровому персу присобачить какиенибудь крылья, или хвост?

<span style='color:red'>ОТВЕТЫ</span>
Скриптами никак, наверное. Это рассовый признак. Те 2да файлы.

**************************************************
******************************

<span style='color:red'>ВОПРОС</span>
А вот у меня вопрос не по скриптам , я создал предмет у торговца (еда) но у него она стоит 1gp как сделать так чтобы она стоила 10?

<span style='color:red'>ОТВЕТЫ</span>
Стоимость товара у торговца зависит от многого. В основном, от процентной наценки торговца и от умения персонажа торговаться.
Но и у предмета есть стоимость (в самой первой вкладке в свойствах предмета, слева-сверху). Она зависит от предмета (точнее, от того, как она прописана на предмет в файле 2da ), но есть и параметр Дополнительной стоимости (вроде непосредственной и необоснованной наценки) он расположен как раз под "зарядами" на той же самой первой вкладке. Увеличь ее на сколько нужно.

**************************************************
******************************

<span style='color:red'>ВОПРОС</span>
Как сделать скрипт чтобы охранники злого города атаковали и тд?

<span style='color:red'>ОТВЕТЫ</span>

добавка к стандартному скрипту onPerception:
Neverwinter Script
object oPC = GetLastPerceived();
int iSeen = GetLastPerceptionSeen();
int PCAL = GetAlignmentGoodEvil(oPC);
if (GetIsPC(oPC))
  {
  if (iSeen)
    {
    if  (PCAL!=ALIGNMENT_EVIL)
        DetermineCombatRound(oPC);
    }
  }

Это для охраны злого города. Остальное по аналогии.
Есть минусы, ессно. Но суть ясна.

**************************************************
******************************

<span style='color:red'>ВОПРОС</span>
Как сделать так, чтобы гварды атаковали всех у кого нет определенного предмета?

<span style='color:red'>ОТВЕТЫ</span>

добавка к стандартному скрипту onPerception::
Neverwinter Script
object oPC = GetLastPerceived();
int iSeen = GetLastPerceptionSeen();
int ITM = HasItem(oPC,"TAG_OF_ITEM");
if (GetIsPC(oPC))
  {
  if (iSeen)
    {
    if (!ITM)
        DetermineCombatRound(oPC);
    }
  }

Для работы этого куска кода надо добавить в начале скрипта, до void main() вот это : #include "nw_i0_plot"

**************************************************
******************************

<span style='color:red'>ВОПРОС</span>
Как реализовать респаун вещей в сундуках по времени(шмотка фиксовая сундук бессмертный)?

<span style='color:red'>ОТВЕТЫ</span>
в закрытой локации ставим creature и ставим в слот onSpawn такой скрипт:
Neverwinter Script
void main()
{
object oChest = GetObjectByTag("YOUR_PLOT_CHEST");
object oItem = GetFirstItemInInventory(oChest);
while GetIsObjectValid(oItem) // отчистка сундука от всего, что в нем есть
  {
  DestroyObject(oItem);
  oItem = GetNextItemInInventory(oChest);
  }
CreateItemOnObject("TAG_OF_ITEM",oChest,1); // создание фикс. вещи
ExecuteScript(600.0,"spw_chestmaster"); // через 600 секунд повторить.
}

**************************************************
******************************

<span style='color:red'>ВОПРОС</span>
Как увеличить опыт за убийство мобов?

<span style='color:red'>ОТВЕТЫ</span>
1. В настройках модуля есть XP Scale. Подвигай ее.
2. За то, сколько игрок получает экспы при убийстве моба отвечает его (моба) CR. Чем он выше, тем экспы больше. Закладка Advansed в свойствах модуля.
3. в Скрипте onDeath для мобов написать свою систему дачи экспы. XP Scale тогда надо выставить на 0.

**************************************************
***************************
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Lex
сообщение Feb 13 2005, 19:19
Сообщение #3


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

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



ВОПРОС
Обычная одежда считается доспехами. Если использовать первые несколько вариантов для торса, когда создаёшь камзол, например, то бонуса к защите нет, но таких вариантов маловато. Хочется использовать и те, что ниже по списку, однако движок тогда автоматически добавляет бонус к защите. А этого вовсе не нужно. Как избавиться от бонуса?

ОТВЕТЫ

Нужно все арморы вырезать из ресурсов, переименовать их модели и кинуть в хак, потом в 2Да этим арморам написать класс брони 0.

*****************************************************************************

ВОПРОС
как оттуда достать вещи плейсблы и модели одежды, которые мне нужны, т.е. какие файлы отвечают за анимацию, текстуры и т.п.

ОТВЕТЫ
- Если в крацах:
Анимация находится в самих моделях или ссылается на другие модели.
Модели: MDL- иногда в паре с файлом: wok(тайлы), pwk (плейсиблы), dwk (двери)
Текстуры: DDS, TGA, PLT, TXI - других недано. (plt - только с персонажами т.е броня тоже персонаж, а вот оружие нет )

Конфигурационные файлы (2да-шки)
Собст-но сами 2DA
Потом:
SET - описание тайлов тайлсета
ITP - "палитра" тайлсета.
UTP, UTI и т.д - предметы (ресрефы) палитры.

*****************************************************************************

ВОПРОС
Далее вопрос: скачал я хак с тайлсетами(аж 25 штук(называется что-то вроде 25in1)), но многие тайлсеты просто сакс. Как мне удалить ненужные и внести туда еще парочку.

ОТВЕТЫ
Тайлсеты обычно обзывают первыми тремя буквами т.е к примеру НВН-шный лес это ttf - файлы связаные с ним начинаются так же модели к примеру: ttf01_a01_01, сет файл ttf01.set, итп-шник ttf01pastd.itp и т.д иногда вводят изменения ещё и в пару 2да-шников, кроме того незабудь про текстуры как их обзывают обычно всё равно т.к они могут использоваться в разных тайлсетах )

*****************************************************************************

ВОПРОС
Как добавить в НВН свои портреты?

ОТВЕТЫ
Для того, что бы появились новые портреты в вашем модуле надо изготовить простой Hak. Для начала, нужно выбрать портреты или изготовить их самим, строго соблюдая правила. Всего используется пять портретов для разных ситуаций. Габариты всех пяти изображений должны быть следующими:

256x400 (в общем 256x512 пикселей) - используется в игре, как изображения для биографии.
128x200 (в общем 128x256 пикселей) - используется в окне информации об игроке.
64x100 (в общем 64x128 пикселей) - используется в игровом портрете, тот, что в правом, верхнем углу.
32x50 (в общем 32x64 пикселей) - используется в качестве портрета наемника.
16x25 (в общем 16x32 пикселей) - используется в окне событий thumbnail.

QUOTE
Кстати, слева показан размер видимой области, а справа в скобках, общий размер портрета. Связано это с тем, что портрет отображается не полностью, т.к. небольшая часть его снизу используется игрой для служебных целей.


Все пять изображений в *.tga формате, "24 bits" и "uncompressed". Имена должны быть специальными, смотри ниже.
xxxxxxxxxxxxxxxh.tga (для 256x512)
xxxxxxxxxxxxxxxl.tga (для 128x256)
xxxxxxxxxxxxxxxm.tga (для 64x128)
xxxxxxxxxxxxxxxs.tga (для 32x64)
xxxxxxxxxxxxxxxt.tga (для 16x32)

Префикс "xxxxxxxxxxxxxxx" - имя портрета, файла. Максимальное число символов 15. Префиксы "h", "l", "m","s", и "t" означает размер изображения (Huge, Large, Medium, Small, and Tiny), это необходимо для игры.

Для простоты использования назовем наши портреты «po_user1_», «po_user2_», «po_user3_» и т.д. В таблице 2Da файла мы пометим их как сюжетные (plot). В результате все наши портреты окажутся в разделе вместе с Арибет, Лордом Нашером и другими сюжетными персонажами.

Возьмем стандартный portraits.2da в папке \source в вашей проинсталлированной игры. Откроем его редактором 2da или простым WordPad-ом. После всех портретов прописанных BioWare добавьте свои. Теперь откройте папку \Shadows of Undrentide\utils и запустите nwhak.exe. Создайте новый хак с именем, например Demo.hak и сохраните его. Теперь добавьте в него через меню Resource, Add (Ctrl+A) свой отредактированный portraits.2da и все ваши портреты с именами po_userХ_. Сохраните. Теперь зайдите в модуль и подключите этот хак к своему модулю. Зайдите в свойства NPC в раздел портрета и выберете портреты сюжетных персонажей. Если вы сделали все, как я сказал, то увидите ваши портреты там.

QUOTE
Важно! Имя портрета должно начинаться с po_ и заканчиваться на _X, где X - первая буква размера портрета, но в хаке прописываем без ро_.(!)


(IMG:http://wrg.ru/shots/scr_39.jpg)
Рис. 39.

Если вы любитель порядка во всем, то захотите сделать портреты и разместить их для каждой расы отдельно. Тогда вы должны знать следующие правила:

Например, наш портрет дварфа po_dw_m_50_x.tga (пример, строка 704, Рис. 39, 40.) , вот значения в колонках:
1 - порядковый номер;
2 - имя портрета без po_ и X;
3 - пол персонажа на портрете (0 – мужской, 1 – женский, 3 – любой, 4 - для монстров, чтобы игрок не мог выбрать себе такой портрет);
4 – раса;
игровые расы: (0 – Dwarf, 1 – Elf, 2 – Gnome, 3 – Halfling, 4 – Half-Elf, 5 – Half-Orc, 6 – human);
неигровые расы: идут в алфавитном порядке (с «А» (7) до «V» (25));
5 – обозначает тип портретов для placeables objects;
6 – plot (при 0 - портрет виден всем, при 1 - только квестовым персонажам)

QUOTE
Важно! При редактировании 2da файлов в месте, где нет значения, ставятся четыре звездочки подряд (****)! Если вы не выполните этого требования, то, ваш файл будет непригоден для работы.



(IMG:http://wrg.ru/shots/scr_40.jpg) Рис. 40.

Все имена с PLC_ в начале относятся к картинкам для placeables. Есть еще картинки для дверей и т.п. Но это уже другая история…

Не забудьте, что файлы портретов будут зваться po_**** (прим. "po_user1_m"), хотя в 2да-шке надо писать user_1.

*****************************************************************************

ВОПРОС
Как сделать небо в ХОТУ?

ОТВЕТЫ
Берешь локацию. И в ее свойствах открываешь закладку Визуальой среды, там жмешь на настройку, и снизу есть такая вещь Skybox. По умолчанию стоит None, вот поставь там любое небо.
Потом в опциях самой игрны надо поставить флажок, чтобы небо отображалось.

*****************************************************************************

ВОПРОС
Как открыть модули офицальной компании в Тулсете?

ОТВЕТЫ
Скопировать из папки nwn нужный модуль и изменить *.nwn на *.mod

*****************************************************************************

Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Lex
сообщение Mar 18 2005, 19:14
Сообщение #4


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

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



ВОПРОС
Как сделать раненого НПС? Те чтобы он с самого начала был ранен.

ОТВЕТЫ
в OnSpawn скрипт этому NPC добавить это:
Neverwinter Script Source
ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectDamage(GetCurrentHitPoints(oPC)/2),OBJECT_SELF);
}


*****************************************************************************

ВОПРОС
НПС1 дает задание убить НПС2. Как сделать, чтобы в диалоге с НПС1 появилась надпись "Я выполнил задание" после убийства НПС2?

ОТВЕТЫ

В скрипт OnDeath НПС2 добавить строку:
Neverwinter Script Source
SetLocalInt(GetLastKiller(),"Kill",1);


Затем в диалоге с НПС1 на строку "текст появляется при" такой скрипт:
Neverwinter Script Source
int StartingConditional()
{
return(GetLocalInt(GetPCSpeaker(),"Kill")==1);
}



*****************************************************************************

ВОПРОС
Как сделать плащ-нивидимку?

ОТВЕТЫ
1. на OnPlayerEquipItem модуля...

Neverwinter Script Source
void main()
{
object oPC = GetPCItemLastEquippedBy();
object oItem = GetPCItemLastEquipped();
string sTag = GetTag(oItem);
if (sTag == "INVIS_CLOACK") //ВСТАВЬ НУЖНЫЙ ТЭГ
   {
    effect eInvis = EffectInvisibility(INVISIBILITY_TYPE_IMPROVED);
    AssignCommand(GetObjectByTag("PLS_EFFECTOR"),ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oPC));
   //// PLS_EFFECTOR это просто некий объект. Поставте в какой-нить локе нивидимый объект с таким тэгом.
   }
}

на unEquip эффект снимай
Neverwinter Script Source
void main()
{
object oPC = GetPCItemLastUnequippedBy();
object oItem = GetPCItemLastUnequipped();
string sTag = GetTag(oItem);
if (sTag == "INVIS_CLOACK") //ВСТАВЬ НУЖНЫЙ ТЭГ
   {
    effect eInvis = GetFirstEffect(oPC);
    while (GetIsEffectValid(eInvis))
         {
         if (GetEffectCreator(eInvis)==GetObjectByTag("PLS_EFFECTOR"))
               {
               RemoveEffect(oPC, eInvis);
               return;
               }
         eInvis = GetNextEffect(oPC);
         }
   }
}



*****************************************************************************

ВОПРОС
Можно ли сделать так, чтобы стало возможно говорить со статуей? Или другим неодушевленным предметом

ОТВЕТЫ
Добавить объекту диалог (закладка Advansed) и на OnUsed объекта поставь скрипт:
Neverwinter Script Source
void main()
{
    ActionStartConversation(GetLastUsedBy());
}


Если надо поговорить с вещью, которая в инвентаре, то так:
Добавить предмету свойство (если разговор, то лучше уникальное свойство - на себя). Соотв не забыть про то, что такое использование либо использует charges либо может быть вызвано Х раз в день. Настройте этот момент, как вам нужен. Далее в скриптах модуля в слоте onActivateItem пишите что-то вроде этого:

Neverwinter Script Source
void main()
{
object oItem = GetItemActivated();
object oActivator = GetItemActivator();
object oTarget = GetItemActivatedTarget();
location lPlace = GetItemActivatedTargetLocation();
if (GetTag(oItem)=="TAG_ITEM"// TAG_ITEM Это тэг того Item'а, с которым вы делаете разговор.
  {
  AssignCommand(oActivator ,ActionStartConversation(oActivator ,"dialog"));// dialog это название conversation файла. Проще говоря диалога.
//  SetLocalObject(oPC,"ITEM_ACTIVATED",oItem); - это если тебе нужно быстро и просто получить вещь,
// которая вызвала диалог.
  }


*****************************************************************************

ВОПРОС
Есть ли скрипт повышающий статы или навыки на один или несколько пунктов. (Повышает, а не изменяет).

ОТВЕТЫ
В диалоге на закладку Actions Taken
Neverwinter Script Source
void main()
{
effect eAC = EffectAbilityIncrease(ABILITY_CHARISMA,1); // Подъем харизмы на 1. Другие статы по аналогии
effect eSC = EffectSkillIncrease(SKILL_LORE,1); // подъем опознания на 1. Другие по аналогии.
ApplyEffectToObject(DURATION_TYPE_INSTANT,eAC,GetPCSPeaker());
}



*****************************************************************************

ВОПРОС
Как сделать статую из живого НПС или монстра?

ОТВЕТЫ
Neverwinter Script Source
скрипт в onSpawn. Все остальные скрипты удалить.
void main()
{
ApplyEffectToObject(DURATION_TYPE_PERMANENT,EffectVisualEffect(VFX_DUR_FREEZE_ANIMATION), OBJECT_SELF);
SetCommandable(FALSE, OBJECT_SELF);
}

Но есть 1 минус. Статуя поворачивается, если на нее кликнуть.

*****************************************************************************

ВОПРОС
Есть способ заставить определенный тип оружия наносить больше атак за раунд? кроме фитов rapid shooting и cleave?

ОТВЕТЫ
Кроме множества фитов, можно в скрипты на OnPlayerEquipItem и OnPlayerUnEquipItem встроить такое:
1. x2_mod_def_equ.nss
Neverwinter Script Source
object oItem = GetPCItemLastEquipped();
object oPC   = GetPCItemLastEquippedBy();
if (GetBaseItemType(oItem)==BASE_ITEM_SHORTSWORD&&!GetLocalInt(oPC, "AttackChanged"))
{
    effect eEff = EffectModifyAttacks(3);
    ApplyEffectToObject(DURATION_TYPE_PERMANENT, eEff, oPC);
    SetLocalInt(oPC, "AttackChanged", GetEffectType(eEff)+1);
}


2. x2_mod_def_unequ.nss
Neverwinter Script Source
object oItem = GetPCItemLastUnequipped();
object oPC   = GetPCItemLastUnequippedBy();
int nType = GetLocalInt(oPC, "AttackChanged");
if (GetBaseItemType(oItem)==BASE_ITEM_SHORTSWORD&&nType--)
{
    effect eEff = GetFirstEffect(oPC);
    while(GetIsEffectValid(eEff))
    {
        if (GetEffectType(eEff)==nType&&
            GetEffectCreator(eEff)==OBJECT_SELF)
        {   SetLocalInt(oPC, "AttackChanged", 0);
            RemoveEffect(oPC, eEff); break; }
        eEff = GetNextEffect(oPC);
    }
}

Neverwinter Script Source
GetBaseItemType(oItem)==BASE_ITEM_SHORTSWORD
можно заменить на любое другое условие.
Изменение количества атак не отображается в листе параметров персонажа.
Добавочные атаки идут с бонусом первой атаки.
GetEffectType для данного эффекта возвращает значение 0, что настораживает. Тем не менее скрипты я проверил работали нормально.

*****************************************************************************

ВОПРОС
Как заставить моба нормально пользоватся хайдом? Есть ли какие нибудь скрипты?

ОТВЕТЫ
Если вопрос про моба-шадоудансера, то самый простой путь, который мы с Ярлом нашли не требует написания никаких скриптов. Все что надо, это не давать мобу НИКАКИХ активных боевых фитов (т.е. кнок, дизарм и т.д.). В этом случае, стандартные скрипты очень здорово позволяют ШД прятаться во время боя.

*****************************************************************************

ВОПРОС
Что делать если глючит русский шрифт в scripteditor'е. Те переношу туда откуда-то русский текст, а получаются какие-то значки непонятные.

ОТВЕТЫ
В scripteditor'е последняя иконка на панели - настройка шрифтов, цветов и прочее. Выберите там другой шрифт.

*****************************************************************************

ВОПРОС
Как задавать из тулсета создаваемой вещи какой-либо из скрытых цветов?

ОТВЕТЫ
Черный, белый, золотой,медный, зеркальный,серая ткань и еще два подвида черного и белого задаются там же, где и выбираются стандартные цвета.
Инструкция:
1. Зажимаешь кнопку мыши на любом цвете.
2. Тянешь мышь в пустое пространство между палитрой и кнопками OK и Сancel(cерая зона).
4. Отпускаешь кнопку мыши, выбирается квадрат в серой зоне. Вместе с ним изменятся и цвет. Квадратов несколько.


*****************************************************************************

ВОПРОС

ОТВЕТЫ

*****************************************************************************

ВОПРОС

ОТВЕТЫ

*****************************************************************************

ВОПРОС

ОТВЕТЫ

*****************************************************************************

ВОПРОС

ОТВЕТЫ

*****************************************************************************

..20..
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Lemegeton
сообщение Mar 18 2005, 19:18
Сообщение #5


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

Класс: Монах
Характер: Lawful Good
Раса: Человек
NWN: Контент



ВОПРОС
Как сделать так, чтобы доступ в локацию был ограничен по левелу? То есть 3 левел еще может туда попасть а 4 уже нет?

ОТВЕТЫ
На OnEnter триггера ставится следующий скрипт. Этот скрипт всех других НЕ ПУСТИТ в локу. Монстров и прочее. Отредактировать под собственные нужды.

Neverwinter Script Source
//:://////////////////////////////////////////////
//:: Copyright © 2004 WRG!  www.wrg.ru
//::
//:://////////////////////////////////////////////
/*

*/

//:://////////////////////////////////////////////
//:: Created By: Aiwan    Aiwan@e-mail.ru
//:: Created On: 31.12.2004
//:://////////////////////////////////////////////
void main()
{
  object oPC = GetEnteringObject();
  object oAnimal = GetAssociate(ASSOCIATE_TYPE_ANIMALCOMPANION, oPC);
  object oDominated = GetAssociate(ASSOCIATE_TYPE_DOMINATED, oPC);
  object oFamiliar = GetAssociate(ASSOCIATE_TYPE_FAMILIAR, oPC);
  object oHenchman = GetAssociate(ASSOCIATE_TYPE_HENCHMAN, oPC);
  object oSummoned = GetAssociate(ASSOCIATE_TYPE_SUMMONED, oPC);
  object oJamp = GetTransitionTarget(OBJECT_SELF);
  int level =  GetLevelByClass(GetClassByPosition(1,oPC),oPC);
  level = level + GetLevelByClass(GetClassByPosition(2,oPC),oPC);
  level = level + GetLevelByClass(GetClassByPosition(3,oPC),oPC);

  if (GetIsPC(oPC) && level<4)
  {
  AssignCommand(oPC, JumpToObject(oJamp));
  AssignCommand(oAnimal, JumpToObject(oJamp));
  AssignCommand(oDominated, JumpToObject(oJamp));
  AssignCommand(oFamiliar, JumpToObject(oJamp));
  AssignCommand(oHenchman, JumpToObject(oJamp));
  AssignCommand(oSummoned, JumpToObject(oJamp));
  }
}



*****************************************************************************

ВОПРОС
Нет, я все таки не понимаю, как сделать тоже самое, но не с триггером или дверью, а с плэйсиблом?

ОТВЕТЫ
NPC по объекту кликнуть НЕ МОЖЕТ. Поэтому проверка на переход непися или PC - не нужна. Хенчи и прочие соратники движутся за игроком, в основном, по ActionForceFollowObject(oPC, 5.0, 15.0). И, следовательно, переходят за PC через 15 секунд, если тот дальше, чем 5 метров от них.
На OnUsed предмета ставится скрипт:
Neverwinter Script Source
void main()
{
    object oPC = GetLastUsedBy();
    if (!GetIsPC(oPC))
        return;
    if (GetHitDice(oPC) >= 4)
        return;    
    AssignCommand(oPC, JumpToObject(GetObjectByTag("тэг_точки_назначения")));  
}



*****************************************************************************

ВОПРОС
У меня в модуле, при перезаходе в него, восстонавливаются хит поинты и заклинания, а как сделать так, чтобы этого не происходило, и все запоминалось?

ОТВЕТЫ
Скрипт для сохранения здоровья и спеллов при перезаходе:
событие OnClientEnter модуля:

Neverwinter Script Source
//by _Kaa_ 20.05.30
#include "nw_o0_itemmaker"
void main()
{
object oPC = GetEnteringObject();
object oStore = GetModule(); 
string sStoreName = GetName(oPC)+GetPCPlayerName(oPC); // =[PC name] + [login name]
SetLocalString(oPC,"HP_MyIdString",sStoreName);
int iSavedHP = GetLocalInt(oStore,sStoreName);
if (iSavedHP != 0)
{
effect efDamage = EffectDamage(GetMaxHitPoints(oPC)-iSavedHP,DAMAGE_TYPE_MAGICAL,DAMAGE_POWER_ENERGY);
ApplyEffectToObject(DURATION_TYPE_INSTANT,efDamage,oPC);
}

int k,j,nSpells;
for (k=1; k < 510; k++)
{
nSpells = GetLocalArrayInt(oStore,sStoreName+"_spells",k);
if (nSpells)
  for (j=0; j <= GetHasSpell(k,oPC)-nSpells; j++) DecrementRemainingSpellUses(oPC, k);
}
}




OnClientLeave

Neverwinter Script Source
//by _Kaa_ 20.05.30
#include "nw_o0_itemmaker"
void main()
{
object oPC = GetExitingObject();
object oStore = GetModule();
string sStoreName = GetLocalString(oPC,"HP_MyIdString");
SetLocalInt(oStore, sStoreName, GetCurrentHitPoints(oPC));
int k,nSpells;
for (k=1;k<400;k++)
{
nSpells = GetHasSpell(k,oPC);
if (nSpells)
  SetLocalArrayInt(oStore,sStoreName+"_spells",k,nSpells);
}
}


*****************************************************************************

ВОПРОС
Как "выпотрошить" файл с расширением .hak для того, что бы его компоненты пошли в Оверрайд?

ОТВЕТЫ
В папке с игрой есть папка utils, а в ней утилита от BioWare для работы с hak-файлами. Называется nwhak.exe.

*****************************************************************************

ВОПРОС
Как с помощю скриптов создавать визуальные (и только визуальные) эффекты заклинаний?

ОТВЕТЫ
С начала, надо объявить переменную, содержащую эффект:
Neverwinter Script Source
effect eXXX = EffectVisualEffect(int, int);

А затем, использовать функцию, применяющю эффект на объекте или на местности:
Neverwinter Script Source
ApplyEffectAtLocation(int, eXXX, location, float);

или
Neverwinter Script Source
ApplyEffectToObject(int, eXXX, object, float);


Так же, существует возможность применять "липовые" заклинания. Они не наносят повреждений, а в остальном, действуют, как настоящие:
Neverwinter Script Source
ActionCastFakeSpellAtLocation(int, location, int);

или
Neverwinter Script Source
ActionCastFakeSpellAtObject(int, object, int);


*****************************************************************************

ВОПРОС
Как открыть модуль, созданный в более поздней версии тулсета?

ОТВЕТЫ
Предварительно создать копию модуля и использовать только на свой страх и риск!

Качаем NWN Packer http://nwvault.ign.com/Files/other/data/1026158289668.shtml
Качаем GFF Editor http://nwvault.ign.com/Files/other/data/1054162676171.shtml

Открываем модуль NWN Packer'ом. Выдергиваем module.ifo
Сохраняем этот файл где нибудь на жестком диске.
Не закрывая NWN Packer, запускаем GFF Editor.
Открываем в нем наш module.ifo.
Открываем списочек и ищем Mod_MinGameVer
Видим там.. Ну я например сейчас вижу 1.62
Меняем на ту версию какую нам надо. Сохраняем module.ifo.
Закрываем GFF Editor. И перетаскиваем только что сохраненный нами module.ifo в еще не закрытый нами модуль в NWN Packer'е. Он спрашивает заменить файл? Отвечаем да, и сохраняем модуль - вуаля!


*****************************************************************************

ВОПРОС
Как увеличить дальность обзора?

ОТВЕТЫ
edit -> area properties -> visual -> customize environment
Можно поставить 500-1000, но тогда сильно увеличится затрата ресурсов игрой (лагать будет).

Можно убрать и полностью. Но в этом случае будет заметна "граница" модуля. Там где заканчиваются тайлы и начинается серая "пустота".

Это достигается расширением "сферы" тумана, до 300-350 фунтов и управляется только через MOD-файл непосредственно "вскрытый" редактором.


*****************************************************************************

ВОПРОС
Здраствуйте, я вот тут захотел сделать простейший стационарный квест, но в этом я полный 0.
1) Как сделать чтобы при первом разгооре игрока с НПС показывался первый диалог;
2) После первого разговора включался второй диалог;
3) Как сделать проверку на наличие предмета у игрока? Например ели у игрока есть например ключ ему включался определеный диалог (тоесть вот смотри пункт 2, идет второй диалог. и там спрашивають.ты добыл ключ? говориш да, и делаеться проверка на наличие)
4) После того как квест выполнен включался следующий диалог


ОТВЕТЫ
Делается очень легко - с пмощью Локальных переменных...

Как ты мог догадатсья, полистав словарик или просто почитав надписи в тулсете при создании конверсейшна:
TextAppearsWhen - значит "Текст появляется когда..." и там нужно выбрать скрипт. Это значит что в скрипте задаются условия появления. (кстати там есть визард)
ActionTaken - значит "Предпринимаемое действие" (или типа того), то есть - что-то происходит после того как игрко выбрал этот ответ в диалоге, или НПЦ вышел на ветку с этим скриптом... Тут опять же есть визард.
Визард (Wizard) - помощник создания простых скриптов, отображается как шапочка...

Итак, теперь рассказываю подробнее...
Мы создаем все три ветки (для данного примера):

- Привет, игрок
-- Привет, нпц!
- Есть ключ?
-- Есть (проверка)
-- Нету
- Молодец, ты справился с квестом! Терь вали отсюдова!

На первом диалоге (Привет, игрок) вешаем скрипт проверки локальной переменной, например назовем её - quest_prog (quest progress). Для этого можно использовать визард (пока в плане скриптинга обьяснять не буду - запустите визард, посмотрите на код и надеюсь все поймете) - визард в TextAppearsWhen (ТекстПоявляетсяКогда) - и там выбираем Local Variable, выбираем: int (числовая переменная, целая (не дробная)), пишем название переменной (q_prog), is less than (меньше чем), constant int (заданное число), 1.
Далее на продолжении первого диалога ("привет, нпц!") вешаем скрипт (можно опять же визардом) на создании переменной q_prog и задачи ей числа 1. Set Local Variable (Задать локальную переменную), int, q_prog, constant int, 1.
Теперь переходим к второй ветке диалога (есть ключ?) - надпись будет высвечиваться если q_prog равно 1. (Думай разберешься как сделать проверку ), ну а на ответе: (Есть) - делать првоерку на ключ... Опять же визардом: Item in Inventory и там вписываем тэг вещицы (лучше писать не попамяти - акопировать и вставлять...). Ну и Action Taken - присваиваем q_prog значение 2.
И последнюю ветку вешаем првоерку, если q_prog равен 2.

Раз стат квест - значит надо выдать награду. Выдавать награду можно опять же через ActionTaken (Give Rewards)... Примечание: если хочешь наградить вещью - то там надо вписывать ResRef вещит, а не тэг.

Кстати попутно с квестом можно вести запись в дневнике (закладочка - Others... там думаю разберешься)
ПРИМЕЧАНИЕ №1: Локальные переменные - остаюстя на игроке, так что в следущем квесте не используй переменную q_prog...
ПРИМЕЧАНИЕ №2: Если хорошо подумаете - то сможете это все еще оптимизирвоать и улучшить... (хоят бы для повышения переменной - не обязательно использоват ьнесколько разных скриптов )


*****************************************************************************

ВОПРОС
Как после конца квеста сделать так, что бы NPC исчезал (уходил)?

ОТВЕТЫ
Скрипт ставится на Action Taken того элемента разговора, после которого NPC должен изчезнуть.
Neverwinter Script Source
void main()
{
object oExit = GetNearestObjectByTag("WP_EXIT");
// куда бежим, хоть в другую локу, реалестичней, т.к. побежит в двери
object oNPC = OBJECT_SELF; //сам тот кто бежит
AssignCommand(oNPC, ClearAllActions()); // забудь все что не успел сделать!
AssignCommand(oNPC, ActionForceMoveToObject(oExit, FALSE, 1.0, 25.0));
// FALSE можно поменть на TRUE и тогда непись побежит, скорость 1.0,
// если застЯл то через 25 сек прыгнет в точку
AssignCommand(oNPC, ActionDoCommand(DestroyObject(oNPC)));
//Сепука, будет только если дошел до точки oExit
DelayCommand(0.3, SetCommandable(FALSE, oNPC));
// Борьба с ретроградной амнезией - забиваем стек команд.
// Теперь он точно сделает себе харакири
}


WP_EXIT - объект, к которому пойдет (побежит) NPC. Чаще всего, на краю локации.

*****************************************************************************

ВОПРОС
Как сделать чтобы при заходе игрока на триггер NPC начинал диалог?

ОТВЕТЫ
Neverwinter Script Source
void main()
{
    object oPC = GetEnteringObject(); // Тот идиот что встал на триггер
    if (!GetIsPC(oPC) || GetLocalInt(OBJECT_SELF, "TRIGGERED") == 1)
        return;
// Если это был не игрок, а кто то еще (матрица рулит), или он уже
// наступал в это дерьмо один раз, то скрипт не сработает
    object oNPC = GetNearestObjectByTag("ТАГ_НПС");
//  Тот придурок что должен сказать ПРИВЕТ!
    AssignCommand(oPC, ClearAllActions());
    AssignCommand(oNPC, ClearAllActions());
    AssignCommand(oNPC, SpeakString("Эй, придурок! Я к тебе обращаюсь!"));
//  Использую не ActionSpeakString, что бы НПС говорил фразу делаЯ что велено дальше
    AssignCommand(oPC, ActionDoCommand(SetFacingPoint(GetPosition(oNPC))));
//  Повернем мордой лица РС к НПС
    AssignCommand(oPC, ActionSpeakString("Ну, ванючка! Держись!"));
//  Тут наоборот, жду когда повернетсЯ и ТОГДА ответит
    AssignCommand(oNPC, ActionForceMoveToObject(oPC, FALSE, 1.0, 15.0));
    AssignCommand(oNPC, ActionStartConversation(oPC));
    AssignCommand(oNPC, ActionDoCommand(SetCommandable(TRUE, oNPC)));
// Убедительно просим оНПС подойти к РС и сказать что велено! И не ЗАБЫТЬ!
    DelayCommand(0.3, SetCommandable(FALSE, oNPC)); // типа что бы не забыл
    SetLocalInt(OBJECT_SELF, "TRIGGERED", 1); // Запомним что это ужо было
}


*****************************************************************************

ВОПРОС
Как сделать потайную дверь? Мне нужно, чтобы она появлялась только если у игрока есть определенный предмет в инвентаре и соотвественно, чтобы срабатывал в другую локацию.

ОТВЕТЫ

Neverwinter Script Source
//::///////////////////////////////////////////////
//:: Copyright © 2005 WRG! Team
//:://////////////////////////////////////////////
/*  OnEnter - Триггера, скрипт создает секретную
    дверь если у вас в кармане плотовый предмет

  WP_DOOR - Вейпоинт на которм создаем дверь
  потайную из палитры.
  sDoorResRef - ResRef Скрытой двери,  нужно
  создать ее в палитре или использовать готовую
*/

//:://////////////////////////////////////////////
//:: Created By: Aiwan  aiwan@yandex.ru
//:: Created On: 12.01.2005
//:://////////////////////////////////////////////

void main()
{
    object oPC = GetEnteringObject();
    object oSecretItem = GetItemPossessedBy(oPC, "ТАГ_СЕКРЕТНОГО_ОБЪЕКТА");
    // Этот объект ДОЛЖЕН лежать у РС в кармане
    object oWP = GetNearestObjectByTag("WP_DOOR");
    location lLoc = GetLocation(oWP);
    if (!GetIsPC(oPC) || !GetIsObjectValid(oSecretItem) || GetLocalInt(OBJECT_SELF, "DOOR_SECRET"))
      {return;}
    // if (GetIsPC(oPC)) // Можно воткнуть проверку еще чего-нибудь...
      {
      SetLocalInt(OBJECT_SELF, "DOOR_SECRET", TRUE);
      AssignCommand(oPC, PlayVoiceChat(VOICE_CHAT_LOOKHERE));
      object oSecretDoor = CreateObject(OBJECT_TYPE_PLACEABLE, "sDoorResRef", lLoc, TRUE);
      // Тута можно красЯвый спелл какой воткнуть, звук или исчо чаво нить.
      }
}


Neverwinter Script Source
//::///////////////////////////////////////////////
//:: Copyright © 2005 WRG! Team
//:://////////////////////////////////////////////
/*
Ставим на onUsed  потайной двери из вашей палитры
  WP_DISTANCE - Универсальный Вейпоинт с именем
  равным ТАГ-у нашей точки перемещениЯ. А это может
  быть ТАГ двери, Триггера, Вейпоинта...
*/

//:://////////////////////////////////////////////
//:: Использован частично код: Robert Babiak
//:: Created By: Aiwan  aiwan@yandex.ru
//:: Created On: 12.01.2005
//:://////////////////////////////////////////////
void SendCreature(object dCreature, object dDist)
{
    if(dCreature!= OBJECT_INVALID)
    {
        AssignCommand(dCreature, ClearAllActions());
        AssignCommand(dCreature, ActionJumpToObject(dDist,FALSE));
    }
}

void main()
{
    object oPC = GetLastUsedBy();
    object wDist = GetNearestObjectByTag("WP_DISTANCE");
// Вейп, с ИМЕНЕМ того объекта куда прыгнем ДВЕРЬ, ТРИГГЕР, ВЕЙПОИНТ
    object sDist = GetObjectByTag(GetName(wDist));
// ИМЯ нашего вейпоинта равно ТАГ-у того объекта куда прыгнем
    object oAnimal = GetAssociate(ASSOCIATE_TYPE_ANIMALCOMPANION, oPC);
    object oDominated = GetAssociate(ASSOCIATE_TYPE_DOMINATED, oPC);
    object oFamiliar = GetAssociate(ASSOCIATE_TYPE_FAMILIAR, oPC);
    object oHenchman = GetAssociate(ASSOCIATE_TYPE_HENCHMAN, oPC);
    object oSummoned = GetAssociate(ASSOCIATE_TYPE_SUMMONED, oPC);
    if (!GetLocked(OBJECT_SELF))
    {
        if (GetIsOpen(OBJECT_SELF))
        {
            AssignCommand(oPC, ActionJumpToObject(sDist, FALSE));
            SendCreature(oAnimal, sDist);
            SendCreature(oDominated, sDist);
            SendCreature(oFamiliar, sDist);
            SendCreature(oHenchman, sDist);
            SendCreature(oSummoned, sDist);
            PlayAnimation(ANIMATION_PLACEABLE_CLOSE);
            DestroyObject(OBJECT_SELF, 2.0); // Секретную дверь убить после...
        } else
        {
            PlayAnimation(ANIMATION_PLACEABLE_OPEN);
        }
    }
}


*****************************************************************************

ВОПРОС
Можно ли запускать один скрипт из другого? И как?

ОТВЕТЫ

Можно:
Neverwinter Script Source
ExecuteScript(string sScript, object oTarget)

Где sScript - имя исполняемого скрипта, а oTarget - объект, от лица которого скрипт будет запускаться. Этот объект в запускаемом скрипте будет OBJECT_SELF.


*****************************************************************************

ВОПРОС

ОТВЕТЫ

*****************************************************************************

ВОПРОС

ОТВЕТЫ

*****************************************************************************

ВОПРОС

ОТВЕТЫ

*****************************************************************************

Сообщение отредактировал Lemegeton - Mar 18 2005, 21:07
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Лито
сообщение Sep 2 2005, 17:46
Сообщение #6


Level 9
***

Класс: Страж Тьмы
Характер: Chaotic Evil
Раса: Нежить



ВОПРОС:
Возможно ли создавать собственные рассы, классы и т.д. в Аuror'е?
ОТВЕТ:
Возможность сделать новый класс,заклинание, фит, склилл в НВН'е, реализуется при помощи редактирования 2да файлов.Никаких специальный wizard'ов в тулсете нет.
*************************************************
ВОПРОС:
Как писать в скриптах по-русски?
ОТВЕТ:
Нужно скачать этот патч от dumbo.
*************************************************
ВОПРОС:
Как изменить элаймент НПС, мобу или игроку?
ОТВЕТ:
При помощи функции :
Neverwinter Script Source
// Adjust the alignment of oSubject.
// - oSubject
// - nAlignment:
//   -> ALIGNMENT_LAWFUL/ALIGNMENT_CHAOTIC/ALIGNMENT_GOOD/ALIGNMENT_EVIL: oSubject's
//      alignment will be shifted in the direction specified
//   -> ALIGNMENT_ALL: nShift will be added to oSubject's law/chaos and
//      good/evil alignment values
//   -> ALIGNMENT_NEUTRAL: nShift is applied to oSubject's law/chaos and
//      good/evil alignment values in the direction which is towards neutrality.
//     e.g. If oSubject has a law/chaos value of 10 (i.e. chaotic) and a
//          good/evil value of 80 (i.e. good) then if nShift is 15, the
//          law/chaos value will become (10+15)=25 and the good/evil value will
//          become (80-25)=55
//     Furthermore, the shift will at most take the alignment value to 50 and
//     not beyond.
//     e.g. If oSubject has a law/chaos value of 40 and a good/evil value of 70,
//          then if nShift is 15, the law/chaos value will become 50 and the
//          good/evil value will become 55
// - nShift: this is the desired shift in alignment
// * No return value
void AdjustAlignment(object oSubject, int nAlignment, int nShift)

*************************************************
ВОПРОС:
Как поставить точку выхода монстров при респауне?
ОТВЕТ:
Очень просто. Растягиваем триггер спавна, затем щелкаем по нему правой кнопкой мышкой и нажимаем на "Добавить точку входа". Все, выход - готов.
*************************************************
ВОПРОС:
Какой утилитой можно вытащить ресурсы из hak-pack'a?
ОТВЕТ:
nwnkak.exe - она лежит в папке utils, что находится в корневой папке NwN.
*************************************************
ВОПРОС:
Как войти в игру под DM'ом?
ОТВЕТ:
Необходимо запустить DM-клиент. Запускам файл nwn.exe, что лежит в корневой папке игры, и в появившемся меню выбираем - "DM-клиент".
*************************************************
ВОПРОС:
При помощи какой программы я мог бы создать ролик к модулю? Как известно он должен быть в формате .bic
ОТВЕТ:
RAD Video Tools - конвертирует различные видео форматы в формат .bic
Чтобы создать полноценный ролик от начала до конца потребуется работа 3D-моделлеров...ну или цифровая видео-камера :)
*************************************************
ВОПРОС:
Как заставить работать ветку диалога только если у игрока есть в наличии определенная сумма денег?
ОТВЕТ:
Поставить на ветку диалога в закладке "text appears when...", такой скрипт:
Neverwinter Script Source
int StartingConditional()
{
return  GetGold(GetPCSPeaker()>100);
}

Сумму, конечно же, можно менять по своему усмотрению.
*************************************************
ВОПРОС:
Перевел ли какой-нибудь супер-герой Лексикон на русский?
ОТВЕТ:
Нет, потому как это бессмысленная работа. Лексикон постоянно обновляется, чтобы его перевести нужна работа большого кол-ва людей. А программеры с английским на "ты",да и язык простой.
*************************************************
ВОПРОС:
Как настроить то, что появляется в сундуках или выпадает с монстров?
ОТВЕТ:
Для этого надо написать целую систему лута. Или же использовать систему SoU - ее можно посмотреть открыв компанию SoU
*************************************************
ВОПРОС:
Что такое Впитывание повреждений?
Предположим у нас есть мантия искателя приключений: +1 впитывание 30 поврежений
ОТВЕТ:
Это значит что весь урон меньше 31, который нанесен зачарованым оружием +1 и меньше, будет впитан(не насется)
*************************************************
ВОПРОС:
Как повесить локальную переменную на предмет?
ОТВЕТ:
Для этого существует специальная функция:
Neverwinter Script Source
void main()
{
SetLocalInt(object oObject, string sVarName, int nValue);
}

*************************************************
ВОПРОС:
Как сделать, чтобы при использовании уникальной силы вещи открывался диалог?
ОТВЕТ:
Для начала надо установить вещи уникальную силу, в ее св-вах.
Потом в св-вах модуля на "OnActivateItem"

Neverwinter Script Source
ActionStartConversation(object oObjectToConverseWith, string sDialogResRef="", int bPrivateConversation=FALSE, int bPlayHello=TRUE)


object oObjectToConverseWith - задает с кем будет идти разговор (ну конечно с вами)
string sDialogResRef - пишем в кавычках название разговорника
Если это значение не указано, то будет использован прикрепленный к объекту диалог.
int bPrivateConversation - приватный разговор (TRUE) или это слышат все (FALSE)
int bPlayHello - когда начинаешь разговор - скажи привет (TRUE) или тупо промолчи (FALSE)
*************************************************
ВОПРОС:

ОТВЕТ:

*************************************************

Сообщение отредактировал Лито - Sep 5 2005, 21:17
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Dik Morris
сообщение Sep 3 2005, 13:09
Сообщение #7


Вечно меняющийся
Иконки Групп

Класс: Монах
Характер: True Neutral
Раса: Человек
NWN: Скриптинг [Sn]



ВОПРОС:
Как сделать чтобы после, наступления игроком на триггер он уничтожался?
ОТВЕТ:
Добавить, в скрипт что стоит на триггере, следующую функцию:
Neverwinter Script Source
DestroyObject(OBJECT_SELF,1.0); // удаление через секунду после активации

***********************************
ВОПРОС:
Как сделать, чтобы NPC был, был мертв? А на земле лежал его труп?
ОТВЕТ:
На onSpawn NPC, поставить вот такой скрипт:
Neverwinter Script Source
void main()
{
    object oNpc = OBJECT_SELF;
    SetIsDestroyable(FALSE,FALSE,FALSE);
    ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectDeath(TRUE,TRUE), oNpc);
}

***********************************
ВОПРОС:
Почему у меня не работает скрипт, на взятие предмета? Я указал, тэг, все сделал но он не работает.
ОТВЕТ:
Нужно указывать, не ТЭГ, а предмета ResRef (Он, находится, чуть пониже ТЭГА)
***********************************
ВОПРОС:
Есть три точки перехода,из первой локи попадаешь во вторую из второй в третью.Так вот проблема в том что из локи №1 я попадаю в локу №3 сразу,хотя с триггерами все в порядке...что может быть?
ОТВЕТ:
Вероятно, были использованы, стандартные тэги. Каждой, двери/триггеру/вайпоинту, нужен свой уникальный тэг.
***********************************
ВОПРОС:
Каким образом в начале диалога делалась проверка на Пол игрока?
ОТВЕТ:
В заклатке "текст появляется при" есть изображение шляпки, нажимай на нее и там найдешь много стандартных проверок: способность, класс, раса, пол... Для, таких случаев, проще использовать визард.
***********************************
ВОПРОС:
Каким образом можно разговаривать с предметом?
ОТВЕТ:
На onUser, нужного тебе предмета, поставь простой скрипт:
Neverwinter Script Source
void main()
{
ActionStartConversation(GetLastUsedBy());
}

Также, укажи, нужный тебе разговор. В поле Conversation(разговор)
***********************************
ВОПРОС:
Как из bmu в wav переименовать?
ОТВЕТ:
С помощью конвентатора MP3toBMU, который имеется, на сайте WRG!
***********************************
ВОПРОС:
В диалоге,NPC должен сдвинуть мою напрвленость в строну Добрый +1, как это сделать?
ОТВЕТ:
Neverwinter Script Source
void main()
{
object oPC = GetPCSpeaker();
AdjustAlignment(oPC, ALIGNMENT_GOOD, 1);
}

Далее, можно самомоу, выбрать тип направленности. С помощью константы: ALIGNMENT_
***********************************
ВОПРОС:
Как сделать хенчмана? (помощника)
ОТВЕТ:
Для начала, его нужно присоединить, к игроку. Вот, скрипт: (на ветку, в диалоге)
Neverwinter Script Source
void main()
{
object oPC = GetPCSpeaker();
AddHenchman(oPC, OBJECT_SELF);
}

Потом, замени все стандартные скрипты NPC, вот такими:
CODE
OnBlocked = x0_ch_hen_block
OnDamaged = x0_ch_hen_damage
OnDeath = x0_ch_hen_death
OnConversation = x0_ch_hen_conv
OnDisturbed = x0_ch_hen_distrb
OnCombatRoundEnd = x0_ch_hen_combat
OnHeartbeat = x0_ch_hen_heart
OnPhysicalAttacked = x0_ch_hen_attack
OnPerception = x0_ch_hen_percep
OnRested = x0_ch_hen_rest
OnSpawn = x0_ch_hen_spawn
OnSpellCast = x0_ch_hen_spell
OnUserDefined = x0_ch_hen_usrdef

***********************************

Сообщение отредактировал Dik Morris - Sep 3 2005, 13:23
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Dik Morris
сообщение Sep 5 2005, 20:17
Сообщение #8


Вечно меняющийся
Иконки Групп

Класс: Монах
Характер: True Neutral
Раса: Человек
NWN: Скриптинг [Sn]



ВОПРОС:
Как можно изменить внешность у NPC? Почему я не могу сделать это в свойствах NPC, т.к вкладка не активна?
ОТВЕТ:
Скорее всего, использована стандартная “Шкурка” NPC. У них менять нельзя, меняется только, у НПС с внешностью например: Человек, Гном и т.п
***********************************
ВОПРОС:
Как сделать, чтобы после диалога, NPC умирал?
ОТВЕТ:
Поставь на ветку диалога вот этот скрипт:
Neverwinter Script Source
void main()
{
object oNPC = GetObjectByTag("ТАГ НПС");
effect oEffect = EffectDeath(TRUE);
DelayCommand(5.0, ApplyEffectToObject(DURATION_TYPE_INSTANT, oEffect,oNPC));
}

Обрати внимание на функцию, DelayCommand, с помощью нее можно регулировать время, через которое умрет NPC. Или вообще удалить, если нужно чтобы NPC умер мгновенно.
***********************************
ВОПРОС:
Как прописать скрипт, чтобы НПС все время ходил по двум, трем... вайпоинтам без остановки.
ОТВЕТ:
Щелкаешь на NPC, правой кнопкой мыши. Выбираешь, пункт: СОЗДАТЬ ТОЧКУ маршрута, создаешь нужное кол-во точек. Все.
***********************************
ВОПРОС:
Реплика игрока должна появляться, если золота у игрока более 2000. Как это реализовать?
ОТВЕТ:
Neverwinter Script Source
int StartingConditional()
{
if(GetGold(GetPCSpeaker())>=2000)
return TRUE;
return FALSE;
}

***********************************
ВОПРОС:
У меня в Тулсете, не работают некоторые скрипты, сделанные с помощью Мастера Скриптов, в чем проблема?
ОТВЕТ:
А) Поставь патч, думбо.
Б) Удали русские комментарии в скриптах.
***********************************
ВОПРОС:
Я делаю несколько вэйпоинтов для одного NPC. Начинаю игру и все NPC (а их 6!) ходят по этим вэйпоинтам. Что делать, чтобы по ним ходил только один?
ОТВЕТ:
Смени таг, остальным NPC.
***********************************
ВОПРОС:
После, смерти NPC, обновляется журнал, как это сделать?
ОТВЕТ:
Neverwinter Script Source
void main()
{
    object oKiller = GetLastKiller();

    if (GetIsPC(oKiller) && (GetLocalInt(oKiller, "NW_JOURNAL_ENTRYJOUR_Save") < 10))
    {
        AddJournalQuestEntry("Таг журнальной записи", 10, oKiller, TRUE, TRUE);
    }
}

***********************************
ВОПРОС:
NPC, должен забрать у меня определенное кол-во вещей, с одинаковым тагом.
ОТВЕТ:
С помощью функции (цитата, из перевода Валлео)
Neverwinter Script Source
int removeStackItems(object oInventory, string sItem, int nNum)

object oInventory - объект в инвентаре которого нужно удалить вещь.
string sItem - тег вещи, которую надо удалить.
int nNum - кол-во, сколько надо удалить.

***********************************
ВОПРОС:
Как добавить, несколько хенчманов? (Скажем больше 3)
ОТВЕТ:
В скрипт OnModuleLoad добавь строку:
SetMaxHenchmen(5);
***********************************
ВОПРОС:
В диалоге, игрок, должен использовать убеждение, как это осуществить?
ОТВЕТ:
Neverwinter Script Source
В закладку, Появ. при(при правельном ответе, разумеется): добавить скрипт:
#include "nw_i0_tool"

int StartingConditional()
{
    if(!(AutoDC(DC_EASY, SKILL_PERSUADE, GetPCSpeaker())))
        return FALSE;

    return TRUE;
}

Такие скрипты, делаются с помощью, скрипта.
***********************************
ВОПРОС:
Чем открыть расширение erf?
ОТВЕТ:
erf это файлы с ресурсами, создаются\открываются с помощью файл\импорт-експорт в тулсете
они не содержат моделей или еще чего, они содержат только список характеристик, координат или скрипт.
***********************************

Сообщение отредактировал Dik Morris - Sep 5 2005, 20:18
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Lex
сообщение Nov 25 2005, 01:51
Сообщение #9


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

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



*****************************************************************************
ВОПРОС:
Как недопустить в модуль персонажа, который мне не нужен? (те впустить только определенного класса, уровня, пола, расы и прочее)

ОТВЕТ:
module_enter (на вход в модуль)
NSS
void kill(object oPC)
{
SetLocalString(oPC,"DEATH_SMS","Персонаж должен быть мужиком");
SetPlotFlag(oPC,FALSE);
SetLocalInt(oPC,"BOOT",TRUE);
ApplyEffectToObject(DURATION_TYPE_INSTANT,EffectDeath(),oPC);
}

void main()
{
    object oPC = GetEnteringObject();
    if (GetGender(oPC)!=GENDER_MALE) { kill(oPC); return; } // если не мужик, убиваем
/* проветять можно что хотите. Примеры:
    if (GetName(oPC)!="Lex") { kill(oPC); return; } // если имя не Лекс - убиваем
    if (GetLevelByClass(CLASS_TYPE_WIZARD)==0) { kill(oPC); return; } // если не маг - убиваем
    if (GetRacialType(oPC)!=RACIAL_TYPE_HUMAN) { kill(oPC); return; } // если не человек - убиваем
*/

}


module_death (на смерть игрока)
NSS
void main()
{
    object oPlayer = GetLastPlayerDied();
    string sSMS = GetLocalString(oPlayer,"DEATH_SMS");
    int BOOT = GetLocalInt(oPlayer,"BOOT");
    if (sSMS == "") sSMS = "Вы сдохли.. мои поздравления.";
    if (BOOT)  PopUpDeathGUIPanel(oPlayer,FALSE,FALSE,0,sSMS); // без респа
    else PopUpDeathGUIPanel(oPlayer,TRUE,FALSE,0,sSMS); // c респом.. если надо.

}

*****************************************************************************

ВОПРОС:
Как добавить свою озвучку для НПС в модуль?

ОТВЕТ:
Оказывается озвучить своих 3D "малышей" (NPC) достаточно легко.
Для начала (кому интересно) - всю озвучку сюжетных ниписей
можно откавырять и export`ировать через NWNexplorer:
CODE

- NWN Main Data
-------data\convo.bif
---------------Audio
---------------vs_faldom_050.wav
---------------vs_faldom_051.wav
----------------...
----------------... и т.д.

В любом редакторе звука с поддержкой разнообразного битрейта
и установкой моно\стерео записываете то что вам надо.
Главное чтоб .wav файл получился в МОНО, иначе ничего не произойдёт.
Обзываете свои вэйвы так чтоб не запутаться и закидываете в ХАК !
Не забудте этот хак подключить, а то точно ничего не выйдет.
Потом в редакторе разговора нужного NPC выбираете нужную ветку
идёте на закладку "Другие действия"
и там выбираете нужный трёп в меню "Играть звук".

*****************************************************************************
ВОПРОС: Как сделать собственный loadscrine?

ОТВЕТ: Читать тут
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения

Тема закрытаОткрыть новую тему
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



Текстовая версия Сейчас: 10th November 2024 - 22:49