Помощь - Поиск - Пользователи - Календарь
Полная версия: Вопросы новичков
Город Мастеров > РЕДАКТОРЫ > Neverwinter Nights Aurora Toolset
Страницы: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103
Dik Morris
Артём, в принципе первый скрипт написан верно, причин чтобы он не работал я не вижу. По поводу второго, нужно просто налаживать временный эффект или бесконечный.
Артём
Что первый работает я знаю.
А вот кто мне сможет отредоктирывать второй не знаю?
В скриптах я чайник только недавно стал кое-что понимать!
Dik Morris
В своем предыдущем посте я уже говорил, что нужно налаживать временный эффект, либо бесконечный.

DURATION_TYPE_PERMANENT - бесконечный ;
DURATION_TYPE_TEMPORARY - временный.

Т.е строка будет выглядеть так:
NSS
ApplyEffectAtLocation(см. выше, EffectVisualEffect(VFX_DUR_GHOSTLY_PULSE ), lSparks));
Артём
DURATION_TYPE_PERMANENT - эта я пробовал давно. Он не выдаёт ашыбку, но и не даёт желаемого эффекта.
Щя буду пробывать другой вариант! biggrin.gif
Lex
там еще третий тип есть, инстанс (постоянный) попробуй с ним.
Scrat
Как сделать систему лута?

И как сделать так чтобы за крыс (например) будут давать на первом левеле 300експ, на 2 200експ, на 3 100експ?
Zirrex
Scrat, а для этого существуют системы распределение опыта. Что же касается системы лута, то аналогично. Пробные и рабочие системы можно найти здесь.
Solmyr2000
У меня два оооочень глупых вопроса smile.gif , связанных...с трупами... angel.gif :

1. Как убрать появление рандомных вещей на трупах? bad.gif

2. Как заставить появляться золото в трупе? (Тулсет перелазил - не нашел, а если через скрипты, вешать на каждого - это не слишком хорошо, потому что скриптов станет....... shok.gif )
Scrat
Zirrex а где именно?

и как тоже заставить золото появляться в трупах?
Артём
Наверное чтобы убрать появление вищей нодо удалить строку OnCombatRoundEnd. scratch_one-s_head.gif
Хотя точно я незнаю. sad.gif
azathoth
QUOTE(Solmyr2000 @ Jun 29 2006, 16:39) [snapback]86460[/snapback]
1. Как убрать появление рандомных вещей на трупах?

2. Как заставить появляться золото в трупе? (Тулсет перелазил - не нашел, а если через скрипты, вешать на каждого - это не слишком хорошо, потому что скриптов станет....... )

Не станет, у каждого существа есть уже установленые наборы скриптов. И можно написать один скрипт для всех. За появление рандомных вещей отвечает "nw_c2_default9" (этот скрипт выполняется при появлении существа), а конкретнее вот эта вот часть:
NSS
if ((GetLocalInt(GetModule(), "X2_L_NOTREASURE") == FALSE)  &&
        (GetLocalInt(OBJECT_SELF, "X2_L_NOTREASURE") == FALSE)   )
    {
        CTG_GenerateNPCTreasure(TREASURE_TYPE_MONSTER, OBJECT_SELF);
    }

Сотри ее, откомпилируй скрипт и сохрани модуль с измененным скриптом - так извавишься от рандомных вещей. Можешь также создать свой скрипт и поставить его всем твоим существам.

Появление золота в трупе можно сделать в этом же скрипте, или в скрипте, вызывающемся при смерти - cм. событие OnDeath, (стандартный cкрипт - "nw_c2_default7").
---
QUOTE(Артём @ Jun 29 2006, 17:07) [snapback]86467[/snapback]
Наверное чтобы убрать появление вищей нодо удалить строку OnCombatRoundEnd.
Неа, не надо ее удалять wink3.gif Тот скрипт вызывается для того чтобы науськивать монстра на врагов в битве.
Solmyr2000
Спасибо за рандомные вещи.
НО:

QUOTE
Появление золота в трупе можно сделать в этом же скрипте, или в скрипте, вызывающемся при смерти - cм. событие OnDeath, (стандартный cкрипт - "nw_c2_default7").


