Помощь - Поиск - Пользователи - Календарь
Полная версия: Вопросы новичков
Город Мастеров > РЕДАКТОРЫ > 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
Piranha
Всем привет ! Нужна помощь . Как через toolset добавить к посоху или амулету эффект превращение в любого монстра с его же характеристиками ?
Elendion
shout.gif Помогите! Как сделать, чтобы переходя через триггер персонаж получал опыт и запись в журнале? И как сделать респаун некоторых сундуков и мобов? shout.gif

И еще такая глупость. Играем с человеком и диалог у непися настроен так, что после одного разговора ты с ним больше не поговоришь. Как сделать, чтобы этот диалог смог прочитать каждый по отдельности, а не только один из нас?
Melisse
Цитата
Всем привет ! Нужна помощь . Как через toolset добавить к посоху или амулету эффект превращение в любого монстра с его же характеристиками ?

одним тулсетом тут не обойтись, нужно редактировать 2да файлы, добавлять хакпак и писать скрипт

Цитата
И еще такая глупость. Играем с человеком и диалог у непися настроен так, что после одного разговора ты с ним больше не поговоришь. Как сделать, чтобы этот диалог смог прочитать каждый по отдельности, а не только один из нас?

тут сложно посоветовать что-то, нужно разбираться в каждом конкретном случае и без написания новых скриптов тут не обойтись тоже

Цитата
Помогите! Как сделать, чтобы переходя через триггер персонаж получал опыт и запись в журнале? И как сделать респаун некоторых сундуков и мобов?

1. нужно написать скрипт, где будет даваться опыт и выставляться шаг журнала в нужном квесте. Скрипт поместить в событие OnEnter
2. респавн сундуков - тоже надо писать скрипт.
3. для респавна существ можно использовать Encaunter (Встреча) он растягивается как триггер, там можно назначать время и типы существ для спавна.
Elendion
Ну это и так все понятно было, не такой глупый. Скрипты помогите составить, хотя бы с опытом и записью в журнале при переходе. Не думаю, что там много.
Aiwan
http://www.city-of-masters.ru/forums/index.php?showtopic=5 база данных по скриптам. Там все твои вопросы разбирали.
Melisse
Цитата
Скрипты помогите составить, хотя бы с опытом и записью в журнале при переходе. Не думаю, что там много.

Вы просто описываете так - не понятно что вам надо, надо больше конкретики, если хотите помощи

Вот для того чтобы наступить и получить опыт и перейти на шаг в журнале
Neverwinter Script
void main()
{
     object oPlayer = GetEnteringObject ();

     if (GetIsPC(oPlayer)) 
     {
            GiveXPToCreature (oPlayer, 999999999999);

            // цифра 2 - это необходимый вам шаг журнала
            AddJournalQuestEntry ("ТЭГ_ВАШЕГО_ЖУРНАЛА", 2, oPC, FALSE, FALSE, FALSE);
     }
}


К тому же, тут на форуме много всяких вариантов скриптов. Вот Айван вам даже ссылку дал на базу
Еще можете посмотреть тут на форуме или тут тоже для новичков полезно
Elendion
Спасибо! Строку с опытом нормально читает, а на даче опыта выдает ошибку "ПЕРЕМЕННАЯ, ОПРЕДЕЛЕННАЯ БЕЗ ТИПА"

Ошибку на записи в журнале то есть... Совсем глаза сломал.
Melisse
так надо журнал создать с этим тэгом и там сделать необходимое число шагов. В данной функции выставляется шаг 2, меняйте на то что вам требуется.
Я выше скинула вам ссылки на туториалы - это основа аврора-тулсета. Такие простые вещи как создание журнала то уж можно разобраться и без подсказок, благо там все разжёвано.
Elendion
У меня журнал создан, ну вы уж совсем за идиота держите :/
Aiwan
Ошибка элементарная. Тот кто наступл на триггер определен как oPlayer, а в журнале он определен как оРС, который никак нигде не определен. Вот и ошибка.


Neverwinter Script
void main()
{
     object oPlayer = GetEnteringObject ();

     if (GetIsPC(oPlayer))
     {
            GiveXPToCreature (oPlayer, 999999999999);

            // цифра 2 - это необходимый вам шаг журнала
            AddJournalQuestEntry ("ТЭГ_ВАШЕГО_ЖУРНАЛА", 2, oPlayer)
     }
}
Elendion
Низкий вам поклон за терпение. Я тут сделал нового призываемого спутника через предмет и столкнулся с проблемой, что воспользовавшись этим предметом снова призывается второй спутник, а первый не исчезает, так можно наклепать кучку. Что делать? unsure.gif
denis0k
У любого объекта есть тэг. По тэгу можно найти и проверить валидность. Если объект нашёлся, можно не создавать новый или уничтожить старый.

