Помощь - Поиск - Пользователи - Календарь
Полная версия: Вопросы новичков
Город Мастеров > РЕДАКТОРЫ > 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, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103
denis0k
Проблема в том, что нвскрипт - это обычный (или необычный) язык программирования, соответственно для пользования им надо знать основы теории алгоритмов и программирования smile.gif Мануал там отличный (по сравнению с некоторыми другими играми), тут база огромная, плюс комментарии к функциям в самом тулсете, но для непрограммиста это всё действительно бесполезно, потому как именно базиса нигде нет. И быть не может. В учебник по математике не вкладывают же букварь для обучения чтению.

Так что если совсем непонятно, могу порекомендовать для начала любой вузовский курс лекций по программированию. Либо нанять программера в команду. Собственно, чтобы разбираться, какие команды и в какой последовательности использовать (в любом языке программирования), люди учатся годами smile.gif
Ollone5
У меня свои скрипты не работают, ошибка компиляции.
Что делать?! ph34r.gif
denis0k
Оплатить нам услуги телепата, мб тогда мы узнаем хотя бы текст ошибки.
FlandayHoD
Где можно достать плагин который позволил бы переделывать файлы объектов - формата Невервинтера - в формат какого-нибудь 3ds max'а или еще лучше Blender'a? rolleyes.gif
Ollone5
Так, ошибки в каждом скрипте если он не сгенерирован тулсетом!
denis0k
У всех ошибок есть имя и описание.
Laajin
Может быть, ты в коментариях используешь букву "я" ?)
ты бы хоть выложил хоть один скрипт - denis0k тебе уже довольно понятно намекнул на это, или что? - надо разжевать - ВЫЛОЖИ ХОТЯ БЫ ОДИН СКРИПТ, ГДЕ ЕСТЬ ОШИБКА =))))) так?)
FlandayHoD
Насколько я знаю, нет. Да и в модулях в которые я играл, я тоже не видел ее. Если только комбинацией каких-то объектов; на худой конец- комод какой-нибудь установить отрицательный уровень высоты таким образом он у тебя наполовину будет выступать (ну или вовсе под землей будет если больше чем -3 поставить, вроде бы), и таким образом для создания стойки сделай парочку этих комодов; только не пробуй копировать их, с этой высотой, а то они у тебя в стандартное положение (над землей) вернуться. Так что сразу несколько ставь их, выделяй, и ставь высоту. Как-то так. Надеюсь если будешь использовать этот "метод" в своем модуле он тебе не сильно подпортит красоты)

Цитата(Вестель @ Jun 28 2004, 21:19) *
Глупый вопрос, но все равно задам: в упор не могу найти в палитре стойку бара (или что-то вроде). Облазил все, что можно, но всеже нигде нету. Не ужели ее в стандартной палитре нету?

Насколько я знаю, нет. Да и в модулях в которые я играл, я тоже не видел ее. Если только комбинацией каких-то объектов; на худой конец- комод какой-нибудь установить отрицательный уровень высоты таким образом он у тебя наполовину будет выступать (ну или вовсе под землей будет если больше чем -3 поставить, вроде бы), и таким образом для создания стойки сделай парочку этих комодов; только не пробуй копировать их, с этой высотой, а то они у тебя в стандартное положение (над землей) вернуться. Так что сразу несколько ставь их, выделяй, и ставь высоту. Как-то так. Надеюсь если будешь использовать этот "метод" в своем модуле он тебе не сильно подпортит красоты)
Ollone5
[/nss]void main()
{
object oDoor=GetNearestObjectByTag("ТЭГ_ДВЕРИ");
if(GetIsOpen(oDoor)) // если она открыта
{
AssignCommand(OBJECT_SELF,ActionCloseDoor(oDoor));
// захлопнуть дверь. действие привязанно к рычагу.
SetLocked(oDoor,TRUE); // запереть дверь
ActionPlayAnimation(ANIMATION_PLACEABLE_DEACTIVATE
);
// рычаг переходит в другое положение
}
else if(!GetIsOpen(oDoor)) //иначе, если дверь не открыта
{
SetLocked(oDoor,FALSE);// отпереть дверь
AssignCommand(OBJECT_SELF,ActionOpenDoor(oDoor));
// открыть дверь.
ActionPlayAnimation(ANIMATION_PLACEABLE_ACTIVATE);
// перевод рычага в другое положение
}
}[nss]

