Помощь - Поиск - Пользователи - Календарь
Полная версия: ОДИНОЧНЫЙ ВОПРОС
Город Мастеров > РЕДАКТОРЫ > Neverwinter Nights Aurora Toolset
Страницы: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68
Shadenuat
Aiwan
Где посмотреть?

Vhall
Хак стоит один, подключен с самого начала. Какие-то вещи я в нем поменял перед тем как был глюк, но вроде ничего критического.
Плюс локация работала после этого нормально. Это на второй запуск она заглючила.
Vhall
Проблема была вызвана:
- неправильным синтаксисом .set файл
- отсутствием .mdl, упоминаемого в .set файле
Белатрис
В свойствах сундуков -> Закрыть есть два слота Открыть/Закрыть замок DO и поля для цифр. Что за что отвечает и как правильно понимать значения?
Aiwan
Это значения сложности прокаченного скила для вскрытия замка.
Белатрис
Ну, а если, к примеру, оба значения будут 20, Значит, у игрока должна быть прокачена способность Открывание замков до 20? Или 10?(ну, типа на 2 делится)
Aiwan
Нет, там есть формула.
Цитата
ДС двери рассчитывай из максимального на уровень персонажа скилла "отрыть замок". На 5 уровне он равен 9 (если по максиму раскачивать). Потом добавляем бонус ловкости. У меня обычно ловкость 19 или двадцать. НА 5 левеле это уже всегда двадцать. Итого бонус получается 5 и скилл с бонусом - 14!
Итак, когда вор отрывает сундук в спокойной обстановке, то он автоматически "берет двадцать"... Получается что его проверка (на 5 уровне) с описанными выше параметрами будет 20+14=34. 34 - это уже высоко. Поэтому я бы предложил ДС большинства сундуков делать 32-33 (не у всех же декста - 20)... Для более понтовых сундуков и дверей - около 40. На то отмычки и существуют. Я ни разу не воспользовался отмычкой в официальной кампании НВН. А ведь забавно. ТО есть даже хорошему вору навороченный сундук без принадлежностей не открыть... Вот так..

Цитата
Для ловушек примерно тоже самое. Опять же "взять двадцать"... Опять же скилл зависит от ловкости. Единственное отличие - не воспользуешься отмычками...
Обезвредить ловушку - это просто сравнение скилла и ДС ловушки.
Определить ловушку - это ДС ловушки минус десять в сравнении со скиллом...
Восстановить ловушку (заныкать ее для своего пользования, а не обезвредить) - ДС ловушки плюс десять в сравнении со скиллом перса...
Пример. ДС ловушки - 40...
Для обезвреживания - 40
Для изучения - 30
Для восстановления - 50...
Вот так. Вроде доступно


Тайлер (с) Realms.ru
Белатрис
Спасибо.
Raman
Подскажите, у меня такая проблема: два года назад я начал делать модуль, но из-за нехватки времени забросил его. Наконец, когда я снова загрузил модуль в тулсет с твердым намерением его закончить (две недели назад), я обнаружил, что из стандартной палитры исчезло больше половины обьектов (Сами названия есть, но тулсет пишет, что-то вроде "ресурсов, на которые вы ссылаетесь, не существует"). Из всех локаций эти предметы тоже пропали. swoon.gif Во всех других моих модулях все работает исправно. Что делать? Не хочется терять модуль, который в одиночку делал год vava.gif .
Aiwan
Скорее всего твой хак к модуляю был другим.
Lex
или в оверрайде че-то лежит
azathoth
или новая версия игры, а хак старый, например в appearance.2da новый контент не пробит. :escho-varianti7:
Raman
Хм... В Override только какая-то музыка. Версия игры 1.30.8037 (English). Не обновлялась. (Только удалялась и переустанавливалась)) А хаки я случайно удалил, а потом заново брал из тех же источников. Так что хаки, вроде, те же самые. Сегодня заметил - при открытии одной из локаций появляется ошибка "List Index Out Of Bounds (159)" и тулсет зависает)) Что это за ошибка? scratch_one-s_head.gif Это как-то связанно с хаками или обьектами? crazy.gif

