Помощь - Поиск - Пользователи - Календарь
Полная версия: Скрипты
Город Мастеров > РЕДАКТОРЫ > 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
Lex
скрипты атаки и поворота работают без режима катсцены, в старом варианте?

\\ переношу в скрипты

QUOTE(Chimeric @ May 9 2006, 12:47) [snapback]81184[/snapback]
Ситуация: у всех NPC в OnConversation стоит
NSS
оbject oPC = GetFirstPC();
SetCutsceneMode(oPC, TRUE);
ActionStartConversation(oPC, "", FALSE, TRUE);


Лучше не так.. Я же приводил скрипт для onConversation
Chimeric
В твоем скрипте есть какой-то RespondToShout, который Аврора не признает.

Скрипты не работают и без катсцены. Только что теги проверял, думал, может, не те. Они. В точности тот же тег у существа, что и в скрипте, но SetFacingPoint - кукиш. Бой тоже не начинается.
Lex
QUOTE(Chimeric @ May 9 2006, 17:38) [snapback]81196[/snapback]
Скрипты не работают и без катсцены

значит дело не в ней yes3.gif.
QUOTE(Chimeric @ May 9 2006, 17:38) [snapback]81196[/snapback]
В твоем скрипте есть какой-то RespondToShout, который Аврора не признает.

это как это не признает???? RespondToShout описана в библе nw_i0_generic, она там в скрипте подключена сверху
NSS
#include "nw_i0_generic"


ща посмотрим, что там не так в скриптах

QUOTE(Chimeric @ May 9 2006, 12:47) [snapback]81184[/snapback]
Или вот еще. Когда начинается разговор в том же режиме, то ставлю на первую реплику игрока следующее, чтобы к нему повернулись:

это точно работает. Проверь:
- правильные ли тэги
- нет ли в модуле других объектов с такими же тэгами
- лучше (если возможно) юзай GetNearestObjectByTag чтобы брать не просто по тэгу, а еще и ближайших

QUOTE(Chimeric @ May 9 2006, 12:47) [snapback]81184[/snapback]
После чего они начинают свой разговор в режиме катсцены. Штука, однако, в том, что при таком режиме не работает то, что вроде бы должно. Например, нужно сделать так, чтобы трое неписей напали на нас и окончился режим катсцены. Ставил вот что на последнюю реплику

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

QUOTE(Lex @ May 9 2006, 18:04) [snapback]81197[/snapback]
- нет ли в модуле других объектов с такими же тэгами

это можно легко проверить вот таким образом:

NSS
void CheckTag(string sTag)
{
int i = 0;
object oObject = GetObjectByTag(sTag,i);
object oPC = GetFirstPC();
SendMessageToPC(oPC,"CHECK TAG: '"+sTag+"'. List of Objects:");
while (GetIsObjectValid(oObject))
    {
    SendMessageToPC(oPC,GetName(oObject)+" in area "+GetName(GetArea(oObject)));
    i++;
    oObject = GetObjectByTag(sTag,i);
    }
}

void main()
{
CheckTag("1");
CheckTag("2");
CheckTag("3");
}


запусти такой скрипт где-нить, или вставь в свой и посмотри в логах, где что есть повторное.
Chimeric
А! Черт! Ну конечно! Так, все, вроде понял. Завтра поменяю кое что и сообщу...
Don_Beavis
Aiwan, за ползунок спасибо, но меня больше интересует другая часть моего вопроса, а именно как сделать, что бы суммоны не жрали опыт и между патей он делился в меньшем процентном соотношении. Если это скрипт, напиши его пожалуйста. smile.gif
Aiwan
NSS
// Так даем обычному кричу ХР и РС тоже
GiveXPToCreature(GetPCSpeaker(), 150)

// Так дает партии ХР
#include "nw_i0_tool"
void main()
{
    RewardPartyXP(150, GetPCSpeaker());
}
DarkDeivel
Народ в Скриптах особо не шарю. Вот помогите мне я подхожу к НПС и надо так сделать что когда он отвечает "Да хочу" НПС наколдовал на игрока защиту и всякое такое + лечение. Напишите плиз скрипт он должен быть в диалоге. В завершении. rolleyes.gif
Dik Morris
NPC востaнавливает все хит-поинты игрока + увеличивает класс брони на 5.

