Помощь - Поиск - Пользователи - Календарь
Полная версия: Вопросы новичков
Город Мастеров > РЕДАКТОРЫ > 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
Aiwan
QUOTE (Lex @ Jun 18 2005, 20:50)
СОУ методы скриптига.
Сам иногда грешу, но надо бы переходить на локалки.

Тем кто может разобраться со скриптингом, мой код не очень то и нужен. А молодежи трудно будет объяснить куда вешать локалку, да еще если у нег например только СОУ... ТАк что этот код хоть и старомоден, но универсален для любого варианта.
Dik Morris
У меня опять вопрос...
Вот скрипт для открытия (и закрытия) двери, рычагом:


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);
// перевод рычага в другое положение
}
}
Как все поняли этот скрипт на OnUsed рычага, я его туда ставлю, соответственно ввожу ТЭГ двери, но почемуто когда использую рычаг нечего не происходит.
-fenix-
Проверил скрипт, у меня все работает. Может ты тег не тот пишешь?
Friedrich
QUOTE (Equilibrium @ Jun 19 2005, 00:44)
Предположим у нас есть мантия искателя приключений: +1 впитывание 30 поврежений

30 - это то насколько кменьшатся повреждения? Тогда что такое +1? 

Тута как я понимаю такое дело. Это значит, что "впитывание" пробивается только +1 и выше оружием. Т.е. Если тебя бьют обычным мечом, то все как сказал ДБ. Если +1, то твое "впитывание" уже не работает. Обычно такое свойство висит на шкурках всяких мэджик бистов, которые пробиваются только зачарованным оружием.
Если я ничего не перепутал.
Агрессинг
Dark@ngel

QUOTE
Как заставить НПС сидеть на стуле?

Neverwinter Script Source
void main()

  {
  int nUser = GetUserDefinedEventNumber();
  if(nUser == 1001)
  {
  if(GetLocalInt(OBJECT_SELF,"BUSY")==0) //если НПС не занят ни чем

      {
      SetLocalInt(OBJECT_SELF,"BUSY",1); // Ставим локалку, что НПС занят


  if (!GetIsInCombat() && !IsInConversation(OBJECT_SELF)) // проверка на битву и диалог
  if (GetCurrentAction() != ACTION_SIT)
  {
        ClearAllActions();
        int i = 1;

        object oChair = GetNearestObjectByTag("[COLOR=red]ТЕГ СТУЛА(ИЛИ МОЖЕТ ТЫ ЕГО НА ГОРШОК ХОЧЕШЬ ПОСАДИТЬ)[/COLOR]", OBJECT_SELF,i);
        int bFoundChair = FALSE;
        while (bFoundChair == FALSE && GetIsObjectValid(oChair) == TRUE) //когда НПС нашел стул....
        {

          if (GetIsObjectValid(GetSittingCreature(oChair)) == FALSE) //если кто уже на нем сидит, то НПС не садится
          {
              bFoundChair = TRUE; //если он нашел стул..
              ActionSit(oChair); //  .. то плюхается на него
          }
          else
          {
              i++;
              oChair = GetNearestObjectByTag("Chair", OBJECT_SELF,i);
          }
        }
        if (bFoundChair == FALSE) // Если он НЕ нашел стул...
        {

          ClearAllActions();
          ActionPlayAnimation(ANIMATION_FIREFORGET_PAUSE_SCRATCH_HEAD); // то чешет репу и само собой никуда не садится
        }
    }
}
}
}

А вообще, возьми и покопайся в стандартных скриптах - найдешь много интересного.
Equilibrium
Friedrich, DBColl, Санькс.

Тогда еще вопросик:
Есть задачка, для решения которой у меня, пока что, слишком мало знаний:

Есть стафф, с тегом staf и РезРеф’ом staf.

Задача:
Если стафф лежит в контейнере.
И на контейнер кастуется заклинание.
То:
если это заклинание 0-го уровня
то у стаффом можно колдовать это заклинание бесконечно в день.
если 1-го
то – 5\день
если 2-го
4\день
3-го
3\день
4-го
2
5-го
1

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

В принципе, там еще проверки на наличие определенных предметов в том же контейнере, но это я и сам напишу. pardon.gif

Второй вопрос:

Можно ли сделать проверку на Школу магии, выбранную волшебником(цой)? Не пакет, а именно школу (Некромантия, Воскрешение, Иллюзия, Защитная...)
Archangel
QUOTE
Как заставить НПС сидеть на стуле?

Вставь это в OnHeartBeat НеПиСя:
Neverwinter Script Source
void main
{
object oChair=GetObjectByTag("ТЭГ_СТУЛА")
ActionSit(oChair);
}

А Агрессинг тебе загнул супер пупер скрипт с просто дофигищем проверок.
В большинстве случаев просто ненужных. Ну что уж поделать - у BioWare все оч продумано biggrin.gif
ЗЫ
Агрессинг! Не пугай новичков! lol.gif
Aiwan
QUOTE (Archangel @ Jun 20 2005, 15:00)
Встась это в OnHeartBeat НеПиСя:

Актион НПС не выдержит больше 75 действий. Соотвественно, если каждые 6 секунд будет даваться акция сесть, то скоро начнется дикий дебаг smile.gif
Archangel
QUOTE
Актион НПС не выдержит больше 75 действий. Соотвественно, если каждые 6 секунд будет даваться акция сесть, то скоро начнется дикий дебаг

Да у меня НеПиСей так 30 с таким скриптом в OnHeartBeat стоят и ниче, живы еще biggrin.gif
Ну есть еще один вариант.... моно вставить в OnSpawn, но тогда правильность действий не гарантирую... nea.gif
-fenix-
QUOTE
Да у меня НеПиСей так 30 с таким скриптом в OnHeartBeat стоят и ниче, живы еще biggrin.gif
Ну есть еще один вариант.... моно вставить в OnSpawn, но тогда правильность действий не гарантирую...


В страшном скрипте Биоваров есть на такой случай проверка на занятость.

Aiwan
QUOTE (Archangel @ Jun 20 2005, 16:31)
Да у меня НеПиСей так 30 с таким скриптом в OnHeartBeat стоят и ниче, живы еще

Это настолько тупо и безгамотно, что я бы даже постеснялся говорить о таком на форуме. biggrin.gif У меян испоьзуется хербит пару раз для Евентов, но не больше.
Friedrich
Equilibrium
В общем, тебе нужно
1. получить кастуемый спел (константу)
2. получить левел спела. Функции типа GetSellLevel вроде нету (тем более, что одни и те же спелы могут быть разного уровня у разных классов. Да они еще метамагическими). Так что, придется ручками перебирать все константы и с помощью if ... else расставлять уровни. (Или упростить задачу).
3. Проверить на вещи кол-во свойств ITEM_PROPERTY_CAST_SPELL
4. Уничтожить вещь или добавить свойство (c этим тоже придется по париться).
Dark@ngel
У меня тут проблемка возникла, сама я не дойду:
Допустим есть локация-корабль с триггером выхода. Хочу сделать так, чтобы выйти с этой локации нельзя было в течение одного дня, а если будешь ломиться - то на триггере всплывал текст типа еще рано. Но потом по стечению 24 часов можно было выйти. Если это очень сложно, можно не отвечать я пойму.
Lex
QUOTE (Dark@ngel @ Jun 20 2005, 20:21)
Допустим есть локация-корабль с триггером выхода. Хочу сделать так, чтобы выйти с этой локации нельзя было в течение одного дня, а если будешь ломиться - то на триггере всплывал текст типа еще рано. Но потом по стечению 24 часов можно было выйти. Если это очень сложно, можно не отвечать я пойму.

просто, но я не уловил условие блокировки выхода в начале.. Те в какой момент лока закрывается..
Добавлено в [mergetime]1119287097[/mergetime]
Neverwinter Script Source
void main()
{
  object oClicker = GetClickingObject();
  object oTarget = GetTransitionTarget(OBJECT_SELF);

  SetAreaTransitionBMP(AREA_TRANSITION_RANDOM);

  if (GetLocalInt(GetArea(OBJECT_SELF),"BLOCK"))
      {
      FloatingTextStringOnCreature("Çàáëîêèðîâàíî",oClicker,TRUE);
      return;
      }
  else
      {
      AssignCommand(oClicker,JumpToObject(oTarget));
      }
}


