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

Езда верхом для NPC


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

Есть непростая проблема. Пытаюсь выдрать из Ранчо Пегас, без самого ранчо, скрипт на езду верхом для компаньонов, неписей. Вот скрипт:

;=============================================================================

; NPC Horse Riding Script by Madmax ( 2004 )

;=============================================================================

begin hr_npchorse_script01

 

float xmul

float ymul

short OnlyOnce

short ridingmode

short pheight

short dismount

short state

float frontbackpos

float xx

float yy

float zz

float timer

float xdist

float ydist

float distance

float temp

short doOnce

short flag

short enableflag

short OnlyOnce2

 

if ( Menumode == 1 )

return

endif

 

;=============================================================================

; Activate Horse Riding

;=============================================================================

if ( ridingmode == 0 )

if ( OnActivate == 1 )

if ( GetHealth <= 0 ) ; if creature is dead, disable riding and access inventory only

Activate

else

ForceGreeting

endif

endif

return

endif

 

if ( ridingmode == 1 )

"hr_sigonryp"->addspell "hr_ridingspell"

set ridingmode to 2

"hr_sigonryp"->AiWander 0 0 0 0 0 0 0 0 0 0 0

"hr_sigonryp"->face 98853.8, 103467.5

return

endif

 

;=============================================================================

; Calculate and position horse direction

;=============================================================================

 

if ( GetAIPackageDone == 1 )

set xdist to ( getpos, x - 98853.8 )

set ydist to ( getpos, y - 103467.5 )

set xdist to ( xdist * xdist )

set ydist to ( ydist * ydist )

set distance to ( xdist + ydist )

set temp to GetSquareRoot, distance

set state to 2

set xdist to ( getpos, x - 100697.7 )

set ydist to ( getpos, y - 103694.5 )

set xdist to ( xdist * xdist )

set ydist to ( ydist * ydist )

set distance to ( xdist + ydist )

set distance to GetSquareRoot, distance

if ( distance < temp )

set temp to distance

set state to 3

endif

set xdist to ( getpos, x - 100708.2 )

set ydist to ( getpos, y - 106049.9 )

set xdist to ( xdist * xdist )

set ydist to ( ydist * ydist )

set distance to ( xdist + ydist )

set distance to GetSquareRoot, distance

if ( distance < temp )

set temp to distance

set state to 4

endif

set xdist to ( getpos, x - 99697.3 )

set ydist to ( getpos, y - 106680.5 )

set xdist to ( xdist * xdist )

set ydist to ( ydist * ydist )

set distance to ( xdist + ydist )

set distance to GetSquareRoot, distance

if ( distance < temp )

set temp to distance

set state to 5

endif

set xdist to ( getpos, x - 98308.9 )

set ydist to ( getpos, y - 106685.2 )

set xdist to ( xdist * xdist )

set ydist to ( ydist * ydist )

set distance to ( xdist + ydist )

set distance to GetSquareRoot, distance

if ( distance < temp )

set temp to distance

set state to 6

endif

set xdist to ( getpos, x - 96763.4 )

set ydist to ( getpos, y - 105662.8 )

set xdist to ( xdist * xdist )

set ydist to ( ydist * ydist )

set distance to ( xdist + ydist )

set distance to GetSquareRoot, distance

if ( distance < temp )

set temp to distance

set state to 0

endif

set xdist to ( getpos, x - 96703.7 )

set ydist to ( getpos, y - 104200.1 )

set xdist to ( xdist * xdist )

set ydist to ( ydist * ydist )

set distance to ( xdist + ydist )

set distance to GetSquareRoot, distance

if ( distance < temp )

set temp to distance

set state to 1

endif

 

 

if ( state == 0 )

set xmul to -0.0408

set ymul to 0.9992

"hr_sigonryp"->face 96703.7, 104200.1

elseif ( state == 1 )

set xmul to 0.9466

set ymul to -0.3225

"hr_sigonryp"->face 98853.8, 103467.5

elseif ( state == 2 )

set xmul to 0.9925

set ymul to 0.1222

"hr_sigonryp"->face 100697.7, 103694.5

elseif ( state == 3 )

set xmul to 0.0045

