Помощь - Поиск - Пользователи - Календарь
Полная версия: Скрипты
Город Мастеров > РЕДАКТОРЫ > 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
Azzerrotter
"У меня есть несколько вопросов относительно скриптов сам редактор я знаю оч хорошо а вот в скриптах нуб подскижите мне пару скриптов для:
1) Как сделать чтоб люди вокруг говорили когда ты проходиш мимо или кто нибудь рубил дрова стрелял из лука бил тренеровочное чучело?
2) Как сделать чтобы как только ты оказался на определенном участке земли к тебе подошел нпс и начал первым диалог которы нельзя прервать?
3) Как сделать чтобы после твоего диалога с нпс он ушел бы из данной локи в какую нибудь другую локу?
4) И еще если можно опишите мне как сделать компаньена чтобы он следовал за тобой или вернулся назад в место его найма?

Приведите скрипты и куда их надо втавлять описывать необязательно

и последнее самое главное как сделать скрипт смерти нпс чтобы при смерти у него отнимались деньги опыт и он переносился в определенную локу или просто умирал бы без респава?

Заранее благодарю!"
farah
2 Azzerrotter
http://www.city-of-masters.ru/forums/index...c=1612&st=0
Azzerrotter
спс за ссылку да только там нету того что я искал про переход нпс тока есть скрипт да и то не совсем тот что нужен мне надо чтоб нпс ушел с 1 локи на другую а тут нпс просто переходит к точке маршрута которую указываеш в скрипте и исчезает...
Aiwan
Ну так убери в скрипте строку дестроя и добавь команду для ухода в другую локу.
Neverwinter Script
//:://////////////////////////////////////////////
//:: ActionTaken  am_at_npcwp_exit
//:: Copyright © 2005 WRG!
//:://////////////////////////////////////////////
/*
  NPC уходит на персональный вейпоинт, таг которого
  равен AM_WP_ESC_ плюс таг НПС и дестроится на ней.
  Ставим на диалог с НПС, устанавливаем в локации
  вейпоинт  AM_WP_ESC_[ТАГ_НПС]. Если надо что
  бы НПС побежал к точке, то присвоим на поинт
  локалку "RUN".

*/

//:://///////////////////////////////////////////
//:: Created By: Aiwan
//:: Created On: 20.09.2005
//:://///////////////////////////////////////////
void main()
{
    object oPC = GetPCSpeaker(); // Игрок
    object oNpc = OBJECT_SELF; // НПС с которым идет диалог
    string sTag = GetTag(oNpc); // Таг НПС
    object oExit = GetNearestObjectByTag("AM_WP_ESC_"+sTag); // Вейпоинт
    int iRun = FALSE; // Параметр определяющий скорость НПС

    // Если в локации нет вейпоинта, то НПС скажет что некуда бежать
        if (!GetIsObjectValid(oExit)||(GetArea(oExit)!=GetAre
a(oNpc)))
        {
          AssignCommand(oNpc, SpeakString("Нет вейпоинта, или он не в этой этой локации!"));
          return;
        }
    if(GetLocalInt(oExit, "RUN"))
      {
      iRun = TRUE; // Если присвоить локалку "RUN" на поинт, то он побежит.
      }
    AssignCommand(oNpc, ClearAllActions()); // Почистим стек команд
    AssignCommand(oNpc, ActionForceMoveToObject(oExit, iRun, 1.0, 30.0));
    AssignCommand(oNpc, ActionJumpToObject(GetObjectByTag("ТАГ_ТВОЕГО_ПОИНТА_В_ДРУГОЙ_ЛОКАЦИИ")));
    DelayCommand(0.5, SetCommandable(FALSE, oNpc)); // Что бы случайно не забыл
}
Azzerrotter
Я стер строчку



// Если в локации нет вейпоинта, то НПС скажет что некуда бежать
if (!GetIsObjectValid(oExit)||(GetArea(oExit)!=GetAre
a(oNpc)))
{
AssignCommand(oNpc, SpeakString("Нет вейпоинта, или он не в этой этой локации!"));
return;
}


теперь нпс переходит в другую локу все норм только нпс сразу после диалога исчезает а мне бы так чтобы он сначало подошел к двери и потом ток исчез