Azathoth, это я прекрасно знаю declare.gif . Даже могу привести скрипт, который это делает. biggrin.gif

Но мне надо именно НЕ через скрипты (читай пост) rtfm.gif . Или это не возможно? Просто модуль "засорится" скриптами, если это делать.

QUOTE(Артём @ Jun 29 2006, 17:07) [snapback]86467[/snapback]

Наверное чтобы убрать появление вищей нодо удалить строку OnCombatRoundEnd. scratch_one-s_head.gif
Хотя точно я незнаю. sad.gif

Нет, эта строка отвечает за конец раунда. Кстати, туда можно всунуть боевые крики. moil.gif

QUOTE
Zirrex а где именно?


vava.gif Он тебе предложил обыскать весь волт.
azathoth
QUOTE(Solmyr2000 @ Jun 29 2006, 21:19) [snapback]86498[/snapback]
Но мне надо именно НЕ через скрипты (читай пост) . Или это не возможно? Просто модуль "засорится" скриптами, если это делать.

Не скриптами - тупо положи деньги в инвентарь существа.
А вообще не бойся засорить модуль ни скриптами, они так же нелишни как диалоги, предметы и неписи. К тому же можно отделаться малой кровью - одним скриптом, в котором основываясь на, к примеру расе и уровне существа создвать нужное кол-во денег.
Solmyr2000
QUOTE
Не скриптами - тупо положи деньги в инвентарь существа.

Наконец-то меня поняли.
Теперь внимание, вопрос rofl.gif - как?
azathoth
QUOTE(Solmyr2000 @ Jun 29 2006, 22:35) [snapback]86516[/snapback]
Наконец-то меня поняли.
Теперь внимание, вопрос - как?
Звиняй, на курсы телепатии не ходил biggrin.gif

На существо правой кнопкой: "Properties"->"Inventory..."->"Standart Items"->"Miscellaneous"->"Other"->"Gold Piece". Перетаскивешь это в инвентарь, затем жамкаешь на нем правой кнопкой и в поле "Stack Size" устанавливаешь количество монет. Престо.
Aiwan
Если бы новички пишущие сюда утруждали себя чтением того что им уже написано, то в этой теме процентов 70 можно было бы стереть...

Идем в раздел скриптов для новичков, если западло, отсоединяемся и гостем.
Читаем там мой спавн скрипт. В нем русским языком написано как создать любому монстру при спавне пяток монет или чаво нить исчо в его кармане. Мож кто на албанском продублирует?
NSS
//--------------------------------------------------------------------------
    // Создает небольшую сумму сокровища в инвентаре
    //--------------------------------------------------------------------------
    if ((GetLocalInt(GetModule(), "X2_L_NOTREASURE") == FALSE)  &&
        (GetLocalInt(OBJECT_SELF, "X2_L_NOTREASURE") == FALSE)  )
    {
        CTG_GenerateNPCTreasure(TREASURE_TYPE_MONSTER, OBJECT_SELF);
    }


Можно супер мега строкой скриптом. Смотри ниже. Естественно на хербит.

NSS
GiveGoldToCreature(OBJECT_SELF, 200-Random(50));


2. Вариант. Открываем инвентарь, находим справа итем ЗОЛОТО, кидаем в инвентарь, открываем свойства, устанавливаем в стеке сколько нам надо и закрываем. Если нет желания думать головой, думай руками. mosking.gif
Scrat
я в англ 0... я тамнече не понимаю...

как написать собственный скрипт?

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

что такое сеповский хак и как его подключить?
Solmyr2000
QUOTE(Aiwan @ Jun 30 2006, 00:36) [snapback]86526[/snapback]

2. Вариант. Открываем инвентарь, находим справа итем ЗОЛОТО, кидаем в инвентарь, открываем свойства, устанавливаем в стеке сколько нам надо и закрываем. Если нет желания думать головой, думай руками. mosking.gif

biggrin.gif Я вполне об этом догадывался, но есть интересный момент - wizard.gif итема золота там нету vampire.gif
Точнее есть,нашел, но оно называется 578747 shok.gif И выдает ошибку.
Может это из-за хака?

