Город Мастеров
IPB

Здравствуйте, гость ( Вход | Регистрация )

 Правила этого форума ПРАВИЛА РАЗДЕЛА
205 страниц V  « < 106 107 108 109 110 > »   
Ответить в эту темуОткрыть новую тему
> Вопросы новичков, Абсолютные глупости
azathoth
сообщение Jun 29 2006, 16:12
Сообщение #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
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Solmyr2000
сообщение Jun 29 2006, 20:19
Сообщение #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) Он тебе предложил обыскать весь волт.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
azathoth
сообщение Jun 29 2006, 20:57
Сообщение #2663


Level 12
Иконки Групп

Класс: Оборотень
Характер: Chaotic Neutral
Раса: Нежить
NWN: Скриптинг [Sn]



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

Не скриптами - тупо положи деньги в инвентарь существа.
А вообще не бойся засорить модуль ни скриптами, они так же нелишни как диалоги, предметы и неписи. К тому же можно отделаться малой кровью - одним скриптом, в котором основываясь на, к примеру расе и уровне существа создвать нужное кол-во денег.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Solmyr2000
сообщение Jun 29 2006, 21:35
Сообщение #2664


Level 3
*

Класс: Тайный Лучник
Характер: Chaotic Good
Раса: Дракон



QUOTE
Не скриптами - тупо положи деньги в инвентарь существа.

Наконец-то меня поняли.
Теперь внимание, вопрос (IMG:style_emoticons/kolobok_light/rofl.gif) - как?
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
azathoth
сообщение Jun 29 2006, 23:14
Сообщение #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" устанавливаешь количество монет. Престо.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Aiwan
сообщение Jun 29 2006, 23:36
Сообщение #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)
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Scrat
сообщение Jun 30 2006, 05:30
Сообщение #2667


Level 2
*

Класс: Маг
Характер: True Neutral
Раса: Эльф



я в англ 0... я тамнече не понимаю...

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

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

что такое сеповский хак и как его подключить?

Сообщение отредактировал Scrat - Jun 30 2006, 06:08
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Solmyr2000
сообщение Jun 30 2006, 08:32
Сообщение #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
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Zirrex
сообщение Jun 30 2006, 08:57
Сообщение #2669


Level 9
Иконки Групп

Класс: Друид
Характер: True Neutral
Раса: Эльф
NWN: Скриптинг [PW]
Амен



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

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

Solmyr2000, есть стандартный предмет "Gold Piece". Находишь его в палитре, и изменяешь ему значение, сохраняя в кастомную палитру. Но на самом деле лучше все же сделать мелкий скрипт, а потом его выполнять на момент смерти существа. Я не знаю, что у тебя творится в модуле, потому что даже 1000 своих скриптов не вызывают тормозов, если они правильно написаны.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Solmyr2000
сообщение Jun 30 2006, 09:08
Сообщение #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
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Zirrex
сообщение Jun 30 2006, 23:08
Сообщение #2671


Level 9
Иконки Групп

Класс: Друид
Характер: True Neutral
Раса: Эльф
NWN: Скриптинг [PW]
Амен



Solmyr2000, сообщения читаем. Только что тебе мешало сделать кастомный предмет золота, когда у тебя стоял хак?

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

И что это за хак такой, который портит стандартные предметы до такого состояния, что их нельзя использовать?
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Artlira
сообщение Jul 6 2006, 03:22
Сообщение #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
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
gennady
сообщение Jul 6 2006, 07:01
Сообщение #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
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Dik Morris
сообщение Jul 6 2006, 09:51
Сообщение #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, "Нужный_текст"));
}
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
-fenix-
сообщение Jul 6 2006, 11:08
Сообщение #2675


Level 19
Иконки Групп

Класс: Воин
Характер: Lawful Good
Раса: Человек
NWN: Скриптинг [Sn]



Artlira, если у тебя стоит скрипт на OnDisturbed, то не нужно определеять игрока, как GetEnteringObject(), для этого случая есть своя функция - GetLastDisturbed().
Да и проверку на игрока тут делать-то и не надо, врятли у тебя НПС возьмет этот предмет из саркофага.

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

Конечно, проверяй расу игрока с помощью функции GetRacialType(object) и меняй посмертную надпись.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Astoret
сообщение Jul 7 2006, 16:06
Сообщение #2676


Level 1


Класс: Страж Тьмы
Характер: Chaotic Evil
Раса: Гном



Подскажите плиз функцию которая определяет левел NPSа, а лутше оценивает его сложность
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Aiwan
сообщение Jul 7 2006, 21:20
Сообщение #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)
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Lex
сообщение Jul 7 2006, 21:21
Сообщение #2678


Level 5
Иконки Групп

Класс: Обыватель
Характер: Lawful Neutral
Раса: Человек
NWN: Модмейкер
Проклятие Левора
Порядок Времени



QUOTE(Astoret @ Jul 7 2006, 17:06) [snapback]87338[/snapback]
а лутше оценивает его сложность

GetChallengeRating
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Noah
сообщение Jul 7 2006, 23:10
Сообщение #2679


Level 5
**

Класс: Убийца
Характер: Chaotic Neutral
Раса: Полуэльф



Люди!!Обьяснитe мне про flag и event я вроде врубаюсь но не совсем.Может гdе-то есть про это тема?
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Artlira
сообщение Jul 8 2006, 07:08
Сообщение #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
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Dik Morris
сообщение Jul 8 2006, 08:52
Сообщение #2681


Вечно меняющийся
Иконки Групп

Класс: Монах
Характер: True Neutral
Раса: Человек
NWN: Скриптинг [Sn]



Noah, это подробно описывается в Лексиконе.

Artlira, gennady исправил первый скрипт. Теперь все должно работать.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Aiwan
сообщение Jul 8 2006, 09:01
Сообщение #2682


Миловидный Бегрюссунг
Иконки Групп

Класс: Воин
Характер: Chaotic Good
Раса: Человек
NWN: Модмейкер
Проклятие Левора
Порядок Времени



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

Я бы настоятельно не рекомендовал использовать одинаковое время таймингов команды DelayCommand() Будут проблемы. Меняй хотя бы на сотую долю секунды.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
-fenix-
сообщение Jul 8 2006, 11:49
Сообщение #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
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Zirrex
сообщение Jul 8 2006, 17:47
Сообщение #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
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Artlira
сообщение Jul 10 2006, 04:19
Сообщение #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, оно определилось с появлением пусть теперь и является где положено! Спасибо за помощь, попробую сама хотя бы настроить точку появления.
Еще раз спасибо всем, кто помог с решением моих вопросов. Увы, боюсь не последних…

Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения

205 страниц V  « < 106 107 108 109 110 > » 
Ответить в эту темуОткрыть новую тему
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



Текстовая версия Сейчас: 26th July 2025 - 16:23