(сорь если чтот нетак делаю скрипты сложная для меня вещь)
gennady
Вот в этом скрипте учтено присутствие двери рядом с точкой ухода...
Neverwinter Script
//::///////////////////////////////////////
//:: УНИВЕРСАЛЬНОЕ ПЕРЕМЕЩЕНИЕ СУЩЕСТВА
//:: Created By: Gennady
//:: FileName: p_object
//:://////////////////////////////////////
void main()
{
object oPC = GetFirstPC();
object oSelf = OBJECT_SELF;
object oPoint1 = GetObjectByTag("TROP_"+ GetTag(oSelf));
object oPoint2 = GetNearestObjectByTag("EXIT_"+ GetTag(oSelf));
object oDoor = GetNearestObject(OBJECT_TYPE_DOOR, oPoint2);
location LOC = GetLocation(oSelf);
effect eJump = EffectVisualEffect(VFX_FNF_SUMMON_MONSTER_3);
int INTEL = GetAbilityScore(oSelf, ABILITY_INTELLIGENCE);

//***** БЛОКИРОВКА ГЕРОЯ  ******
AssignCommand(oPC, ClearAllActions());
AssignCommand(oPC, ActionWait(12.0));
AssignCommand(oPC, ActionDoCommand(SetCommandable(TRUE, oPC))); // разблокировать
DelayCommand(0.1, SetCommandable(FALSE, oPC)); // заблокировать
//*******************************
  AssignCommand(oSelf, ClearAllActions());
  DelayCommand(0.1, SetCommandable(FALSE, oSelf)); // заблокировать
  DelayCommand(12.0, SetCommandable(TRUE, oSelf)); // разблокировать
  DelayCommand(12.0, SetCommandable(TRUE, oPC)); // разблокировать

  if (GetIsObjectValid(oPoint1))
  {
    if(INTEL != 4)
    AssignCommand(oSelf, SpeakString("До встречи!"));
    if (GetIsObjectValid(oPoint2))
    {
    AssignCommand(oSelf, ActionForceMoveToObject(oPoint2, FALSE, 0.0, 10.0));
    if(GetDistanceBetween(oDoor, oPoint2)< 3.0 && GetLocked(oDoor)==FALSE)
      {
      AssignCommand(oSelf, ActionOpenDoor(oDoor));
      AssignCommand(oSelf, ActionWait(2.0));
      }
    AssignCommand(oSelf, ActionDoCommand(SetCommandable(TRUE, oPC))); // разблокировать
    AssignCommand(oSelf, ActionJumpToObject(oPoint1));
    return;
    }
    ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eJump, LOC);
    DelayCommand(3.0, SetCommandable(TRUE, oPC)); // разблокировать
    AssignCommand(oSelf, ActionWait(3.0));
    AssignCommand(oSelf, ActionDoCommand(SetCommandable(TRUE, oSelf)));
    AssignCommand(oSelf, ActionJumpToObject(oPoint1));
    return;
  }
  else  // Если нет точки, то удалить существо
    {
    if(INTEL != 4)
    SpeakString("Прощай!");
    AssignCommand(oSelf, SetIsDestroyable(TRUE, TRUE, TRUE));
    if (GetIsObjectValid(oPoint2))
    {
    AssignCommand(oSelf, ActionForceMoveToObject(oPoint2, FALSE, 0.0, 10.0));
    if(GetDistanceBetween(oDoor, oPoint2)< 3.0 && GetLocked(oDoor)==FALSE)
      {
      AssignCommand(oSelf, ActionOpenDoor(oDoor));
      AssignCommand(oSelf, ActionWait(2.0));
      }
    AssignCommand(oSelf, ActionDoCommand(SetCommandable(TRUE, oPC))); // разблокировать
    AssignCommand(oSelf, ActionDoCommand(DestroyObject(oSelf)));
    return;
    }
    DelayCommand(3.0, SetCommandable(TRUE, oPC)); // разблокировать
    DestroyObject(oSelf, 3.2);
    ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eJump, LOC);
    }
}
/* Если есть точка "TROP_"+тэг ПС, то идет прыжок  к этой точке с эффектом.
  Если при этом есть точка "EXIT_"+тэг ПС, то ПС уходит к этой точке
  и прыгает к точке "TROP_"+тэг ПС без эффекта.
  Если нет точки "TROP_"+тэг ПС, то ПС удаляется с эффектом.
  Если при этом есть точка "EXIT_"+тэг ПС, то ПС идет к этой точке
  и удаляется без эффекта
  Если интеллект равен 4, то фраз не будет.  */