Нужное время да и сам эффект, можешь поменять smile.gif

NSS
//На ActionTakens в диалоге
void main()
{
object oPC = GetPCSpeaker();
object oNPC = OBJECT_SELF;

  AssignCommand(oPC, ClearAllActions());
  AssignCommand(oNPC, ClearAllActions());

  AssignCommand(oPC, ActionPauseConversation());
  DelayCommand(1.0, AssignCommand(oNPC,    ActionPlayAnimation(ANIMATION_LOOPING_CONJURE2,1.0f, 5.0f)));
  DelayCommand(6.8, ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_HEALING_X ),oPC));
  DelayCommand(6.8, ApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectACIncrease(5), oPC, 1000.0f));
  DelayCommand(6.9, ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectHeal(GetMaxHitPoints(oPC)), oPC));
  DelayCommand(7.1, AssignCommand(oPC, ActionResumeConversation());
}


PS: скрипт писал без тулсета, посему не исключены ошибки. pleasantry.gif
Nuprahtor
Вот у меня есть такой лилаковский скрипт:

NSS
/*  Script generated by
Lilac Soul's NWN Script Generator, v. 2.2

For download info, please visit:
http://nwvault.ign.com/View.php?view=Other...&id=4683&id=625    */


//Put this script OnEnter
void main()
{

object oPC = GetEnteringObject();

if (!GetIsPC(oPC)) return;

object oTarget;
location lTarget;
oTarget = GetWaypointByTag("WP_FromStart");

lTarget = GetLocation(oTarget);

//only do the jump if the location is valid.
//though not flawless, we just check if it is in a valid area.
//the script will stop if the location isn't valid - meaning that
//nothing put after the teleport will fire either.
//the current location won't be stored, either

if (GetAreaFromLocation(lTarget)==OBJECT_INVALID) return;

SetLocalLocation(oPC, "ls_stored_loc", GetLocation(oPC));

AssignCommand(oPC, ClearAllActions());

AssignCommand(oPC, ActionJumpToLocation(lTarget));

FloatingTextStringOnCreature("Ловушка!Начни сначала.", oPC);

}

Ставлю его на триггер.При наступлении на него игроком, скрипт переносит PC в вейпоинт WP_FromStart.
Как можно сделать, чтобы триггер перемещал игрока в вейпоинт, так которого равен тегу ключа вейпоинта?
Помогите пожалуйста.
Dik Morris
QUOTE
Как можно сделать, чтобы триггер перемещал игрока в вейпоинт, так которого равен тегу ключа вейпоинта?


Тэг ключа вайпоинта... ?

Если честно я ничего не понял. pleasantry.gif
Nuprahtor
Ну в русской версии.
Свойства триггера-улучшенный-авто удаление ключа, а ниже - тег ключа.
mamuc
QUOTE
Как можно сделать, чтобы триггер перемещал игрока в вейпоинт, так которого равен тегу ключа вейпоинта?

хмм написан вопрос весьма туманно и замудренно...
но никакой особый скрипт для этого не нужен
просто в закладке Area Transition тригера через Setup Area Transition укажи куды пригать и все biggrin.gif
п.с. не рекомндуеться юзать русифицированый тулсет..особенно с некоторыми "перлами" "точного дословного" перевода biggrin.gif
Nuprahtor
QUOTE
хмм написан вопрос весьма туманно и замудренно...
но никакой особый скрипт для этого не нужен
просто в закладке Area Transition тригера через Setup Area Transition укажи куды пригать и все biggrin.gif
п.с. не рекомндуеться юзать русифицированый тулсет..особенно с некоторыми "перлами" "точного дословного" перевода biggrin.gif