QUOTE(Aiwan @ Jun 30 2006, 00:36) [snapback]86526[/snapback]

Если бы новички пишущие сюда утруждали себя чтением того что им уже написано, то в этой теме процентов 70 можно было бы стереть...

crazy.gif а утруждением чтения поста никто не занимался? crazy.gif


QUOTE(Aiwan @ Jun 30 2006, 00:36) [snapback]86526[/snapback]

Можно супер мега строкой скриптом. Смотри ниже. Естественно на хербит.


Тем более я и так это сделал spiteful.gif Уже давным давно.
Но когда модуль разросся, он стал уже их не выносить. Зверски тормозит.

Все, удалил хак cray.gif
Но заработало.
Zirrex
Scrat, а что там знать? Входишь на Ваулт, и ищешь скрипты, которые посвящены именно твоим системам. Главное знать, какое слово искать.

Хотя бы это DMG Loot tables V 1.2 и PWFXP - XP Distribution Script.

Solmyr2000, есть стандартный предмет "Gold Piece". Находишь его в палитре, и изменяешь ему значение, сохраняя в кастомную палитру. Но на самом деле лучше все же сделать мелкий скрипт, а потом его выполнять на момент смерти существа. Я не знаю, что у тебя творится в модуле, потому что даже 1000 своих скриптов не вызывают тормозов, если они правильно написаны.
Solmyr2000
QUOTE(Zirrex @ Jun 30 2006, 09:57) [snapback]86549[/snapback]

Solmyr2000 Я не знаю, что у тебя творится в модуле, потому что даже 1000 своих скриптов не вызывают тормозов, если они правильно написаны.

У меня как всегда хуже всех. vampire.gif Кампания НВН например не тормозит, а Проклятье Левора стоит на разрешении 640x480. Ничего не замечаешь? prankster2.gif


QUOTE(Zirrex @ Jun 30 2006, 09:57) [snapback]86549[/snapback]

Solmyr2000, есть стандартный предмет "Gold Piece". Находишь его в палитре, и изменяешь ему значение, сохраняя в кастомную палитру.

Все, я же сказал, что удалил хак, и все заработало. Посты опять не читаем-с?
crazy.gif
Zirrex
Solmyr2000, сообщения читаем. Только что тебе мешало сделать кастомный предмет золота, когда у тебя стоял хак?

Ну знаешь, тормозить может на чем угодно, если компьютер превратить в помойку, или лишить его чего-то архиважного. Сколько работаю со своим модулем, никогда не было на нем тормозов. Одно но, у него нет хаков, но как я уже убедился, некоторые умудряются внести непонятные тормоза в свои модули даже без хаков. Что касается Левора, у меня он не тормозил ни разу.

И что это за хак такой, который портит стандартные предметы до такого состояния, что их нельзя использовать?
Artlira
Помогите пожалуйста, решить еще несколько вопросов.
1. Есть следующая ситуация: если игроком берется предмет из инвентаря саркофага – появляется определенное существо. Само появление решено с помощью скрипта, взятого из оригинальной кампании (слегка подправлено под собственные нужнды)

NSS
void main()
  {
    location lLoc = GetLocation(GetNearestObjectByTag("WP_NOSFERATU"));
    effect eVis = EffectVisualEffect(VFX_IMP_NEGATIVE_ENERGY);
    object oWamp = CreateObject(OBJECT_TYPE_CREATURE,"Wampir_Nosferatu",GetLocation(OBJECT_SELF));
    ApplyEffectAtLocation(DURATION_TYPE_INSTANT,eVis,GetLocation(oWamp));
}


Дело в том, что при любых манипуляциях с инвентарем ( скрипт стоит на OnDisturbed) создание появляется снова и снова, а персонаж диалоговый и квестовый. По сюжету, после первого появления “оно” больше в гроб не укладывается. А тут сплошные клоны…. Необходимо сделать этот скрипт “одноразовым”.
Я пробовала через переменную, по тому принципу как у вас на форуме решена проблема с триггерами, но тут что-то из разряда чудес получается – скрипт либо не срабатывает совсем, либо как положено, срабатывает однократно.