Azzerrotter
Хреновый с меня скриптограф я вроде 2 точки маршрута с нужными тегами поставил скрипт нпс дал как тока скрипт срабатывает нпс кастует на себя заклинание и исчезает нигде его нет потом...
wacko.gif
gennady
Цитата(Azzerrotter @ Dec 12 2009, 19:00) *
Хреновый с меня скриптограф я вроде 2 точки маршрута с нужными тегами поставил скрипт нпс дал как тока скрипт срабатывает нпс кастует на себя заклинание и исчезает нигде его нет потом...

Если НПС исчезает, т.е. дестроится, то будет стринг "Прощай!". Значит нужных точек для перемещения не задано... Не понял в чем проблема с написанием нужных тегов для точек?

Например тег НПС "Azzerrotter" значит тег точки, где появится НПС будет "TROP_Azzerrotter"
Если нужно чтобы НПС пошел к определенной точке, а потом прыгнул на конечную, то зададим еще точку выхода "EXIT_Azzerrotter", которая должна быть в этой же локе. Если точка стоит рядом с дверью. то НПС подойдет к двери, откроет и прыгнет на конечную точку, сказав при этом: "До встречи!"
Aiwan
gennady, просто человек думал скрипт это просто. Azzerrotter, надо вникать и пытаться думать. Без этого никакой мега крутой скрипт тебе не поможет.
Azzerrotter
ну вот я ставлю нищего даю ему тег N ставлю точку маршрута на эту же локу где и нищий даю ей тег EXIT потом переключаюсь на другую локу ставлю там точку маршрута с тегом TROP делаю скрипт который выглядит так



Neverwinter Script
//::///////////////////////////////////////
//:: УНИВЕРСАЛЬНОЕ ПЕРЕМЕЩЕНИЕ СУЩЕСТВА
//:: Created By: Gennady
//:: FileName: p_object
//:://////////////////////////////////////
void main()
{
object oPC = GetFirstPC();
object oSelf = OBJECT_SELF;
object oPoint1 = GetObjectByTag("TROP_N"+ GetTag(oSelf));
object oPoint2 = GetNearestObjectByTag("EXIT_N"+ GetTag(oSelf));
object oDoor = GetNearestObject(OBJECT_TYPE_DOOR, oPoint2);
location LOC = GetLocation(oSelf);
effect eJump = EffectVisualEffect(VFX_FNF_SUMMON_MONSTER_3);
int INTEL = GetAbilityScore(oSelf, ABILITY_INTELLIGENCE);

//***** БЛОКИРОВКА ГЕРОЯ  ******
AssignCommand(oPC, ClearAllActions());
AssignCommand(oPC, ActionWait(12.0));
AssignCommand(oPC, ActionDoCommand(SetCommandable(TRUE, oPC))); // разблокировать
DelayCommand(0.1, SetCommandable(FALSE, oPC)); // заблокировать
//*******************************
  AssignCommand(oSelf, ClearAllActions());
  DelayCommand(0.1, SetCommandable(FALSE, oSelf)); // заблокировать
  DelayCommand(12.0, SetCommandable(TRUE, oSelf)); // разблокировать
  DelayCommand(12.0, SetCommandable(TRUE, oPC)); // разблокировать

  if (GetIsObjectValid(oPoint1))
  {
    if(INTEL != 4)
    AssignCommand(oSelf, SpeakString("До встречи!"));
    if (GetIsObjectValid(oPoint2))
    {
    AssignCommand(oSelf, ActionForceMoveToObject(oPoint2, FALSE, 0.0, 10.0));
    if(GetDistanceBetween(oDoor, oPoint2)< 3.0 && GetLocked(oDoor)==FALSE)
      {
      AssignCommand(oSelf, ActionOpenDoor(oDoor));
      AssignCommand(oSelf, ActionWait(2.0));
      }
    AssignCommand(oSelf, ActionDoCommand(SetCommandable(TRUE, oPC))); // разблокировать
    AssignCommand(oSelf, ActionJumpToObject(oPoint1));
    return;
    }
    ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eJump, LOC);
    DelayCommand(3.0, SetCommandable(TRUE, oPC)); // разблокировать
    AssignCommand(oSelf, ActionWait(3.0));
    AssignCommand(oSelf, ActionDoCommand(SetCommandable(TRUE, oSelf)));
    AssignCommand(oSelf, ActionJumpToObject(oPoint1));
    return;
  }
  else  // Если нет точки, то удалить существо
    {
    if(INTEL != 4)
    SpeakString("Прощай!");
    AssignCommand(oSelf, SetIsDestroyable(TRUE, TRUE, TRUE));
    if (GetIsObjectValid(oPoint2))
    {
    AssignCommand(oSelf, ActionForceMoveToObject(oPoint2, FALSE, 0.0, 10.0));
    if(GetDistanceBetween(oDoor, oPoint2)< 3.0 && GetLocked(oDoor)==FALSE)
      {
      AssignCommand(oSelf, ActionOpenDoor(oDoor));
      AssignCommand(oSelf, ActionWait(2.0));
      }
    AssignCommand(oSelf, ActionDoCommand(SetCommandable(TRUE, oPC))); // разблокировать
    AssignCommand(oSelf, ActionDoCommand(DestroyObject(oSelf)));
    return;
    }
    DelayCommand(3.0, SetCommandable(TRUE, oPC)); // разблокировать
    DestroyObject(oSelf, 3.2);
    ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eJump, LOC);
    }
}