На клике на переход местности.
Friedrich
В общем, должно быть на onClick триггера должны быть что-то в этом роде:
Neverwinter Script Source
void main()
{
    object oPC = GetClickingObject();
    int nDate = GetLocalInt(OBJECT_SELF, "SHIP_NO_EXIT_DATE");
    if(GetCalendarDay() == nDate)
    {
      object oDest = GetTransitionTarget(OBJECT_SELF);
      AssignCommand(oPC, ActionJumpToObject(oDest));
    } else
    {
      AssignCommand(oPC, SpeakString("Сегодня выйти не выйдет!"));
    }
}

Локалку с датой, в которую нельзя сходить с корабля нужно повесить заранее (кстати, может быть лучше не на триггер, а на ПС или модуль). Н.п. при заходе чувака на корабль, загрузке модуля и т.п. (в зависимости от конкретных обстоятельств). biggrin.gif
Aiwan
Dark@ngel это просто как 2х2=5. Чертишь триггер, соединяешь его с нужным, на он Ентр триггера ставь.
Neverwinter Script Source
//:://////////////////////////////////////////////
//:: OnExit
//:: Copyright © 2005 WRG!
//:://////////////////////////////////////////////
/*

*/

//:://////////////////////////////////////////////
//:: Created By: Aiwan
//:: Created On: 20.06.2005
//:://///////////////////////////////////////////
void main()
{
    object oPC = GetEnteringObject(); // Взять того кто наступил
    object oJump = GetTransitionTarget(OBJECT_SELF);
    // Это объект куда надо попасть
    float fDel = 2880.0;
    /*
    Предположим, дин час игры равен 2 минутам. Это 120 секунд
    Задержка 1 день  (fDel = 120*24*1)
    Если надо два дня то так: (fDel = 120*24*2)
    Если в модуле час равен 3 минутам то так: (fDel = 180*24*1)
    */

    if (GetIsPC(oPC)) // Если тот кто наступил является Игроком
    {
    if (GetLocalInt(oPC, "TRANSITION")==2)// Если на нем локалка с числом 2, то попадет
    {                                    // Куда ему надо
    AssignCommand(oPC, ClearAllActions());
    AssignCommand(oPC, ActionJumpToObject(oJump));
    return;
    }
    if (GetLocalInt(oPC, "TRANSITION")==1) // Если локалка ровна 1, то говорит фразу
        {
        SpeakString("Фраза");
        return;
        }
    if (!GetLocalInt(oPC, "TRANSITION")) // Если Игрок наступил ПЕРВЫЙ раз.
        {
        SpeakString("Фраза"); // говорим фразу
        SetLocalInt(oPC, "TRANSITION", 1); // Отметим что наступил раз
        DelayCommand(fDel, SetLocalInt(oPC, "TRANSITION", 2));
        // Задержим присвоение переменной на сутки. Как расчитан fDel см. выше.
        }
      }
}

Добавлено в [mergetime]1119292497[/mergetime]
lol.gif ЛОЛ...
Lex
LOL.
3 чела кинулись помогать девушке...
гы.. Понеслась.
Фрид
- привязка к дате это не есть гут
ну а в остальном как у меня. smile.gif
Айв
- привязка к секундам не канает, если например отдохнуть 3 раза по 8 часов, то пройдет 100 секунд например и 24 часа игровых.. но выйти никак
- плохо, что отсчет времени идет от первого наступания

короче мой вариант само то. Вот только к нему продолжение:
там, где надо (может в диалоге, может еще где)
Neverwinter Script Source
int nTime = GetTimeHour() + (GetCalendarDay() + GetCalendarMonth()*30)*24;
SetLocalInt(GetObjectByTag("TAG_OF_AREA"),"BLOCK",TRUE));
SetLocalInt(GetObjectByTag("TAG_OF_AREA"),"BLOCK_TIME",nTime));

в ХБ локации
Neverwinter Script Source
void main()
{
if (!GetLocalInt(OBJECT_SELF,"BLOCK")) return;
int nTime = GetTimeHour() + (GetCalendarDay() + GetCalendarMonth()*30)*24;
int nBTime = GetLocalInt(OBJECT_SELF,"BLOCK_TIME");
if ((nTime - 24 > nBTime )&&( nBTime != 0))
{
SetLocalInt(OBJECT_SELF,"BLOCK",FALSE);
SetLocalInt(OBJECT_SELF,"BLOCK_TIME",0);
}
}