Искать что-то типа: GetObjectByTag, GetIsObjectValid, DestroyObject.
Melisse
Цитата
У меня журнал создан, ну вы уж совсем за идиота держите :/

да у меня и в мыслях не было, я ж помочь хочу..
Вы не пишите ошибку, которую выдает компилятор, никакой другой информации, а просто говорите что не работает - так это может быть по десятку причин.

Цитата
Я тут сделал нового призываемого спутника через предмет и столкнулся с проблемой, что воспользовавшись этим предметом снова призывается второй спутник, а первый не исчезает, так можно наклепать кучку. Что делать?


Если вы вызываете спутника через CreateObject, то тогда вам придется проверять через GetObjectTag тэг вызванного спутника, как сказал denis0k

Neverwinter Script
....
if(GetIsObjectValid(GetObjectByTag("ТЭГ_СПУТНИКА")))
{

   return;
}
...


если вы вызовите его как суммона через EffectSummonCreature() то при втором вызове он автоматом пересоздается.

Neverwinter Script
...
effect eSummon = EffectSummonCreature("РСЕРЕФ_ВАШЕГО СУЩЕСТВА", VFX_ВИЗУАЛЬНЫЙ ЭФФЕКТ);
ApplyEffectAtLocation (DURATION_TYPE_PERMANENT, eSummon, GetLocation(oPlayer));
...
Elendion
Вот так оно выглядит и плодит их безмерно.
Neverwinter Script
void main()
{
object oActivator = GetItemActivator();
object oActivated = GetItemActivated();
string sTag = GetTag(oActivated);

if (sTag  == "MatildaX")
{
  effect eSummon = EffectSummonCreature("matilda");
ApplyEffectToObject(DURATION_TYPE_PERMANENT,
  SupernaturalEffect(eSummon), oActivator);
  return;
}


Melisse
Попробуйте это
Neverwinter Script
void main()
{
  object oActivator = GetItemActivator();
  object oActivated = GetItemActivated();
  string sTag = GetTag(oActivated);

  if (sTag  == "MatildaX")
  {
      if(!GetIsObjectValid (GetAssociate(ASSOCIATE_TYPE_SUMMONED, oActivator )))
      {
        effect eSummonedMonster = EffectSummonCreature("matilda", SPELL_SUMMON_CREATURE_I);
        ApplyEffectAtLocation(DURATION_TYPE_TEMPORARY, eSummon, GetLocation(oActivator), HoursToSeconds(24));
      }
  }
}
Elendion
В строке
Neverwinter Script
ApplyEffectAtLocation(DURATION_TYPE_TEMPORARY, eSummon, GetLocation(oActivator), HoursToSeconds(24));
ОШИБКА: ПЕРЕМЕННАЯ, ОПРЕДЕЛЕННАЯ БЕЗ ТИПА
Melisse
ApplyEffectAtLocation(DURATION_TYPE_TEMPORARY, eSummonedMonster, GetLocation(oActivator), HoursToSeconds(24));
Elendion
Да, на ошибки больше не ругается, но призывать никого не призывает теперь вообще х)
Melisse
Neverwinter Script
void main()
{
  object oActivator = GetItemActivator();
  object oActivated = GetItemActivated();
  string sTag = GetTag(oActivated);

  if (sTag  == "MatildaX")
  {
      if(!GetIsObjectValid (GetAssociate(ASSOCIATE_TYPE_SUMMONED, oActivator )))
      {
        effect eSummonedMonster = EffectSummonCreature("matilda");
        ApplyEffectAtLocation(DURATION_TYPE_TEMPORARY, eSummonedMonster, GetLocation(oActivator), HoursToSeconds(24));
      }
      else
      {
            SendMessageToPC (oPC, "У вас уже есть призванное существо");
      }

  }
}


Проверь теги предмета и существа
Elendion
oPC на oActivator исправил, ибо опять ругалось.
Тег предмета верный, у существа стоял ResRef, раньше через него и работало, но даже если поставить тег - ничего не происходит. В общем раньше можно было наплодить много, а сейчас вообще ни одного.