делаю нищему диалог по завершению которого должен сроботать этот скрипт нпс говорит говорит прощай и исчезает...
вроде все правельно делал... scratch_one-s_head.gif
gennady
Если говорит: "Прощай!", то точек нет или они не правильно пробиты... Я думаю ты забыл пробить нижний дефис между приставкой и тегом.

Если тег N, то теги точек должны быть:
EXIT_N
TROP_N
Звиняюсь... Тока доглядел чего ты в скрипте напортачил... Это универсальный скрипт и нечего в него еще и теги НПС пробивать...
Neverwinter Script
object oPoint1 = GetObjectByTag("TROP_N"+ GetTag(oSelf));
object oPoint2 = GetNearestObjectByTag("EXIT_N"+ GetTag(oSelf));

Тут в моем скрипте написано:
Neverwinter Script
object oPoint1 = GetObjectByTag("TROP_"+ GetTag(oSelf));
object oPoint2 = GetNearestObjectByTag("EXIT_"+ GetTag(oSelf));

Это значит что идет привязка точки к тегу НПСа (+ GetTag(oSelf)-это тег НПСа), а теги точек для твоего НПС с тегом N как раз и будут
EXIT_N
TROP_N
попробуй догодаться какие теги нужны для твоего скрипта...
Цитата(Aiwan @ Dec 13 2009, 16:35) *
Azzerrotter, надо вникать и пытаться думать. Без этого никакой мега крутой скрипт тебе не поможет.

+1 yes3.gif
Azzerrotter
спс все по описанию вправил все запахало!
WARLORD
Люди, помогиге пожалуйста! Я в этих скриптах практически ничего не понимаю, да они мне на самом деле то и не нужны. НО вот какой вопрос. Я начал переводить мод НВН "Кормические ночи". И тут стал такой вопрос, а где находятся реплики НПС'шников, которые появляются у них над головами во время скриптовых сцен? Залажу в НПС, далее в скрипты. Проверил все: ну Conversation, Perception и т.д. но ни в одном из них не нашел команды типа SpeakString или ActionSpeakString. А функция FloatingTextStringOnCreature вообще пассивна и никакого текста не отображает. Может я что-то не догоняю. И не там ищу? Помогите пожалуйста разобраться. Укажите, где этот текст должен быть точно: скрипт и функцию, если он в ней. И еще один вопрос, где должен находится текст в панели отчета? Ну типа "Вы вышли из тюрьмы и в глаза вам ударил яркий солнечный свет" - текст. Там должны по-моему быть такие команды FloatingTextStringOnCreature("Текст."); SendMessageToPC(oPC, "текст"). Очень прошу помогите плиз, а то буит очень обидно, когда ВСЕ диалоги будут на русском, а эти немногочисленные фразы в скриптовых сценах так и останутся непереведенными. Заранее спасибо
Aiwan
WARLORD, в скриптах или в стрингах.

Стринги - строки с описанием могут быть где угодно, хоть на самом НПС или триггере.
WARLORD
Цитата(Aiwan @ Dec 28 2009, 12:14) *
WARLORD, в скриптах или в стрингах.

Стринги - строки с описанием могут быть где угодно, хоть на самом НПС или триггере.


Я уже нашел. Там скрипты называются cutscene 1,2,3 и т.д. Но вот еше один ламерский вопрос: как писать в скрипте на русском? а не абракадаброй

