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

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

 Правила этого форума ПРАВИЛА РАЗДЕЛА
14 страниц V  « < 6 7 8 9 10 > »   
Ответить в эту темуОткрыть новую тему
> Скрипты: Все вопросы, Алгоритмы, оптимизация, особености и хитрости в скриптинге
azathoth
сообщение Jan 21 2008, 23:25
Сообщение #176


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

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



можно добавить предмету "особое свойство" по типу Unique Power или его самого, тогда им можно будет действовать на всё подряд, а уже скриптами проверять и отпускать ядовитые комментарии, когда игрок будет действовать на стог сена неположеными солью и перцем.

однако, игроки не оценят. <_<

--

У SetGlobalXXX тип возвращаемого значения - int (в смысле булеан), что должно наводить на определённые мысли...
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Jadent
сообщение Mar 24 2008, 17:54
Сообщение #177


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

Класс: Обыватель
Характер: True Neutral
Раса: Человек
NWN2: Маппинг



Возможно ли как-то эмулировать событие OnClick для существ?

Или чтобы OnConversation запускался сразу издалека (не заставляя игрока подбегать вплотную к НПЦ).
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
gennady
сообщение Mar 25 2008, 11:41
Сообщение #178


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

Класс: Обыватель
Характер: Lawful Good
Раса: Человек
NWN: Модмейкер
Рыцарская Сага



Цитата(Jadent @ Mar 24 2008, 17:54) *
Возможно ли как-то эмулировать событие OnClick для существ?

Для этого есть по крайней мере 3 варианта:
1. Скрипт OnEnter триггера
2. Скрипт OnHeartbeat НПС или плейса
3. Скрипт OnPerception НПС
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Lex
сообщение Mar 25 2008, 12:39
Сообщение #179


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

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



Цитата(gennady @ Mar 25 2008, 11:41) *
Для этого есть по крайней мере 3 варианта:
1. Скрипт OnEnter триггера
2. Скрипт OnHeartbeat НПС или плейса
3. Скрипт OnPerception НПС

ни одно из этих не подходит под вариант onClick.
Цитата(Jadent @ Mar 24 2008, 17:54) *
Или чтобы OnConversation запускался сразу издалека (не заставляя игрока подбегать вплотную к НПЦ).

вот в эту сторону можно попробовать подумать, но думаю дистанция разговора зашита в движок.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Griffon
сообщение Mar 31 2008, 12:00
Сообщение #180


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

Класс: Страж Тьмы
Характер: True Neutral
Раса: Человек
МАСТЕР D&D



Цитата(Lex @ Mar 25 2008, 12:39) *
Цитата(Jadent @ Mar 24 2008, 17:54)
Или чтобы OnConversation запускался сразу издалека (не заставляя игрока подбегать вплотную к НПЦ).

вот в эту сторону можно попробовать подумать, но думаю дистанция разговора зашита в движок.


а разве возможность перебрасывать РС в место диалога с НПС отменили?
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Jadent
сообщение Mar 31 2008, 13:23
Сообщение #181


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

Класс: Обыватель
Характер: True Neutral
Раса: Человек
NWN2: Маппинг



Цитата(Griffon @ Mar 31 2008, 13:00) *
а разве возможность перебрасывать РС в место диалога с НПС отменили?
Диалоги меня в данном случае вообще не интересуют, вопрос был о скриптах.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Keeper
сообщение Apr 23 2008, 19:43
Сообщение #182


Level 1


Класс: Некромант
Характер: Neutral Evil
Раса: Человек



Нужна функция, возвращающая школу, на которой специализируется Маг (General, e.t.c.).

Еще вопрос:
Как расширить возможности функции EffectPolymorph()? Для ее функционирования нужно знать ID крича в которого происходит превращение. Оные указаны константами типа POLYMORPH_TYPE_*. Их довольно мало. К примеру, я хочу превратить Духа волка в Тень. Как это сделать?
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
azathoth
сообщение Apr 23 2008, 20:06
Сообщение #183


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

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



