![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() ![]() |
![]() |
![]()
Сообщение
#161
|
|
Level 5 ![]() Класс: Обыватель Характер: Lawful Neutral Раса: Человек NWN: Модмейкер Проклятие Левора Порядок Времени ![]() |
про какой именно кэш идет речь? спроси у шардовиков, я от них это слышал, сам этим логом не пользуюсь (IMG:style_emoticons/kolobok_light/smile.gif) |
![]()
Сообщение
#162
|
|
Level 17 ![]() Класс: Волшебник Характер: Neutral Good Раса: Человек NWN: Скриптинг [PW] Axistown SR 1.9 NWNX ![]() |
Я тоже не понял, что за кэш и память и как они выводятся в лог.
|
![]()
Сообщение
#163
|
|
Level 5 ![]() Класс: Обыватель Характер: Lawful Neutral Раса: Человек NWN: Модмейкер Проклятие Левора Порядок Времени ![]() |
ну раз даже вирь не знает, значит я перепутал НВН с другим приложением (IMG:style_emoticons/kolobok_light/smile.gif) сам я натыкался только на переполнение стека, деление на 0 и какие-то ошибки с памятью (слово memory было (IMG:style_emoticons/kolobok_light/smile.gif) )
|
![]()
Сообщение
#164
|
|
Level 3 ![]() Класс: Обыватель Характер: Chaotic Evil Раса: Человек ![]() |
Ну если про память еще можно понять (сегментейшен фолт, хоть ни в каких логах ее ессесно не будет), то про кеш меня ввело в ступор, т.к. кеш абсолютно прозрачен для людей и управляется только хардвэйром. Даже через ассамблер в него не влезть.
Сообщение отредактировал Edwin - Jan 3 2008, 13:57 |
![]()
Сообщение
#165
|
|
Level 17 ![]() Класс: Волшебник Характер: Neutral Good Раса: Человек NWN: Скриптинг [PW] Axistown SR 1.9 NWNX ![]() |
Ну если про память еще можно понять (сегментейшен фолт, хоть в логах ее не будет), то про кеш меня ввело в ступор, т.к. кеш абсолютно прозрачен для людей и управляется только хардвэйром. Даже через ассамблер в него не влезть. Кэшей много разных, и в НВНе есть кэш (2da, скриптов и ресурсов), но в лог инфа о нём не выводится (даже через DummyLog).Ошибки стека в скриптах, TMI, деление на ноль - да, бывает, но это тоже в лог не идёт, насколько я помню. |
![]()
Сообщение
#166
|
|
Level 5 ![]() Класс: Обыватель Характер: Lawful Neutral Раса: Человек NWN: Модмейкер Проклятие Левора Порядок Времени ![]() |
Ошибки стека в скриптах, TMI, деление на ноль - да, бывает, но это тоже в лог не идёт, насколько я помню. в НВН1 вроде идет и в лог файл и в лог в игре. А иначе очень странный лог получается, никакой инфы по ошибкам? (IMG:style_emoticons/kolobok_light/smile.gif) А вот в НВН2 мб и не идет, я лог-файлом тут и подавно не пользуюсь. зы: что-то мы с оффтопом перебрали, пора завязывать (IMG:style_emoticons/kolobok_light/ph34r.gif) |
![]()
Сообщение
#167
|
|
Level 3 ![]() Класс: Обыватель Характер: Chaotic Evil Раса: Человек ![]() |
А в обычном компиляторе у тебя много информации об ошибках во время экзекуции? stderr, try-catch и руки - все что надо для отладки. Ффс.....
Сообщение отредактировал Edwin - Jan 3 2008, 14:58 |
![]()
Сообщение
#168
|
|
Level 9 ![]() Класс: Фея Характер: Chaotic Evil Раса: Тварь NWN: Скриптинг [PW] ![]() |
кеш абсолютно прозрачен для людей и управляется только хардвэйром. Даже через ассамблер в него не влезть. prefetch/prefetchw/prefetchnta/prefetcht0(1,2) (IMG:style_emoticons/kolobok_light/whistle3.gif)
|
![]()
Сообщение
#169
|
|
Level 3 ![]() Класс: Обыватель Характер: Chaotic Evil Раса: Человек ![]() |
Ок, про асм я загнул. Можно. Но ненужно, т.к. этим вероятнее всего пользуются только в написании мега симуляторов и софта для посадки шаттлов.
|
![]()
Сообщение
#170
|
|
Level 5 ![]() Класс: Обыватель Характер: Lawful Neutral Раса: Человек NWN: Модмейкер Проклятие Левора Порядок Времени ![]() |
софта для посадки шаттлов. тады уж Бурана, ибо только он садился на автопилоте, Шаттлы - вручную. завязываем асм, компиляторы и дебагеры. тема не про это. Если хочется всетаки об этом - выделю вам отдельный топик (IMG:style_emoticons/kolobok_light/smile.gif) А то что выше почищу завтра, чтобы не пугать скриптеров (IMG:style_emoticons/kolobok_light/smile.gif) |
![]()
Сообщение
#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 |
![]() ![]() |
Текстовая версия | Сейчас: 17th July 2025 - 05:16 |