опять сам разобрался rolleyes.gif надо было шрифт поменять
Ogneslav
Скажите, можно ли добавалять фиты персонажу скриптово(на подобии нвна 2, тоесть социальные там всякие(ну вообщем для скрипта всеравног какие, главное можно ли?))

И второй вопрос можно ли добавить фит на оружие через скрипт, из тех что нет в палитре( и врядли они там будут, т.к. их я сделал, а добавлять в палитру нехотелось бы prankster2.gif )
Ilerien
Вешать на шкуру. Или через NWNX, но это вариант не для сингла.
Norfolk
Помогите со скриптом пожалуйста. нужно что бы сундук(и др. объекты с инвентарем) пропадали когда из них забирают содержимое, и появлялись заново через 10 минут (вместе с содержимым).

Я поставил на OnClosed скрипт, ломающий объект, а вот восстановить никак не могу... Да, и если можно лучше что бы просто исчезал, а не ломался, и не когда закрывают, а когда забирают содержимое (ведь можно закрыть и не взять, а объект все равно сломается).
Ilerien
Ставить на onDisturbed.
Neverwinter Script
#include "nw_i0_2q4luskan"

void main()
{
    object oChest = OBJECT_SELF;
    location lLoc = GetLocation(oChest);
    string sResRef = GetResRef(oChest);

    if(GetInventoryDisturbType() == INVENTORY_DISTURB_TYPE_REMOVED && !GetIsObjectValid(GetFirstItemInInventory(oChest))
)
    {
        AssignCommand(GetModule(), DelayCommand(600.0f, CreateObjectVoid(OBJECT_TYPE_PLACEABLE, sResRef, lLoc)));
        DestroyObject(oChest);
    }
}
Можно добавить переноску имени/тега/флажков и т. д. Если инвентарь переменный, то его тоже можно сохранять (а лучше генерить на открытие плейса).
Norfolk
о, спасибо большое thank_you.gif


Хм..Не знает команды CreateObjectVoid, а чем она отличается от просто createobject?

Добавлено: А, все, сорри, это я кривой, не скопировал первую строку, думал это комментарий pardon.gif
Ilerien
Что значит "не знает"? Эта функция лежит в стандартной библе nw_i0_2q4luskan. Отличается от простого создания обжекта тем, что возвращает не обжект, а войд - для того, чтобы можно было передать её в DelayCommand().
Lex
Цитата(Ilerien @ Feb 5 2010, 14:19) *
для того, чтобы можно было передать её в DelayCommand().

или загонять в стек через ActionDoCommand
Batkom
Хотел научить стражников ругаться и подбегать к игроку, если у него в руках находится оружие.
на onPerseption поставил такой кусок:
Neverwinter Script
object oPC = GetLastPerceived();
    if (GetIsPC(oPC)&&GetLastPerceptionSeen())
    {
        object oWeapon = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oPC);
        if (oWeapon != OBJECT_INVALID)
        {
        ClearAllActions();
        AssignCommand(OBJECT_SELF, ActionStartConversation(oPC, "noweapon"));
        SendMessageToPC(oPC, "Я вижу тебя!");
        }
    }

"Ай си ю" в лог говорит, а вот диалог не стартует.
Нипесь привязан к вейпоинтам, быть может в них дело?
Lorendroll
Batkom, попробуй заставь его сначала подойти к игроку
Virake
возможно ActionDoCommand?
Mingun
1. Чета искал, искал и не нашел, можно ли такую фичу сделать, чтоб NPC мог пользоваться определенным предметом (точнее даже свойством предмета - заклинанием с него, уникальные способности там всякие). Скриптово можно только найти талант у NPC в определенной категории (атака, защита, лечение, зелье; на всех, на себя, на кого-то одного), и заставить его использовать, но при этом не контролируется, что именно будет использовать NPC. Можно ли это как то явно указывать. Я чувствую, стандартными средствами этого не сделать, но может в nwnx реализовано?
Мне в частности нужно, чтобы после смерти PC его хенч пытался его воскресить жезлом или свитком. Заклинанием можно заставить, но ждать до 5 круга заклятий для хенча-клерика совсем не вариант, а у остальных даже и этого нет.