Цитата
Как расширить возможности функции EffectPolymorph()? Для ее функционирования нужно знать ID крича в которого происходит превращение. Оные указаны константами типа POLYMORPH_TYPE_*. Их довольно мало. К примеру, я хочу превратить Духа волка в Тень. Как это сделать?

добавить желаемые в .2da таблицы. или использовать функцию SetCreatureAppearanceType.

Сообщение отредактировал azathoth - Apr 23 2008, 20:08
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Keeper
сообщение Apr 23 2008, 22:10
Сообщение #184


Level 1


Класс: Некромант
Характер: Neutral Evil
Раса: Человек



Цитата(azathoth @ Apr 23 2008, 20:06) *
добавить желаемые в .2da таблицы. или использовать функцию SetCreatureAppearanceType.

Огромное спасибо! Пойду творить далее. А что по первому пункту?

Закончил писать скрипт для посоха обращения в нежить. Все бы было хорошо, если бы не... если бы не проскакивало за секунду без каких-либо визуальных спецэффектов.
Собственно, вопросы:
1. Почему нет эффектов?
2. Как сделать паузу в выполнении скрипта?
3. Как передать получившееся существо игроку на всегда/на время/не дать создать армию?
Вот скрипт, сыренький, так что не пинайте. Вешается на онитемактивэйт модуля:
Neverwinter Script
object oPC = GetItemActivator();
  object oItem = GetItemActivated();
  object oTarget = GetItemActivatedTarget();
  location lTargetLocation = GetItemActivatedTargetLocation();
  string sPCName = GetName(oPC);
  string sTargetName = GetName(oTarget);
 
  void ItemActivatedPaleStaff();
    string PALE_STAFF_TAG = "EK_STAFF_001";
    int PALE_STAFF_HIT_VS_REFLEX = d20() + 2 * GetAbilityModifier(ABILITY_DEXTERITY, oPC);
    int PALE_STAFF_HIT_VS_FORTITUDE = d20() + 2 * GetAbilityModifier(ABILITY_INTELLIGENCE, oPC);
    int PALE_STAFF_HIT_VS_WILL = d20() + 2 * GetAbilityModifier(ABILITY_WISDOM, oPC);
    float PALE_STAFF_CAST_TIME = 60.0;
    effect PALE_STAFF_POLYMORPH_VISUAL = EffectVisualEffect(VFX_IMP_POLYMORPH);
    effect PALE_STAFF_POLYMORPH_TYPE_1 = EffectPolymorph(POLYMORPH_TYPE_ZOMBIE, TRUE);
 
void main()
{
  if (oItem == GetObjectByTag(PALE_STAFF_TAG))
  {
    ItemActivatedPaleStaff();
  }
}