Alian REXis
Помню раньше с тулсетами часто такие проблемы возникали. И хаки кривоватые попадались. В новых версиях вроде все нормально пашет. И вообще может сам нвн битый попался, контент стандартный в смысле.
Raman
Гы... Проблема решена! yahoo.gif Я случайно к модулю какой-то ненужный хак присоединил, а сразу не заметил biggrin.gif. Тревога оказалась ложной. Вот только все скрипты полетели crazy.gif . Придется писать заново.
Aezot
Добрый вечер,
У меня такая проблема: При добавлении некоторых женских голов из хак паков, эти головы сильно уползают вверх (и в тулсете и в игре), благодаря чему персонажи становятся похожими на жирафов.
Подскажите в чем проблема.
Заранее спасибо. unsure.gif
Skesh
Подскажите пожалуйста возможно ли сделать так чтобы когда в инвентарь стола например положить чашку или тарелку, то чтобы это появлялось на столе?
Ilerien
Можно. Ставим в onDisturbed стола скрипт, который генерит соответствующие плейсеблы на вейпоинтах (их нужно вручную расставить на столе). Ну и удаляет, если соответствующая вещь убрана из инвентаря стола.
Skesh
эм... scratch_one-s_head.gif а где бы натйи такой скрипт?
Ilerien
Neverwinter Script
/**************************************************
*******
*                    il_o2_table_dist
*      ----------------------------------------
*  Author          : Ilerien Phoenix
*  Begin           : 22.03.2008
*  Copyright       : © 2008 Gem of The North Group (SM)
*  E-mail          : ilerienphoenix@gmail.com
*
*      ----------------------------------------
*      onDisturbed script for tables
*
**************************************************
*******/


/*
теги:
вейпоинтов - "PLACE_<тег стола>_<номер вейпоинта, начиная с 1>"
создаваемых плейсеблов - "PLC_<тег стола>_<номер вейпоинта>"

ресреф плейсебла - "plc_<ресреф итема>"

у столов должны быть уникальные теги
*/



const string sItemPlaceableMatch = "oItemPlaceableMatch";
const string sNoPlace = "На столе нет свободного места";

object SearchForFreePlace(object oTable);
void CreatePlaceableByItem(object oPlace, object oItem);
void DestroyPlaceable(object oItem);
string GetPlaceableTagByPlace(object oPlace);


void main()
{
    object oItem = GetInventoryDisturbItem();
    int nType = GetInventoryDisturbType();
    object oPC = GetLastDisturbed();
    object oTable = OBJECT_SELF;
    object oPlace = SearchForFreePlace(oTable);

    switch(nType)
    {
        case INVENTORY_DISTURB_TYPE_ADDED:
        {
            if(GetIsObjectValid(oPlace))
                CreatePlaceableByItem(oPlace, oItem);
            else
            {
                CopyItem(oItem, oPC, TRUE);
                DestroyObject(oItem);
                SendMessageToPC(oPC, sNoPlace);
            }
            break;
        }
        case INVENTORY_DISTURB_TYPE_STOLEN:
        case INVENTORY_DISTURB_TYPE_REMOVED:
            DestroyPlaceable(oItem);
    }
}

object SearchForFreePlace(object oTable)
{
    if(!GetIsObjectValid(oTable))
        return OBJECT_INVALID;

    //теги вейпоинтов "PLACE_<тег стола>_<номер вейпоинта, начиная с 1>"
    string sTag = GetTag(oTable);
    string sPlaceTag = "PLACE_" + sTag + "_";
    int i;
    object oPlace;

    for(i = 1; TRUE; i++)
    {
        oPlace = GetWaypointByTag(sPlaceTag + IntToString(i));
        if(!GetIsObjectValid(oPlace))
            return OBJECT_INVALID;
        if(!GetIsObjectValid(GetObjectByTag(GetPlaceableTagB
yPlace(oPlace))))
            return oPlace;
    }

    return OBJECT_INVALID;
}

void CreatePlaceableByItem(object oPlace, object oItem)
{
    if(!GetIsObjectValid(oPlace) || !GetIsObjectValid(oItem))
        return;

    //ресреф плейса получается по ресрефу итема добавлением "plc_"
    string sResRef = "plc_" + GetResRef(oItem);
    location lLoc = GetLocation(oPlace);
    object oPlaceable = CreateObject(OBJECT_TYPE_PLACEABLE, sResRef, lLoc, FALSE, GetPlaceableTagByPlace(oPlace));
    SetPlotFlag(oPlaceable, TRUE);
    SetLocalObject(oItem, sItemPlaceableMatch, oPlaceable);
}

void DestroyPlaceable(object oItem)
{
    if(!GetIsObjectValid(oItem))
        return;

    object oPlaceable = GetLocalObject(oItem, sItemPlaceableMatch);
    SetPlotFlag(oPlaceable, FALSE);
    DestroyObject(oPlaceable);
    DeleteLocalObject(oItem, sItemPlaceableMatch);
}


string GetPlaceableTagByPlace(object oPlace)
{
    string sPlaceTag = GetTag(oPlace);
    return "PLC_" + GetStringRight(sPlaceTag, GetStringLength(sPlaceTag) - 6);
}

Вейпоинты ставим руками - там они очень плотно будут, и надо будет высоту отрегулировать вручную. Каждому вейпоинту даём соответствующий уникальный тег.
За работоспособность не ручаюсь, не тестил smile.gif
Skesh
круто good.gif респект. сам бы парился хз скока.
zmey
offtopic.gif