2. Можно ли заставить NPC-клерика читать исцеляющие заклинания, если он их не запоминал? Кажись для них самопроизвольное чтение не работает и GetHasSpell() вернет 0... unsure.gif
Mingun
Да, и еще. Кто объяснит мне, почему народ так активно юзает CopyObject/DeleteObject для предметов, а не TakeFrom...|GiveTo... ? Переместить ведь должно быть быстрее и идеологически более правильно, чем копирование и последующее удаление? snoozer_17.gif scratch_one-s_head.gif
GoOfs
Neverwinter Script
void main()
{
object oSelf = OBJECT_SELF;
object oWp01 = GetNearestObjectByTag("WP1_"+ GetTag(OBJECT_SELF))
// какая проблема здесь? он нехочет компилить... пишет:
// ОШИБКА: ПОТЕРЯ АНАЛИЗАТОРА ПЕРЕМЕННОЙ
object oWp05 = GetNearestObjectByTag("WP5_"+ GetTag(OBJECT_SELF))
object oWpT01 = GetNearestObjectByTag("WP1_Tavern"+ GetTag(OBJECT_SELF))
//суть этого всего: обозначить теги точек для определенного нпс.
//Он будет ходить просто по 5ти точкам(гулять), и будет заходить в таверну.
object oWpT05 = GetNearestObjectByTag("WP5_Tavern"+ GetTag(OBJECT_SELF))
object oWpH01 = GetNearestObjectByTag("WP1_HOME"+ GetTag(OBJECT_SELF))
//5 точек, ведушие нпс к дому
object oWpH05 = GetNearestObjectByTag("WP5_HOME"+ GetTag(OBJECT_SELF))
if(GetArea(GetFirstPC()) != GetArea(OBJECT_SELF)) return;
    int T = GetTimeHour();
    if (T<7 && T>15)
    AssignCommand(oSelf, ActionForceMoveToObject(oWp01, TRUE, 4.0));
    AssignCommand(oSelf, ActionWait(2.0));
    AssignCommand(oSelf, ActionForceMoveToObject(oWp05, TRUE, 4.0));
    AssignCommand(oSelf, ActionWait(2.0));

    //  Как сделать цикл? необходимо, чтобы эти действия  //
    //производились циклически, пока идет время от 7 до 15ти//
    if (T<15 && T>21)
    AssignCommand(oSelf, ActionForceMoveToObject(oWpT01, TRUE, 4.0));
    AssignCommand(oSelf, ActionWait(2.0));
    AssignCommand(oSelf, ActionForceMoveToObject(oWpT05, TRUE, 4.0));
    AssignCommand(oSelf, ActionWait(2.0));
    ExecuteScript(sit_on_ch_tav) //когда нпс подойдет, он должен быдет сесть на стул.
    if(T<21 && T>7)
    AssignCommand(oSelf, ActionForceMoveToObject(oWpH01, TRUE, 4.0));
    AssignCommand(oSelf, ActionWait(2.0));
    AssignCommand(oSelf, ActionForceMoveToObject(oWpH05, TRUE, 4.0));
    AssignCommand(oSelf, ActionWait(2.0));
    ExecuteScript(1sleep)//когда настанет ночь,  нпс пойдет домой и ляжет спать

я немного ужал этот скрипт, убрал повторяюшиеся действия, типа: object oWp01 = GetNearestObjectByTag("WP1_"+ GetTag(OBJECT_SELF))
Мне нужно чтобы этот скрипт работал, и оживил немножко моих нпс-селян. а то они ходят как зомби, или тупо стоят... както нетак=)
PS
Все вопросы внесены в сам скрипт
gennady
Ошибку выдает т.к. нет точки с запятой после сроки кода. А вот сам скрипт врятли тебе кто напишет... Могу порекомендовать тебе мой мануал по созданию скриптов НПС стоящих в ХБ слоте.
http://remmgen.narod.ru/tscript3.html#SC_HB
Ilerien
Цитата
1. Чета искал, искал и не нашел, можно ли такую фичу сделать, чтоб NPC мог пользоваться определенным предметом (точнее даже свойством предмета - заклинанием с него, уникальные способности там всякие). Скриптово можно только найти талант у NPC в определенной категории (атака, защита, лечение, зелье; на всех, на себя, на кого-то одного), и заставить его использовать, но при этом не контролируется, что именно будет использовать NPC. Можно ли это как то явно указывать. Я чувствую, стандартными средствами этого не сделать, но может в nwnx реализовано?
Да, в NWNX реализовано, плагин Funcs.
Цитата
2. Можно ли заставить NPC-клерика читать исцеляющие заклинания, если он их не запоминал? Кажись для них самопроизвольное чтение не работает и GetHasSpell() вернет 0...
Кусок кода из джасперовсого АИ:
Neverwinter Script
int AI_ActionCastSpontaeousSpell(int iSpellID, int nTalent, object oTarget)
{
    if(nTalent > i0 && GetHasSpell(iSpellID) && GetObjectSeen(oTarget))
    {
        // Note: Not stored or used in time stop
        // 8: "[DCR: Casting] Workaround for Spontaeous [SpellID] " + IntToString(iSpellID) + " [Target] " + GetName(oTarget)
        DebugActionSpeakByInt(8, oTarget, iSpellID);
        // Equip the best shield we have
        AI_EquipBestShield();
        // Decrement the spell being cast by one as we cheat cast it
        DecrementRemainingSpellUses(OBJECT_SELF, iSpellID);
        // Cheat cast, it'll remove inflict wounds if it is an inflict spell anyway.
        ActionCastSpellAtObject(iSpellID, oTarget, METAMAGIC_NONE, TRUE);
        return TRUE;
    }
    return FALSE;
}
Насколько я понимаю, GetHasSpell() прекрасно работает, единственный момент - заставить непися кастить спелл, даже если у него его нет smile.gif
Mingun
Цитата(Ilerien @ Mar 21 2010, 16:26) *
Насколько я понимаю, GetHasSpell() прекрасно работает, единственный момент - заставить непися кастить спелл, даже если у него его нет smile.gif