Взято с базы скриптов!

Ошибка: список изменения синтаксического анализа
greye
Цитата(Ollone5 @ Jul 1 2011, 14:00) *
Neverwinter Script
void main()
{
object oDoor=GetNearestObjectByTag("ТЭГ_ДВЕРИ");
if(GetIsOpen(oDoor)) // если она открыта
  {
    AssignCommand(OBJECT_SELF,ActionCloseDoor(oDoor));
    // захлопнуть дверь. действие привязанно к рычагу.
    SetLocked(oDoor,TRUE); // запереть дверь
    ActionPlayAnimation(ANIMATION_PLACEABLE_DEACTIVATE
);
    // рычаг переходит в другое положение
    }
else if(!GetIsOpen(oDoor)) //иначе, если дверь не открыта
    {
    SetLocked(oDoor,FALSE);// отпереть дверь
    AssignCommand(OBJECT_SELF,ActionOpenDoor(oDoor));
    // открыть дверь.
    ActionPlayAnimation(ANIMATION_PLACEABLE_ACTIVATE);
    // перевод рычага в другое положение
    }
}


Взято с базы скриптов!

Ошибка: список изменения синтаксического анализа


Компилируется без проблем. Попробуй патч.
Ollone5
Цитата
Компилируется без проблем. Попробуй патч.

У меня раньше тоже проблем небыло а сейчас любой скрипт с ошибкой!
Патч - (Error 404. Document not found.Запрашиваемый документ отсутствует на сервере.)
denis0k
Убери из скрипта русские буквы "я", неломанный тулсет ими давится. И я бы для тулсета сделал английский язык - на функционале никак не сказывается, но перевод там просто ппц.
Ollone5
Мой редактор скрита пишет:
Neverwinter Script
object oDoor=GetNearestObjectByTag("ТЭГ_ДВЕРИ");

Потеря анализатора переменной, но раньше все было без проблем unknw.gif
denis0k
Несмотря на довольно неплохую память, я ума не приложу, как эта ошибка пишется по-английски и, следовательно, что значит на самом деле. Потому как русский перевод тулсета - набор случайных слов из англо-русского словаря, не более. После перлов с тулсетом больше всего доставлял только "сундук дварфов" (на самом деле он там "of drawers", т.е. банальный комод), так и не исправленный за эндцать лет жизни перевода smile.gif

P.S. Тулсет запускай с оригинальным тлк smile.gif
virus_found
Цитата(denis0k @ Jul 5 2011, 00:13) *
больше всего доставлял только "сундук дварфов"

Спасибо, посмеялся smile.gif smile.gif
Ollone5
Запустил, та же ошибка unknw.gif
greye
Цитата(Ollone5 @ Jul 15 2011, 15:04) *
Запустил, та же ошибка unknw.gif

Приведи скрипт полностью, чтобы можно было хоть посмотреть, что это может быть.
Keks
может быть дважды в скрипте


Код
object oDoor=GetNearestObjectByTag("ТЭГ_ДВЕРИ");


или где+то ранее не закрыта строка ";"
StasMokos
Все-таки мне очень хотелось бы знать, каким образом засунуть в модуль свои звуки для боя и диалогов (озвучка)?
Aiwan
StasMokos, открой модуль ПВ и посмотри, звуки боя для пустынь. Там все реализовано и прописано в хаке для звуков.
StasMokos
На счет боя, спасибо большое, я посмотрел и разобрался, но как быть с озвучкой?
Aiwan
Не помню, но по моему их можно выбирать при создании диалога. Там вообще почти все звуки можно выбрать.
Montalaar
Скажите пожалуйста, как сделать так, что бы твой спутник нападал на тебя после определённой фразы с посторонним npc.

Функция типа:

AdjustReputation(GetPCSpeaker(), GetObjectByTag("тег хенча"), -100);
DetermineCombatRound(GetPCSpeaker());

Почему-то не действует, нападает npc. Фразы хенча так же присутствуют в диалоге с npc.
Ilerien
Во-первых, нужно убрать хенча из пати с помощью RemoveHenchman(). Во-вторых, перебросить DetermineCombatRound() на хенча с помощью AssignCommand().
Montalaar
Наверное я что-то не то делаю, скрипт не составляется. Не могли бы вы продемонстрировать на примере как это всё делается... если Вас не затруднит....
Ilerien
Как-то так:
Neverwinter Script
#include "nw_i0_generic"

void main()
{
    object oPC = GetPCSpeaker();
    object oHenchman = GetObjectByTag("tag");
    RemoveHenchman(oPC, oHenchman);
    AdjustReputation(oPC, oHenchman, -100);
    AssignCommand(oHenchman, DetermineCombatRound(oPC));
}
Скрипт не проверял, могут быть опечатки.
Montalaar
Благодарю Вас, всё прекрасно работает.
StasMokos
Спасибо, я уже разобрался.

Кстати, если что, я разобрался наконец-то с портретами, хотя делал все как и раньше, только последнюю букву в имени файлов заглавной писал. rolleyes.gif
Goldfinger
Я создал модуль, где с двух сторон создаются монстры, идут друг навстречу другу и начинают драться. Что-то вроде Dota Allstars. Стороны вполне сбалансированы, если какая-то сторона проигрывает, то ей присылают подкрепление. Короче он работает нормально. Если запустить, то битва будет происходить бесконечно, примерно по 10-13 монстров с каждой стороны.
Проблема в том, что если запустить его на dedicated server'е, то монстры продолжат спавниться, однако драться между собой будут только в присутствии игроков. Таким образом локация переполняется живностью и зайти посмотреть "как дела" не представляется возможным. Никаких обработчиков на onClientEnter и т.д. не стоит.
Можно ли как-то сделать чтобы монстры дрались на dedicated сервере, даже если игроков нет?
Laajin
Можно, конечно.
Судя по тому, что говорит вирусман - то хербит имеет тенденцию отключатся в локах, в которых нет игроков, через какой-то промежуток времени (если я правильно понял) - можно сделать искусственый запуск через курсирующий на модуле скрипт (каждые 6 сек) - это единственное, что мне приходит в голову.
Goldfinger
Цитата(Laajin @ Aug 4 2011, 09:14) *
Можно, конечно.
Судя по тому, что говорит вирусман - то хербит имеет тенденцию отключатся в локах, в которых нет игроков, через какой-то промежуток времени (если я правильно понял) - можно сделать искусственый запуск через курсирующий на модуле скрипт (каждые 6 сек) - это единственное, что мне приходит в голову.


Так хербит вон, работает походу, монстры то спавняться! Да кстати, скрипт на драку у меня в onPerception. Там просто, проверки на враждебность цели, проверка переменных свободен\нет, ну и ActionAttack. А в хертбите у меня задача идти вперед, если бить некого.

Монстры просто не дерутся!

[offtop: не вижу кнопки редактировать сообщение crazy.gif crazy.gif crazy.gif ]
Laajin
Дык АI хербит и останавливается
Talarasha
Цитата
Судя по тому, что говорит вирусман - то хербит имеет тенденцию отключатся в локах, в которых нет игроков, через какой-то промежуток времени (если я правильно понял)

virusman дело говорит, да и в описаниях стандартных функций сказано, что ХБ отключается, когда игрок не в зоне.

Не занимался этим вопросом специально, но видел освещение подобной темки в лексиконе. Вот этот абзац:

Цитата
Remarks
When used for a creature, conditions set within the OnSpawn script are checked and executed if they are applicable; these include "fast buff" for enemies (used when a PC draws within a certain range to simulate preparation), day/night postings for the WalkWayPoints() function, and the standard ambient animations used by creatures when standing around. Though the PC doesn't have an OnHeartbeat event, if you create a script called "default", it will automatically trigger every PC heartbeat. It would be wiser to use the modules OnHeartbeat however. Setting the AI level to AI_LEVEL_HIGH on a creature will force the heartbeat to fire as if a PC was in the area. This is useful for monsters you want to travel across multiple area's with waypoints, but is costly on the CPU. Area of effects can have a Heartbeat script defined, and can apply damage (such as Acid Fog does) to everyone in the area, each combat round.