NSS
void main()
  {
    object oPC = GetEnteringObject();
  if (!GetIsPC(oPC) || GetLocalInt(OBJECT_SELF, "Nosferatu") = = 1)
        return;
  {
    location lLoc = GetLocation(GetNearestObjectByTag("WP_NOSFERATU"));
    effect eVis = EffectVisualEffect(VFX_IMP_NEGATIVE_ENERGY);
    object oWamp = CreateObject(OBJECT_TYPE_CREATURE,"Wampir_Nosferatu",GetLocation(OBJECT_SELF));
    ApplyEffectAtLocation(DURATION_TYPE_INSTANT,eVis,GetLocation(oWamp));
    SetLocalInt(OBJECT_SELF, "Nosferatu", 1);
}
}


Помогите пожалуйста, разобраться, в чем моя ошибка. Может быть oPC, в этом случае нужно присваивать какую-то другую функцию? А может вообще все решается по другому?

2. В случае смерти РС, появляется панель об отмене респауна и строкой, о том, что: “Факт смерти - явление окончательное и обсуждению не подлежит”. Возможно ли с помощью скрипта, сделать появление разных строк, в зависимости от расы игрока?

3. Есть несколько, так называемых “псевдофиналов”, т.е. модуль может быть закончен по-разному, в зависимости от выбора и сложившийся ситуации. Как с помощью скрипта вывести из диалога “посмертную” панель с соответствующим текстом? Понимаю, что через функцию: PopUpDeathGUIPanel (oPC(),FALSE, FALSE, 0, “Текст”); . Но вот как – ума не хватает….

P.S. Не нашла где еще написать, хотелось просто поблагодарить весь ваш форум за информационный багаж. Извините, но у вас нет ни одной темы – где можно просто сказать спасибо.

Айван: ты у нас на форуме, это уже результат. Извини, мы тут бореся с "левыми" посетителями. У нас есть оффтоп-форум, но он доступен с 100-го поста. Ты его не видишь. Сама понимаешь, наоффтопить у нас 100 постов безнаказанно сложно smile.gif Твоего сообщения в этом посте вполне достаточно thank_you.gif
gennady
QUOTE(Artlira @ Jul 6 2006, 04:22) [snapback]87252[/snapback]
Помогите пожалуйста, разобраться, в чем моя ошибка. Может быть oPC, в этом случае нужно присваивать какую-то другую функцию? А может вообще все решается по другому?

Artlira, желательно еще сделать проверку на тэг предмета, который берем.

NSS
void main()
{
object oItem = GetInventoryDisturbItem(); // Предмет
effect eVis = EffectVisualEffect(VFX_IMP_NEGATIVE_ENERGY);

if (GetLocalInt(OBJECT_SELF, "Nosferatu") == 1) return; // Выход из скрипта
if (GetTag(oItem) == "111") // Если берем нужный предмет
{
  object oWamp = CreateObject(OBJECT_TYPE_CREATURE,"Wampir_Nosferatu",GetLocation(OBJECT_SELF));
  DelayCommand(1.0, ApplyEffectAtLocation(DURATION_TYPE_INSTANT,eVis,GetLocation(oWamp)));
  SetLocalInt(OBJECT_SELF, "Nosferatu", 1);
  SpeakString("Извини Artlira за брак 1 скрипта. Теперь правильно!");
}
}

QUOTE(Artlira @ Jul 6 2006, 04:22) [snapback]87252[/snapback]
. В случае смерти РС, появляется панель об отмене респауна и строкой, о том, что: ”Факт смерти - явление окончательное и обсуждению не подлежит”. Возможно ли с помощью скрипта, сделать появление разных строк, в зависимости от расы игрока?


NSS
void main()
{
object oPlayer = GetLastPlayerDied();
if(GetRacialType(oPlayer) == RACIAL_TYPE_GNOME)
PopUpDeathGUIPanel(oPlayer, FALSE, TRUE, 0, "Я же гном?!");
if(GetRacialType(oPlayer) == RACIAL_TYPE_ELF)
PopUpDeathGUIPanel(oPlayer, FALSE, TRUE, 0, "Я же эльф?!");
}
Dik Morris
Artlira, по поводу третьего вопроса.
На строчку в диалоге, в вкладку ActionTakens, ставится скрипт:

NSS
void main()
{
  object oPC = GetPCSpeaker();

  FadeToBlack(oPC);
  SetCommandable(0, oPC);
  DelayCommand(1.5, PopUpDeathGUIPanel(oPC, FALSE, TRUE, 0, "Нужный_текст"));
}
-fenix-
Artlira, если у тебя стоит скрипт на OnDisturbed, то не нужно определеять игрока, как GetEnteringObject(), для этого случая есть своя функция - GetLastDisturbed().
Да и проверку на игрока тут делать-то и не надо, врятли у тебя НПС возьмет этот предмет из саркофага.

QUOTE(Artlira @ Jul 6 2006, 04:22) [snapback]87252[/snapback]
Возможно ли с помощью скрипта, сделать появление разных строк, в зависимости от расы игрока?

Конечно, проверяй расу игрока с помощью функции GetRacialType(object) и меняй посмертную надпись.
Astoret
Подскажите плиз функцию которая определяет левел NPSа, а лутше оценивает его сложность
Aiwan
NSS
// Get the number of hitdice for oCreature.
// * Return value if oCreature is not a valid creature: 0
int GetHitDice(object oCreature)
Lex
QUOTE(Astoret @ Jul 7 2006, 17:06) [snapback]87338[/snapback]
а лутше оценивает его сложность

GetChallengeRating
Noah
Люди!!Обьяснитe мне про flag и event я вроде врубаюсь но не совсем.Может гdе-то есть про это тема?
Artlira
Dik Morris спасибо за помощь. Панель выскакивает “на ура” (к сожалению, часть скрипта так и осталась для меня “туманной загадкой”, но видимо не все сразу…).

-fenix- благодарю за решение первого вопроса, с присвоением другой функции оРС – никаких чудес больше не наблюдается. И…
Вы абсолютно правы неписи по саркофагам не лазят… Бездумное копирование поставило меня в глупейшую ситуацию. “Если это не РС” – исправлено, осталась только обычная поверка переменной.

gennady , проверка на “фиксовый” предмет к сожалению проблемы не решает. Возможно я плохо объяснила ситуацию – юзанье любым предметом в инвентаре саркофага вызывает клонов. Может я зря заостряю на этом внимание (опыта в модулестроении у меня нет), но опыт “настолок” говорит, что при малейшем проколе ДМ(а), “Великий и Ужасный Манч бросает все дела, берет большую ложку и хавает до тех пор пока халява не закончится”… А в этом случае она никогда не закончится. Наверное можно сделать проверку и на любой предмет, но для меня это к сожалению слишком сложное решение. В любом случае, спасибо за помощь.

-fenix- и gennady спасибо за подсказку функции для “надгробной эпитафии” персонажей различных рас. Вроде бы получилось. (Аналог скрипта взят из "Левора" + подсказка с функцией GetRacialType(object))
NSS
void main()
{
object oPlayer = GetLastPlayerDied();
string sDeathMessage = "Текст";
{
if(GetRacialType(oPlayer) == RACIAL_TYPE_ELF)
sDeathMessage = " Текст _001 ";
DelayCommand(1.0, ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_DEATH), oPlayer));
DelayCommand(4.0,PopUpDeathGUIPanel(oPlayer, FALSE, TRUE, 0, sDeathMessage));
}
{
if(GetRacialType(oPlayer) == RACIAL_TYPE_HALFORC)
sDeathMessage = " Текст _002";
DelayCommand(1.0, ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_DEATH), oPlayer));
DelayCommand(4.0,PopUpDeathGUIPanel(oPlayer, FALSE, TRUE, 0, sDeathMessage));
}
{
DelayCommand(1.0, ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_DEATH), oPlayer));
DelayCommand(4.0, PopUpDeathGUIPanel(oPlayer, FALSE, TRUE, 0, sDeathMessage));
}
}

Компилится и работает, хотелось уточнить все ли верно с точки зрения “правописания” скриптов.
Dik Morris
Noah, это подробно описывается в Лексиконе.

