![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() ![]() |
![]() |
![]()
Сообщение
#176
|
|
Level 12 ![]() Класс: Оборотень Характер: Chaotic Neutral Раса: Нежить NWN: Скриптинг [Sn] ![]() |
можно добавить предмету "особое свойство" по типу Unique Power или его самого, тогда им можно будет действовать на всё подряд, а уже скриптами проверять и отпускать ядовитые комментарии, когда игрок будет действовать на стог сена неположеными солью и перцем.
однако, игроки не оценят. <_< -- У SetGlobalXXX тип возвращаемого значения - int (в смысле булеан), что должно наводить на определённые мысли... |
![]() ![]()
Сообщение
#177
|
|
Level 4 ![]() Класс: Обыватель Характер: True Neutral Раса: Человек NWN2: Маппинг ![]() |
Возможно ли как-то эмулировать событие OnClick для существ?
Или чтобы OnConversation запускался сразу издалека (не заставляя игрока подбегать вплотную к НПЦ). |
![]()
Сообщение
#178
|
|
Level 9 ![]() Класс: Обыватель Характер: Lawful Good Раса: Человек NWN: Модмейкер Рыцарская Сага ![]() |
|
![]()
Сообщение
#179
|
|
Level 5 ![]() Класс: Обыватель Характер: Lawful Neutral Раса: Человек NWN: Модмейкер Проклятие Левора Порядок Времени ![]() |
Для этого есть по крайней мере 3 варианта: 1. Скрипт OnEnter триггера 2. Скрипт OnHeartbeat НПС или плейса 3. Скрипт OnPerception НПС ни одно из этих не подходит под вариант onClick. Или чтобы OnConversation запускался сразу издалека (не заставляя игрока подбегать вплотную к НПЦ). вот в эту сторону можно попробовать подумать, но думаю дистанция разговора зашита в движок. |
![]()
Сообщение
#180
|
|
Level 18 ![]() Класс: Страж Тьмы Характер: True Neutral Раса: Человек МАСТЕР D&D ![]() |
Цитата(Jadent @ Mar 24 2008, 17:54) Или чтобы OnConversation запускался сразу издалека (не заставляя игрока подбегать вплотную к НПЦ). вот в эту сторону можно попробовать подумать, но думаю дистанция разговора зашита в движок. а разве возможность перебрасывать РС в место диалога с НПС отменили? |
![]()
Сообщение
#181
|
|
Level 4 ![]() Класс: Обыватель Характер: True Neutral Раса: Человек NWN2: Маппинг ![]() |
|
![]()
Сообщение
#182
|
|
Level 1 Класс: Некромант Характер: Neutral Evil Раса: Человек ![]() |
Нужна функция, возвращающая школу, на которой специализируется Маг (General, e.t.c.).
Еще вопрос: Как расширить возможности функции EffectPolymorph()? Для ее функционирования нужно знать ID крича в которого происходит превращение. Оные указаны константами типа POLYMORPH_TYPE_*. Их довольно мало. К примеру, я хочу превратить Духа волка в Тень. Как это сделать? |
![]()
Сообщение
#183
|
|
Level 12 ![]() Класс: Оборотень Характер: Chaotic Neutral Раса: Нежить NWN: Скриптинг [Sn] ![]() |
Цитата Как расширить возможности функции EffectPolymorph()? Для ее функционирования нужно знать ID крича в которого происходит превращение. Оные указаны константами типа POLYMORPH_TYPE_*. Их довольно мало. К примеру, я хочу превратить Духа волка в Тень. Как это сделать? добавить желаемые в .2da таблицы. или использовать функцию SetCreatureAppearanceType. Сообщение отредактировал azathoth - Apr 23 2008, 20:08 |
![]()
Сообщение
#184
|
|
Level 1 Класс: Некромант Характер: Neutral Evil Раса: Человек ![]() |
добавить желаемые в .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); } |
![]()
Сообщение
#185
|
|
Level 12 ![]() Класс: Оборотень Характер: Chaotic Neutral Раса: Нежить NWN: Скриптинг [Sn] ![]() |
Функции возвращающей школу не знаю.
объявление переменных вне функции (тем более вперемешку с декларацией функции) - это ахтунг. ИМХО. Единственное что могу сказать - функция задержки DelayCommand(...), у тебя Delaится Action, а экшн привязан к объекту OBJECT_SELF по умолчанию, не факт, что в отдельной функции он будет тот, что ты хочешь. А самое главное - экшын экшыном, но строчки вне него будут всё равно будут выполнены все сразу в любом случае - то есть сначала сработает скрипт, а затем будут выполняться действия (в т.ч. со своими "кусочками скрипта"). Так что определись, задержку между "чем" и "чем" ты хочешь - и второе заDelay. Сообщение отредактировал azathoth - Apr 24 2008, 17:43 |
![]()
Сообщение
#186
|
|
Level 1 Класс: Некромант Характер: Neutral Evil Раса: Человек ![]() |
Спасибо!
Хочу, что бы все выполнялось в том порядке, в каком идет в теле скрипта. Значит, надо весь скрипт расписать по секундам в DelayCommand? Насчет ахтунга - там, если ты не заметил, везде ахтунг - добьюсь работоспособности и оформлю по человечески, заодно оптимизирую. |
![]()
Сообщение
#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 |
![]()
Сообщение
#188
|
|
Level 1 Класс: Пьяный Мастер Характер: Neutral Evil Раса: Орк ![]() |
как сделать реакцию на фразу в чат канала (от плеера)? Только скрипт повесить не в пределах восприятия 1нпц, а на всю локу.
|
![]()
Сообщение
#189
|
|
Level 17 ![]() Класс: Волшебник Характер: Neutral Good Раса: Человек NWN: Скриптинг [PW] Axistown SR 1.9 NWNX ![]() |
В 1.69 будет соответствующее событие.
А пока - либо воисами (см. DMFI), либо NWNX Chat (если шард). |
![]()
Сообщение
#190
|
|
Level 1 Класс: Пьяный Мастер Характер: Neutral Evil Раса: Орк ![]() |
я про нвн2. А нельзя увеличить область восприятия нпс (именно события OnConversation), и поставить его например за пределы локи? Ну или сделать его невидимым для плеера, пробовал ставить апиренс - none и script hidden, так в игре вобще как будето его нету, скрипты так тож неработают.
|
![]()
Сообщение
#191
|
|
Level 17 ![]() Класс: Волшебник Характер: Neutral Good Раса: Человек NWN: Скриптинг [PW] Axistown SR 1.9 NWNX ![]() |
Посмотри DMFI, там должны быть невидимые воисы.
|
![]()
Сообщение
#192
|
|
Level 3 ![]() Класс: Рейнджер Характер: Neutral Good Раса: Человек ![]() |
Можно ли на ходу поменять свойство для уже существующего предмета?
Нужно у готового предмета установить (временно!) свойство из серии Activate, чтобы у предмета появлялась иконка "активировать" и срабатывал нужный скрипт по тэгу. В исходном предмете такого свойства нет. Мне нужно, чтобы оно появилось, и начал срабатывать скрипт. Временное изменение иконки у предмета - тоже интересует. Вышла из ситуации временно создавая новый предмет по другому шаблону и незаметно подменяя им старый. Но неудобно это. (IMG:style_emoticons/kolobok_light/aggressive.gif) |
![]()
Сообщение
#193
|
|
Level 5 ![]() Класс: Обыватель Характер: Lawful Neutral Раса: Человек NWN: Модмейкер Проклятие Левора Порядок Времени ![]() |
свойство можно.
иконку низя. |
![]()
Сообщение
#194
|
|
Level 3 ![]() Класс: Рейнджер Характер: Neutral Good Раса: Человек ![]() |
а какой функцией можно свойство поменять или установить? Хотя бы примерно, как называется?
|
![]()
Сообщение
#195
|
|
Level 5 ![]() Класс: Обыватель Характер: Lawful Neutral Раса: Человек NWN: Модмейкер Проклятие Левора Порядок Времени ![]() |
AddItemProperty
соотв есть или Remove или Delete или какой-нить другой Destroy этой самой ItemProperty. |
![]()
Сообщение
#196
|
|
Level 3 ![]() Класс: Рейнджер Характер: Neutral Good Раса: Человек ![]() |
AddItemProperty - работает, спасибо!
Правда, почему-то не работает SetDescription для того же самого предмета. Т.е. свойство - появляется, а описание остается прежним. Вопрос - можно ли подменять скрипты так же, как диалоги или 2da таблицы, помещая новые компиляции в override? У меня пока не вышло - если есть два скрипта с одинаковым названием, и при этом один находится в моде, другой в override, то в игре берется версия из мода. А хочется, чтобы наоборот. |
![]()
Сообщение
#197
|
|
Level 17 ![]() Класс: Волшебник Характер: Neutral Good Раса: Человек NWN: Скриптинг [PW] Axistown SR 1.9 NWNX ![]() |
|
![]()
Сообщение
#198
|
|
Level 3 ![]() Класс: Рейнджер Характер: Neutral Good Раса: Человек ![]() |
версия 1.12
свойство и описание устанавливается в скрипте на взятие предмета (_aq) Сообщение отредактировал Zmeika - Jun 5 2008, 16:33 |
![]()
Сообщение
#199
|
|
Level 5 ![]() Класс: Обыватель Характер: Lawful Neutral Раса: Человек NWN: Модмейкер Проклятие Левора Порядок Времени ![]() |
Вопрос - можно ли подменять скрипты так же, как диалоги или 2da таблицы, помещая новые компиляции в override? У меня пока не вышло - если есть два скрипта с одинаковым названием, и при этом один находится в моде, другой в override, то в игре берется версия из мода. А хочется, чтобы наоборот. можно. Класть в оверрайд нужно скомпилированный скрипт, те nsc. А не nss. |
![]()
Сообщение
#200
|
|
Level 3 ![]() Класс: Рейнджер Характер: Neutral Good Раса: Человек ![]() |
Класть в оверрайд нужно скомпилированный скрипт, те nsc. А не nss. Э, так само собой. (IMG:style_emoticons/kolobok_light/smile.gif) У меня там новые и nss и ncs, но все же срабатывал ncs старый (из мода). Правда, проверяла я запуская мод прямо из тулсета, может это сыграло какую роль... Но по-любому отлично, что в принципе - можно. Тогда, вероятно это у меня где-то косяк. |
![]() ![]() |
Текстовая версия | Сейчас: 30th April 2025 - 01:55 |