1.Этот скрипт писала бездушная машина\программа.
2. Идет себе герой по подземелью.Смотрит, на полу лежит меч+3!Ничего себе, халявный меч!Подходит к мечу, а потом рраз, и телепортировался к гаргульям...
Скрипт срабатывает не тогда, когда игрок по нему кликает, а когда наступает(PC этот триггер не видит).
Я не такой чайник, чтобы не знать, как использовать триггер Area Transitition.
Dik Morris
QUOTE
Свойства триггера-улучшенный-авто удаление ключа, а ниже - тег ключа.


Это ключ не вайпоинта, а триггера. smile.gif)

Т.е как я понял тебе нужен скрипт, чтобы при наступании игрока на триггер,он прыгал на объект с тагом, указанным в поле KeyTag того же триггера.

NSS
//onEnter, триггера.
void main
{
object oPC = GetEnteringObject();
string sTag = GetLockKeyTag(OBJECT_SELF);

if (GetIsPC(oPC))
  {
    AssignCommand(oPC, ClearAllActions());
    DelayCommand(0.2, AssignCommand(oPC,                                        ActionJumpToLocation(GetLocation(GetObjectByTag(sTag)))));
    DestroyObject(OBJECT_SELF, 0.6);
// Скрипт сработает всего 1 раз, т.к триггер мы удалим. Если это не нужно, строчку можно потереть.
  }
}
mamuc
QUOTE
Я не такой чайник, чтобы не знать, как использовать триггер Area Transitition

тогда в чем проблема? biggrin.gif
Nuprahtor
Dik Morris, спасибо вам большое.Это то, что нужно.
mamuc
QUOTE
2. Идет себе герой по подземелью.Смотрит, на полу лежит меч+3!Ничего себе, халявный меч!Подходит к мечу, а потом рраз, и телепортировался к гаргульям...
Скрипт срабатывает не тогда, когда игрок по нему кликает, а когда наступает(PC этот триггер не видит).

кстати - вот с этого описания и надо было начинать вопрос biggrin.gif
Noah
Добр.Ночи! Так, я уже куда-то писал об этом,но пока глухо.Нужен скрипт для вампира(хенч,нпс)чтобы днем у него были штрафы, а ночью бонусы.
Dik Morris
1.
Возьми стандартный скрипт спавна,
(фильтр скриптов -> Templates -> Custom onSpawn script)
там раскомментируй строчку:
//SetSpawnInCondition(NW_FLAG_HEARTBEAT_EVENT);
сохраняешь скрипт, ставишь его на onSpawn, NPC.

2.
На UserDefingen, того же NPC:

NSS
//Ночью у NPC будут регенерировать хит-поинты, а днем все характеристики уменьшаются на -3
void main()
{
    object oNPC = OBJECT_SELF;
    effect eRegener = EffectRegenerate(1,1.0f);
    effect eCurse = EffectCurse(3,3,3,3,3);
    int nUser = GetUserDefinedEventNumber();

    if(nUser == EVENT_HEARTBEAT)
    {
      if (GetIsDay())
        {
        if (GetLocalInt(oNPC,"Day") == 0)
          {
            SetLocalInt(oNPC,"Day",1);
            RemoveEffect(oNPC, eRegener);
            ApplyEffectToObject(DURATION_TYPE_PERMANENT,
              eCurse,oNPC);
          }
        }
      if (GetIsNight())
        {
        if (GetLocalInt(oNPC,"Day") == 1)
          {
            SetLocalInt(oNPC,"Day",0);
            RemoveEffect(oNPC, eCurse);
            ApplyEffectToObject(DURATION_TYPE_PERMANENT,
              eRegener,oNPC);
          }
        }

    }
}
DarkDeivel
Еще один вопрос. Вот никак не получается, делая в скрипте что в инвентаре должна быть вещ чтобы в диалоге появилась строка. А у меня не получается. И чтобы Игрок отдал вещ НПС и НПС дал в обен золото. Как это сделать???
Dik Morris
В редакторе диалогов, есть скрипт визард (иконка шляпки), вот его и юзай, там множество разных проверок, и т.п...
Aiwan
QUOTE(DarkDeivel @ May 12 2006, 22:40) [snapback]81480[/snapback]
Еще один вопрос. Вот никак не получается, делая в скрипте что в инвентаре должна быть вещ чтобы в диалоге появилась строка. А у меня не получается. И чтобы Игрок отдал вещ НПС и НПС дал в обен золото. Как это сделать???