Artlira, gennady исправил первый скрипт. Теперь все должно работать.
Aiwan
QUOTE(Artlira @ Jul 8 2006, 10:08) [snapback]87372[/snapback]
Компилится и работает, хотелось уточнить все ли верно с точки зрения “правописания” скриптов.

Я бы настоятельно не рекомендовал использовать одинаковое время таймингов команды DelayCommand() Будут проблемы. Меняй хотя бы на сотую долю секунды.
-fenix-
Artlira, скрипт компилится и работает, но работает не совсем правильно и просто так получилось, что он вообще работает. smile.gif

Ты не так блоки сформировала.
Скобки нужны для формирования блоков кода. Первая пара скобок относит все написанное к функции void main(), которая запускает весь скрипт на выполнение. Блоки же в условии группируют несколько функций под данным условием. Тобишь, если условие верно, то выполнить все функции включенные в блок условия. Поэтому блок начинается и скобка открывается, после условия, а не перед ним. Так же превыкай правильно оформлять скрипт, а именно, пользоваться пробелами и пропуском строки. Так будет куда удобнее разбираться.

Данный скрипт должен выглядеть так:
NSS
void main()
{
object oPlayer = GetLastPlayerDied();
string sDeathMessage = "Текст";

if(GetRacialType(oPlayer) == RACIAL_TYPE_ELF)
{
  sDeathMessage = " Текст _001 ";
  DelayCommand(1.0, ApplyEffectToObject(DURATION_TYPE_INSTANT,
  EffectVisualEffect(VFX_IMP_DEATH), oPlayer));
  DelayCommand(4.0,PopUpDeathGUIPanel(oPlayer, FALSE, TRUE, 0, sDeathMessage));
}

if(GetRacialType(oPlayer) == RACIAL_TYPE_HALFORC)
{
  sDeathMessage = " Текст _002";
  DelayCommand(1.0, ApplyEffectToObject(DURATION_TYPE_INSTANT,
  EffectVisualEffect(VFX_IMP_DEATH), oPlayer));
  DelayCommand(4.0,PopUpDeathGUIPanel(oPlayer, FALSE, TRUE, 0, sDeathMessage));
}
else
{
  DelayCommand(1.0, ApplyEffectToObject(DURATION_TYPE_INSTANT,
  EffectVisualEffect(VFX_IMP_DEATH), oPlayer));
  DelayCommand(4.0, PopUpDeathGUIPanel(oPlayer, FALSE, TRUE, 0, sDeathMessage));
}
}


Почемуже твой скрипт работает?

Дело в том, что можно формировать блоки просто для себя (анонимные блоки), для удобства, чтобы проще и нагляднее можно было разобраться в скрипте. Такие блоки ни к чему не относятся, если только не сделали ошибку и не поставили их перед, скажем, условием, без собственного блока, они служат просто как выделители, компилятор на них не ругается. В твоем случае так и получилось. Так как блок открывался ДО условия, то все, включая условие и кончая функцией открытия панельки, было воспринято, как анонимный блок. Дальше включилась в работу особенность условия. Дело в том, что один оператор относится к условию без формирования блока, нужно чтобы он просто шел после. Поэтому твой текст, согласно условию, менялся в зависимости от расы игрока. Все остальные функции выполняются столько раз, сколько написанны, так как условия на их выполнения нет. А не заметно это, потому что время их выполнения стоит одинаковым.

QUOTE(Aiwan @ Jul 8 2006, 10:01) [snapback]87375[/snapback]
Меняй хотя бы на сотую долю секунды.

Вот если поменяшь время, то сразу все увидешь. Ток разницу не в долю секунды поставь, а в пару секунд
Zirrex
Гм, скрипты без оптимизации, верный путь к усложнению. Тот же скрипт, только гораздо короче:

NSS
void main()
{
    object oPlayer = GetLastPlayerDied();
    string sDeathMessage = "Текст";

    if (GetRacialType(oPlayer) == RACIAL_TYPE_ELF)          sDeathMessage = "Текст_001";
    else if (GetRacialType(oPlayer) == RACIAL_TYPE_HALFORC) sDeathMessage = "Текст_002";

    DelayCommand(1.0, ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_DEATH), oPlayer));
    DelayCommand(4.0, PopUpDeathGUIPanel(oPlayer, FALSE, TRUE, 0, sDeathMessage));
}

