![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() ![]() |
![]() |
![]()
Сообщение
#2661
|
|
Level 12 ![]() Класс: Оборотень Характер: Chaotic Neutral Раса: Нежить NWN: Скриптинг [Sn] ![]() |
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. Неа, не надо ее удалять (IMG:style_emoticons/kolobok_light/wink3.gif) Тот скрипт вызывается для того чтобы науськивать монстра на врагов в битве.
Сообщение отредактировал azathoth - Jun 29 2006, 16:18 |
![]()
Сообщение
#2662
|
|
Level 3 ![]() Класс: Тайный Лучник Характер: Chaotic Good Раса: Дракон ![]() |
Спасибо за рандомные вещи.
НО: QUOTE Появление золота в трупе можно сделать в этом же скрипте, или в скрипте, вызывающемся при смерти - cм. событие OnDeath, (стандартный cкрипт - "nw_c2_default7"). Azathoth, это я прекрасно знаю (IMG:style_emoticons/kolobok_light/declare.gif) . Даже могу привести скрипт, который это делает. (IMG:style_emoticons/kolobok_light/biggrin.gif) Но мне надо именно НЕ через скрипты (читай пост) (IMG:style_emoticons/kolobok_light/rtfm.gif) . Или это не возможно? Просто модуль "засорится" скриптами, если это делать. QUOTE(Артём @ Jun 29 2006, 17:07) [snapback]86467[/snapback] Наверное чтобы убрать появление вищей нодо удалить строку OnCombatRoundEnd. (IMG:style_emoticons/kolobok_light/scratch_one-s_head.gif) Хотя точно я незнаю. (IMG:style_emoticons/kolobok_light/sad.gif) Нет, эта строка отвечает за конец раунда. Кстати, туда можно всунуть боевые крики. (IMG:style_emoticons/kolobok_light/moil.gif) QUOTE Zirrex а где именно? (IMG:style_emoticons/kolobok_light/vava.gif) Он тебе предложил обыскать весь волт. |
![]()
Сообщение
#2663
|
|
Level 12 ![]() Класс: Оборотень Характер: Chaotic Neutral Раса: Нежить NWN: Скриптинг [Sn] ![]() |
QUOTE(Solmyr2000 @ Jun 29 2006, 21:19) [snapback]86498[/snapback] Но мне надо именно НЕ через скрипты (читай пост) . Или это не возможно? Просто модуль "засорится" скриптами, если это делать. Не скриптами - тупо положи деньги в инвентарь существа. А вообще не бойся засорить модуль ни скриптами, они так же нелишни как диалоги, предметы и неписи. К тому же можно отделаться малой кровью - одним скриптом, в котором основываясь на, к примеру расе и уровне существа создвать нужное кол-во денег. |
![]()
Сообщение
#2664
|
|
Level 3 ![]() Класс: Тайный Лучник Характер: Chaotic Good Раса: Дракон ![]() |
QUOTE Не скриптами - тупо положи деньги в инвентарь существа. Наконец-то меня поняли. Теперь внимание, вопрос (IMG:style_emoticons/kolobok_light/rofl.gif) - как? |
![]()
Сообщение
#2665
|
|
Level 12 ![]() Класс: Оборотень Характер: Chaotic Neutral Раса: Нежить NWN: Скриптинг [Sn] ![]() |
QUOTE(Solmyr2000 @ Jun 29 2006, 22:35) [snapback]86516[/snapback] Наконец-то меня поняли. Звиняй, на курсы телепатии не ходил (IMG:style_emoticons/kolobok_light/biggrin.gif) Теперь внимание, вопрос - как? На существо правой кнопкой: "Properties"->"Inventory..."->"Standart Items"->"Miscellaneous"->"Other"->"Gold Piece". Перетаскивешь это в инвентарь, затем жамкаешь на нем правой кнопкой и в поле "Stack Size" устанавливаешь количество монет. Престо. |
![]()
Сообщение
#2666
|
|
Миловидный Бегрюссунг ![]() Класс: Воин Характер: Chaotic Good Раса: Человек NWN: Модмейкер Проклятие Левора Порядок Времени ![]() |
Если бы новички пишущие сюда утруждали себя чтением того что им уже написано, то в этой теме процентов 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. Вариант. Открываем инвентарь, находим справа итем ЗОЛОТО, кидаем в инвентарь, открываем свойства, устанавливаем в стеке сколько нам надо и закрываем. Если нет желания думать головой, думай руками. (IMG:style_emoticons/kolobok_light/mosking.gif) |
![]()
Сообщение
#2667
|
|
Level 2 ![]() Класс: Маг Характер: True Neutral Раса: Эльф ![]() |
я в англ 0... я тамнече не понимаю...
как написать собственный скрипт? и что мне написать, чтобы герой использовал спальник и съедал 1 еду? что такое сеповский хак и как его подключить? Сообщение отредактировал Scrat - Jun 30 2006, 06:08 |
![]()
Сообщение
#2668
|
|
Level 3 ![]() Класс: Тайный Лучник Характер: Chaotic Good Раса: Дракон ![]() |
QUOTE(Aiwan @ Jun 30 2006, 00:36) [snapback]86526[/snapback] 2. Вариант. Открываем инвентарь, находим справа итем ЗОЛОТО, кидаем в инвентарь, открываем свойства, устанавливаем в стеке сколько нам надо и закрываем. Если нет желания думать головой, думай руками. (IMG:style_emoticons/kolobok_light/mosking.gif) (IMG:style_emoticons/kolobok_light/biggrin.gif) Я вполне об этом догадывался, но есть интересный момент - (IMG:style_emoticons/kolobok_light/wizard.gif) итема золота там нету (IMG:style_emoticons/kolobok_light/vampire.gif) Точнее есть,нашел, но оно называется 578747 (IMG:style_emoticons/kolobok_light/shok.gif) И выдает ошибку. Может это из-за хака? QUOTE(Aiwan @ Jun 30 2006, 00:36) [snapback]86526[/snapback] Если бы новички пишущие сюда утруждали себя чтением того что им уже написано, то в этой теме процентов 70 можно было бы стереть... (IMG:style_emoticons/kolobok_light/crazy.gif) а утруждением чтения поста никто не занимался? (IMG:style_emoticons/kolobok_light/crazy.gif) QUOTE(Aiwan @ Jun 30 2006, 00:36) [snapback]86526[/snapback] Можно супер мега строкой скриптом. Смотри ниже. Естественно на хербит. Тем более я и так это сделал (IMG:style_emoticons/kolobok_light/spiteful.gif) Уже давным давно. Но когда модуль разросся, он стал уже их не выносить. Зверски тормозит. Все, удалил хак (IMG:style_emoticons/kolobok_light/cray.gif) Но заработало. Сообщение отредактировал Solmyr2000 - Jun 30 2006, 08:27 |
![]()
Сообщение
#2669
|
|
Level 9 ![]() Класс: Друид Характер: True Neutral Раса: Эльф NWN: Скриптинг [PW] Амен ![]() |
Scrat, а что там знать? Входишь на Ваулт, и ищешь скрипты, которые посвящены именно твоим системам. Главное знать, какое слово искать.
Хотя бы это DMG Loot tables V 1.2 и PWFXP - XP Distribution Script. Solmyr2000, есть стандартный предмет "Gold Piece". Находишь его в палитре, и изменяешь ему значение, сохраняя в кастомную палитру. Но на самом деле лучше все же сделать мелкий скрипт, а потом его выполнять на момент смерти существа. Я не знаю, что у тебя творится в модуле, потому что даже 1000 своих скриптов не вызывают тормозов, если они правильно написаны. |
![]()
Сообщение
#2670
|
|
Level 3 ![]() Класс: Тайный Лучник Характер: Chaotic Good Раса: Дракон ![]() |
QUOTE(Zirrex @ Jun 30 2006, 09:57) [snapback]86549[/snapback] Solmyr2000 Я не знаю, что у тебя творится в модуле, потому что даже 1000 своих скриптов не вызывают тормозов, если они правильно написаны. У меня как всегда хуже всех. (IMG:style_emoticons/kolobok_light/vampire.gif) Кампания НВН например не тормозит, а Проклятье Левора стоит на разрешении 640x480. Ничего не замечаешь? (IMG:style_emoticons/kolobok_light/prankster2.gif) QUOTE(Zirrex @ Jun 30 2006, 09:57) [snapback]86549[/snapback] Solmyr2000, есть стандартный предмет "Gold Piece". Находишь его в палитре, и изменяешь ему значение, сохраняя в кастомную палитру. Все, я же сказал, что удалил хак, и все заработало. Посты опять не читаем-с? (IMG:style_emoticons/kolobok_light/crazy.gif) Сообщение отредактировал Solmyr2000 - Jun 30 2006, 09:09 |
![]()
Сообщение
#2671
|
|
Level 9 ![]() Класс: Друид Характер: True Neutral Раса: Эльф NWN: Скриптинг [PW] Амен ![]() |
Solmyr2000, сообщения читаем. Только что тебе мешало сделать кастомный предмет золота, когда у тебя стоял хак?
Ну знаешь, тормозить может на чем угодно, если компьютер превратить в помойку, или лишить его чего-то архиважного. Сколько работаю со своим модулем, никогда не было на нем тормозов. Одно но, у него нет хаков, но как я уже убедился, некоторые умудряются внести непонятные тормоза в свои модули даже без хаков. Что касается Левора, у меня он не тормозил ни разу. И что это за хак такой, который портит стандартные предметы до такого состояния, что их нельзя использовать? |
![]()
Сообщение
#2672
|
|
Level 4 ![]() ![]() Класс: Маг Характер: Chaotic Neutral Раса: Танар'ри ![]() |
Помогите пожалуйста, решить еще несколько вопросов.
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 постов безнаказанно сложно (IMG:style_emoticons/kolobok_light/smile.gif) Твоего сообщения в этом посте вполне достаточно (IMG:style_emoticons/kolobok_light/thank_you.gif) Сообщение отредактировал Aiwan - Jul 6 2006, 15:23 |
![]()
Сообщение
#2673
|
|
Level 9 ![]() Класс: Обыватель Характер: Lawful Good Раса: Человек NWN: Модмейкер Рыцарская Сага ![]() |
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, "Я же эльф?!"); } Сообщение отредактировал gennady - Jul 6 2006, 12:39 |
![]()
Сообщение
#2674
|
|
Вечно меняющийся ![]() Класс: Монах Характер: True Neutral Раса: Человек NWN: Скриптинг [Sn] ![]() |
Artlira, по поводу третьего вопроса.
На строчку в диалоге, в вкладку ActionTakens, ставится скрипт: NSS void main()
{ object oPC = GetPCSpeaker(); FadeToBlack(oPC); SetCommandable(0, oPC); DelayCommand(1.5, PopUpDeathGUIPanel(oPC, FALSE, TRUE, 0, "Нужный_текст")); } |
![]()
Сообщение
#2675
|
|
Level 19 ![]() Класс: Воин Характер: Lawful Good Раса: Человек NWN: Скриптинг [Sn] ![]() |
Artlira, если у тебя стоит скрипт на OnDisturbed, то не нужно определеять игрока, как GetEnteringObject(), для этого случая есть своя функция - GetLastDisturbed().
Да и проверку на игрока тут делать-то и не надо, врятли у тебя НПС возьмет этот предмет из саркофага. QUOTE(Artlira @ Jul 6 2006, 04:22) [snapback]87252[/snapback] Возможно ли с помощью скрипта, сделать появление разных строк, в зависимости от расы игрока? Конечно, проверяй расу игрока с помощью функции GetRacialType(object) и меняй посмертную надпись. |
![]()
Сообщение
#2676
|
|
Level 1 Класс: Страж Тьмы Характер: Chaotic Evil Раса: Гном ![]() |
Подскажите плиз функцию которая определяет левел NPSа, а лутше оценивает его сложность
|
![]()
Сообщение
#2677
|
|
Миловидный Бегрюссунг ![]() Класс: Воин Характер: Chaotic Good Раса: Человек NWN: Модмейкер Проклятие Левора Порядок Времени ![]() |
NSS // Get the number of hitdice for oCreature.
// * Return value if oCreature is not a valid creature: 0 int GetHitDice(object oCreature) |
![]()
Сообщение
#2678
|
|
Level 5 ![]() Класс: Обыватель Характер: Lawful Neutral Раса: Человек NWN: Модмейкер Проклятие Левора Порядок Времени ![]() |
QUOTE(Astoret @ Jul 7 2006, 17:06) [snapback]87338[/snapback] а лутше оценивает его сложность GetChallengeRating |
![]()
Сообщение
#2679
|
|
Level 5 ![]() ![]() Класс: Убийца Характер: Chaotic Neutral Раса: Полуэльф ![]() |
Люди!!Обьяснитe мне про flag и event я вроде врубаюсь но не совсем.Может гdе-то есть про это тема?
|
![]()
Сообщение
#2680
|
|
Level 4 ![]() ![]() Класс: Маг Характер: Chaotic Neutral Раса: Танар'ри ![]() |
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)); } } Компилится и работает, хотелось уточнить все ли верно с точки зрения “правописания” скриптов. Сообщение отредактировал Artlira - Jul 8 2006, 07:55 |
![]()
Сообщение
#2681
|
|
Вечно меняющийся ![]() Класс: Монах Характер: True Neutral Раса: Человек NWN: Скриптинг [Sn] ![]() |
Noah, это подробно описывается в Лексиконе.
Artlira, gennady исправил первый скрипт. Теперь все должно работать. |
![]()
Сообщение
#2682
|
|
Миловидный Бегрюссунг ![]() Класс: Воин Характер: Chaotic Good Раса: Человек NWN: Модмейкер Проклятие Левора Порядок Времени ![]() |
QUOTE(Artlira @ Jul 8 2006, 10:08) [snapback]87372[/snapback] Компилится и работает, хотелось уточнить все ли верно с точки зрения “правописания” скриптов. Я бы настоятельно не рекомендовал использовать одинаковое время таймингов команды DelayCommand() Будут проблемы. Меняй хотя бы на сотую долю секунды. |
![]()
Сообщение
#2683
|
|
Level 19 ![]() Класс: Воин Характер: Lawful Good Раса: Человек NWN: Скриптинг [Sn] ![]() |
Artlira, скрипт компилится и работает, но работает не совсем правильно и просто так получилось, что он вообще работает. (IMG:style_emoticons/kolobok_light/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] Меняй хотя бы на сотую долю секунды. Вот если поменяшь время, то сразу все увидешь. Ток разницу не в долю секунды поставь, а в пару секунд Сообщение отредактировал -fenix- - Jul 8 2006, 12:16 |
![]() ![]()
Сообщение
#2684
|
|
Level 9 ![]() Класс: Друид Характер: True Neutral Раса: Эльф NWN: Скриптинг [PW] Амен ![]() |
Гм, скрипты без оптимизации, верный путь к усложнению. Тот же скрипт, только гораздо короче:
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" устанавливает расстояние от сундука. По-умолчанию, когда берешь требуемую вещь, вампир появляется за спиной у берущего. Правда, если берущий не стоит ровно лицом к сундуку, то вампир появится не за спиной, а лицом по отношению к сундуку. Это можно легко исправить, переориентировав точку отсчета, взяв за основу локацию берущего. Сообщение отредактировал Zirrex - Jul 8 2006, 17:48 |
![]()
Сообщение
#2685
|
|
Level 4 ![]() ![]() Класс: Маг Характер: Chaotic Neutral Раса: Танар'ри ![]() |
1. gennady! Примите мои искренние извинения. Ваш второй скрипт действительно работает как часы. Во всем виновата моя невнимательность. Разобраться почему не работал скрипт не смогла, неграмотно списала на “фиксовый” предмет. С моими навыками в скриптах, мне гораздо легче было присвоить значение другой функции оРС. Огромное спасибо за помощь, и поскольку вам извиняться не за что, то саркофаг теперь вещает: “Artlira! Внимательно читай отредактированные посты!”.
Dik Morris и Zirrex благодарю за указание на отредактированный пост gennady. Буду внимательнее. 2. Aiwan и -fenix- поменяла время на 1,2,3 и.т д. сек. в каждом случае, вошла в модуль: “умер эльф”, “умер полуорк”, “умер человек”…. Ой-ой, а так радовалась, что чего-то сработало “из своего”. -fenix- огромное спасибо за пояснения. Прочитала, скопировала - буду учиться. 3.Zirrex ваш укороченный вариант очень пригодился, наверно так правильнее – если условия одинаковые, зачем их писать 3 раза. Да, значение "FALSE" в функции "PopUpDeathGUIPanel" не позволит воскреснуть игроку. Так и нужно? Да, меня интересовала именно запись о смерти. По поводу саркофага, во-первых, почему Вампир появляется на локации сундука? Вот это мне даже в голову не приходило, “оно” меня так утомило клонированием, что мне уже все равно было где эта нежить появится, лишь бы один раз! Но теперь когда, благодаря скрипту gennady, оно определилось с появлением пусть теперь и является где положено! Спасибо за помощь, попробую сама хотя бы настроить точку появления. Еще раз спасибо всем, кто помог с решением моих вопросов. Увы, боюсь не последних… |
![]() ![]() |
Текстовая версия | Сейчас: 26th July 2025 - 16:23 |