Помощь - Поиск - Пользователи - Календарь
Полная версия: Скрипты
Город Мастеров > РЕДАКТОРЫ > 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
Kondor
Все вопрос исчерпан, теперь другои, мне надо чтобы человек был невидим и подходл к тебе когда наступаешь на тригер. А вслучае неудачной проверки уходит и исчезает, если не трудно.
Vhall
Насколько я понимаю, посадка ПС и НПС на стул происходит только в определенном направлении, не зависимо от ориентации стула. Или на ориентацию влияет сам скрипт?
Kondor
Vhall’rafein Не там направление зависит, куда стрелка туда садится, у меня так было, я не знаю точно.
Добавлено в [mergetime]1112122770[/mergetime]
Точнея не помню
, но кажется так.
Aiwan
ГОСПОДА НОВОИЧКИ. ЕСЛИ У ВАС ЕСТЬ ВОПРОС, ОФОРМИТЕ ЕГО ПО ВОЗМОЖНОСТИ ПОДРОБНО И В ОДНОМ ПОСТЕ. НЕ НАДО ФЛУДИТЬ ТУТ НЕ ЧАТ А ФОРУМ. А МОДЕРАТОРАМ РЕКОМЕНДУЮ НАЧАТЬ ПРЕДУПРЕЖДАТЬ.
][umepa
2 archangel вот какое дело

DelayCommand(16.0,AssignCommand(oNPC, ActionAttack(oPC, FALSE)));...
ошибка VARIABLE DEFINED WITHOUT TYPE


вот вся команда:



#include "nw_i0_generic"
void main()
{
AdjustReputation(GetPCSpeaker(), OBJECT_SELF, -100);
DelayCommand(10.0,AssignCommand(oNPC, ActionAttack(oPC, FALSE)));
}
если я всё правильно понял её надо вешать в action taken при диалоге?может я неправильно написал help !!!
объясни плз по-подробней
p.s. извиняюсь за надоедлвостьи возможную
Добавлено в [mergetime]1112123920[/mergetime]
товарищи модераторы извиняйте постараюсь так больше не делать( следую совету айвана)
Archangel
QUOTE
а когда непись на стул садиться на чё эту команду повесить?

Либо в OnHearBeat либо в OnSpawn biggrin.gif
QUOTE
ты имел ввиду -100 поменять на -16 и ниже?

Вообще-то -100 - это репутация ПС в глазах НеПиСя и вообще ты про мою команду спрашиваешь или про скрипт Nokoll`a? cool.gif
Добавлено в 01:30
QUOTE
#include "nw_i0_generic"
void main()
{
AdjustReputation(GetPCSpeaker(), OBJECT_SELF, -100);
DelayCommand(10.0,AssignCommand(oNPC, ActionAttack(oPC, FALSE)));
}

Чаво? Ты это откуда взял? Ты хоть понимаешь смысл? Короче, хватит лекций, делай так:
Либо убери
AdjustReputation(GetPCSpeaker(), OBJECT_SELF, -100);, но оставь DelayCommand(10.0,AssignCommand(oNPC, ActionAttack(oPC, FALSE)));, либо наоборот... biggrin.gif
Хм... И вообще, где у тя показано, кто такой oNPC и PC?
Вот, вставь это в начало скрипта:
Neverwinter Script Source
object oPC = GetEnteringObject();
if (!GetIsPC(oPC))
return;
object oNPC=GetObjectByTag("ТЭГ_НеПиСя");
wink.gif
Tiger Greyhawk
Хumepa, компилятор ругается на то, что у тебя не описан объект.
QUOTE (Хumepa @ Mar 29 2005, 22:17)
DelayCommand(16.0,AssignCommand(oNPC, ActionAttack(oPC, FALSE)));... ошибка VARIABLE DEFINED WITHOUT TYPE

т.е. переменная определена без типа.
oNPC - переменная. нужно добавить в начале:
QUOTE (Archangel @ Mar 29 2005, 23:24)
object oNPC=GetObjectByTag("ТЭГ_НеПиСя");
ТЭГ_НеПиСя заменить. Также и с самим игроком, oPC. Тоже нужно описать, но по-другому (см. ниже).
Или вместо переменной, команды, описывающие ее. Пр:
Neverwinter Script Source
DelayCommand(16.0, AssignCommand(GetObjectByTag("ТЭГ_НеПиСя"), ActionAttack(GetPCSpeaker(), FALSE)));

Самое главное правильно описать переменную. Archangel, имхо, неправильно тебе описал игрока в своем последнем посте. У тебя скрипт в разговоре стоит? Значит игрок не является EnteringObject. Он PCSpeaker.
Если нужно без задержки, то убери команду DelayCommand (ЗадержкаКоманды).
З.Ы. object в нашем случае это тоже переменная в данном скрипте.
З.З.Ы. Lexicon поможет разобраться в скриптах. + заходи на канал (см. мою подпись)
Lex
QUOTE (Хumepa @ Mar 30 2005, 10:01)
object oPC = GetEnteringObject();
if (!GetIsPC(oPC))
return;
object oNPC=GetObjectByTag("ТЭГ_НеПиСя");
#include "nw_i0_generic"
void main()

ээ..ты так и написал?????
Neverwinter Script Source
#include "nw_i0_generic"
void main()
{
object oPC = GetPCSpeaker();
AdjustReputation(oPC, OBJECT_SELF, -100);
}

вот так
Добавлено в 10:11
QUOTE (Хumepa @ Mar 30 2005, 10:01)
3И ЕЩЁ УСАДИЛ НЕПИСЯ НА СТУЛ НА КОГДА Я С НИМ НАЧИНАЮ ГОВОРИТЬ ОН ВСТАЁТ СО СТУЛА.
МОЖНО ЛИ ЕГО ЗАСТАВИТЬ ВСЁ ВРЕМЯ СИДЕТЬ НА СТУЛЕ?

нет. Можно заставить его сесть после начала разговора, например. Но вставать он будет всегда.
Archangel
QUOTE
ээ..ты так и написал?????

Написал я, но он неправильно подставил... Кста, я ошибся, ты ж сначала говоришь, а потом они должны напасть?
Тогда замени:

Neverwinter Script Source
object oPC = GetEnteringObject();
if (!GetIsPC(oPC))
return;

на:
Neverwinter Script Source
object oPC = GetPCSpeaker();
biggrin.gif
УПС... Это уже Lex сказал, извиняюсь, что повторился... this.gif
Добавлено в 12:58
QUOTE
вот так

Lex, а где в твоем скрипте другие NPC? ][umepa вроде раньше просил чтоб нападала группа челов, а у тя получается, что нападает токо 1, тот с кем ПС разговаривает в данный момент...
Все таки лучше так:

Neverwinter Script Source
object oPC = GetPCSpeaker();
DelayCommand(16.0, AssignCommand(GetObjectByTag("ТЭГ_1НеПиСя"), ActionAttack(GetPCSpeaker(), FALSE)));
DelayCommand(16.0, AssignCommand(GetObjectByTag("ТЭГ_2НеПиСя"), ActionAttack(GetPCSpeaker(), FALSE)));
DelayCommand(16.0, AssignCommand(GetObjectByTag("ТЭГ_3НеПиСя"), ActionAttack(GetPCSpeaker(), FALSE)));

и т.д. cool.gif
Vhall
QUOTE (Lex @ Mar 30 2005, 09:27)
влияет. У меня НПС сидят на стульях полукругом. (на стандартных биоваровских стульях) С ориентацией проблемы когда сажаешь например на нивидимку.

huh?!
Вот скрипт:

Neverwinter Script Source
//by Tigra pardon.gif
void main()
{
  object oStul = OBJECT_SELF;
  if (!GetIsObjectValid(GetSittingCreature(OBJECT_SELF)))
  {
      AssignCommand(GetLastUsedBy(), ActionSit(oStul));
  }
}


Перс садится только в одном направлении, независимо от положения стула. Даже на спинку
Алексашка
LEX Можно заставить говорить непися и не вставая. Только в on conversation скрипте прописать, что диалог ведет невидимый объект. Ставишь этот объект под стул на который сядет непись, называешь именем непися, присваиваешь его портрет и в случае диалога на тебя реагирует невидимый объект, а непись остается сидеть. good.gif
Archangel
Люди, помогите... Почему этот скрипт не работает, а точнее работает но на половину...
Когда день, то НеПиСь идет куда ему положено, а когда наступает ночь, то он стоит, как вкопаный...
Вот сам скрипт:
swoon.gif
Neverwinter Script Source
void main()
{
object oW1= GetWaypointByTag("W1");
object oW2= GetWaypointByTag("W2");
object oN1 = GetObjectByTag("N1");
if (GetIsDay()==TRUE)
{
DelayCommand(7.0, AssignCommand(oN1, ClearAllActions()));
DelayCommand(10.0, AssignCommand(oN1, SpeakString("I HATE DAY!!!!")));
DelayCommand(15.0, AssignCommand(oN1, ActionForceMoveToObject(oW2,TRUE, 1.0, 12.0)));
}
if (GetIsDay()==FALSE)
{
DelayCommand(7.0, AssignCommand(oN1, ClearAllActions()));
DelayCommand(10.0, AssignCommand(oN1, SpeakString("Nigh? I like night...")));
DelayCommand(15.0, AssignCommand(oN1, ActionForceMoveToObject(oW1,TRUE, 1.0, 12.0)));
}
}

ЗЫ
А куда его ставить? Я пытался в OnEnter локи и в OnSpawn НеПиСя, но не помогает... this.gif black eye.gif
ЗЗЫ
Самое интересное, что все компилится...
Алексашка
QUOTE (Archangel @ Mar 30 2005, 20:12)
Люди, помогите... Почему этот скрипт не работает, а точнее работает но на половину...
Когда день, то НеПиСь идет куда ему положено, а когда наступает ночь, то он стоит, как вкопаный...
Вот сам скрипт:
swoon.gif
Neverwinter Script Source
void main()
{
object oW1= GetWaypointByTag("W1");
object oW2= GetWaypointByTag("W2");
object oN1 = GetObjectByTag("N1");
if (GetIsDay()==TRUE)
{
DelayCommand(7.0, AssignCommand(oN1, ClearAllActions()));
DelayCommand(10.0, AssignCommand(oN1, SpeakString("I HATE DAY!!!!")));
DelayCommand(15.0, AssignCommand(oN1, ActionForceMoveToObject(oW2,TRUE, 1.0, 12.0)));
}
if (GetIsDay()==FALSE)
{
DelayCommand(7.0, AssignCommand(oN1, ClearAllActions()));
DelayCommand(10.0, AssignCommand(oN1, SpeakString("Nigh? I like night...")));
DelayCommand(15.0, AssignCommand(oN1, ActionForceMoveToObject(oW1,TRUE, 1.0, 12.0)));
}
}

ЗЫ
А куда его ставить? Я пытался в OnEnter локи и в OnSpawn НеПиСя, но не помогает... this.gif black eye.gif
ЗЗЫ
Самое интересное, что все компилится...

heartbeat не пробовал? Результат не гарантирую. Сейчас сам попробую
Archangel
QUOTE
heartbeat не пробовал? Результат не гарантирую. Сейчас сам попробую

Это не поможет. Стопудово... Просто НеПиСь будет повторять одну и туже фразу каждые 5-6 секунд... tongue.gif
Ferst
QUOTE (Archangel @ Mar 30 2005, 20:12)
Люди, помогите... Почему этот скрипт не работает, а точнее работает но на половину... 
Когда день, то НеПиСь идет куда ему положено, а когда наступает ночь, то он стоит, как вкопаный...

Всем: Вроде бы человек сказал, что не работает наполовину. При чем тут событие?


Первая и вторая часть отличаются только одним - вейпоинтом (фраза не в счет).
Может, просто нет вейпоинта с таким именем? wink.gif

Да, и еще. Сделайте оптимизировано. Зачем два раза проверять одно и то же условие?

Neverwinter Script Source
void main()
{
  object oW1= GetWaypointByTag("W1");
  object oW2= GetWaypointByTag("W2");
  object oN1 = GetObjectByTag("N1");
DelayCommand(7.0, AssignCommand(oN1, ClearAllActions()));
if (GetIsDay()==TRUE)

  DelayCommand(10.0, AssignCommand(oN1, SpeakString("I HATE DAY!!!!")));
  DelayCommand(15.0, AssignCommand(oN1, ActionForceMoveToObject(oW2,TRUE, 1.0,   12.0)));
}
else
{
  DelayCommand(10.0, AssignCommand(oN1, SpeakString("Nigh? I like night...")));
  DelayCommand(15.0, AssignCommand(oN1, ActionForceMoveToObject(oW1,TRUE, 1.0, 12.0)));
}
}
Алексашка
С этим скриптом у меня все работает. Я его слегка подредактировал.
Ставил на heartbeat
void main()
{
object oW1= GetWaypointByTag("W1");
object oW2= GetWaypointByTag("W2");
object oN1 = GetObjectByTag("N1");
if (GetIsDay() && GetLocalInt(oN1, "Day") != 1)
{
DelayCommand(7.0, AssignCommand(oN1, ClearAllActions()));
DelayCommand(10.0, AssignCommand(oN1, SpeakString("I HATE DAY!!!!")));
DelayCommand(15.0, AssignCommand(oN1, ActionForceMoveToObject(oW2,TRUE, 1.0, 12.0)));
SetLocalInt(oN1, "Day", 1);
SetLocalInt(oN1, "Night", 0);
return;

}

if (GetIsNight()&& GetLocalInt(oN1, "Night") != 1)
{
DelayCommand(7.0, AssignCommand(oN1, ClearAllActions()));
DelayCommand(10.0, AssignCommand(oN1, SpeakString("Nigh? I like night...")));
DelayCommand(15.0, AssignCommand(oN1, ActionForceMoveToObject(oW1,TRUE, 1.0, 12.0)));
SetLocalInt(oN1, "Day", 0);
SetLocalInt(oN1, "Night", 1);
return;
}
}
yes.gif
Archangel
Алексашка, огромное те Архангеловское спасибо. biggrin.gif
Только вот загвостка... Будет ли НеПиСь делать это каждый день, т.е.:
День, затем ночь, потом снова день, потом ночь и т.д. Или он только 1 раз это сделает?
ЗЫ
Самому лень проверять... Имхо оч долго ждать надо...
Алексашка
QUOTE (Ferst @ Mar 30 2005, 21:07)
Всем: Вроде бы человек сказал, что не работает наполовину. При чем тут событие?


Первая и вторая часть отличаются только одним - вейпоинтом (фраза не в счет).
Может, просто нет вейпоинта с таким именем? wink.gif

Да, и еще. Сделайте оптимизировано. Зачем два раза проверять одно и то же условие?

Neverwinter Script Source
void main()
{
= object oW1= GetWaypointByTag("W1");
= object oW2= GetWaypointByTag("W2");
= object oN1 = GetObjectByTag("N1");
DelayCommand(7.0, AssignCommand(oN1, ClearAllActions()));
if (GetIsDay()==TRUE)
{=
= DelayCommand(10.0, AssignCommand(oN1, SpeakString("I HATE DAY!!!!")));
= DelayCommand(15.0, AssignCommand(oN1, ActionForceMoveToObject(oW2,TRUE, 1.0,=љ 12.0)));
}
else
{
= DelayCommand(10.0, AssignCommand(oN1, SpeakString("Nigh? I like night...")));
= DelayCommand(15.0, AssignCommand(oN1, ActionForceMoveToObject(oW1,TRUE, 1.0, 12.0)));
}
}

Оптимизация вещь хорошая. Только ClearAllActions ставить лучше после выполнения условий день или ночь. Тогда в spawne непись может ночью спать, а днем дрова рубить например. yes.gif
Алексашка
QUOTE (Archangel @ Mar 30 2005, 22:16)
Алексашка, огромное те Архангеловское спасибо. biggrin.gif
Только вот загвостка... Будет ли НеПиСь делать это каждый день, т.е.:
День, затем ночь, потом снова день, потом ночь и т.д. Или он только 1 раз это сделает?
ЗЫ
Самому лень проверять... Имхо оч долго ждать надо...

Будет делать. Куда он денется. biggrin.gif Для этого и ставится на heartbeat. А переменные day & night для того чтобы он каждый раунд не пытался вопить и идти к точке. yes.gif
Ferst
QUOTE (Алексашка @ Mar 30 2005, 22:16)
Оптимизация вещь хорошая. Только ClearAllActions ставить лучше после выполнения условий день или ночь. Тогда в spawne непись может ночью спать, а днем дрова рубить например. yes.gif

Мда... Невнимательность продолжается.
Кто-то сказал, что это Хиартбит? Я уже говорил, что о событии человек не спрашивал.
Алексашка
QUOTE (Ferst @ Mar 30 2005, 22:26)
Мда... Невнимательность продолжается.
Кто-то сказал, что это Хиартбит? Я уже говорил, что о событии человек не спрашивал.

Сплошной оффтопик. Я не говорю о чем он спрашивал, Я говорю, как работает. Я понял задачу так: Непись днем пашет, а ночью идет спать. И это каждый день и ночь. А не разовая команда. yes.gif Не воспринимай критику в штыки. yes.gif
Ferst
Это не офтопик, а уточнее, что написано не для хиартбита, а основываясь на том, что было указано в вопросе.

Я не против критики, если она имеет смысл быть.
Nokoll
Neverwinter Script Source
if (GetIsNight()&& GetLocalInt(oN1, "Night") != 1)

Вроде надо поставить число. не 1 а нвпример 10!

Добавлено в [mergetime]1112211572[/mergetime]
Алексашка Выделяй весь свой скрипт и нажимай NSS. Так всем легче будет понятно! wink.gif
Nokoll
QUOTE
Не подкинет ли кто скриптик для закрытия двери ночью?

Вот Арх, можеш например онЭнтер Локации поставить.(Писал без Туллса, Мож чё неправильно!).

Neverwinter Script Source
void main()
{
object oDoor = GetObjectByTag("DOOR_NIGHT");
if (GetIsNight()==TRUE)
{
DelayCommand(7.0,ActionCloseDoor(oDoor)));
}
}
Tiger Greyhawk
QUOTE (Nokoll @ Mar 30 2005, 22:38)
Neverwinter Script Source
(GetIsNight()&& GetLocalInt(oN1, "Night") != 1)


Вроде надо поставить число. не 1 а нвпример 10!

Nokoll, в данном случае 1 для проверки истинности\ложности условия. Что угодно там можно ставить. Главное и переменную потом менять на именно эту цифру.

2 Archangel Запирание дверей на ночь. Есть в базе скриптов. Ссылка на пост со скриптом smile.gif
QUOTE (Archangel @ Mar 30 2005, 22:16)
ЗЫ Самому лень проверять... Имхо оч долго ждать надо...

А поставить 1 час = 1 минуте не судьба? Изменить начало дня и ночи и проверить на двух сменах. А?
Lex
QUOTE (Aiwan @ Mar 29 2005, 22:01)
ГОСПОДА НОВОИЧКИ. ЕСЛИ У ВАС ЕСТЬ ВОПРОС, ОФОРМИТЕ ЕГО ПО ВОЗМОЖНОСТИ ПОДРОБНО И В ОДНОМ ПОСТЕ. НЕ НАДО ФЛУДИТЬ ТУТ НЕ ЧАТ А ФОРУМ. А МОДЕРАТОРАМ РЕКОМЕНДУЮ НАЧАТЬ ПРЕДУПРЕЖДАТЬ.

похоже особо этот пост никого не вразумил.



ОФФТОП потерт
][umepa
2 archangel ЗАРАБОТАЛО biggrin.gif biggrin.gif biggrin.gif
ВОПРОС:
1МОЖНО ЛИ СДЛЕАТЬ ДИАЛОГ 2-УХ НЕПИСЕЙ(ТИПА ОДИН СТОИТ НАПРОТИВ ДРУГОГО И НАД НИМИ ПОЯВЛЯЮТСЯ ИХ РЕПЛИЛКИ)
2НЕ МОГ БЫ ТЫ ВЫЛОЖИТЬ КОМАНДЫ АНИМАЦИИ ?
Aiwan
Еще раз поворю и влеплю для острастки предов пару. КТо будет флудить тут забаню нахер на неделю! Все вопросы что вы тут постите уже разбирались! aggressive.gif Поисковиком пользуйтесь. И нехрен изобретать КРИВЫЕ скрипты когда в базе лежат нормальные или в форуме старом ан рельсах. Детский сад ,емае... Так кому навешать пилюлей? *Оворачивается в поисках жертвы...* drag.gif
mamuc
QUOTE
Так кому навешать пилюлей? *Оворачивается в поисках жертвы...* 


люлей надо отвешать кому то , кто вовсе не причем, а так мимо проходил...чтоб остальные млели и дрожали (" ну если уж ему так отвесили, то что с нами будет") biggrin.gif diablo.gif

..уупс...Айван, не смотри на меня так хитроо .... pardon.gif
*проворно уплетает в направлении ближайшего укрытия* yes.gif biggrin.gif
][umepa
{осторожно осматриваясь по сторонам тихо шепчет}
а где-нить есть обновления для редактора а то некотрые erf. файлы не открываются пише ттипа версия редактора левая{.
аакуратно осматирваясь уходит в тень}

Айван: Кто из нас идиот? Каого бока касается ереф в теме скриптов? Бан на три дян за идиотизм. Очень странно и непонятно твое поведение. Я огорчен, думал ты нормальный парень. unsure.gif Засрали всю тему, как новички. Позор. Тошно смотреть.
Friedrich
Какие .erf файлы? Это при импорте такое пишет? Ни разу не видел.
А так, вообще, тулсет вместе с игрой обновляется. А где патчи брать (у Биоварей) и как их ставить - это тема отдельная и во многих местах давно описанная.

И это не по скриптам, вроде, вопрос. smile.gif

Добавлено в [mergetime]1112293239[/mergetime]
Действительно, экспортированное из 1.64 в 1.62 экспортироваться не будет (кто бы мог подумать?). Однако, это можно легко обойти. Переименуй .erf в .hak, открой его, удали оттуда ExportInfo.gff, сохрани, переименуй обратно в erf. Усе! biggrin.gif
Nokoll
QUOTE
1МОЖНО ЛИ СДЛЕАТЬ ДИАЛОГ 2-УХ НЕПИСЕЙ(ТИПА ОДИН СТОИТ НАПРОТИВ ДРУГОГО И НАД НИМИ ПОЯВЛЯЮТСЯ ИХ РЕПЛИЛКИ)

У меня получается попробуй так. на onEnter Локации.
DelayCommand(60.0, AssignCommand(oHi, ActionStartConversation(oPC, "hiller_talk", FALSE,FALSE)));
вместо моего oHi сделаеш своего, а вместо диалога "hiller_talk" Свой поставиш! unsure.gif

Добавлено в [mergetime]1112360846[/mergetime]
Friedrich Что то я думаю ты наспамил, не здесь и не там, Айван, рассердится!
Лито
У меня повилась идея сделать оборотня. Впринципе в стандартной палитре бандиты, которые полиморфятся, если нанести им урон.
Поковырявшись в скриптах стандартного полиморфа, я понял что тип полиморфа задается константой...
Но проблема в том, что мне нужен полиморф не в стандартного моба, а которого я сам укажу.(то бишь кастомный)

Впринципе можно сделать проще. Когда наносится урон, существу которое должно превращатся, оно дестроится и на его место создается уже готовая форма волка(ну или еще кого), но все же хотелось бы узнать, возможен ли более продвинутый способ smile.gif
Lex
Можно.
Надо в polymorph.2da добавить нужный тебе полиморф.
В тему 2да таблицы сходи.
Лито
У меня еще один вопрос. Необходимо сделать следующие:
Есть стражник который идет по двум вэйпоинтам. На ходу он должен говорить фразы, как бы самому себе.Типа: "Левой-правой, раз-два-три!", "Мои бедные ноги...".
Ходьбу по вэйпоинтам я сделал biggrin.gif и с разговором управился, но соединить эти два действия у меня не получается. Либо стражник стоит и говорит сам с собой, либо он бодро шагает по заданому пути...

Сделал такой скрипт:
для разговора с самим собой
Neverwinter Script Source
void main()
{
ActionStartConversation(OBJECT_SELF);
}
smile.gif
Lex
Навскидку 2 варианта. Опишу более простой.. Сам на днях кой-чего так делал.

Сделал НПС, поставил вэйпоинты. Он ходит, все ок. ЧТобы над головой были фразы, лично я редактировал ЮД скрипт.
Вот такая вставка в обработку события ХБ
(Можно впихнуть в конец скрипта ХБ, перед запуском эвента. Но если у тебя у этого НПС спавн-скрипт с раскомментированными эвентами, то лучше в ЮД)

Neverwinter Script Source
/// ВО ВРЕМЯ БОЯ И ДИАЛОГА С РС ФРАЗЫ НЕ ГОВОРИМ
if ((!IsInConversation(OBJECT_SELF))&&(!GetIsInCombat(OBJECT_SELF)))
        {
        string s;
        /// РАНДОМ ПО 20, а ФРАЗ 10. СПЕЦИАЛЬНО. ЧТОБЫ ГОВОРИЛ НЕ ПОСТОЯННО, А ЧЕРЕЗ РАЗ В СРЕДНЕМ.
        /// УВЕЛИЧИТЬ ИЛИ УМЕНЬШИТЬ ЧАСТОТУ ПРОИЗНЕСЕНИЯ ПРОСТО - МЕНЯЙ 20. БЛИЖЕ К 10, ГОВОРИТ ЧАЩЕ.
        switch (Random(20))
            {
            case 0:
                s="фраза 1"; break;
            case 1:
                s="фраза 2"; break;
            // и так далее
            case 10:
                s="фраза 11"; break;

            }
        if (s!="") SpeakString(s);
        }


Минусы данного метода - для каждого такого НПС свой ХБ.
Что можно сделать?
- повесить локалки на НПС в тулсете со строками, что он будет говорить. Соответственно тогда брать фразы надо будет из этих локалок.
(имхо лучший вариант. Тогда скрипт будет 1, но все будут говорить то, что ты записал для них)
Лито
Спасибо код вроде работает good.gif . С локалками надо разобраться...
Ferst
С переменными действительно проще smile.gif
На самом неписе делаете заранее подготовленные локальные переменные (у каждого объекта есть это свойство)
переменные будут иметь имена

speach1
speach2
speach3
.....

А код изменится соответственно:
Neverwinter Script Source
/// ВО ВРЕМЯ БОЯ И ДИАЛОГА С РС ФРАЗЫ НЕ ГОВОРИМ
if ((!IsInConversation(OBJECT_SELF))&&(!GetIsInCombat(OBJECT_SELF)))
        {
        string s;
        GetLocalString(OBJECT_SELF, "speach"+IntToString(Random(20)));
        if (s!="") SpeakString(s);
        }


Надеюсь, как устанавливать переменные все знают.

Кстати. Вот скрипт, построенный на таком же принципе:
Neverwinter Script Source
void main()
{
if (GetLocalInt(OBJECT_SELF, "treaschest_rnd_open")==FALSE)
{
  string sItem = GetLocalString(OBJECT_SELF, "treaschest_rnd_"
       +IntToString(Random(GetLocalInt(OBJECT_SELF, "treaschest_rnd_col"))+1));
  object oItem = CreateItemOnObject(sItem);

  SetLocalInt(OBJECT_SELF, "treaschest_rnd_open", TRUE);
  DelayCommand(60.0f, SetLocked(OBJECT_SELF, TRUE));
  DelayCommand(60.0f, DeleteLocalInt(OBJECT_SELF, "treaschest_rnd_open"));
}
}

Вешается на onOpen.
Сундук открывается ключом, затем создается случайный предмет, из списка ResRef`ов, заданных заранее в переменных
"treaschest_rnd_*"
Где * : 1..GetLocalInt(OBJECT_SELF, "treaschest_rnd_col")
То есть и максимальная величина задается в переменной.
Если переменная пустая, то объект не создастся, что может внести элемент неудачи при генерации сокровища.
Через 60 секунд сундук автоматически запирается.

if (GetLocalInt(OBJECT_SELF, "treaschest_rnd_open")==FALSE)
Введено для невозможности генерации сокровищ, если сундук еще не закрылся на ключ.

ЗЫ: Надеюсь, пост не был лишним smile.gif
Lex
QUOTE (Ferst @ Apr 2 2005, 21:57)
На самом деле, с переменными еще проще может быть

я и написал, что
QUOTE (Lex @ Apr 2 2005, 17:08)
Минусы данного метода - для каждого такого НПС свой ХБ.
Что можно сделать?
- повесить локалки на НПС в тулсете со строками, что он будет говорить. Соответственно тогда брать фразы надо будет из этих локалок.
(имхо лучший вариант. Тогда скрипт будет 1, но все будут говорить то, что ты записал для них)

smile.gif Просто расписывать не стал.
Лито
А у меня новая задачка. Кто играл в Готику, видел как с наступлением ночи, торговцы на рыночной площади, расходятся по своим домам.
Хотелось бы сделать что то подобное. Есть торговец, с наступлением ночи он двигается к объекту (к двери например), после чего дестроится. С наступлением дня, торговец создается около двери и двигается к своей точке на рынке. Не знаю как подступится, наверное снова через хартбит... dntknw.gif

Ferst, у тебя какой то косяк в коде unsure.gif
Lex
Добавлено в 10:26
Лито,
1. Лучше не destroy-create а jump. (сделай закрытую локу и туда их перемещай. Я сам так делал со своими прохожими в Тсурлаголе.)
2. через ЮД.

Вот кусок кода из моего скрипта, может пригодится:
Neverwinter Script Source
if ((GetIsDay())&&(GetTag(GetArea(OBJECT_SELF))=="TSUR_COMMON_REST"))
    {
       SetLocalInt(OBJECT_SELF,"BUSY",FALSE);
       JumpToObject(GetObjectByTag("WP_TSUR_PLOT_DOOR",Random(38)));
       /// Джамп из закрытой локи к одному из 38 поинтов, что стоят у меня около дверей
       return;
    }
if ((GetIsNight())&&(GetTag(GetArea(OBJECT_SELF))!="TSUR_COMMON_REST"))
    {
       if (GetCurrentAction(OBJECT_SELF)==ACTION_MOVETOPOINT) return;
       ClearAllActions();
       // если игрок в локе, то идем к ближайшему поинту около двери
       if (GetArea(OBJECT_SELF)==GetArea(GetFirstPC()))
          {
          object oPoint = GetNearestObjectByTag("WP_TSUR_PLOT_DOOR");
          DelayCommand(0.5,SetCommandable(FALSE,OBJECT_SELF));
          ActionForceMoveToObject(oPoint,FALSE,1.0,20.0);
          ActionJumpToObject(GetObjectByTag("WP_TSUR_NIGHT"));
          ActionDoCommand(SetCommandable(TRUE,OBJECT_SELF));
          }
       else /// а если игрока в локе нет и НПС никто не видит, то сразу джампаемся
          {
          ClearAllActions();
          JumpToObject(GetObjectByTag("WP_TSUR_NIGHT"));
          }
       return;
    }


У тебя чуть другай история. Надо брать не ближайший поинт, а свой для каждого торгаша. И появляться он должен не у случайного поинта, а у своей двери.
Соответственно сделай на нем 2 локалки. Тэг его поинта дневного, где он стоит и торгует и тэг его поина у двери. И выбирай тэги поинтов для движения оттуда. smile.gif
удачи
Лито
А теперь смертельный номер swoon.gif Как запуститть ЮД? blush.gif
Lex
в скрипте onSpawn есть вот такой кусок.
Neverwinter Script Source
// ***** CUSTOM USER DEFINED EVENTS ***** /


    /*
      If you uncomment any of these conditions, the creature will fire
      a specific user-defined event number on each event. That will then
      allow you to write custom code in the "OnUserDefinedEvent" handler
      script to go on top of the default NPC behaviors for that event.

      Example: I want to add some custom behavior to my NPC when they
      are damaged. I uncomment the "NW_FLAG_DAMAGED_EVENT", then create
      a new user-defined script that has something like this in it:

      if (GetUserDefinedEventNumber() == 1006) {
          // Custom code for my NPC to execute when it's damaged
      }

      These user-defined events are in the range 1001-1007.
    */


    // * Fire User Defined Event 1001 in the OnHeartbeat
    // *
    // SetSpawnInCondition(NW_FLAG_HEARTBEAT_EVENT);

    // * Fire User Defined Event 1002
    // *
    // SetSpawnInCondition(NW_FLAG_PERCIEVE_EVENT);

    // * Fire User Defined Event 1005
    // *
    // SetSpawnInCondition(NW_FLAG_ATTACK_EVENT);

    // * Fire User Defined Event 1006
    // *
    // SetSpawnInCondition(NW_FLAG_DAMAGED_EVENT);

    // * Fire User Defined Event 1008
    // *
    // SetSpawnInCondition(NW_FLAG_DISTURBED_EVENT);

    // * Fire User Defined Event 1003
    // *
    // SetSpawnInCondition(NW_FLAG_END_COMBAT_ROUND_EVENT);

    // * Fire User Defined Event 1004
    // *
    // SetSpawnInCondition(NW_FLAG_ON_DIALOGUE_EVENT);

Раскоментируй строки типа SetSpawnInCondition(...);

Как видишь, тут каждому (почти) слоту НПС соответствует эвент.
В скрипте onUserDefined напиши такой шаблон.
Neverwinter Script Source
void main()
{
    int nEvent = GetUserDefinedEventNumber();

    if (nEvent == EVENT_HEARTBEAT) {

    } else if (nEvent == EVENT_PERCEIVE) {

    } else if (nEvent == EVENT_DIALOGUE) {

    } else if (nEvent == EVENT_DISTURBED) {

    } else if (nEvent == EVENT_ATTACKED) {

    } else if (nEvent == EVENT_DAMAGED) {

    } else if (nEvent == EVENT_END_COMBAT_ROUND) {

    } else if (nEvent == EVENT_SPELL_CAST_AT) {

    }
}


Теперь то, что тебе нужно пиши там, где у нас проверяется то, что EVENT_HEARTBEAT
Лито
Решил сделать без вэйпоинтов, чтобы просто - ночью прыгает в локацию, днем на торговый пост. Но не работает dntknw.gif
Вот что я делал:
На спавн торговца поставил стандартный скрипт и изменил в нем строчку:
Neverwinter Script Source
......... These user-defined events are in the range 1001-1007.
    */

    // * Fire User Defined Event 1001 in the OnHeartbeat
    // *
    SetSpawnInCondition(NW_FLAG_HEARTBEAT_EVENT);

    // * Fire User Defined Event 1002
    // *
    // SetSpawnInCondition(NW_FLAG_PERCIEVE_EVENT);....

А на ЮД
Neverwinter Script Source
void main()
{
    int nEvent = GetUserDefinedEventNumber();

    if (nEvent == EVENT_HEARTBEAT)
    {
    if (GetIsDay())
    {
    JumpToObject(GetObjectByTag("POST_Ishanbek"));
    return;
    }
    if(GetIsNight())
    {
    JumpToObject(GetObjectByTag("Ishanbek_night"));
    return;
    }
    }
     else if (nEvent == EVENT_PERCEIVE) {

    } else if (nEvent == EVENT_DIALOGUE) {

    } else if (nEvent == EVENT_DISTURBED) {

    } else if (nEvent == EVENT_ATTACKED) {

    } else if (nEvent == EVENT_DAMAGED) {

    } else if (nEvent == EVENT_END_COMBAT_ROUND) {

    } else if (nEvent == EVENT_SPELL_CAST_AT) {

    }
}


Видимо что то я с ЮД намудрил, или просто скрипт неправильно написан... dntknw.gif

А вообще я не до конца понимаю смысл ЮД, если он повторяет функцию эвента OnHeartBeat...ну или любого другого.Не легче ли тогда поставить сразу ХБ?
Lex
1. Если тебе надо что-то написать в ХБ, что-то в персепшн, что-то в атаку.. Скрипт через ЮД получится всего 1.
2. Вроде как (точно я не знаю) в отличие от ХБ, ЮД выполняется не в привелигированом режиме, со всеми вытекающими отсюда +

Не знаю, что там у тебя не выходит, но лучше вместо
Neverwinter Script Source
if (GetIsDay())
    {
    JumpToObject(GetObjectByTag("POST_Ishanbek"));
    return;
    }
    if(GetIsNight())
    {
    JumpToObject(GetObjectByTag("Ishanbek_night"));
    return;
    }

вот этим
Neverwinter Script Source
ClearAllActions();
if ((GetIsDay())&&(GetLocalInt(OBJECT_SELF,"SLEEP")))
    {
    ActionJumpToObject(GetObjectByTag("POST_Ishanbek"));
    SetLocalInt(OBJECT_SELF,"SLEEP",FALSE);
    }
else if ((GetIsNight())&&(!GetLocalInt(OBJECT_SELF,"SLEEP")))
    {
    ActionJumpToObject(GetObjectByTag("Ishanbek_night"));
    SetLocalInt(OBJECT_SELF,"SLEEP",TRUE);
    }

Лито
Нет...не работает, придется обойтись без этого cray.gif
Лито
Вопрос к скрипту из темы "База скриптов". Есть там один интересный скрипт - температурный.
Проблема в том, после того как игрок войдет в локацию с таким скриптом, на него видимо ставится какая то переменная. Запускается таймер по которому наносится урон (холодом или жарой...). Но когда из локации выходишь, таймер все равно продолжает работать dntknw.gif
Не есть хорошо shout.gif
Lex
гы..это к Майлзу, он скрипт писал. smile.gif Но вообще добавь уничтожение локалки на выходе из локи и будет тебе счастье. smile.gif
Лито
QUOTE (Lex @ Apr 5 2005, 14:28)
гы..это к Майлзу, он скрипт писал. smile.gif Но вообще добавь уничтожение локалки на выходе из локи и будет тебе счастье. smile.gif

Так ведь поставил
Neverwinter Script Source
void main()
{
object oPC=GetExitingObject();
int iTimes=GetLocalInt(oPC,"TemperatureDamageTimer");
DeleteLocalInt(oPC,"TemperatureDamageTimer");
}

Все равно black eye.gif Может дело в том, что я ДМом выпрыгиваю из локи в другую? smile.gif
mamuc
именно..а ты попробуй не выпригивать а выйти как все нормальные игроки pardon.gif

п.с. кстати обычно такие вещи делают с " не для ДМа"( или перса, в который вселился ДМ), что бы не отвлекаться лишний раз по поводу этого , когда ДМ квест проводит..
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.
Invision Power Board © 2001-2024 Invision Power Services, Inc.