void ItemActivatedPaleStaff()
{
  if (GetIsObjectValid(oTarget) == FALSE)
  {
    SendMessageToPC(oPC, "<color=red>Некорректная цель для обращения в нежить!</color>");
    return;
  }
  if (GetLocalInt(oTarget, "Undeadable") < 1 || GetPolymorphLocked(oTarget) == TRUE)
  {
    SendMessageToPC(oPC, "<color=red>Выбранная цель не может быть обращена в нежить!</color>");
    return;
  }
  if (GetIsDead(oTarget) == TRUE)
  {
    SendMessageToPC(oPC, "<color=red>Цель мертва, прежде чем обратить в нежить, ее нужно оживить!</color>");
    return;
  }
 

  if (GetReflexSavingThrow(oTarget) > PALE_STAFF_HIT_VS_REFLEX)
  {
    SendMessageToPC(oPC, "<color=blue>"+sPCName+" бросок "+IntToString(PALE_STAFF_HIT_VS_REFLEX)+" против класса сложности "+IntToString(GetReflexSavingThrow(oTarget))+" "+IntToString(GetReflexSavingThrow(oTarget))+" > "+IntToString(PALE_STAFF_HIT_VS_REFLEX)+" *провал*</color>");
    ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectBeam(VFX_BEAM_BLACK, oPC, BODY_NODE_CHEST, TRUE), oTarget);
    return;
  }
  SendMessageToPC(oPC, "<color=blue>"+sPCName+" бросок "+IntToString(PALE_STAFF_HIT_VS_REFLEX)+" против класса сложности "+IntToString(GetReflexSavingThrow(oTarget))+" "+IntToString(GetReflexSavingThrow(oTarget))+" <= "+IntToString(PALE_STAFF_HIT_VS_REFLEX)+" *успех*</color>");
  ApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectBeam(VFX_BEAM_BLACK, oPC, BODY_NODE_CHEST), oTarget, PALE_STAFF_CAST_TIME);
  ApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectCutsceneParalyze(), oPC, PALE_STAFF_CAST_TIME);
  ApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectCutsceneParalyze(), oTarget, PALE_STAFF_CAST_TIME);
  ApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectSpellImmunity(), oTarget, PALE_STAFF_CAST_TIME);
  ApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectDamageImmunityIncrease(DAMAGE_TYPE_ALL, 100), oTarget, PALE_STAFF_CAST_TIME);
 
  DelayCommand(PALE_STAFF_CAST_TIME/3, ActionWait(0.0));
 
  if (GetFortitudeSavingThrow(oTarget) > PALE_STAFF_HIT_VS_FORTITUDE)
  {
    SendMessageToPC(oPC, "<color=blue>"+sPCName+" бросок "+IntToString(PALE_STAFF_HIT_VS_FORTITUDE)+" против класса сложности "+IntToString(GetFortitudeSavingThrow(oTarget))+" "+IntToString(GetFortitudeSavingThrow(oTarget))+" > "+IntToString(PALE_STAFF_HIT_VS_FORTITUDE)+" *провал*</color>");
    ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_DUR_CONE_EVIL), oTarget);
    RemoveEffect(oTarget, EffectBeam(VFX_BEAM_BLACK, oPC, BODY_NODE_CHEST));
    RemoveEffect(oPC, EffectCutsceneParalyze());
    RemoveEffect(oTarget, EffectCutsceneParalyze());
    RemoveEffect(oTarget, EffectSpellImmunity());
    RemoveEffect(oTarget,EffectDamageImmunityIncrease(
DAMAGE_TYPE_ALL, 100));
    return;
  }
  SendMessageToPC(oPC, "<color=blue>"+sPCName+" бросок "+IntToString(PALE_STAFF_HIT_VS_FORTITUDE)+" против класса сложности "+IntToString(GetFortitudeSavingThrow(oTarget))+" "+IntToString(GetFortitudeSavingThrow(oTarget))+" <= "+IntToString(PALE_STAFF_HIT_VS_FORTITUDE)+" *успех*</color>");
  if (GetLocalInt(oTarget, "Undeadable") == 1)
  {
    ApplyEffectToObject(DURATION_TYPE_INSTANT, PALE_STAFF_POLYMORPH_VISUAL, oTarget);
    ApplyEffectToObject(DURATION_TYPE_PERMANENT, PALE_STAFF_POLYMORPH_TYPE_1, oTarget);
  }
 
  DelayCommand(PALE_STAFF_CAST_TIME/3, ActionWait(0.0));
 
  if (GetWillSavingThrow(oTarget) > PALE_STAFF_HIT_VS_WILL)
  {
    SendMessageToPC(oPC, "<color=blue>"+sPCName+" бросок "+IntToString(PALE_STAFF_HIT_VS_WILL)+" против класса сложности "+IntToString(GetWillSavingThrow(oTarget))+" "+IntToString(GetWillSavingThrow(oTarget))+" > "+IntToString(PALE_STAFF_HIT_VS_WILL)+" *провал*</color>");
    ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_DUR_CONE_EVIL), oTarget);
    RemoveEffect(oTarget, EffectBeam(VFX_BEAM_BLACK, oPC, BODY_NODE_CHEST));
    RemoveEffect(oPC, EffectCutsceneParalyze());
    RemoveEffect(oTarget, EffectCutsceneParalyze());
    RemoveEffect(oTarget, EffectSpellImmunity());
    RemoveEffect(oTarget,EffectDamageImmunityIncrease(
DAMAGE_TYPE_ALL, 100));
    return;
  }
  SendMessageToPC(oPC, "<color=blue>"+sPCName+" бросок "+IntToString(PALE_STAFF_HIT_VS_WILL)+" против класса сложности "+IntToString(GetWillSavingThrow(oTarget))+" "+IntToString(GetWillSavingThrow(oTarget))+" <= "+IntToString(PALE_STAFF_HIT_VS_WILL)+" *успех*</color>");
  ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_BEAM_MIND), oTarget);
  ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectCutsceneDominated(), oTarget);
}
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
azathoth
сообщение Apr 24 2008, 17:41
Сообщение #185


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

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