Почитай тему "Скрипты для новичков"
DarkDeivel
QUOTE(Dik Morris @ May 12 2006, 20:04) [snapback]81483[/snapback]

В редакторе диалогов, есть скрипт визард (иконка шляпки), вот его и юзай, там множество разных проверок, и т.п...

ВОТ Я И ЧЕРЕЗ ВИЗАРДА ДЕЛАЛ И НИЧЕГО НЕ ПАШЕТ
Aiwan
QUOTE(DarkDeivel @ May 12 2006, 23:56) [snapback]81495[/snapback]
ВОТ Я И ЧЕРЕЗ ВИЗАРДА ДЕЛАЛ И НИЧЕГО НЕ ПАШЕТ

Застрелись. Тебе уже сказали где посмотреть а ты тупишь.

NSS
//------------------
#include "nw_i0_tool"
int StartingConditional()
{
    object oPC = GetPCSpeaker();
    if(!HasItem(oPC, "ТАГ_ПРЕДМЕТА"))
        return FALSE;
    return TRUE;
}
kreon
Заранее сорри за оффтоп:
Я тут подумал, может написать статью про оптимизацию nss-кода вообще и для PW в частности.
Материал + примеры есть, только хз надо ли и куда её девать после написания smile.gif
virusman
Напиши, лишним не будет. Да и будущим поколениям (в НВН2) пригодится. smile.gif
DarkDeivel
QUOTE(Aiwan @ May 12 2006, 23:30) [snapback]81523[/snapback]

Застрелись. Тебе уже сказали где посмотреть а ты тупишь.

NSS
//------------------
#include "nw_i0_tool"
int StartingConditional()
{
    object oPC = GetPCSpeaker();
    if(!HasItem(oPC, "ТАГ_ПРЕДМЕТА"))
        return FALSE;
    return TRUE;
}


Я посмотрел куда ты сказал.
Dik Morris
QUOTE(DarkDeivel @ May 12 2006, 23:56) [snapback]81495[/snapback]

ВОТ Я И ЧЕРЕЗ ВИЗАРДА ДЕЛАЛ И НИЧЕГО НЕ ПАШЕТ


Визард может не работать из-за наличия комментариев в скриптах. (Если рус. версия игры)
Поэтому, либо ставь патч dumbo (Здесь) либо удаляй комментарии.
Aiwan
Статью про оптимизацию пиши. Будет очень востребована.
QUOTE(DarkDeivel @ May 13 2006, 10:41) [snapback]81545[/snapback]
Я посмотрел куда ты сказал.

И дальше что? Готовый код. Не работает только у тех кто ничего не может совсем. Если ты не можешь посомтреть готовый код и вставить его, то здесь не надо отрывать время у людей. Иди стреляй в монстров.
DarkDeivel
Подскажите пожалуйста, если это скрипт то как сделать. У меня при завершении квеста в последней диалоговой ветке (Закончить диалог) когда нажал на нее чтобы рядом с НПС появился волк и был как наемник если это скрипт подскажите как это делать.

QUOTE(Aiwan @ May 13 2006, 08:30) [snapback]81548[/snapback]

Статью про оптимизацию пиши. Будет очень востребована.

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

Да сделал я. Все работает.

QUOTE(Dik Morris @ May 13 2006, 07:52) [snapback]81546[/snapback]

Визард может не работать из-за наличия комментариев в скриптах. (Если рус. версия игры)
Поэтому, либо ставь патч dumbo (Здесь) либо удаляй комментарии.

Понятно, спасибо.
Dik Morris
QUOTE
У меня при завершении квеста в последней диалоговой ветке (Закончить диалог) когда нажал на нее чтобы рядом с НПС появился волк

