Kondor
Mar 29 2005, 21:39
Все вопрос исчерпан, теперь другои, мне надо чтобы человек был невидим и подходл к тебе когда наступаешь на тригер. А вслучае неудачной проверки уходит и исчезает, если не трудно.
Насколько я понимаю, посадка ПС и НПС на стул происходит только в определенном направлении, не зависимо от ориентации стула. Или на ориентацию влияет сам скрипт?
Kondor
Mar 29 2005, 21:58
Vhall’rafein Не там направление зависит, куда стрелка туда садится, у меня так было, я не знаю точно.
Добавлено в [mergetime]1112122770[/mergetime]
Точнея не помню
, но кажется так.
ГОСПОДА НОВОИЧКИ. ЕСЛИ У ВАС ЕСТЬ ВОПРОС, ОФОРМИТЕ ЕГО ПО ВОЗМОЖНОСТИ ПОДРОБНО И В ОДНОМ ПОСТЕ. НЕ НАДО ФЛУДИТЬ ТУТ НЕ ЧАТ А ФОРУМ. А МОДЕРАТОРАМ РЕКОМЕНДУЮ НАЧАТЬ ПРЕДУПРЕЖДАТЬ.
][umepa
Mar 29 2005, 22:17
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
Mar 29 2005, 23:24
QUOTE |
а когда непись на стул садиться на чё эту команду повесить? |
Либо в OnHearBeat либо в OnSpawn
QUOTE |
ты имел ввиду -100 поменять на -16 и ниже? |
Вообще-то -100 - это репутация ПС в глазах НеПиСя и вообще ты про мою команду спрашиваешь или про скрипт Nokoll`a?
Добавлено в 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)));, либо наоборот...
Хм... И вообще, где у тя показано, кто такой oNPC и PC?Вот, вставь это в начало скрипта: Neverwinter Script Source |
object oPC = GetEnteringObject(); if (!GetIsPC(oPC)) return; object oNPC=GetObjectByTag("ТЭГ_НеПиСя"); |
Tiger Greyhawk
Mar 30 2005, 04:38
Х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 поможет разобраться в скриптах. + заходи на канал (см. мою подпись)
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
Mar 30 2005, 10:52
QUOTE |
ээ..ты так и написал????? |
Написал я, но он неправильно подставил... Кста, я ошибся, ты ж сначала говоришь, а потом они должны напасть?
Тогда замени:
Neverwinter Script Source |
object oPC = GetEnteringObject(); if (!GetIsPC(oPC)) return; |
на:
Neverwinter Script Source |
object oPC = GetPCSpeaker(); |
УПС... Это уже Lex сказал, извиняюсь, что повторился...
Добавлено в 12:58
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))); |
и т.д.
QUOTE (Lex @ Mar 30 2005, 09:27) |
влияет. У меня НПС сидят на стульях полукругом. (на стандартных биоваровских стульях) С ориентацией проблемы когда сажаешь например на нивидимку. |
huh?!
Вот скрипт:
Neverwinter Script Source |
//by Tigra  void main() { object oStul = OBJECT_SELF; if (!GetIsObjectValid(GetSittingCreature(OBJECT_SELF))) { AssignCommand(GetLastUsedBy(), ActionSit(oStul)); } } |
Перс садится только в одном направлении, независимо от положения стула. Даже на спинку
Алексашка
Mar 30 2005, 18:54
LEX Можно заставить говорить непися и не вставая. Только в on conversation скрипте прописать, что диалог ведет невидимый объект. Ставишь этот объект под стул на который сядет непись, называешь именем непися, присваиваешь его портрет и в случае диалога на тебя реагирует невидимый объект, а непись остается сидеть.
Archangel
Mar 30 2005, 20:12
Люди, помогите... Почему этот скрипт не работает, а точнее работает но на половину...
Когда день, то НеПиСь идет куда ему положено, а когда наступает ночь, то он стоит, как вкопаный...
Вот сам скрипт:
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 НеПиСя, но не помогает...
ЗЗЫ
Самое интересное, что все компилится...
Алексашка
Mar 30 2005, 20:32
QUOTE (Archangel @ Mar 30 2005, 20:12) |
Люди, помогите... Почему этот скрипт не работает, а точнее работает но на половину... Когда день, то НеПиСь идет куда ему положено, а когда наступает ночь, то он стоит, как вкопаный... Вот сам скрипт:
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 НеПиСя, но не помогает... ЗЗЫ Самое интересное, что все компилится... |
heartbeat не пробовал? Результат не гарантирую. Сейчас сам попробую
Archangel
Mar 30 2005, 20:56
QUOTE |
heartbeat не пробовал? Результат не гарантирую. Сейчас сам попробую |
Это не поможет. Стопудово... Просто НеПиСь будет повторять одну и туже фразу каждые 5-6 секунд...
QUOTE (Archangel @ Mar 30 2005, 20:12) |
Люди, помогите... Почему этот скрипт не работает, а точнее работает но на половину... Когда день, то НеПиСь идет куда ему положено, а когда наступает ночь, то он стоит, как вкопаный... |
Всем: Вроде бы человек сказал, что не работает наполовину. При чем тут событие?
Первая и вторая часть отличаются только одним - вейпоинтом (фраза не в счет).
Может, просто нет вейпоинта с таким именем?

Да, и еще. Сделайте оптимизировано. Зачем два раза проверять одно и то же условие?
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))); } } |
Алексашка
Mar 30 2005, 21:52
С этим скриптом у меня все работает. Я его слегка подредактировал.
Ставил на 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;
}
}
Archangel
Mar 30 2005, 22:16
Алексашка, огромное те Архангеловское спасибо.
Только вот загвостка... Будет ли НеПиСь делать это каждый день, т.е.:
День, затем ночь, потом снова день, потом ночь и т.д. Или он только 1 раз это сделает?
ЗЫ
Самому лень проверять... Имхо оч долго ждать надо...
Алексашка
Mar 30 2005, 22:16
QUOTE (Ferst @ Mar 30 2005, 21:07) |
Всем: Вроде бы человек сказал, что не работает наполовину. При чем тут событие?
Первая и вторая часть отличаются только одним - вейпоинтом (фраза не в счет). Может, просто нет вейпоинта с таким именем? 
Да, и еще. Сделайте оптимизировано. Зачем два раза проверять одно и то же условие?
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 непись может ночью спать, а днем дрова рубить например.
Алексашка
Mar 30 2005, 22:20
QUOTE (Archangel @ Mar 30 2005, 22:16) |
Алексашка, огромное те Архангеловское спасибо. Только вот загвостка... Будет ли НеПиСь делать это каждый день, т.е.: День, затем ночь, потом снова день, потом ночь и т.д. Или он только 1 раз это сделает? ЗЫ Самому лень проверять... Имхо оч долго ждать надо... |
Будет делать. Куда он денется.

Для этого и ставится на heartbeat. А переменные day & night для того чтобы он каждый раунд не пытался вопить и идти к точке.
QUOTE (Алексашка @ Mar 30 2005, 22:16) |
Оптимизация вещь хорошая. Только ClearAllActions ставить лучше после выполнения условий день или ночь. Тогда в spawne непись может ночью спать, а днем дрова рубить например. |
Мда... Невнимательность продолжается.
Кто-то сказал, что это Хиартбит? Я уже говорил, что о событии человек не спрашивал.
Алексашка
Mar 30 2005, 22:30
QUOTE (Ferst @ Mar 30 2005, 22:26) |
Мда... Невнимательность продолжается. Кто-то сказал, что это Хиартбит? Я уже говорил, что о событии человек не спрашивал. |
Сплошной оффтопик. Я не говорю о чем он спрашивал, Я говорю, как работает. Я понял задачу так: Непись днем пашет, а ночью идет спать. И это каждый день и ночь. А не разовая команда.

Не воспринимай критику в штыки.
Это не офтопик, а уточнее, что написано не для хиартбита, а основываясь на том, что было указано в вопросе.
Я не против критики, если она имеет смысл быть.
Nokoll
Mar 30 2005, 22:38
Neverwinter Script Source |
if (GetIsNight()&& GetLocalInt(oN1, "Night") != 1) |
Вроде надо поставить число. не 1 а нвпример 10!
Добавлено в [mergetime]1112211572[/mergetime] Алексашка Выделяй весь свой скрипт и нажимай NSS. Так всем легче будет понятно!
Nokoll
Mar 31 2005, 01:30
QUOTE |
Не подкинет ли кто скриптик для закрытия двери ночью? |
Вот Арх, можеш например онЭнтер Локации поставить.(Писал без Туллса, Мож чё неправильно!).
Neverwinter Script Source |
void main() { object oDoor = GetObjectByTag("DOOR_NIGHT"); if (GetIsNight()==TRUE) { DelayCommand(7.0,ActionCloseDoor(oDoor))); } } |
Tiger Greyhawk
Mar 31 2005, 05:58
QUOTE (Nokoll @ Mar 30 2005, 22:38) |
Neverwinter Script Source | (GetIsNight()&& GetLocalInt(oN1, "Night") != 1) |
Вроде надо поставить число. не 1 а нвпример 10!
|
Nokoll, в данном случае 1 для проверки истинности\ложности условия. Что угодно там можно ставить. Главное и переменную потом менять на именно эту цифру.
2
Archangel Запирание дверей на ночь. Есть в базе скриптов. Ссылка на пост со скриптом 
QUOTE (Archangel @ Mar 30 2005, 22:16) |
ЗЫ Самому лень проверять... Имхо оч долго ждать надо... |
А поставить 1 час = 1 минуте не судьба? Изменить начало дня и ночи и проверить на двух сменах. А?
QUOTE (Aiwan @ Mar 29 2005, 22:01) |
ГОСПОДА НОВОИЧКИ. ЕСЛИ У ВАС ЕСТЬ ВОПРОС, ОФОРМИТЕ ЕГО ПО ВОЗМОЖНОСТИ ПОДРОБНО И В ОДНОМ ПОСТЕ. НЕ НАДО ФЛУДИТЬ ТУТ НЕ ЧАТ А ФОРУМ. А МОДЕРАТОРАМ РЕКОМЕНДУЮ НАЧАТЬ ПРЕДУПРЕЖДАТЬ. |
похоже особо этот пост никого не вразумил.
ОФФТОП потерт
][umepa
Mar 31 2005, 09:24
2 archangel ЗАРАБОТАЛО
ВОПРОС:
1МОЖНО ЛИ СДЛЕАТЬ ДИАЛОГ 2-УХ НЕПИСЕЙ(ТИПА ОДИН СТОИТ НАПРОТИВ ДРУГОГО И НАД НИМИ ПОЯВЛЯЮТСЯ ИХ РЕПЛИЛКИ)
2НЕ МОГ БЫ ТЫ ВЫЛОЖИТЬ КОМАНДЫ АНИМАЦИИ ?
Еще раз поворю и влеплю для острастки предов пару. КТо будет флудить тут забаню нахер на неделю! Все вопросы что вы тут постите уже разбирались!

Поисковиком пользуйтесь. И нехрен изобретать КРИВЫЕ скрипты когда в базе лежат нормальные или в форуме старом ан рельсах. Детский сад ,емае... Так кому навешать пилюлей? *Оворачивается в поисках жертвы...*
QUOTE |
Так кому навешать пилюлей? *Оворачивается в поисках жертвы...* |
][umepa
Mar 31 2005, 19:54
{осторожно осматриваясь по сторонам тихо шепчет}
а где-нить есть обновления для редактора а то некотрые erf. файлы не открываются пише ттипа версия редактора левая{.
аакуратно осматирваясь уходит в тень}
Айван: Кто из нас идиот? Каого бока касается ереф в теме скриптов? Бан на три дян за идиотизм. Очень странно и непонятно твое поведение. Я огорчен, думал ты нормальный парень.
Засрали всю тему, как новички. Позор. Тошно смотреть.
Friedrich
Mar 31 2005, 20:50
Какие .erf файлы? Это при импорте такое пишет? Ни разу не видел.
А так, вообще, тулсет вместе с игрой обновляется. А где патчи брать (у Биоварей) и как их ставить - это тема отдельная и во многих местах давно описанная.
И это не по скриптам, вроде, вопрос.
Добавлено в [mergetime]1112293239[/mergetime] Действительно, экспортированное из 1.64 в 1.62 экспортироваться не будет (кто бы мог подумать?). Однако, это можно легко обойти. Переименуй .erf в .hak, открой его, удали оттуда ExportInfo.gff, сохрани, переименуй обратно в erf. Усе!
QUOTE |
1МОЖНО ЛИ СДЛЕАТЬ ДИАЛОГ 2-УХ НЕПИСЕЙ(ТИПА ОДИН СТОИТ НАПРОТИВ ДРУГОГО И НАД НИМИ ПОЯВЛЯЮТСЯ ИХ РЕПЛИЛКИ) |
У меня получается попробуй так. на onEnter Локации.
DelayCommand(60.0, AssignCommand(oHi, ActionStartConversation(oPC, "hiller_talk", FALSE,FALSE)));
вместо моего oHi сделаеш своего, а вместо диалога "hiller_talk" Свой поставиш!
Добавлено в [mergetime]1112360846[/mergetime] Friedrich Что то я думаю ты наспамил, не здесь и не там, Айван, рассердится!
У меня повилась идея сделать оборотня. Впринципе в стандартной палитре бандиты, которые полиморфятся, если нанести им урон.
Поковырявшись в скриптах стандартного полиморфа, я понял что тип полиморфа задается константой...
Но проблема в том, что мне нужен полиморф не в стандартного моба, а которого я сам укажу.(то бишь кастомный)
Впринципе можно сделать проще. Когда наносится урон, существу которое должно превращатся, оно дестроится и на его место создается уже готовая форма волка(ну или еще кого), но все же хотелось бы узнать, возможен ли более продвинутый способ
Можно.
Надо в polymorph.2da добавить нужный тебе полиморф.
В тему 2да таблицы сходи.
У меня еще один вопрос. Необходимо сделать следующие:
Есть стражник который идет по двум вэйпоинтам. На ходу он должен говорить фразы, как бы самому себе.Типа: "Левой-правой, раз-два-три!", "Мои бедные ноги...".
Ходьбу по вэйпоинтам я сделал

и с разговором управился, но соединить эти два действия у меня не получается. Либо стражник стоит и говорит сам с собой, либо он бодро шагает по заданому пути...
Сделал такой скрипт:
для разговора с самим собой
Neverwinter Script Source |
void main() { ActionStartConversation(OBJECT_SELF); } |
Навскидку 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, но все будут говорить то, что ты записал для них)
Спасибо код вроде работает

. С локалками надо разобраться...
С переменными действительно проще

На самом неписе делаете заранее подготовленные локальные переменные (у каждого объекта есть это свойство)
переменные будут иметь имена
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)
Введено для невозможности генерации сокровищ, если сундук еще не закрылся на ключ.
ЗЫ: Надеюсь, пост не был лишним
QUOTE (Ferst @ Apr 2 2005, 21:57) |
На самом деле, с переменными еще проще может быть |
я и написал, что
QUOTE (Lex @ Apr 2 2005, 17:08) |
Минусы данного метода - для каждого такого НПС свой ХБ. Что можно сделать? - повесить локалки на НПС в тулсете со строками, что он будет говорить. Соответственно тогда брать фразы надо будет из этих локалок. (имхо лучший вариант. Тогда скрипт будет 1, но все будут говорить то, что ты записал для них) |

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

Ferst, у тебя какой то косяк в коде
Добавлено в 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 локалки. Тэг его поинта дневного, где он стоит и торгует и тэг его поина у двери. И выбирай тэги поинтов для движения оттуда.

удачи
А теперь смертельный номер

Как запуститть ЮД?
в скрипте 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
Решил сделать без вэйпоинтов, чтобы просто - ночью прыгает в локацию, днем на торговый пост. Но не работает
Вот что я делал:
На спавн торговца поставил стандартный скрипт и изменил в нем строчку:
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) {
} } |
Видимо что то я с ЮД намудрил, или просто скрипт неправильно написан...

А вообще я не до конца понимаю смысл ЮД, если он повторяет функцию эвента OnHeartBeat...ну или любого другого.Не легче ли тогда поставить сразу ХБ?
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); } |
Нет...не работает, придется обойтись без этого
Вопрос к скрипту из темы "База скриптов". Есть там один интересный скрипт - температурный.
Проблема в том, после того как игрок войдет в локацию с таким скриптом, на него видимо ставится какая то переменная. Запускается таймер по которому наносится урон (холодом или жарой...). Но когда из локации выходишь, таймер все равно продолжает работать
Не есть хорошо
гы..это к Майлзу, он скрипт писал.

Но вообще добавь уничтожение локалки на выходе из локи и будет тебе счастье.
QUOTE (Lex @ Apr 5 2005, 14:28) |
гы..это к Майлзу, он скрипт писал. Но вообще добавь уничтожение локалки на выходе из локи и будет тебе счастье. |
Так ведь поставил
Neverwinter Script Source |
void main() { object oPC=GetExitingObject(); int iTimes=GetLocalInt(oPC,"TemperatureDamageTimer"); DeleteLocalInt(oPC,"TemperatureDamageTimer"); } |
Все равно

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

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