Т.е. по идее, отключение хертбита при отсутствии игрока убирается с помощью функциии SetAILevel() с параметром AI_LEVEL_HIGH, но это должно стоить производительности. Описание констант там дано.

Цитата
Таким образом локация переполняется живностью

Это странно. Если ты говоришь, что стороны балансируются в зависимости от того, какая проигрывает, а в отсутствие игрока боя не происходит, то почему тогда идет переполнение? В моем представлении, балансировка подразумевает проверку числа живых мобов. Нет боя - нет потерь - нет подкреплений. Разве нет?
Goldfinger
Спасибо за наводки. Как будет возможность проверю.

Цитата
Цитата
Цитата
Таким образом локация переполняется живностью


Это странно. Если ты говоришь, что стороны балансируются в зависимости от того, какая проигрывает, а в отсутствие игрока боя не происходит, то почему тогда идет переполнение? В моем представлении, балансировка подразумевает проверку числа живых мобов. Нет боя - нет потерь - нет подкреплений. Разве нет?


Просто нет ограничения на количество спавнящихся мобов, однако проигрывающая сторона всегда получает больше войск чем доминирующая. Если мобы дерутся, то все нормально подкрепления приходят, старые воины умирают чаши весов постоянно прыгают, но победу не может одержать ни одна сторона. А вместо проверки числа живых, я просто веду учет: заспавнился +1 в переменную, сдох -1 в переменную.
Мне просто интересно наблюдать за ними wink3.gif сижу, пишу скрипты, пью чаек, болею за кого-нибудь.

P.S. так и не нашел где тут на этой борде кнопка "редактировать сообщение" ph34r.gif
Talarasha
Цитата
P.S. так и не нашел где тут на этой борде кнопка "редактировать сообщение"

Если не ошибаюсь, возможность редактирования появляется при получении второго вроде бы уровня. От количества сообщений, в общем, зависит.
Keks
Первое что пришло в голову, что мона поставить проверку на локалку, и принудительно запускать. а если нет никого на арене, ни ДМов, ни игроков, то просто на мобов ПВК, при заходе игрока на арену КВП и далее батл, стек команд на пустых локах запущенный принудительно не айс. как только игрок выходит из зоны видимости через турн выключается АИ, и моб выходит в режим "по дефолту" (даже когда в камне, т.е. в позе появления)
Ollone5
Как поставить режим монстру, чтобы он разрушал все плэйсы в пределах своей видимости?
greye
Цитата(Ollone5 @ Aug 16 2011, 15:32) *
Как поставить режим монстру, чтобы он разрушал все плэйсы в пределах своей видимости?

Использовать GetNearestObject(OBJECT_TYPE_PLACEABLE) в аи-скриптах моба.
Ollone5
Цитата
Использовать GetNearestObject(OBJECT_TYPE_PLACEABLE) в аи-скриптах моба.

Можно подробнее. wacko.gif
greye
Цитата(Ollone5 @ Aug 17 2011, 10:05) *
Можно подробнее. wacko.gif

Neverwinter Script
//:://////////////////////////////////////////////////
//:: NW_C2_DEFAULT1
/*
  Default OnHeartbeat script for NPCs.

  This script causes NPCs to perform default animations
  while not otherwise engaged.

  This script duplicates the behavior of the default
  script and just cleans up the code and removes
  redundant conditional checks.

*/

//:://////////////////////////////////////////////////
//:: Copyright © 2002 Floodgate Entertainment
//:: Created By: Naomi Novik
//:: Created On: 12/22/2002
//:://////////////////////////////////////////////////

#include "nw_i0_generic"