Я что последний, кто долбится с НВН 1???
Leon PRO
А что ? rolleyes.gif
Ilerien
Не последний secret.gif
Topik
Где команда которая вела разработку СТАР ВАРС на Авроре? Что случилось с проектом?
Lex
Стар Варс Модификация
проект закрыт
Topik
На форуме пароль!
shadowdweller
Цитата(zmey @ Apr 22 2008, 20:15) *
Я что последний, кто долбится с НВН 1???

Нет. И в доказательство - тупейший вопрос. Можно ли из диалога скриптом вызвать триггер для перехода в другой модуль или, хотя бы, в другую локацию?
Lex
триггер зачем? StartNewModule - в другой модуль. Ну и Джамп соотв для прыга в другую локу. Но делать это лучше наверное на EndConversation слоте, что в самом диалоге в одной из закладок. Хотя мб сработает и просто на Action, ни разу не пробовал просто
shadowdweller
Спасибо, попробую. А то делаю триггер на переход в другой мод, но его, естественно, видно. А мне нужно, чтобы перс еще диалог отыграл, и только тогда переместился.
Memphis
Срочно нужен скрипт для диалога, который открывает окно трейда! Шаблон имеет такой скрипт, но он че та не хочет этого делать ((( В игре НПЦ пишет, что поблизости нет магазинов ((( Помогите плиз!
Memphis
[quote name='Lex' date='Mar 19 2005, 16:34' post='31712']
<span style='font-size:17pt;line-height:100%'>СЕРИЯ "СКРИПТЫ СТАРОЙ БАЗЫ"</span>
<span style='font-size:12pt;line-height:100%'>ЦИКЛ "СКРИПТЫ EXICUTIONER'A"</span>

автор::::::::::::NightElf-Sniper aka Executioner::::::::::::::::::::
Заняляс я тут немного скриптованием и вот что из этого получилось:
Neverwinter Script
//:: Dlg_Open_Store :: Executioner :://

void main()
{
string sNPSTag = GetTag(OBJECT_SELF);
object oStore = GetNearestObjectByTag(sNPSTag+"_store");

if(GetObjectType(oStore) == OBJECT_TYPE_STORE)
OpenStore(oStore, GetPCSpeaker());

else
ActionSpeakStringByStrRef(53090, TALKVOLUME_TALK);
}

Универсальный скрипт открытия магазинов, что бы все работало делаете так:
создаете непися с тегом m_weapons, после чего создаете рядом с ним магазин и даете ему тег m_weapons_store, после чего скрипт ставится на нужную ветвь диалога...


Не работает! Ставил все в точности, как написано! НПЦ всеравно пишет, что магазинов поблизости нет!
Lex
ну если пишет что поблизости нет магазинов - значит скрипт почти правильный. Рядом с НПС должен стоять меркант (выглядить как вэйпоинт, но внутри у него настраивается ассортимент, наценка и прочие торговые радости) и открывать магазин надо с указанием ТЭГА этого мерканта. Вот где-то тут у тебя косяк. (или нет мерканта, или неверный тэг в скрипте пишешь.)
gennady
Судя по скрипту чел разобрался с тегами… Но все равно накосячил! smile.gif

Более правильную запись смотри здесь: http://remmgen.narod.ru/ttorg.html
P.S. теги задавать совсем не обязательно…
Raman
Добрый вечер! Возник следующий вопрос: можно ли сделать так, что новая начальная строка диалога появится только по прошествии опред. времени, после завершения разговора с тем же NPC? Например,персонаж говорит "Я рассмотрю твое предложение, приходи через два дня". И через два дня диалог начинается по-другому. scratch_one-s_head.gif
azathoth
"Я рассмотрю твое предложение, приходи через два дня" - идёш в закладку "Actions Taken" в диалоге, создаёшь скрипт в нём устанавливаешь локальную переменную с текущей датой, а в начало диалога -нужную строчку с проверкой этой переменной в скрипте на "Text Appears When..."

вот функция даты от начала календаря:
Neverwinter Script
int Date() {
    return GetCalendarDay() + (GetCalendarMonth() * 7 * 4) + (GetCalendarYear() * 7 * 4 * 12);
}
Raman
Принцип понял, детали - нетscratch_one-s_head.gif Можно поподробнее, пожалуйста? А то я со скриптами не очень дружу crazy.gif
azathoth
Установка переменной:
Neverwinter Script
int Date()
{
    return GetCalendarDay() + (GetCalendarMonth() * 7 * 4) + (GetCalendarYear() * 7 * 4 * 12);
}

void main()
{
    object oPC = GetPCSpeaker(); // <- берём игрока
    int nDate = Date(); // <- вычисляем дату
    SetLocalInt(oPC, "ИМЯ_ПЕРЕМЕННОЙ", nDate); // <-записываем игроку дату как локальную переменную
}


проверка - аналогично, только фукция проверки - GetLocalInt

зы: скрипты - это дело такое - или ты дружишь с ними, либо они дружат тебя crazy.gif
Raman
Проверка должна выглядеть так?

Neverwinter Script
int StartingConditional()

{

int iResult;

  iResult = GetLocalInt(GetModule(), "current_date001"); // <- ПЕРЕМЕННАЯ

    return iResult;

}


Или я туплю по-черному? prankster2.gif А то у меня от всех зачетов и экзаменов мозг завял окончательно biggrin.gif

Ilerien
Neverwinter Script
int Date()
{
    return GetCalendarDay() + (GetCalendarMonth() * 28) + (GetCalendarYear() * 28 * 12);
}

int StartingConditional()
{
   return (Date() - GetLocalInt(GetPCSpeaker(), "ИМЯ_ПЕРЕМЕННОЙ")) > 2; //вернёт TRUE, если мы пришли позже, чем через 2 дня
}
Raman
Не сработало. Выдает только начальную строку. Наверно, из-за того, что у нее на "Text appears when..." тоже стоит проверка локальной переменной (на шаг выполнения квеста) unknw.gif Попробовал изменить значение этой переменной в конце диалога, но безрезультатно.
namELezz
У меня очень большая проблема. Вопрос жизни и смерти моего модуля. Дело в том что у меня выключился комп пока я работал в тулсете. Ладно, включил комп заново, открываю мой модуль а он пишет:
Цитата
Не удалось открыть модуль
Причина: неверный заголовок.
Возможно, файл повреждён или не является файлом модуля.

Шанс восстановить модуль есть? Или всё кончено?
Lex
1. посмотри в сторону bak файлов
2. ну и подними свои бэкапы. Хорошая привычка, делать минимум по 1 бэкапу в день при интенсивной работе.
Raman
А что мне все-таки с диалогом делать? Он мне весь процесс тормозит. Насколько я понял, несколько разноплановых проверок в начале ветвей друг с другом не уживаются? Можно это как-то обойти?
azathoth
Зачем обходить? Надо использовать. biggrin.gif Всё друг с другом прекрасно уживается, надо помнить, что в диалог пойдёт буквально "первая попавшаяся" строка, вне зависимости от того, насколько последующие будут тру.

Поставить строчку, появление которой "важнее" выше, например:
- Опа! Да вы выиграли игру!
- Квест 2 завершен
- Квест 1 завершен
- "Какие люди" (проверка на "знакомство" не будет мешать вышестоящим строкам)
- "А ви кто?"

Это раз.

Во-вторых никто не мешает в одном скрипте объединять разные проверки, например
Neverwinter Script
...
int StartingConditional()
{
    ...
    return ПроверкаНаВшивость(игрока) && ПроверкаДаты(текущей);
}


Приложение А

Памятка: Логические операции.
Код
|| ИЛИ
&& И
! НЕ
Raman
Ну, объединение нескольких проверок в одном скрипте я уже освоил. biggrin.gif Но конкретно в этом диалоге это мне, вроде, не нужно. А про то, что надо расставлять строчки в соответствии с их важностью не знал. Да и сам как-то не додумался. Спасибо за информацию thank_you.gif .
Hedeen
В тулсете место русского шрифта - палочки(!!!) ВОТ - ||||||| - как устранить эту хр.Ответте, ПЛИЗ!!!!!!!!!!
azathoth
Цитата
В тулсете место русского шрифта - палочки(!!!) ВОТ - ||||||| - как устранить эту хр.Ответте, ПЛИЗ!!!!!!!!!!

http://www.city-of-masters.ru/forums/index...ic=5159&hl=
Оно?
Hedeen
ДА.Фенкс.

Цитата(Hedeen @ Aug 7 2008, 18:39) *
ДА.Фенкс.


СПАСИБО - ПРОСТО СПАС! rolleyes.gif
Hedeen
Люди добрые, помогите чем можете!!!
Загрузил хак с лошадьми.Посмотрел модуль - клёвые лошадки.Хочу добавить лошадей в свой модуль.(я знаю что лошадей в палитре нет).заг. в свой модуль хак.И... незнаю чё делать.Помогоимте, плиз.Всем ответевшим респект и уважуха!
Raman
"Лошадей в палитре нет" значит, что лошадей нет в стандартной палитре? Или что они не появляются в палитре после утановки хака? Если первое, то они, скорее всего, должны появиться в палитре существ. А инструкции к хаку не прилагалось?
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.
Invision Power Board © 2001-2024 Invision Power Services, Inc.