set ymul to 0.9999

"hr_sigonryp"->face 100708.2, 106049.9

elseif ( state == 4 )

set xmul to -0.8485

set ymul to 0.5293

"hr_sigonryp"->face 99697.3, 106680.5

elseif ( state == 5 )

set xmul to -0.9999

set ymul to 0.0034

"hr_sigonryp"->face 98308.9, 106685.2

elseif ( state == 6 )

set xmul to -0.8340

set ymul to -0.5517

"hr_sigonryp"->face 96763.4, 105662.8

endif

"hr_sigonryp"->ForceJump ; Ensure NPC does not fall through the horse

endif

 

set timer to ( timer + GetSecondsPassed )

if ( timer > 1 )

set timer to 0

if ( state == 0 )

"hr_sigonryp"->face 96703.7, 104200.1

elseif ( state == 1 )

"hr_sigonryp"->face 98853.8, 103467.5

elseif ( state == 2 )

"hr_sigonryp"->face 100697.7, 103694.5

elseif ( state == 3 )

"hr_sigonryp"->face 100708.2, 106049.9

elseif ( state == 4 )

"hr_sigonryp"->face 99697.3, 106680.5

elseif ( state == 5 )

"hr_sigonryp"->face 98308.9, 106685.2

elseif ( state == 6 )

"hr_sigonryp"->face 96763.4, 105662.8

endif

endif

 

;=============================================================================

; Horse movement

;=============================================================================

set xx to ( getpos, x + ( frontbackpos * xmul ) )

set yy to ( getpos, y + ( frontbackpos * ymul ) )

set zz to ( getpos, z + pheight )

"hr_sigonryp"->setpos, x, xx

"hr_sigonryp"->setpos, y, yy

"hr_sigonryp"->setpos, z, zz

 

;=============================================================================

; Detect creature death and stop riding

;=============================================================================

if ( "hr_sigonryp"->GetHealth <= 0 )

set dismount to 1

endif

 

if ( GetHealth <= 0 )

set dismount to 1

endif

 

if ( doOnce == 0 )

if ( GetTarget, "player" == 1 )

set dismount to 1

"hr_sigonryp"->StartCombat, "player"

set doOnce to 1

endif

endif

 

if ( hr_fight == 1 )

if ( flag == 0 )

set dismount to 1

"hr_sigonryp"->StartCombat, "player"

StartCombat, "player"

set flag to 1

endif

endif

 

;=============================================================================

; Dismount horse

;=============================================================================

if ( dismount > 0 )

set ridingmode to 0

"hr_sigonryp"->ClearForceJump

"hr_sigonryp"->removespell, "hr_ridingspell"

"hr_sigonryp"->EnableLevitation

set xx to ( getpos, x + 100 )

set yy to ( getpos, y + 100 )

"hr_sigonryp"->setpos, x, xx

"hr_sigonryp"->setpos, y, yy

"hr_sigonryp"->fixme

if ( dismount == 1 )

"hr_sigonryp"->AiWander 0 0 0 0 0 0 0 0 0 0 0

AiWander 0 0 0 0 0 0 0 0 0 0 0

endif

set dismount to 0

endif

 

end

 

Ошибок не выдает, но не работает!! Непись, вместо того, чтобы садиться НА лошадь, продолжает стоять на полу в середине лошади.(( В чем проблема, ведь отсылок к другим скриптам вроде нет?..

Если что могу приложить .esp с Ранчо, если нужно глядеть на скрипт на месте.

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

Naty, я не знаю, как помочь Вам, но тоже очень интересуюсь проблемой. Я столкнулась с этим скриптом, когда решила перенести ранчо в другое место. Вместе с Сайгонрипом. Так вот - на новом месте он ведет себя так же, как вы описали выше , не едет вообще. Еще есть одна проблема - после перемещения ранчо, в загоне не появляются лошади, хоть красный объект (да и вообще, все, что было) , я переместила. Что странно, однажды я уже перетаскивала ранчо, и лошади появлялись... Чудеса, Волшебное ранчо...
Ссылка на комментарий
Поделиться на другие сайты

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

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

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

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

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

Войти

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

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

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