void main()
{
    // * if not runnning normal or better Ai then exit for performance reasons
    if (GetAILevel() == AI_LEVEL_VERY_LOW) return;

    // Buff ourselves up right away if we should
    if(GetSpawnInCondition(NW_FLAG_FAST_BUFF_ENEMY))
    {
        // This will return TRUE if an enemy was within 40.0 m
        // and we buffed ourselves up instantly to respond --
        // simulates a spellcaster with protections enabled
        // already.
        if(TalentAdvancedBuff(40.0))
        {
            // This is a one-shot deal
            SetSpawnInCondition(NW_FLAG_FAST_BUFF_ENEMY, FALSE);

            // This return means we skip sending the user-defined
            // heartbeat signal in this one case.
            return;
        }
    }


    if(GetHasEffect(EFFECT_TYPE_SLEEP))
    {
        // If we're asleep and this is the result of sleeping
        // at night, apply the floating 'z's visual effect
        // every so often

        if(GetSpawnInCondition(NW_FLAG_SLEEPING_AT_NIGHT))
        {
            effect eVis = EffectVisualEffect(VFX_IMP_SLEEP);
            if(d10() > 6)
            {
                ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, OBJECT_SELF);
            }
        }
    }

    // If we have the 'constant' waypoints flag set, walk to the next
    // waypoint.
    else if ( GetWalkCondition(NW_WALK_FLAG_CONSTANT) )
    {
        WalkWayPoints();
    }

    // Check to see if we should be playing default animations
    // - make sure we don't have any current targets
    else if ( !GetIsObjectValid(GetAttemptedAttackTarget())
          && !GetIsObjectValid(GetAttemptedSpellTarget())
          // && !GetIsPostOrWalking())
          && !GetIsObjectValid(GetNearestSeenEnemy()))
    {
        if (GetBehaviorState(NW_FLAG_BEHAVIOR_SPECIAL) || GetBehaviorState(NW_FLAG_BEHAVIOR_OMNIVORE) ||
            GetBehaviorState(NW_FLAG_BEHAVIOR_HERBIVORE))
        {
            // This handles special attacking/fleeing behavior
            // for omnivores & herbivores.
            DetermineSpecialBehavior();
        }
        else if (!IsInConversation(OBJECT_SELF))
        {
            if (GetSpawnInCondition(NW_FLAG_AMBIENT_ANIMATIONS)
                || GetSpawnInCondition(NW_FLAG_AMBIENT_ANIMATIONS_AVI
AN)
                || GetIsEncounterCreature())
            {
                PlayMobileAmbientAnimations();
            }
            else if (GetSpawnInCondition(NW_FLAG_IMMOBILE_AMBIENT_ANIM
ATIONS))
            {
                PlayImmobileAmbientAnimations();
            }

            // addition to original onHeartbeat
            else if (GetLocalInt(OBJECT_SELF, "AI_HAVE_TO_DESTROY_PLACEABLES")) {
                object placeable = GetNearestObject(OBJECT_TYPE_PLACEABLE);
                if (GetIsObjectValid(placeable)) {
                    ActionAttack(placeable);
                }
            } // addition ends

        }
    }

    // Send the user-defined event signal if specified
    if(GetSpawnInCondition(NW_FLAG_HEARTBEAT_EVENT))
    {
        SignalEvent(OBJECT_SELF, EventUserDefined(EVENT_HEARTBEAT));
    }
}

Самый простой, а потому почти наверное далеко не лучший способ.
Ollone5
На что ставить? ph34r.gif
Laajin
Цитата
Neverwinter Script
//:://////////////////////////////////////////////////
//:: NW_C2_DEFAULT1
/*
  Default OnHeartbeat script for NPCs.

  This script causes NPCs to perform default animations
  while not otherwise engaged.

  This script duplicates the behavior of the default
  script and just cleans up the code and removes
  redundant conditional checks.

*/