не проверял, но примерно так..

Friedrich, сенькс за скобки.
Friedrich
Айв, на онЕнтер инициализировать локалки не есть вери гуд. Я тоже сначала об этом подумал. Вряд ли нам нужно чтобы игрок не мог выйти в течении суток именно с момента первой попытки выйти.
Так что, время блокирования нужно задавать отдельно. И делать что Лекс сказал.
Тока:
if ( (nTime > (nBTime + 24)) && (nBTime != 0) ){
Гы-гы. biggrin.gif Скобки забыл! ХЗ вообще, у кого приоритет больше у "+" или ">".
Equilibrium
Friedrich
Спасибочки.
1)Понятно... почти... как у нас константа возвращается?
2)Эз... понятно... думал будет легче.
3)Санькс.
4)А по подробнее можно? Именно про добовление свойств?
Friedrich
Equilibrium
1) int GetLastSpell();

This is for use in a OnSpellCastAt script, it gets the ID (SPELL_*) of the spell that was cast.

4) Создаешь свойство:
itemproperty ItemPropertyCastSpell(int nSpell, int nNumUses);
Ахтунг! nSpell - это не константа спела (SPELL_*), это константа свойства предмета IP_CONST_CASTSPELL_*
Чтобы преобразовать одну в другую есть функция
IPGetIPConstCastSpellFromSpellID(int) из x2_inc_itemprop. Пользуй ее или пиши свою.

Добавляешь:
void AddItemProperty(
int nDurationType,
itemproperty ipProperty,
object oItem,
float fDuration = 0.0f
);
Внимательно почитай описания этих функций.
Equilibrium
Ой мамочки! Ох... Эээ... Дамссс...
В-вобщем с-спасибо т-тебе б-б-большое...
Чувст-твую н-на б-ближайшую нед-делю у м-меня уже есть з-задачка... unsure.gif
Aiwan
Lex, Friedrich согласен с вами. НО вы не понимаете. Ваш код верный, но слишком сложен для новичка. Мой код воткнул и забыл. Когда она сможет сама разобраться в скриптинге наши советы отпадут. biggrin.gif
Dik Morris
Если кому не трудно выложите скрипт, чтобы хейчман присоединялся к игроку.(или укажите название стандартного)
П.с: не думайте что ленюсь, искал этот скрипт в разговоре с хейчманом, но там их море.
Friedrich
void AddHenchman(
object oMaster,
object oHenchman = OBJECT_SELF
);
Агрессинг
Dik Morris
Советую таки получше изучить и всмотрется в стандартны оруженосческий диалог, если не хочешь, чтобы даже после присоединения он говорил что нибудь вроде: "Здраствуйте незнакомец, не хотите ли вы нанять оружееносца?" Легче всего посмотреть на фразе "Хотите взять Томи/Делана/Лину/Г-г-римгноу" к себе в команду."
ЗЫ
Кстати, скачай демо модуль из файлов и посмотри там скрипты - откроешь для себя много интересного, да и в своем модуле использовать ни кто не запрещает
Sorry за оффтоп, но надо же человеку посоветовать, как лучше, а то обойдется только одним скриптом.
Nick Parker
Меня интересует одна деталька. Как можно изменить внешность у НеПиСей? Почему я не могу сделать это в свойствах НПСа?
defolt
QUOTE (Nick Parker @ Jun 22 2005, 12:05)
Меня интересует одна деталька. Как можно изменить внешность у НеПиСей? Почему я не могу сделать это в свойствах НПСа?


как это? там же закладка appearence есть...
Nick Parker
defolt вот в этой-то закладке все серое, т.е. изменить ничего нельзя. Типа стандартная внешность и изменять незя.
Добавлено в [mergetime]1119431558[/mergetime]
Может потому что русская версия стоит?
defolt
QUOTE (Nick Parker @ Jun 22 2005, 12:11)
defolt вот в этой-то закладке все серое, т.е. изменить ничего нельзя. Типа стандартная внешность и изменять незя.