Это то я понимаю, что работает функция как положено для заклинаний. Мне непонятно, почему у нее нет отдельного возвращаемого значения для заклинаний исцеления клериков, и приходится вручную реализовывать им спонтанное чтение. Да. Воистину неисповедимы пути биотварей... biggrin.gif А как заставить NPC скастовать то, чего у него нет, я знаю prankster2.gif
Цитата(Ilerien @ Mar 21 2010, 16:26) *
Да, в NWNX реализовано, плагин Funcs.

Можно чуток поконкретней? Что то я там такого не видел... может плохо смотрел? В смысле какая функция?


Уже нашел. что то у них на сайте как то плохо описаны возможности, а в скрипте все есть smile.gif

Хотя нет, радость преждевременна. Где сам то плагин funcs??? На nwnx.org его нет. Есть только Functions, а это, как я понимаю. не одно и тоже bb.gif
Ilerien
Цитата
Где сам то плагин funcs??? На nwnx.org его нет. Есть только Functions, а это, как я понимаю. не одно и тоже
Funcs на SVN virusman'a
Mingun
Спасибо! Жалко, под винду нету smile.gif Придется поколдовать biggrin.gif
Ilerien
Ну, убунта в виртуалке smile.gif
Mingun
Цитата(Ilerien @ Mar 22 2010, 15:36) *
Ну, убунта в виртуалке smile.gif

Не-е-е, так не пойдет. Я ж не могу заставить игрока в мой модуль запускать невер в виртуалке biggrin.gif
virusman
Поскольку это моя функция, в Functions она тоже есть.
Один человек недавно начал портировать Funcs на винду:
http://www.nwnx.org/phpBB2/viewtopic.php?t=1535
Можешь попросить его сделать эту функцию.
greye
Цитата(Mingun @ Mar 22 2010, 13:16) *
Не-е-е, так не пойдет. Я ж не могу заставить игрока в мой модуль запускать невер в виртуалке biggrin.gif

offtopic.gif эммм... Если ты делаешь шард, то под чем сидит игрок тебя не будет интересовать, а если сингл: я что-то пропустил, или сделали нвнх под сингл?
virusman
Цитата(greye @ Mar 22 2010, 21:28) *
offtopic.gif эммм... Если ты делаешь шард, то под чем сидит игрок тебя не будет интересовать, а если сингл: я что-то пропустил, или сделали нвнх под сингл?
Сделали.
http://www.nwnx.org/phpBB2/viewtopic.php?t=1263
Mingun
Разве NWNX только для сервера? Мне казалось, что он и в клиентском невере может работать. Хотя.. с другой стороны, exe-шника я в ядре NWNX не видел, только dll.
А делаю я сингл. Просто мне хочется, чтобы хенчи могли воскрешать игрока после смерти, а для этого им надо уметь пользоваться палочками и свиточками воскрешения (в идеале - любым предметом, могущим возвращать к жизни). Типа придать им осмысленную деятельность при наличии возможностей smile.gif .Ну, а так как это стандартными средствами невозможно, пришлось обратится к не совсем стандартным biggrin.gif . Вообщем, спасибо, что просветили rolleyes.gif

