Перейти к содержанию

Боевая телепортация


Рекомендуемые сообщения

Попытавшись дать центральному персонажу моего плагина способность к телепортации в точку прямо перед игроком, когда игрок пытается от него убежать, я столкнулся с неожиданным глюком: хотя телепортация и происходит, в инициируемом диалоге к игроку обращаются ДВА Анурра, хотя он создается одним; после прощания же, вместо запуска битвы с Анурром, почему-то снова запускается цикл "его телепортация - диалог - и т.п. ...", т.е. игра зацикливается на этом (см. скриншоты во вложенном файле).

И еще, сначала я по ошибке установил на диалог Анурра (который после его телепортации в точку перед объектом) ошибочное условие - не AnurrVoice == 1, но AnurrTeleport == 1 - тогда диалог также происходил "с двумя" Ануррами, но телепортация не зацикливалась (по прощании с Анурром начиналась битва, после бегства игрока на 1000 фт также происходит телепортация-диалог-битва, и т.п.).. Я подумал, что "двойной диалог" был из-за этого неправильного условия и переправил его на правильное - а это почему-то не только не помогло, но и привело еще и к зацикливанию телепортации.

Так где же причина этих ошибок, и как устранить ее?

 

begin AnurrPlaceScript

;скрипт активатора, создающий Анурра

 

short doOnce

 

if ( MenuMode == 1 )

return

endif

 

if ( doOnce == 1 )

return

endif

 

if ( GetJournalIndex "1_1_1_1" >= 20 )

if ( doOnce == 0 )

PlaceAtMe, "1_9_3_test", 1, 1, 1;создает Анурра (чтобы мог быть дизаблирован скриптом)

set doOnce to 1

endif

endif

 

end AnurrPlaceScript

 

begin AnurrTestScript

;скрипт Анурра

 

short combatOnce

short disablingOnce

short doOnce

short NoIdle

short NoIntruder

short noLore

short trigger

 

if ( MenuMode == 1 )

return

endif

 

if ( AnurrTeleport == 1 )

if ( AnurrDeath == 0 );только если Анурр жив

if ( GetDistance Player > 1000 );бегство игрока

if ( disablingOnce == 0 )

disable;исчезновение в старой точке

DisablePlayerControls

set disablingOnce to 1;однократность запуска телепортации

set AnurrVoice to 1;глобальная пер. - чтобы сказал о бесполезности бегства

StartScript, AnurrTeleportScript;запуск скрипта плейсирования

endif

endif

endif

endif

 

if ( AnurrVoice == 1 )

if ( GetDisabled == 0 );чтобы говорил только загруженный (плейсированный перед игроком)

if ( GetDistance Player < 500 )

if ( trigger == 0 );чтобы обращение было однократным

ForceGreeting

set trigger to 1

endif

endif

endif

endif

 

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

endif

endif

 

if ( GetTarget, Player == 1 )

if ( AnurrTrigger == 1 );глобальная пер., приравниваемая 1 в первом диалоге

if ( combatOnce == 0 );одноразовость действия блока

set AnurrTeleport to 1;запуск готовности Анурра к телепортации

set combatOnce to 1

endif

endif

endif

 

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"

endif

endif

 

end AnurrTestScript

 

 

begin AnurrTeleportScript

;скрипт, плейсирующий Анурра

 

float timer

short PlaceDone

short trigger

short 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

endif

endif

 

if ( WaveDone == 1 )

if ( trigger == 0 )

set WaveDone to 0

set trigger to 1

endif

endif

 

if ( trigger == 1 )

if ( PlaceDone == 0 )

set trigger to 0

set PlaceDone to 1

endif

endif

 

if ( PlaceDone == 1 )

PlaceAtPC, "1_9_3_test", 1, 50, 1;телепортация завершена

set PlaceDone to 0

StopScript, AnurrTeleportScript

endif

 

end AnurrTeleportScript

скриншоты.doc

Изменено пользователем Pretorius
Ссылка на комментарий
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...