//:://////////////////////////////////////////////////
//:: Copyright © 2002 Floodgate Entertainment
//:: Created By: Naomi Novik
//:: Created On: 12/22/2002
//:://////////////////////////////////////////////////
nepejke
Приветствую всех на этом прекрасном форуме!
У меня небольшой вопрос, в каком 2да файле или может скрипте, редактируется система опыта?
Скажем я хочу увеличить себе длительность игры небольшим модом, как увеличить порог до 45-50 уровня?
wirTUS
Насколько я знаю (раньше вроде задавались подобные вопросы), увеличить порог нельзя. Можно растянуть получение опыта, вроде бы как через xptable.2da (не знаю, к чему приведет добавление в нее строк за 40, скорее всего к ошибке при попытке подняться на уровень/на добавленный уровень, ибо есть куча таблиц классов, которые наверняка связаны с уровнями, класс/кросс-класс скиллы и так далее. К чему приведет оное добавление во все таблицы, которые связаны с уровнями, не знаю тем более, но можно попытаться. Кстати, на пг какой-то товарищ выкладывал xptable, отредактированный на ускорение кача - http://www.playground.ru/cheats/14583/ ). Кстати под 2da имеется отдельная тема, может найдешь там что-нибудь себе полезное. http://www.city-of-masters.ru/forums/index.php?showtopic=78
Laajin
Цитата
Скажем я хочу увеличить себе длительность игры небольшим модом, как увеличить порог до 45-50 уровня?

Нафиг вам это? Если хотите +100500 лвл, лучше поиграйте в Пэрфэкт форд или Ла2 или Еверквест 2 или хз, чего там еще...
там все это + лучше чем можно сделать тут.
nepejke
большое спасибо, но именно онлайн игры мне надоели, хочу быть королём сингла rolleyes.gif

насчёт опыта, спасибо, помогло..

Так же у меня есть один вопрос, которым я очень давно интересовался.
Почему базовый урон в этой игре ограничен числом 20?
Со спеллами не уверен, но с оружием так. Можно ли увеличить эти цифры и какими последствиями это можем обернуться?

Со спеллами к примеру, мы работает в спеллс.2да и скрипты(в скриптах и изменяем характеристики магии), с оружием сложнее, в том же редакторе стоит ограничение на числа, и поставить сколько хочешь - нельзя.

Конкретно интересует как изменить характеристики оружия(ограничения) и как на работоспособность игры, повлияет правка цифр в скриптах о спеллах, неужели так всё просто, изменить там пару строчек и урон магий изменится?

заранее благодарен пользователям этого форума declare.gif
дело в том, что с друзьями разрабатываем патч для совместной игры онлайн. Хотим немного подправить баланс, под себя так сказать biggrin.gif
wirTUS
Цитата
Почему базовый урон в этой игре ограничен числом 20?
Не понял.
Вроде бы урон в скриптах ограничивается только ограничениями типа, наиболее вероятно, что это от -32768 до 32767.
nepejke
ну например оружие, свыше 3d6(=18) или просто Урон20 сделать в тулсете нельзя.
Это ограничение игры или можно в ручную прописать сколько хочешь? (через 2да файл baseitems или где итемы искать, если не в нём? ещё интересует место где можно вручную отредактировать файл от моего модуля, обходя ограничения тулсета)


И что дают нам эти цифры? -32768 до 32767.
в каком скрипте ты их встречал? судя по этому, пока мы их не изменим, урон выше не сделать declare.gif
denis0k
Цитата
большое спасибо, но именно онлайн игры мне надоели, хочу быть королём сингла
Цитата
дело в том, что с друзьями разрабатываем патч для совместной игры онлайн
Взаимоисключающие параграфы.


К слову, увеличение левелкапа и урона - это один конец палки. Второй конец палки - "старые" мобы. К примеру, если речь о сингле нвн1, какой смысл делать 50 уровней и 50 урона от оружия, когда финального босса можно убить на 13м уровне с мечом 1д8+2? Я сам проходил сингл нвн1 в компании 3х друзей, там на любом уровне халява нереальная, даже когда опыт на четверых делится.
nepejke
ну смысл в том, чтобы уметь.
И эта игра больше сингл для меня.
Неважно с каким мечом ты проходишь кампанию, ты просто не думал, что в моде можно сделать босса которого 13ым лвлом не убьёшь prankster2.gif
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.
Invision Power Board © 2001-2024 Invision Power Services, Inc.