![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() ![]() |
![]() |
![]()
Сообщение
#171
|
|
Level 12 ![]() Класс: Оборотень Характер: Chaotic Neutral Раса: Нежить NWN: Скриптинг [Sn] ![]() |
Есть очень удобная такая вещь: SetGlobalXXX, но только вот когда переменных становится много, то некоторые почему-то тупо игнорируются (IMG:style_emoticons/kolobok_light/sad.gif) другие можно продолжать добавлять (IMG:style_emoticons/kolobok_light/unknw.gif) зависимости он имён переменных или их количества установить не удалось, то после 200 начинает корявить, то 5000 спокойно держит. так что предупреждаю и спрашиваю: кто нибудь сталкивался и как с этим бороться?
зы: а чего тема не прикреплена? |
![]()
Сообщение
#172
|
|
Level 5 ![]() Класс: Обыватель Характер: Lawful Neutral Раса: Человек NWN: Модмейкер Проклятие Левора Порядок Времени ![]() |
у меня пока наверное около 100 глобалок - никаких глюков ниразу не видел.
зы: а чего тема не прикреплена? тады тут пол раздела будет прикреплено (IMG:style_emoticons/kolobok_light/smile.gif) |
![]()
Сообщение
#173
|
|
Level 1 Класс: Обыватель Характер: Chaotic Neutral Раса: Человек ![]() |
Интересует возможность создания весьма специфического скрипта... Дело в том, что на мой взгляд в НВН2 сильно не хватает возможности взаимодействия объктов между собой (из инвентаря с окружающей средой). Диалоговый вариант не устраивает, так как с ним не построишь нормальных головоломок - если тебе уже очевидный путь предоставляют в качестве варианта.
И так - можно ли сделать следующее: при перетаскивании вещи из инвентаря на какой нибудь объект происходило "событие" - открывался диалог, или ещё что - это уже детали. На вскидку - перетаскиваем факел из инвентаря на стог сена - стог сена заменяется костром (первое пришедшее в голову) |
![]()
Сообщение
#174
|
|
Level 5 ![]() Класс: Обыватель Характер: Lawful Neutral Раса: Человек NWN: Модмейкер Проклятие Левора Порядок Времени ![]() |
На вскидку - перетаскиваем факел из инвентаря на стог сена - стог сена заменяется костром (первое пришедшее в голову) лучше тыкнуть в стог сена, если есть факел в руке - зажечь. Если нужен выбор - предоставлять выбор. или диалогом или гуи окном. с предметами и объектами "взаимодействие" возможно в принципе, но это лишний не очень нужный гемор. Самый простой вариант - положить в инвентарь. Скажем положить в стог сена факел - загорится. |
![]()
Сообщение
#175
|
|
Level 1 Класс: Обыватель Характер: Chaotic Neutral Раса: Человек ![]() |
со стогом сена - это лишь пример, чтоб описать, что нужно... существуют куча вариантов использования - верёвок, воды, денег ну и т.д. и т.п. - так что интересует именно такой вариант... но если в принципе возможно - то буду искать.
"Если нужен выбор - предоставлять выбор. или диалогом или гуи окном." в том то и проблема - что предоставляешь выбор, а не делаешь возможность сделать это игроку. Чтоб он сказал " о, я сам догадался!" Добавлено через 6 минут хотя - идея сделать объекты помещаемыми в руку и проверку на то ли есть в руки при взаимодействие - самый простой вариант... спасибо. |
![]()
Сообщение
#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. |
![]() ![]() |
Текстовая версия | Сейчас: 16th July 2025 - 18:24 |