хых..ты кого менять то собрался? бомжа какого нить из оригинальной компании? скорее всего это у него просто криповская шкура на нем висит- цельная модель, посмотри, что написано на в закладке basic, в поле Appearence type..., что бы можно было менять, там по-моему должно быть написано что-то вроде "Elf, male"....
Nick Parker
QUOTE (defolt @ Jun 22 2005, 12:16)
написано что-то вроде "Elf, male"....

У меня написано "child, male" без толку. Попробовал и "elf, male" такая же фигня. Уже попробовал Английскую версию поставить. Все равно.
defolt
QUOTE (Nick Parker @ Jun 22 2005, 12:45)
У меня написано "child, male"


во!!!! сто процентов цельный скин- этого менять нельза...посмотри тогда типы Elf, Human и т.д...
Friedrich
Выбирай просто, Human, Elf, Dwarf etc.
child, male - это ж видно, цельная модель, как Арибет, например. Арибет ты тоже внешность не поменяешь.
Nick Parker
Сэнкс чуваки biggrin.gif . Я бы наверно еще неделю бы это догонял.
Dik Morris
"Всем известно что дриада, не может жить без своего дерева, уничтожишь дерево умрет, дриада"
Мне нужен скрип, чтоб когда игрок атаковал определенный предмет, у НПЦ, отнимались жизни, в случае уничтожения предмета умирал и НПЦ.Если кому не трудно выложте плиз.
-fenix-
на ОнДеаф дерева поставить это

Neverwinter Script Source
void main()
{
object oNPC = GetObjectByTag("тег дерева");
effect oEf = EffectDeath(TRUE);

ApplyEffectToObject(DURATION_TYPE_INSTANT, oEf,oNPC);
AssignCommand(oNPC, SpeakString("я умераю"));
}


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

Блин чета меня колбасит, какой раз уже поправляю biggrin.gif
Dik Morris
Спасибо брат!
Агрессинг
Dik Morris
Вот скрипт - отнимаются хиты при атаке, как заказывали.
Ставь галочку на дереве напротив ИСПОЛЬЗУЕМЫЙ а на OnDamaged дерева такой скрипт
Neverwinter Script Source
void main()
{
   object oNPC = GetNearestObjectByTag("ТЕГ ДРИАДЫ");

   int nDamageNPC = GetCurrentHitPoints(oNPC) - GetCurrentHitPoints(OBJECT_SELF); // назначаем переменную ПоврежденияНПС, ты можешь назвать ее как хочешь : nDamageDRIADA например

   if (nDamageNPC > 0) // если повреждения больше нуля, а то зачем ноль нужен?
   {
       ApplyEffectToObject(DURATION_TYPE_INSTANT,[color=red]EffectDamage(nDamageNPC),[/color]oNPC); // назначаем (выделенно красным, назначаем его как переменную, которую мы обозначили раньше) и применяем эффект повреждений,        
// если хочешь, чтобы после атаки на дерево НПС становился враждебным, добавь в конец скрипта это:
       SetIsTemporaryEnemy(GetLastAttacker(),oNPC);
 
 }
}

SERGO
Тут собрался делать модуль
1) как после диалога включить у НПС анимацию смерти?
2) В проклятье Левора, когда в начале дядька умирает, появляется призрак, а потом прыгает вверх и исчезает. Как показать это в скриптах?
3)Тут было такое:
ВОПРОС
Как сделать чтобы при заходе игрока на триггер 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); // Запомним что это ужо было
}



Какой тригер поставить, чтобы игрок случайно на него зашел, не видя сам тригер?
Заранее благодарен
-fenix-
SERGO для таких вопросов есть специальные темы в этом разделе: скрипты и вопросы новичков и зачем создавать две темы, отредактируй старое сообщение если нужно.

QUOTE
1) как после диалога включить у НПС анимацию смерти?

В слот совершенные действия, на любую строчку диалога
Neverwinter Script Source
void main()
{
object oNPC = GetObjectByTag("ТАГ НПС");
effect oEf = EffectDeath(TRUE);

ApplyEffectToObject(DURATION_TYPE_INSTANT, oEf,oNPC);
}

QUOTE
2) В проклятье Левора, когда в начале дядька умирает, появляется призрак, а потом прыгает вверх и исчезает. Как показать это в скриптах?

Я в проклятье не играл sad.gif, опиши по лучше или посмотри в ПЛ как это сделанно.