Просто пишет, что используется специальная сила предмета и ничего не происходит.
Melisse
Попробуй так, может быть не читает локацию
Neverwinter Script
void main()
{
  object oActivator = GetItemActivator();
  object oActivated = GetItemActivated();
  string sTag = GetTag(oActivated);

  location lActivator = GetItemActivatedTarget();


  if (sTag  == "MatildaX")
  {
       object oSummon = GetAssociate(ASSOCIATE_TYPE_SUMMONED, oActivator, 1);
       if(!GetIsObjectValid (oSummon ))
      {
            effect eSummonedMonster = EffectSummonCreature("matilda", VFX_FNF_GAS_EXPLOSION_EVIL, 0.5f);
            ApplyEffectAtLocation(DURATION_TYPE_TEMPORARY, eSummonedMonster, lActivator, HoursToSeconds(24));
      }
      else
      {
            SendMessageToPC (oActivator , "У вас уже есть призванное существо");
      }

  }
}
Elendion
К сожалению все равно не срабатывает sad.gif
denis0k
Как оно скомпилировалось?

location lActivator = GetItemActivatedTarget();

Возвращает object же.
Aiwan
Elendion, для начала нужны азы программирования. Как определить объект, как его описать, как начать скрипт, как закончить и т.д. Без этого будет каша.
Начать нужно с маленького модуля тестировать простые действия, подошел, поговорил, отошел, сел, встал, пукнул громко и так далее. Потом писать что-то в модуль. ИМХО.
Elendion
Посидел помучался, сделал х)
Можно сделать, чтобы животные дикие разбегались от игрока?
Aiwan
Цитата(Elendion @ Sep 6 2017, 15:36) *
Можно сделать, чтобы животные дикие разбегались от игрока?

Не мыться два месяца, все животные разбегутся.
Elendion
Остроумно, маэстро, однако делу это не поможет.
Aiwan
Вопросов тут задали много, модулей построили мало smile.gif Оттуда и сарказм. Если человек хочет получить ответ на форуме, он должен правильно задать вопрос. Золотое правило общения на форумах.
Задача то какая? Тупо все животные убегают с криками "Аааа! Спасайтесь зоофил!!" И все?
Elendion
Ну допустим стоит себе пасется дикая зёбра, игрок проходит рядом и она отбегает, угроза же.
Aiwan
Начерти триггер, на нем определи зёбру, игрок наступил на триггер, зёбра с криками ужаса убежала. Все.
Elendion
Отбежит она разок, игрок снова подойдет, и? Есть другой вариант? Прописать в скриптах именно самой животинки реакцию на PC, например?
denis0k
ИИ - один из самых сложных аспектов геймдева. Тебе нужен либо программист, либо попытаться найти готовое решение, например, тут в закромах или на https://neverwintervault.org/

Если хочется самому, то копать в сторону события OnHeartbeat моба и функций поиска игрока в определённом радиусе.
Elendion
Да, спасибо, я на ваулте много интересного находил, буду думать.
Aiwan
Залез в базу скриптов для новичков. Переработал скрипт -fenix-а за 1 минуту под твои нужды.
Скрипт ставется на слот OnPerception в св-вах зёбры.
Neverwinter Script
void main()
{
object oPercep = GetLastPerceived(); // последний воспринятый объект

// если последний воспринятый объект был увиден и если он является игроком
if ( GetLastPerceptionSeen() && GetIsPC(oPercep))
    {
    SpeakString("Спасайся! ЗООФИЛ!!!");
    //сюда вписывай свои действия, типа убежала зёбра на сто метров
    }
}
Elendion
О! Спасибо мил человек, низкий поклон rolleyes.gif
Elendion
Появился новый вопрос, хы. Мне нужно, чтобы открывалась ветка диалога при определенном уровне, но так, чтобы не приходилось перебирать каждый классовый уровень персонажа в проверке, а то это будет некорректно работать, если игрок нескольких классов.
Aiwan
Все есть в скриптах для новичков. Позавчера читал, когда писал прошлый скрипт.
Melisse
Цитата(denis0k @ Sep 5 2017, 17:39) *
Как оно скомпилировалось?

location lActivator = GetItemActivatedTarget();

Возвращает object же.

ну так, по памяти пишу... там нужно было GetItemActivatedTargetLocation()
smile.gif
но ведь скопмпилировалось же у него! smile.gif

Цитата
Можно сделать, чтобы животные дикие разбегались от игрока?

