Pretorius Опубликовано 9 апреля, 2010 Жалоба Поделиться Опубликовано 9 апреля, 2010 Привожу полный текст проблемного скрипта, который, по идее, должен имитировать на созданном creature "Кагренак" (модель пепельного вампира, голоса – от лича) процессы, идентичные процессам с Сердцем Лорхана: begin KagrenakField short sunderHitshort keeningHitshort doOnceshort Release if ( MenuMode == 1 ) returnendif if ( GetDistance Player < 1000 ) if ( GetDetected, Player == 1 ) if ( doOnce == 0 ) ForceGreeting set doOnce to 1 endif endifendif if ( CellChanged == 0 ) if ( Release < 5 ) if ( GetSoundPlaying "Jarktlom" == 0 ) PlayLoopSound3DVP "Jarktlom", 1.0, 1.0 endif elseif ( Release == 5 ) if ( GetSoundPlaying "Jarktlom" == 1 ) StopSound "Jarktlom" endif endifendif if ( Release < 5 ) if ( GetHealth < 65535 ) SetHealth 65535 endifendif;Сердце Лорхана изолирует Кагренака от Плеромона. set sunderHit to HitOnMe Sunder if ( sunderHit == 1 ) if ( Release == 0 ) set Release to 1 set sunderHit to 0 elseif ( Release > 0 ) set sunderHit to 0 endifendif if ( Release > 0 ) set keeningHit to HitOnMe Keeningendif;Разделитель позволяет освободить Кагренака. if ( keeningHit == 0 ) if ( GetSpell "dagoth_ur_shield_01" == 0 ) AddSpell "dagoth_ur_shield_01" endifendif;Физическое проявление действия Сердца. if ( keeningHit == 1 ) if ( Release == 1 ) if ( GetSpell "dagoth_ur_shield_01" == 1 ) PlaySound3DVP "hearthit1" 1.0, 1.0 RemoveSpell "dagoth_ur_shield_01" AddSpell "dagoth_ur_shield_02" set Release to 2 endif endifendif if ( keeningHit == 2 ) if ( Release == 2 ) if ( GetSpell "dagoth_ur_shield_02" == 1 ) PlaySound3DVP "hearthit2" 1.0, 1.0 RemoveSpell "dagoth_ur_shield_02" AddSpell "dagoth_ur_shield_03" set Release to 3 endif endifendif if ( keeningHit == 3 ) if ( Release == 3 ) if ( GetSpell "dagoth_ur_shield_03" == 1 ) PlaySound3DVP "hearthit3" 1.0, 1.0 RemoveSpell "dagoth_ur_shield_03" AddSpell "dagoth_ur_shield_04" set Release to 4 endif endifendif if ( keeningHit == 4 ) if ( Release == 4 ) if ( GetSpell "dagoth_ur_shield_04" == 1 ) PlaySound3DVP "hearthit4" 1.0, 1.0 RemoveSpell "dagoth_ur_shield_04" set Release to 5 endif endifendif;Возможность освобождения - после полной компактификации Щита Сердца. if ( keeningHit > 4 ) if ( Release == 5 ) set keeningHit to 4 endifendif if ( OnDeath == 1 )PlaySoundVP "endboom2" 1.0, 0.5StreamMusic "Special\MW_Triumph.mp3"endif end KagrenakField Исследование реализации в игре этого скрипта (TGM и последовательные удары Разделителем и Разрубателем с проверкой переменных через sv) дало следующие результаты:В исходном состоянии Кагренака: sunderHit == 0, keeningHit == 0, doOnce == 0, Release == 0. Звук "Jarktlom" проигрывается, огненный щит имеется, здоровье действительно принудительно равно 65535. Однако, команда ForceGreeting не выполняется; даже если игрок заговорит с Кагренаком сам, переменная doOnce по-прежнему == 0.После первого удара Разделителем: sunderHit == 0, keeningHit == 0, doOnce == 0, Release == 1. То есть здесь все в порядке.После второго удара Разделителем: sunderHit == 0, keeningHit == 0, doOnce == 0, Release == 1. То есть здесь все в порядке.После первого удара Разрубателем: sunderHit == 0, keeningHit == 0, doOnce == 0, Release == 2. ПРОБЛЕМЫ С ИМИТАЦИЕЙ ПРОЦЕССА СЕРДЦА ЛОРХАНА НАЧИНАЮТСЯ ЗДЕСЬ. Ледяной щит все-таки появляется, но и огненный не исчезает, и звук "hearthit1" не проигрывается.После второго удара Разрубателем: sunderHit == 0, keeningHit == 0, doOnce == 0, Release == 2. У Кагренака по-прежнему остаются огненный и ледяной щиты, т.е. на дальнейшие удары Разрубателем он вообще никак не реагирует.(Примечание: если через консоль ввести Кагренаку SetHealth 0, то условия на OnDeath == 1 все же выполняются). Ссылка на комментарий Поделиться на другие сайты Поделиться
bi-666 Опубликовано 9 апреля, 2010 Жалоба Поделиться Опубликовано 9 апреля, 2010 Первая проблема - думаю, с GetDetected. Попробуйте начала без нее.Такое ощущение, что дальнейшая проблема - с "set keeningHit to HitOnMe Keening" - возможно, стоит сделать проверку отдельной переменной, увеличивающейся по количеству ударов Разрубателем. Ссылка на комментарий Поделиться на другие сайты Поделиться
Pretorius Опубликовано 9 апреля, 2010 Автор Жалоба Поделиться Опубликовано 9 апреля, 2010 Удаление GetDetected действительно помогло, хотя, к сожалению, несколько нарушило план моего квеста (теперь Кагренак обращается к игроку, хотя тот еще не наткнулся на него в лабиринте). Вторая же проблема оказалась связана всего лишь с тем, что функция OnPCHitMe принимает только два значения (1 \ 0); установив поэтапную модификацию countHits на + 1 всякий раз, когда OnPCHitMe принимала значение 1, скрипт моделирования процессов Сердца Лорхана все-таки удалось привести в работоспособное состояние, и теперь он работает как часы!! begin KagrenakField short Compressionshort countHitsshort doOnceshort keeningHitshort Releaseshort sunderHit if ( MenuMode == 1 ) returnendif if ( GetDistance Player < 1000 ) if ( doOnce == 0 ) ForceGreeting set doOnce to 1 endifendif if ( CellChanged == 0 ) if ( Release < 5 ) if ( GetSoundPlaying "Jarktlom" == 0 ) PlayLoopSound3DVP "Jarktlom", 1.0, 1.0 endif elseif ( Release == 5 ) if ( GetSoundPlaying "Jarktlom" == 1 ) StopSound "Jarktlom" endif endifendif if ( Release < 5 ) if ( GetHealth < 65535 ) SetHealth 65535 endifendif;Сердце Лорхана изолирует Кагренака от Плеромона. set sunderHit to HitOnMe "Sunder"set keeningHit to HitOnMe "Keening" if ( sunderHit == 1 ) if ( Release == 0 ) set Release to 1 set sunderHit to 0 elseif ( Release > 0 ) set sunderHit to 0 endifendif;Разделитель фокусирует Щит Сердца. if ( keeningHit == 1 ) set countHits to ( countHits + 1 ) set keeningHit to 0endif;Разрубатель сжимает Щит Сердца. if ( Compression == 1 ) set Compression to 0 set Release to ( Release + 1 ) returnendif if ( countHits == 0 ) if ( GetSpell "dagoth_ur_shield_01" == 0 ) AddSpell "dagoth_ur_shield_01" endifendif;Физическое проявление действия Сердца. if ( countHits == 1 ) if ( Release == 1 ) if ( GetSpell "dagoth_ur_shield_01" == 1 ) PlaySound3DVP "hearthit1" 1.0, 1.0 RemoveSpell "dagoth_ur_shield_01" AddSpell "dagoth_ur_shield_02" set Compression to 1 endif endifendif if ( countHits == 2 ) if ( Release == 2 ) if ( GetSpell "dagoth_ur_shield_02" == 1 ) PlaySound3DVP "hearthit2" 1.0, 1.0 RemoveSpell "dagoth_ur_shield_02" AddSpell "dagoth_ur_shield_03" set Compression to 1 endif endifendif if ( countHits == 3 ) if ( Release == 3 ) if ( GetSpell "dagoth_ur_shield_03" == 1 ) PlaySound3DVP "hearthit3" 1.0, 1.0 RemoveSpell "dagoth_ur_shield_03" AddSpell "dagoth_ur_shield_04" set Compression to 1 endif endifendif if ( countHits == 4 ) if ( Release == 4 ) if ( GetSpell "dagoth_ur_shield_04" == 1 ) PlaySound3DVP "hearthit4" 1.0, 1.0 RemoveSpell "dagoth_ur_shield_04" set Compression to 1 endif endifendif;Возможность освобождения - после полной компактификации Щита Сердца. if ( OnDeath == 1 )PlaySoundVP "endboom2" 1.0, 0.5StreamMusic "Special\MW_Triumph.mp3"endif end KagrenakField Ссылка на комментарий Поделиться на другие сайты Поделиться
bi-666 Опубликовано 10 апреля, 2010 Жалоба Поделиться Опубликовано 10 апреля, 2010 (изменено) Удаление GetDetected действительно помогло, хотя, к сожалению, несколько нарушило план моего квеста (теперь Кагренак обращается к игроку, хотя тот еще не наткнулся на него в лабиринте). Вторая же проблема оказалась связана всего лишь с тем, что функция OnPCHitMe принимает только два значения (1 \ 0); установив поэтапную модификацию countHits на + 1 всякий раз, когда OnPCHitMe принимала значение 1, скрипт моделирования процессов Сердца Лорхана все-таки удалось привести в работоспособное состояние, и теперь он работает как часы!!Рад, что все работает.Касательно гетдетектед - возможно, стоит сделать невидимый активатор, что б плейсил Кагренака к игроку на определенном расстоянии от него, со спецэффектами, естественно. Желательно, в тупик крепости. Изменено 10 апреля, 2010 пользователем bi-666 Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения
Для публикации сообщений создайте учётную запись или авторизуйтесь
Вы должны быть пользователем, чтобы оставить комментарий
Создать учетную запись
Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!
Регистрация нового пользователяВойти
Уже есть аккаунт? Войти в систему.
Войти