QUOTE
Какой тригер поставить, чтобы игрок случайно на него зашел, не видя сам тригер?

Тригер невидем, выделяются только тригеры с переходом в другую область.
Бери любой тригер и в OnEnter ставь этот скрипт.
Lex
SERGO, пока устное предупреждение (за создание темы без предварительного ознакомления с правилами раздела).
В след. раз будет раельное.
SERGO
Я ставлю триггер генераций, но когда захажу на тригер, почемуто срабатывает ловушка и я побит этой проблемой black eye.gif crazy.gif
Агрессинг
SERGO
Какая ловушка? Может ты эффект смерти с ловушкой путаешь? Эффект смерти это когда герой умирает, а анимация смерти - когда падает и заданное время валяется на земле. Может тебе нужна именно анимация?
Buldog
А зачем ты ставишь тригер ловушки? Тебе нужен тригер типа Generic.
SERGO
Вот че! Я ставля тригер генерации. Написано родовой. Настраиваю скрипт swoon.gif (см. выше) Нажимаю ОК. Но когда опять захожу в свойства тригера он пишет не родовой а Ловушка!
Агрессинг
SERGO
Сделай триггер Новый общий и на onEnter ставь скрипт. Проблем просто быть не может.
SERGO
Тут еще пара вопросиков:
Как расставлять waypoint на карте?
Как прописать скрипт, чтобы НПС все время ходил по двум, трем... вайпоинтам без остановки.
Как прописать скрипт, чтобы НПС ходил по 2, 3 вайпоинтам например туда обратно 2 раза.
И еще, как прописать следующие. Охранник стоит на посту весь день, как тока начинается ночь, из двери выходит другой охранник, говорит "Иди! Моя смена!". Первый охранник уходит, а второй встает на его место и всю ночь там тарчит, потом они опять меняются, и так до бесконечности.
Как вставлять НПС анимацию, например просто ходит НПС (!без разговора!) и пьет!?



Заранее благодарен!!!
Archangel
QUOTE
Как расставлять waypoint на карте?

Что ты подразумеваешь под Вэйпоинтами? Точки маршрута, столы, стулья и т.д.?
Если точки маршрута, то в редакторе жми ВОЛШЕБНИЦЫ=>МАСТЕР ПУТЕЙ.

QUOTE
Как прописать скрипт, чтобы НПС все время ходил по двум, трем... вайпоинтам без остановки.

Вставляешь в OnHearBeat NPC такой скрипт:
Neverwinter Script Source
void main()
{
object oWP1= GetWaypointByTag("ТЭГ_ПЕРВОГО_ВЭЙПОИНТА");
object oWP2= GetWaypointByTag("ТЭГ_ВТОРОГО_ВЭЙПОИНТА");
ActionForceMoveToObject(oWP1);
ActionForceMoveToObject(oWP2);
}

QUOTE
Как прописать скрипт, чтобы НПС ходил по 2, 3 вайпоинтам например туда обратно 2 раза.

Смотри скрипт выше.
QUOTE
Как вставлять НПС анимацию, например просто ходит НПС (!без разговора!) и пьет!?

В OnHearBeat (или OnSpawn) NPC вставляей этот скрипт:
Neverwinter Script Source
void main
{
ActionPlayAnimation(ANIMATION_FIREFORGET_DRINK);
}

QUOTE
И еще, как прописать следующие. Охранник стоит на посту весь день, как тока начинается ночь, из двери выходит другой охранник, говорит "Иди! Моя смена!". Первый охранник уходит, а второй встает на его место и всю ночь там тарчит, потом они опять меняются, и так до бесконечности.

