Pretorius Опубликовано 10 августа, 2010 Жалоба Поделиться Опубликовано 10 августа, 2010 (изменено) Попытавшись дать центральному персонажу моего плагина способность к телепортации в точку прямо перед игроком, когда игрок пытается от него убежать, я столкнулся с неожиданным глюком: хотя телепортация и происходит, в инициируемом диалоге к игроку обращаются ДВА Анурра, хотя он создается одним; после прощания же, вместо запуска битвы с Анурром, почему-то снова запускается цикл "его телепортация - диалог - и т.п. ...", т.е. игра зацикливается на этом (см. скриншоты во вложенном файле).И еще, сначала я по ошибке установил на диалог Анурра (который после его телепортации в точку перед объектом) ошибочное условие - не AnurrVoice == 1, но AnurrTeleport == 1 - тогда диалог также происходил "с двумя" Ануррами, но телепортация не зацикливалась (по прощании с Анурром начиналась битва, после бегства игрока на 1000 фт также происходит телепортация-диалог-битва, и т.п.).. Я подумал, что "двойной диалог" был из-за этого неправильного условия и переправил его на правильное - а это почему-то не только не помогло, но и привело еще и к зацикливанию телепортации.Так где же причина этих ошибок, и как устранить ее? begin AnurrPlaceScript;скрипт активатора, создающий Анурра short doOnce if ( MenuMode == 1 ) returnendif if ( doOnce == 1 ) returnendif if ( GetJournalIndex "1_1_1_1" >= 20 ) if ( doOnce == 0 ) PlaceAtMe, "1_9_3_test", 1, 1, 1;создает Анурра (чтобы мог быть дизаблирован скриптом) set doOnce to 1 endifendif end AnurrPlaceScript begin AnurrTestScript;скрипт Анурра short combatOnceshort disablingOnceshort doOnceshort NoIdleshort NoIntrudershort noLoreshort trigger if ( MenuMode == 1 ) returnendif if ( AnurrTeleport == 1 ) if ( AnurrDeath == 0 );только если Анурр жив if ( GetDistance Player > 1000 );бегство игрока if ( disablingOnce == 0 ) disable;исчезновение в старой точке DisablePlayerControlsset disablingOnce to 1;однократность запуска телепортации set AnurrVoice to 1;глобальная пер. - чтобы сказал о бесполезности бегства StartScript, AnurrTeleportScript;запуск скрипта плейсирования endif endif endifendif if ( AnurrVoice == 1 ) if ( GetDisabled == 0 );чтобы говорил только загруженный (плейсированный перед игроком) if ( GetDistance Player < 500 ) if ( trigger == 0 );чтобы обращение было однократным ForceGreeting set trigger to 1 endif endif endifendif if ( GetJournalIndex "1_1_1_1" >= 20 ) if ( GetDistance Player < 1000 ) if ( GetDetected, Player == 1 ) if ( doOnce == 0 ) ForceGreeting;запуск битвы из диалога при приближении set doOnce to 1 endif endif endifendif if ( GetTarget, Player == 1 ) if ( AnurrTrigger == 1 );глобальная пер., приравниваемая 1 в первом диалоге if ( combatOnce == 0 );одноразовость действия блока set AnurrTeleport to 1;запуск готовности Анурра к телепортации set combatOnce to 1 endif endifendif if ( onDeath == 1 );при уничтожении Анурра if ( GetDeadCount, "1_9_4" == 0 ) if ( "1_9_4"->GetTarget, Player == 0 ) AddItem "p_blood6th" 1 MessageBox "Вы слышите чьи-то торопливо удаляющиеся шаги...." PlaySoundVP "endboom2" 1.0, 0.5 set AnurrDeath to 1 StreamMusic "Special\MW_Triumph.mp3" elseif ( "1_9_4"->GetTarget, Player == 1 ) AddItem "p_blood6th" 1 MessageBox "Я ВСЕ РАВНО ТЕБЯ УНИЧТОЖУ!!!" PlaySoundVP "endboom2" 1.0, 0.5 set AnurrDeath to 1 StreamMusic "Special\MW_Triumph.mp3" endif elseif ( GetDeadCount, "1_9_4" > 0 ) AddItem "p_blood6th" 1 journal 1_1_1_1 25 journal 1_1_1_2 15 PlaySoundVP "endboom2" 1.0, 0.5 set AnurrDeath to 1 StreamMusic "Special\MW_Triumph.mp3" endifendif end AnurrTestScript begin AnurrTeleportScript;скрипт, плейсирующий Анурра float timershort PlaceDoneshort triggershort WaveDone if ( AnurrTeleport == 1 ) set timer to ( timer + GetSecondsPassed ) if ( timer >= 7 ) if ( WaveDone == 0 ) EnablePlayerControls;игрок снова может двигаться PlaySound "DarkOpen";звук, сопровождающий телепортацию set AnurrTeleport to 0;отключает способность к телепортации до нападения плейсированного Анурра set timer to 0 set WaveDone to 1 endif endifendif if ( WaveDone == 1 ) if ( trigger == 0 ) set WaveDone to 0 set trigger to 1 endifendif if ( trigger == 1 ) if ( PlaceDone == 0 ) set trigger to 0 set PlaceDone to 1 endifendif if ( PlaceDone == 1 ) PlaceAtPC, "1_9_3_test", 1, 50, 1;телепортация завершена set PlaceDone to 0 StopScript, AnurrTeleportScriptendif end AnurrTeleportScriptскриншоты.doc Изменено 10 августа, 2010 пользователем Pretorius Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения
Для публикации сообщений создайте учётную запись или авторизуйтесь
Вы должны быть пользователем, чтобы оставить комментарий
Создать учетную запись
Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!
Регистрация нового пользователяВойти
Уже есть аккаунт? Войти в систему.
Войти