NSS
void main()
{
   // На ActionTakens в диалоге;
     CreateObject(OBJECT_TYPE_CREATURE,"ResRef_создаваемого_NPC",GetLocation(OBJECT_SELF));
     DelayCommand(0.7, ApplyEffectToObject(DURATION_TYPE_INSTANT,
      EffectVisualEffect(VFX_FNF_SUMMON_MONSTER_1), GetNearestObjectByTag("Tag_создаваемого_NPC")));
}


QUOTE
рядом с НПС появился волк и был как наемник если это скрипт подскажите как это делать.

Т.е хенчман ?
(Если да, то http://www.wrg.ru/forums/index.php?showtopic=1761)
DarkDeivel
СПАСИБО ПОМОГЛО ВСЕ КЛАССНО РАБОТАЕТ good.gif
Aiwan
QUOTE(DarkDeivel @ May 14 2006, 00:20) [snapback]81653[/snapback]
Подскажите пожалуйста, если это скрипт то как сделать. У меня при завершении квеста в последней диалоговой ветке (Закончить диалог) когда нажал на нее чтобы рядом с НПС появился волк и был как наемник если это скрипт подскажите как это делать.

Внимательно создавай волка как хеньчмана, визардом с нулевым уровнем. Потом создай его рядом и присоедени. Можешь спрятать в локе и джампнуть потом.
Nashman
привет,
Ситуация такая:
Появляется ПС, на тригере(CutScene001), на OnEnter тригера лежит такой скрипт:
NSS
void main()
{
  object oPC=GetFirstPC();
  object oTrg=OBJECT_SELF;
  object oNPC=GetNearestObjectByTag("НЕПИСЬ"):

if (!GetIsPC(oPC) || GetLocalInt(OBJECT_SELF, "CutScene1_1") == 1)
  return;
  {
    SetLocalInt(OBJECT_SELF, "CutScene1_1", 1);
    SetCutsceneMode(oPC);
    AssignCommand(oNPC, ClearAllActions());
    AssignCommand(oPC, ClearAllActions());
  }
  ActionDoCommand(AssignCommand(oNPC, ActionStartConversation(oPC)));
}

Но он не работает. В чем проблема?

ПС: В версии для форума упрощенsmile.gif
kreon
RE: (см. комментарии к коду
NSS
void main()
{
  object oPC=GetFirstPC(); // GetEnteringObject(); надо IMHO
  object oTrg=OBJECT_SELF;
  object oNPC=GetNearestObjectByTag("НЕПИСЬ"):

if (!GetIsPC(oPC) || GetLocalInt(OBJECT_SELF, "CutScene1_1") == 1)
  return;
  { // что за скобки?!
    SetLocalInt(OBJECT_SELF, "CutScene1_1", 1);
    SetCutsceneMode(oPC);
    AssignCommand(oNPC, ClearAllActions());
    AssignCommand(oPC, ClearAllActions());
  } // что за скобки?!
  ActionDoCommand(AssignCommand(oNPC, ActionStartConversation(oPC))); // конверсэйшн в свойствах нпц прописан?

}
Nashman
if (conditions)
return;
//Можно написать else smile.gif
{

Скобки - типа для "else"! code >1 line code
}
-fenix-
Первое.
Nashman, учи мат часть. Тем более сейчас, когда она на русском доступна!

else можно и не писать, но и скобки смысловой нагрузки не несут. Их можно использовать, чтобы блоки кода формировать, чисто визуально разбераться легче. Но в четырех строчках ты не запутаешься.

И ВТОРОЕ
Вот это что такое?!

NSS
void main()
{
  object oPC=GetFirstPC();
  object oTrg=OBJECT_SELF;
  object oNPC=GetNearestObjectByTag("НЕПИСЬ"): //вот это!!!!

Скрипт ведь не компилится!!!
Lex
QUOTE(-fenix- @ May 14 2006, 02:48) [snapback]81709[/snapback]
Скрипт ведь не компилится!!!

QUOTE(Nashman @ May 14 2006, 00:57) [snapback]81693[/snapback]
ПС: В версии для форума упрощен(IMG:style_emoticons/kolobok_light/smile.gif)


object oTrg=OBJECT_SELF; - лишнее
ActionDoCommand(AssignCommand(oNPC, ActionStartConversation(oPC))); - тут ActionDoCommand лишнее.
-fenix-
Но ведь не смотря на все это скрипт работает. Единственное, из-за чего приведеный скрипт может не работать, это двоеточие.
Nashman
QUOTE
else можно и не писать, но и скобки смысловой нагрузки не несут. Их можно использовать, чтобы блоки кода формировать, чисто визуально разбераться легче. Но в четырех строчках ты не запутаешься.
Это на форуме 4 скобки, а так больше(пойди туда, сделай то...).
QUOTE
object oTrg=OBJECT_SELF; - лишнее
мне так удобнее, потом, сли код большой, а надо скрипт на кого-то другого, то исправить не так уж много прийдется.
QUOTE
ActionDoCommand(AssignCommand(oNPC, ActionStartConversation(oPC))); - тут ActionDoCommand лишнее.
плохая прывычка sad.gif.
Все выше учту в будущем wink3.gif
QUOTE
Но ведь не смотря на все это скрипт работает. Единственное, из-за чего приведеный скрипт может не работать, это двоеточие.
оСПРАВИЛ - работает, но почему компилятор не выдавал ошибку?
Aiwan
QUOTE(Lex @ May 14 2006, 04:52) [snapback]81710[/snapback]

object oTrg=OBJECT_SELF; - лишнее

Пять юаней. Во многих сложных системах или при использовании актионов и прочих функций OBJECT_SELF может не работать корректно. Это даже в комментах лексекона есть. Рекомендую использовать только в простых не сложных скриптах иначе будете искать причину того что действие не сработало очень долго... Биовар в скриптах ХоТУ почти везеде юзает object oSelf = OBJECT_SELF;
Dik Morris
QUOTE
оСПРАВИЛ - работает, но почему компилятор не выдавал ошибку?

Компилятор ошибку видит, скорее всего, ты просто забыл скомпилировать скрипт. smile.gif
Nashman
хз я F7 жал, это ж компилятор?
Dik Morris
Да это, но я повторюсь ошибку компилятор ВИДИТ, ради интиреса попробуй скомпилировать тот скрипт еще раз.
Lex
QUOTE(Aiwan @ May 14 2006, 11:11) [snapback]81718[/snapback]
Пять юаней. Во многих сложных системах или при использовании актионов и прочих функций OBJECT_SELF может не работать корректно. Это даже в комментах лексекона есть. Рекомендую использовать только в простых не сложных скриптах иначе будете искать причину того что действие не сработало очень долго... Биовар в скриптах ХоТУ почти везеде юзает object oSelf = OBJECT_SELF;

я с этим не спорю, но в написанном выше скрипте
- триггер только для локалки
- все равно написано там OBJECT_SELF
так что в том конкретном скрипте лишнее. Что я и написал.
Aiwan
Леш, неужели ты решил что я твой код правлю? crazy.gif Я еще с ума не сошел. Дружище, просто пять юаней это пять юаней! pardon.gif
Kavin
Посоветуйте, пожалуйста, как сделать так, чтобы в стек действий попало условие. Именно чтобы строка "if ...." выполнилась ПОСЛЕ окончания действия ActionMoveToObject()/
Dik Morris
Можно попробовать так,

NSS
void ActionTemp()
{
  if(
// Нужная проверка и т.д...
   {
//    <...>
   }
}

void main()
{
//    <...>
      ActionDoCommand(ActionTemp());
//    <...>
}
DarkDeivel
Скажите а можно изменить расу. Вот я хочу поменять полуорков на Ракшисов. Как это сделать? И если это скрипт тонапишите пожалуйста. nea.gif
Dik Morris
DarkDeivel

Тебе сюда: http://www.wrg.ru/forums/index.php?showforum=16
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.
Invision Power Board © 2001-2025 Invision Power Services, Inc.