Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скрипты Morrowind.doc
Скачиваний:
92
Добавлен:
29.10.2018
Размер:
2.81 Mб
Скачать

Скриптовая телепортация

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

COE 0 0

Player->SetPos x xpos

Player->SetPos x ypos

Player->SetPos x zpos

FixMe

где FixMe должно загрузить ячейку назначения правильно, чтобы избежать проблем, если SetPos будет недостаточно. Nigedo прислал сообщение о проблемах и их решениях в данном подходе:

"Иногда ячейка назначения не загружается правильно даже с FixMe. В других случаях игра выдает странные сообщения об ошибках или зависает. С помощью Grumpy и Mode_Locrian (спасибо, парни) я написал скрипт, который работает надежно, по крайней мере в тех тестах, которые я использовал. Он работает, передвигая игрока в несколько стадий, что позволяет правильно загрузить ячейку.

Для эстетки FadeOut использовано в начале и FadeIn в конце скрипта.

Есть две стадии. Начальные координаты игрока в экстерьере записываются в три глобальные переменные. Затем нужно использовать StartScript для запуска скрипта обратно в экстерьер47. Я пытался использовать более оптимизированную версию, которая бы перемещала игрока на 131072 ед., чтобы уменьшить количество загрузок. Но этот способ иногда не срабатывал. Когда дистанция от 0,0 до точки назначения была ближе чем 8192 ед., ячейка не всегда загружалась и смысл данного подхода исчезал. Весь способ довольно громоздкий, но он, похоже, надежен."

Begin script_placePC

;Global Long Start_PCX

;Global Long Start_PCY

;Global Long Start_PCZ

Float xpos

Float ypos

Float zpos

Long higher

Long lower

Short step

If ( step == 0 )

Player->COE 0 0

Set step to 1

Return

Endif

Set xpos to ( Player->GetPos x )

Set ypos to ( Player->GetPos y )

If ( step == 1 )

Set higher to ( Start_PCX + 8192 )

Set lower to ( Start_PCX - 8192 )

If ( xpos > higher )

Set xpos to ( xpos - 8192 )

Player->SetPos x xpos

Elseif ( xpos < lower )

Set xpos to ( xpos + 8192 )

Player->SetPos x xpos

Else

Set step to 2

Endif

Return

Elseif ( step == 2 )

Set higher to ( Start_PCY + 8192 )

Set lower to ( Start_PCY - 8192 )

If ( ypos > higher )

Set ypos to ( ypos - 8192 )

Player->SetPos y ypos

Elseif ( ypos < lower )

Set ypos to ( ypos + 8192 )

Player->SetPos y ypos

Else

Set step to 3

Endif

Return

Elseif ( step == 3 )

Set xpos to Start_PCX

Set ypos to Start_PCY

Set zpos to Start_PCZ

Player->SetPos x xpos

Player->SetPos y ypos

Player->SetPos z zpos

Set step to 0

StopScript script_placePC

Endif

End

Примечание: В паре слечаев, мой игрок прибывал в точку назначения и умирал. Хехе… Я могу только предположить, что какое-то существо покусало его по пути. Так что неплохо было бы проводить телепортацию с ToggleGodMode. Эстетика данного процесса очень улучшается при использовании FadeOut и FadeIn, как я уже говорил. Также ее можно улучшить с помощью ToggleMenus после начальной строки COE, что прячет все меню, в том числе и меню загрузки. Потом их можно реактивировать, используя: ToggleMenus, MenuTest, MenuTest.