MSFD Проверка действий игрока: бежит, прыгает, крадется?
[no fix] GetPCSneaking (short)
[no fix] GetPCRunning (short)
[no fix] GetPCJumping (short)
if ( GetPCRunning )
Эти функции возвращают 1, если игрок выполняет подходящее действие, и 0 – если нет.
Поскольку в Морре нет функций прямого тестирования ввода с клавиатуры, это альтернативный способ проверить, что игрок нажал определенную клавишу.
Они широко используются в движущихся кораблях, лошадях или в моем моде про скалолазание.
Пример:
Когда этот скрипт помещен на NPC и игрок имеет надетый предмет scissors, появляются сообщения о действиях игрока.
Begin momscript
short warn
if ( player->HasItemEquipped "scissors" )
if ( warn != 1 )
if ( GetPCRunning )
MessageBox "Не бегай с ножницами!"
set warn to 1
endif
endif
if ( warn != 2 )
if ( GetPCJumping )
MessageBox "Не прыгай с ножницами! Ты себе глаз выколешь!"
set warn to 2
endif
endif
if ( warn != 3 )
if ( GetPCSneaking )
MessageBox "Ты не спрячешь ножницы от меня!"
set warn to 3
endif
endif
else
set warn to 0
endif
end
Это скрипт управляемой ракеты.
Если движение влево-вправо управляется через детект поворота камеры, то вверх вниз, через проверку снейка и бега.
Т.е. движок не учитывает движение камеры вверх вниз, отчего приходится "извращаться".
Либо использовать МВСЕ ^-^.
Begin AAA0004_PwrArm00FAER
; что-то взрывающееся...
;******************************************
float timer
short Doonce
short Once
float MyangX
float MyangX2
float pX
float pY
float pZ
;******************************************
DONTSAVEOBJECT
;******************************************
if ( MenuMode == 1 )
return
endif
;******************************************
if ( getDisabled == 1 )
setDELETE 1
return
endif
;******************************************
;HurtCollidingActor 350
;******************************************
if ( player->GetSpellReadied == 0 )
set timer to 0
Set Once to 0
Set Doonce to 0
PlaceItem "#_curokEx4" Px, PY, PZ, 0
disable
return
endif
;******************************************
set MyangX to ( player->GetAngle z ) ;getAngle это поворот камеры, т.е. получаем направление взгляда игрока и корректируем позицию снаряда.
set MyangX2 to ( player->GetAngle -z )
SetAngle z MyangX
SetAngle -z MyangX2
SetAngle x -2
if ( GetPCRunning == 1 )
SetAngle x -90
endif
if ( GetPCSneaking == 1 )
SetAngle x 90
endif
;******************************************
;просчитывает координаты для Эксплода.
;******************************************
set pX to ( GetPos x )
set pY to ( GetPos Y )
set pZ to ( GetPos z )
;******************************************
if ( doonce == 2 )
PlaceItem "#_curokEx4" Px, PY, PZ, 0 ;в момент контакта с целью появляется еще один объект который и производит ExplodeSpell т.е. взрывается.
set timer to 0
Set Once to 0
Set Doonce to 0
disable
return
endif
;******************************************
if ( Once == 1 )
Set Doonce to 2
return
endif
if ( Once == 0 )
if ( GetCollidingActor == 1 )
;HurtCollidingActor 350
Set Once to 1
return
endif
endif
;******************************************
if ( doonce == 1 ) ;начало скрипта! таймер и движение, что определяет скорость и время автоподрыва.
set timer to ( timer + GetSecondsPassed )
if ( timer < 15 )
Move y 400
elseif ( timer > 15 )
Set Doonce to 2
return
endif
endif
;******************************************
if ( doonce == 0 )
Set Doonce to 1
ModScale 0.3
return
endif
end
Begin AAA5SRocketEXPScript
; взрыв ракеты;)
;************************************************************
short Doonce
DontSaveObject
;************************************************************
if ( MenuMode == 1 )
return
endif
;************************************************************
if ( getDisabled == 1 )
SetDelete 1
return
endif
if ( doonce == 1 )
disable
return
endif
if ( doonce == 0 )
ExplodeSpell "#_PWM_EXP4"
set doonce to 1
return
endif
end