Функции возвращающей школу не знаю.

объявление переменных вне функции (тем более вперемешку с декларацией функции) - это ахтунг. ИМХО.

Единственное что могу сказать - функция задержки DelayCommand(...), у тебя Delaится Action, а экшн привязан к объекту OBJECT_SELF по умолчанию, не факт, что в отдельной функции он будет тот, что ты хочешь. А самое главное - экшын экшыном, но строчки вне него будут всё равно будут выполнены все сразу в любом случае - то есть сначала сработает скрипт, а затем будут выполняться действия (в т.ч. со своими "кусочками скрипта"). Так что определись, задержку между "чем" и "чем" ты хочешь - и второе заDelay.

Сообщение отредактировал azathoth - Apr 24 2008, 17:43
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Keeper
сообщение Apr 24 2008, 18:33
Сообщение #186


Level 1


Класс: Некромант
Характер: Neutral Evil
Раса: Человек



Спасибо!
Хочу, что бы все выполнялось в том порядке, в каком идет в теле скрипта. Значит, надо весь скрипт расписать по секундам в DelayCommand?

Насчет ахтунга - там, если ты не заметил, везде ахтунг - добьюсь работоспособности и оформлю по человечески, заодно оптимизирую.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Lorendroll
сообщение May 1 2008, 15:31
Сообщение #187


Level 9
***

Класс: Волшебник
Характер: Neutral Good
Раса: Эльф



Хочу наложить на игрока визуальный эффект такого же типа как накладываются во вкладке "Аppearance (visual effect)" в свойствах существа, а там указаны такие названия как fx_will_o_wisp и подобные, которые не обозначены в глобальных переменных. Возможно ли это? Задача в том чтобы превратить игрока в виспа, при том что SetAppearanceType с APPEARANCE_TYPE_WILL_O_WISP не работает - нет в НВН2 соотвтетсвующей модели, она перекочевала в визуальные эффекты... То есть выход один - превратить игрока в невидимку и наложить на него эффект виспа, который есть только как FX_*, а не VFX_* эффект...

Сообщение отредактировал Lorendroll - May 1 2008, 15:35
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
nitx
сообщение May 29 2008, 06:25
Сообщение #188


Level 1


Класс: Пьяный Мастер
Характер: Neutral Evil
Раса: Орк



как сделать реакцию на фразу в чат канала (от плеера)? Только скрипт повесить не в пределах восприятия 1нпц, а на всю локу.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
virusman
сообщение May 29 2008, 09:04
Сообщение #189


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

Класс: Волшебник
Характер: Neutral Good
Раса: Человек
NWN: Скриптинг [PW]
Axistown SR 1.9
NWNX



В 1.69 будет соответствующее событие.
А пока - либо воисами (см. DMFI), либо NWNX Chat (если шард).
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
nitx
сообщение May 29 2008, 12:53
Сообщение #190


Level 1


Класс: Пьяный Мастер
Характер: Neutral Evil
Раса: Орк



я про нвн2. А нельзя увеличить область восприятия нпс (именно события OnConversation), и поставить его например за пределы локи? Ну или сделать его невидимым для плеера, пробовал ставить апиренс - none и script hidden, так в игре вобще как будето его нету, скрипты так тож неработают.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
virusman
сообщение May 29 2008, 13:27
Сообщение #191


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

Класс: Волшебник
Характер: Neutral Good
Раса: Человек
NWN: Скриптинг [PW]
Axistown SR 1.9
NWNX



Посмотри DMFI, там должны быть невидимые воисы.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Zmeika
сообщение Jun 2 2008, 12:02
Сообщение #192