У нас же меняется только строковая переменная, а значит, все остальное остается постоянным. Так зачем же этот код внедрять в условия?

Да, значение "FALSE" в функции "PopUpDeathGUIPanel" не позволит воскреснуть игроку. Так и нужно?

По поводу саркофага, во-первых, почему Вампир появляется на локации сундука? Лучше ему назначить свое место появления, рассчитав точку появления от сундука, а во-вторых, скрипт, который представлен выше, работает как часы. Один раз взял вещь, больше вампир не появится, так как этому мешает переменная, которая переключается в момент взятия вещи. Немного измененный скрипт:

NSS
void main()
{
    object oItem = GetInventoryDisturbItem();
    effect eVis = EffectVisualEffect(VFX_FNF_SUMMON_UNDEAD);

    vector vSpawn = GetPositionFromLocation(GetLocation(OBJECT_SELF));
    float fFacing = GetFacing(OBJECT_SELF);

    vSpawn.x += cos(fFacing) * -4.0;
    vSpawn.y += sin(fFacing) * -4.0;

    location lVampire = Location(GetArea(OBJECT_SELF), vSpawn, fFacing);

    if (GetLocalInt(OBJECT_SELF, "Nosferatu") == 1) return;

    if (GetTag(oItem) == "item_tag")
    {
        object oWamp = CreateObject(OBJECT_TYPE_CREATURE, "vampire_nosferatu", lVampire);
        ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eVis, GetLocation(oWamp));
        SetLocalInt(OBJECT_SELF, "Nosferatu", 1);
    }
}

Значение "-4" устанавливает расстояние от сундука. По-умолчанию, когда берешь требуемую вещь, вампир появляется за спиной у берущего. Правда, если берущий не стоит ровно лицом к сундуку, то вампир появится не за спиной, а лицом по отношению к сундуку. Это можно легко исправить, переориентировав точку отсчета, взяв за основу локацию берущего.
Artlira
1. gennady! Примите мои искренние извинения. Ваш второй скрипт действительно работает как часы. Во всем виновата моя невнимательность. Разобраться почему не работал скрипт не смогла, неграмотно списала на “фиксовый” предмет. С моими навыками в скриптах, мне гораздо легче было присвоить значение другой функции оРС. Огромное спасибо за помощь, и поскольку вам извиняться не за что, то саркофаг теперь вещает: “Artlira! Внимательно читай отредактированные посты!”.
Dik Morris и Zirrex благодарю за указание на отредактированный пост gennady. Буду внимательнее.
2. Aiwan и -fenix- поменяла время на 1,2,3 и.т д. сек. в каждом случае, вошла в модуль: “умер эльф”, “умер полуорк”, “умер человек”…. Ой-ой, а так радовалась, что чего-то сработало “из своего”.
-fenix- огромное спасибо за пояснения. Прочитала, скопировала - буду учиться.
3.Zirrex ваш укороченный вариант очень пригодился, наверно так правильнее – если условия одинаковые, зачем их писать 3 раза.
Да, значение "FALSE" в функции "PopUpDeathGUIPanel" не позволит воскреснуть игроку. Так и нужно?
Да, меня интересовала именно запись о смерти.
По поводу саркофага, во-первых, почему Вампир появляется на локации сундука?
Вот это мне даже в голову не приходило, “оно” меня так утомило клонированием, что мне уже все равно было где эта нежить появится, лишь бы один раз! Но теперь когда, благодаря скрипту gennady, оно определилось с появлением пусть теперь и является где положено! Спасибо за помощь, попробую сама хотя бы настроить точку появления.
Еще раз спасибо всем, кто помог с решением моих вопросов. Увы, боюсь не последних…

Артём
Я тут набрел на прикольный модуль, (так мне кажется) "Eye of the Beholder", но скачать боюсь.
Кто-нибудь знает, идет этот модуль и его дополнение на пиратский диск?
Dik Morris
Нет, я лично не видел.
Astoret
Помогите плиз написать простинький скрипт на респаун NPS пи их смерти