offtopic.gif Да, а чем различаются Funcs и Functions? Вроде многие функции у них совершенно аналогичные unsure.gif
virusman
В общем, можешь использовать файлы из раздела Client Extender Downloads тут:
http://www.nwnx.org/index.php?id=nwnx2
Но учти, что тогда при распространении модуля тебе нужно будет включать NWNCX в его состав и объяснить пользователям, как запускать NWNCX.

Functions - изначально плагин с разными функциями.
Funcs - почти то же самое, но ещё со множеством дополнительных функций, касающихся игромеханики. Правда, иногда бывает, что в Functions что-то появляется, а в Funcs - ещё нет.
GoOfs
Я нигде не нашел, как проверять, какой уровень моего персонажа. Мне нужно, чтобы диалог с одним персонажем проходил следуюшим образом: Сначала он дает мне задание на ковку меча, и на тренеровку моих навыков, а потом на 3ем уровне он просит меня разобраться с ограми.
Мастер скриптов неправильно пишет мне скрипт, или просто не работает...
Mingun
Помоему функция
Neverwinter Script
// Получает число броска хитов (hitdice) для oCreature, что является его уровнем.
// * Возвращаемое значение, если oCreature - невалидное существо: 0
int GetHitDice(object oCreature);

Комментарии мои, сам я ею не пользовался и как то дело не доходило, чтобы проверить, чтоже она возвращает, но по слухам вроде оно
GoOfs
Ладно, вроди сделал пальцем скрипт, и боевая задача была решена=)
Но теперь новая проблема: я ненашел в базе скриптов следующего: НПС подходит и начинает разговор. Чтото помню, было такое... но невспомню, где видел... А такая фишка нужна мне уже в 2х местах...
Aiwan
Влей мой модуль ПВ, там куча стандартных триггеров и скриптов в палитре, с описанием. Почитай и попробуй. На них работает весь модуль.
GoOfs
Aiwan, благодарю! Думаю это привнесет в мой мод немного большее, чем я жду от ХотУ и СОУ. Я достаточно долго искал Хакпаки для нвн, и наконец то их нашел. А есть ли еще другие паки? Ну чтобы выбор был побольше.
Griffon
GoOfs, на nwvault.ign.com, правда все на английском.
GoOfs
Neverwinter Script
void main()
{
object oWP = GetNearestObjectByTag("Point_"+GetTag(OBJECT_SELF));
object oPC = GetFirstPC();
object oSelf = OBJECT_SELF;
int iFIRST_TIME = GetLocalInt (oSelf, "FIRST_TIME");

if (iFIRST_TIME = 1)
{
AssignCommand(oSelf, ActionMoveToObject(oPC, TRUE, 0.1));
AssignCommand(oSelf, ActionStartConversation(oPC, "111", FALSE, FALSE));
AssignCommand(oSelf, ActionWait(15.0));
SetLocalInt (oSelf,"FIRS_TIME", 0);
}
else
{
AssignCommand(oSelf, ActionMoveToObject(oWP, TRUE, 0.1));
}
}

Скрипт должен: 1)отправить НПС к игроку
2)начать диалог с игроком
3)уйти на точку и стоять там, ожидая возвращения игрока.

Вроди и работает скрипт, но собака, нехочет 2ую часть выполнять(та что после else)...
В чем проблема? Как её решить? Может какието конфликты с слотом OnPerception?..
Уже 2ой день маюсь, бьюсь над этим скриптом, все никак не выходит...
Ilerien
Надо
Neverwinter Script
if (iFIRST_TIME == 1)
То, что написал ты - это присваивание, оно всегда возвращает 1.
GoOfs
Ilerien, благодарю, без этого бесспорно мой скрипт бы и не заработал. проверял=)
Но я сам нашел ошибку. Это была банальная опечатка.
---
Еще один такой вопрос: как непися отправить в тартарары, или просто убить.
Моя задача сейчас Отправить непися к игроку. Поговорив с неписем, последний должен уйти и либо умереть и воскреснуть в близлежащей таверне, либо портануться в ту же таверну.
Lex
на слот end conversation (слот этот ищи в диалоге, там в одной из закладок справа внизу) ставь скрипт с телепортом игрока.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.
Invision Power Board © 2001-2024 Invision Power Services, Inc.