Level 3
*

Класс: Рейнджер
Характер: Neutral Good
Раса: Человек



Можно ли на ходу поменять свойство для уже существующего предмета?
Нужно у готового предмета установить (временно!) свойство из серии Activate, чтобы у предмета появлялась иконка "активировать" и срабатывал нужный скрипт по тэгу. В исходном предмете такого свойства нет. Мне нужно, чтобы оно появилось, и начал срабатывать скрипт.

Временное изменение иконки у предмета - тоже интересует.
Вышла из ситуации временно создавая новый предмет по другому шаблону и незаметно подменяя им старый. Но неудобно это. (IMG:style_emoticons/kolobok_light/aggressive.gif)

Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Lex
сообщение Jun 3 2008, 01:01
Сообщение #193


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

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



свойство можно.
иконку низя.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Zmeika
сообщение Jun 3 2008, 11:01
Сообщение #194


Level 3
*

Класс: Рейнджер
Характер: Neutral Good
Раса: Человек



а какой функцией можно свойство поменять или установить? Хотя бы примерно, как называется?
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Lex
сообщение Jun 3 2008, 19:52
Сообщение #195


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

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



AddItemProperty
соотв есть или Remove или Delete или какой-нить другой Destroy этой самой ItemProperty.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Zmeika
сообщение Jun 5 2008, 16:05
Сообщение #196


Level 3
*

Класс: Рейнджер
Характер: Neutral Good
Раса: Человек



AddItemProperty - работает, спасибо!
Правда, почему-то не работает SetDescription для того же самого предмета. Т.е. свойство - появляется, а описание остается прежним.

Вопрос - можно ли подменять скрипты так же, как диалоги или 2da таблицы, помещая новые компиляции в override? У меня пока не вышло - если есть два скрипта с одинаковым названием, и при этом один находится в моде, другой в override, то в игре берется версия из мода. А хочется, чтобы наоборот.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
virusman
сообщение Jun 5 2008, 16:07
Сообщение #197


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

Класс: Волшебник
Характер: Neutral Good
Раса: Человек
NWN: Скриптинг [PW]
Axistown SR 1.9
NWNX



Цитата(Zmeika @ Jun 5 2008, 17:05) *
AddItemProperty - работает, спасибо!
Правда, почему-то не работает SetDescription для того же самого предмета. Т.е. свойство - появляется, а описание остается прежним.
1.69?
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Zmeika
сообщение Jun 5 2008, 16:13
Сообщение #198


Level 3
*

Класс: Рейнджер
Характер: Neutral Good
Раса: Человек



версия 1.12
свойство и описание устанавливается в скрипте на взятие предмета (_aq)

Сообщение отредактировал Zmeika - Jun 5 2008, 16:33
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Lex
сообщение Jun 5 2008, 16:42
Сообщение #199


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

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



Цитата(Zmeika @ Jun 5 2008, 16:05) *
Вопрос - можно ли подменять скрипты так же, как диалоги или 2da таблицы, помещая новые компиляции в override? У меня пока не вышло - если есть два скрипта с одинаковым названием, и при этом один находится в моде, другой в override, то в игре берется версия из мода. А хочется, чтобы наоборот.

можно. Класть в оверрайд нужно скомпилированный скрипт, те nsc. А не nss.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Zmeika
сообщение Jun 5 2008, 17:02
Сообщение #200


Level 3
*

Класс: Рейнджер
Характер: Neutral Good
Раса: Человек



Цитата(Lex @ Jun 5 2008, 16:42) *
Класть в оверрайд нужно скомпилированный скрипт, те nsc. А не nss.

Э, так само собой. (IMG:style_emoticons/kolobok_light/smile.gif) У меня там новые и nss и ncs, но все же срабатывал ncs старый (из мода). Правда, проверяла я запуская мод прямо из тулсета, может это сыграло какую роль... Но по-любому отлично, что в принципе - можно. Тогда, вероятно это у меня где-то косяк.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения

14 страниц V  « < 6 7 8 9 10 > » 
Ответить в эту темуОткрыть новую тему
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 



Текстовая версия Сейчас: 26th April 2024 - 18:57