Нужен вот такой скрипт:
Neverwinter Script Source
void main()
{
object oNPC1 = GetObjectByTag("ТЭГ_ПЕРВОГО_ОХРАННИКА");
object oNPC2 = GetObjectByTag("ТЭГ_ВТОРОГО_ОХРАННИКА");
object oWP1= GetWaypointByTag("ТЭГ_ВЭЙПОИНТА_НА_УЛИЦЕ");
object oWP2= GetWaypointByTag("ТЭГ_ВЭЙПОИНТА_В_ЗДАНИИ(которому принадлежит дверь)");
object oDoor = GetObjectByTag("ТЭГ_ДВЕРИ");
if (GetIsDay() && GetLocalInt(oNPC1, "Day") != 1)
{
DelayCommand(1.0, AssignCommand(oNPC1, ActionForceMoveToObject(oDoor,FALSE, 1.0, 7.0)));
DelayCommand(5.0, AssignCommand(oNPC1, ActionJumpToObject(oWP2)));
DelayCommand(9.0, AssignCommand(oNPC1, ActionForceMoveToObject(oNPC2,FALSE, 1.0, 7.0)));
DelayCommand(1.0, AssignCommand(oNPC2, ActionForceMoveToObject(oDoor,FALSE, 1.0, 7.0)));
DelayCommand(5.0, AssignCommand(oNPC2, ActionJumpToObject(oWP1)));
SetLocalInt(oNPC1, "Day", 1);
SetLocalInt(oNPC1, "Night", 0);
return;
}
if (GetIsNight()&& GetLocalInt(oNPC1, "Night") != 1)
{
DelayCommand(1.0, AssignCommand(oNPC2, ActionForceMoveToObject(oDoor,FALSE, 1.0, 7.0)));
DelayCommand(5.0, AssignCommand(oNPC2, ActionJumpToObject(oWP2)));
DelayCommand(9.0, AssignCommand(oNPC2, ActionForceMoveToObject(oNPC1,FALSE, 1.0, 7.0)));
DelayCommand(11.0, AssignCommand(oNPC2, SpeakString("Иди отдыхай. Теперь моя смена.")));
DelayCommand(13.0, AssignCommand(oNPC1, ActionForceMoveToObject(oDoor,FALSE, 1.0, 7.0)));
DelayCommand(17.0, AssignCommand(oNPC1, ActionJumpToObject(oWP1)));
SetLocalInt(oNPC1, "Day", 0);
SetLocalInt(oNPC1, "Night", 1);
return;
}
}

Это очень упрощенная версия скрипта. Может найдутся люди, которые напишут его подробнее, а у меня сейчас времени нет. wink.gif
З.Ы.:
Также не исключаю наличие ошибок в скриптах. Тулсета под рукой нет.
Aiwan
SERGO не мучайся сам и не мучай нас переводом тулсета. Там такая чушь... Ставь английский и делай, а играть можешь на русском.
Tiger Greyhawk
QUOTE (Archangel @ Jun 24 2005, 22:23)
.
QUOTE
Как прописать скрипт, чтобы НПС все время ходил по двум, трем... вайпоинтам без остановки.
Вставляешь в OnHearBeat NPC такой скрипт:
Neverwinter Script Source
void main()
{
object oWP1= GetWaypointByTag("ТЭГ_ПЕРВОГО_ВЭЙПОИНТА");
object oWP2= GetWaypointByTag("ТЭГ_ВТОРОГО_ВЭЙПОИНТА");
ActionForceMoveToObject(oWP1);
ActionForceMoveToObject(oWP2);
}

1. Таким образом очень быстро забьется стек акций патрулируещего.
2. Патрулирующий ни на что не будет реагировать. Даже если его будут убивать... crazy.gif

Есть функция WalkWayPoints. Через нее и надо делать, имо. Она требует #include "NW_I0_GENERIC"
Как ею пользоваться: просто создать вейпы с тагами "WP_" + таг патрулируещего + "_0#". Например: "WP_NPC_01", "WP_NPC_02" и т.д.
А когда надо заставить непися начать ходить по ним: WalkWayPoints(FALSE, 1.0); (в OnSpawn стандартных неписей это, вроде, уже даже раскоментировано) FALSE - ходить, TRUE - бегать. 1.0 - пауза в секундах между следованием к след. вейпу.
SERGO
Спасибы, чбы я без вас делал!
Добавлено в [mergetime]1119674528[/mergetime]
А как сделать, чтобы вот эта анимация питья делалась очень редко! А то она уж слишком частая!
Добавлено в [mergetime]1119674632[/mergetime]
и вот еще
Tiger Greyhawk
Я делал по твоей инструкции, и получилось так, что НеПиСь при попытке разговора поворачивается, есть диалог, а дальше он по точкам не ходит. Как сделать чтобы он и далльше ходил? (после диалога)
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.
Invision Power Board © 2001-2025 Invision Power Services, Inc.