и подскажите плиз почему не работает скрипт уборщика все зделал как написано , а в игре пишет : Ошибка скрипта, слишком много инструкций shout.gif
Dik Morris
Astoret, по поводу респауна, читай здесь.

Milfes
QUOTE
подскажите плиз почему не работает скрипт уборщика все зделал как написано , а в игре пишет : Ошибка скрипта, слишком много инструкций


В скрипте лишняя строка

ClearAllActions();

Вцелом скрипт выгледит так

CODE
void main()
{
object oItem = GetFirstObjectInArea(GetArea(OBJECT_SELF));
while (GetIsObjectValid(oItem) == TRUE)
{
if (GetObjectType(oItem) == OBJECT_TYPE_ITEM)
{
ActionPickUpItem(oItem);
}
oItem = GetNextObjectInArea(GetArea(OBJECT_SELF));
}
}
Dik Morris
Milfes, желательно включить в скрипт проверку на диалог + сначала подойти к предмету, а потом уже подбирать, и чистить акции, NPC ведь может быть занят.

NSS
void main()
{
  object oItem = GetFirstObjectInArea(GetArea(OBJECT_SELF));

  if (IsInConversation(OBJECT_SELF)) return;

  while (GetIsObjectValid(oItem) == TRUE)
  {
    if (GetObjectType(oItem) == OBJECT_TYPE_ITEM)
    {
      ClearAllActions();
      ActionMoveToObject(oItem);
      ActionPickUpItem(oItem);
    }
  oItem = GetNextObjectInArea(GetArea(OBJECT_SELF));
  }
}
Milfes
QUOTE
желательно включить в скрипт проверку на диалог + сначала подойти к предмету, а потом уже подбирать, и чистить акции, NPC ведь может быть занят


Dik Morris, с этим я согласен, но есть не большая проблемка! Так как это действие происходит раз в 6 секунд, может возникнуть проблема если NPS находиться в движение! Он просто пройдёт мимо. Есть идеи, как это исправаить?
helvene
QUOTE(Артём @ Jul 10 2006, 19:03) [snapback]87503[/snapback]
Я тут набрел на прикольный модуль, (так мне кажется) "Eye of the Beholder", но скачать боюсь.

Это - полный аналог оригинального Eye of the Beholder.
QUOTE(Артём @ Jul 10 2006, 19:03) [snapback]87503[/snapback]
Кто-нибудь знает, идет этот модуль и его дополнение на пиратский диск?

Нет.
Noah
У меня лексикон перевод leх'а,но там нет про флаги.Качал его весной, может разбирали где про это?Киньте ссылку,плс!
Dik Morris
Milfes, например с помощью локальных переменных, еще М/Б GetCurrentAction подойдет.

Noah, про какие флаги ? М/б NW_FLAG_* ?

Если да:
QUOTE
Used to cause events to fire various numeric signals to OnUserDefined and set other attributes of a creature during the OnSpawn script using SetSpawnInCondition. The OnUserDefined event can thus be used to customize the behavior of an object without actually modifying the default behavior.


PS: Перевод Lex'a ? Первый раз слышу.
Lex
QUOTE(Dik Morris @ Jul 11 2006, 18:59) [snapback]87598[/snapback]
PS: Перевод Lex'a ? Первый раз слышу.

я тоже.
о каких флагах речь? если те, что в спавне ставятся типа *_FLAG_*, то они все там в коментах и описаны. + почитай в топике..Готовые скрипты или Скрипты для хенчей, там есть Айвановские варианты спавна с русскими комментариями.
Noah
Да?А я где-то читал,что он твой...Спасиб,за подсказку(о флагах)
Симирель
я ДИКО извеняюсь, но у меня вопрос как можно чтобы после разговора существо ушло к двери и изчезло?
Artlira
Симирель, здесь на форуме, в теме "Скрипты для новичков" есть скрипт с уходом Nps на WP(где он и дестроится), сам WP_EXSIT можно где угодно поставить. У меня, с помощью этого скрипта одно чудо даже в озере утопилось.
Milfes
Подскажите, как сделать что бы фонарь включался в 20 и выключался в 8 часов?

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