используй функции,
ActionMoveAwayFromLocation
ActionMoveAwayFromObject
в скрипте на OnPerception (примерное название) в слотах моба
Вот Айван привел кусочек скрипта как раз на это событие
Elendion
В базе скриптов есть скрипт на рубку дерева, вопрос следующий: как сделать рандомный предмет получаемый при срубе из нескольких на выбор. Я вижу как все это прописано в OnDamaged, но не знаю как правильно построить функцию рандома, сам пытался, но все через Ж.
denis0k
Функция рандома там встроена smile.gif Генерирует число в заданном диапазоне. Тебе нужно только в зависимости от числа-результата задать ресреф нужного итема.
Elendion
Да, я знаю, что она есть, но не знаю как её правильно вставить в скрипт, чтобы его не сломать.
denis0k
Что-то типа:
CODE
int x = random(3) + 1;
if (x == 1) {
resref = "item1";
} else if (x == 2) {
resref = "item2";
} else if (x == 3) {
resref = "item3";
}


Потом этот ресреф скормить функции создания.

Писал по памяти smile.gif
Elendion
Спасибо, буду ковыряться х)
А возможно сделать, чтобы ветка диалога открылась только если рядом находится плейсебл с определенным тегом/ресрефом?
Melisse

Нужно поставить в диалог на вкладку с названием "Текст проявляет при...", если у тебя русская версия тулсета
Neverwinter Script
int StartingConditional()
{
    object oPC = GetPCSpeaker();
    object oPlaceable = GetNearestObjectByTag ("ТЭГ_ОБЪЕКТА", oPC , 1);

    if (GetIsObjectValid(oPlaceable) &&
        GetDistanceBetween (oPC, oPlaceable) < 30.0f) // в радиусе 30 метров от игрока
    {
        return TRUE;
    }

    return FALSE;
}
Elendion
Огромное спасибо, это то, что нужно!

А в совершенных действиях можно, чтобы этот ближний плейс заменился на другой?
Melisse
Попробуй это, но уверенности нет
Проверь правописание функций - потому что без тулсета, навскидку

Neverwinter Script
void CreatePlaceable (object oSubject) ;
void main()
{
    object oPC = GetPCSpeaker();
    object oPlaceable = GetNearestObjectByTag ("ТЭГ_ОБЪЕКТА", oPC , 1);

    if (GetIsObjectValid(oPlaceable))
    {
          location lLoc = GetLocation(oPlaceable);
          SetLocalLocation (oPC, "lLocationPlaceable", lLoc);

          AssignCommand(oPC, DelayCommand(3.0f, CreatePlaceable (oPC)));
          DestroyObject (oPlaceable);
    }

}
void CreatePlaceable (object oSubject)
{
    location lCreate = GetLocalLocation (oSubject , "lLocationPlaceable");
    CreateObject (OBJECT_TYPE_PLACEABLE, "РЕС_РЕФ_ПЛЭЙСА_ДЛЯ_СОЗДАНИЯ", lCreate);
}
Elendion
Спасибище гигантское, это работает именно так, как мне надо было! Это здорово.
Elendion
Уууу, я сделал ворона с нужными мне характеристиками, но с него падают стандартные перья. Как мне от них избавиться?
SlothDemon
Всем привет, села перепроходить HOTU и столкнулась с проблемой, у меня застопорился роман. Короче, роман с Валеном и за стадию 3, то есть третий диалог, оно не идет вообще. Пыталась копаться в sav файле, нашла там нужную переменную, но половина кодировки неправильная а чем нужнооткрывать его не знаю, я открывала в ноутпаде. Порылась в редакторах сейвов, они обычно редактируют самого персонажа и переменные которые к нему привязаны, нужную найти так и не смогла. В conversation editor нашла что переменная, которая мне нужна, это ivalenstage и она должна быть равна 3, но из всего этого непонятно как она меняется, или сразу после диалога и там стоит задержка, или нужно для этого поднимать "очки влияния". Вроде делала все то же самое как в предыдущем прохождении когда все работало. Может, кто-нибудь подкинет скрипт чтобы получить нужное значение переменной или подскажет что для этого нужно в консоли написать? Так, после каждого сюжетного квеста примерно в конце локации стабильно появлялся диалог, а тут дошла до третьей главы, на всякий случай переиграла с начала 2й главы разик, так ничего и нет.

Извините, я знаю что это очень тупо, но я без понятия куда это писать. Я не могу создавать темы в форуме по самой игре, и вообще нигде. unsure.gif
Aiwan
Попробуйте ваш сейв переименовать в .MOD, будет возможно отредактировать вашего персонажа и переменные в тулсете.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.
Invision Power Board © 2001-2025 Invision Power Services, Inc.