×
Меню
Индекс

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