I'm working on a flying form for my vampire mod. A Bat Form.
What I would like the power/spell to do is change the player race, add effects, adjust player speed and allowing hovering and/or flying.
I can do everything but the flying part.
GetPosSetPos GetAngle SetAngle
Scriptname DV_BatFormTraits extends ActiveMagicEffect import Gameimport Soundimport Formimport Debugimport Utilityimport GlobalVariableimport ActorActor Property Player AutoSpell Property DVampireBatForm AutoSpell Property DVampireBatFormToggle AutoIdle Property SwimStart AutoIdle Property swimStop AutoIdle Property JumpFall Autobool Property bIsOn Autobool Property bVal AutoEffectShader Property DVCelerityShadow Autofloat bearingfloat elevationfloat speedfloat posxfloat posyfloat poszfloat movefloat dtimeEvent OnEffectStart(Actor Target, Actor Caster)ObjectReference PCVamp = GetPlayer() if !Caster.HasSpell(DVampireBatFormToggle) Caster.AddSpell(DVampireBatFormToggle) Caster.SetAlpha(1) Utility.SetIniFloat("fInAirFallingCharGravityMult:Havok",0) DVCelerityShadow.Play(Caster) Game.GetPlayer().SetAllowFlying() Game.ForceThirdPerson() Utility.Wait(1.0) SendAnimationEvent(PCVamp ,"JumpFall") while !Caster.HasSpell(DVampireBatFormToggle) Fly() endWhile ;bVal = True elseif Caster.HasSpell(DVampireBatFormToggle) Caster.RemoveSpell(DVampireBatFormToggle) Utility.SetIniFloat("fInAirFallingCharGravityMult:Havok",1.35) Caster.SetAlpha(1) DVCelerityShadow.Stop(Caster) Game.GetPlayer().SetAllowFlying() Utility.Wait(1.0) SendAnimationEvent(PCVamp ,"JumpFall") ;bVal = False endif ;Toggle() EndEventEvent OnUpdate() if Player.IsRunning() && move == 1 debug.notification("am i running") Fly() endIfendEventEvent OnTranslationComplete() move = 0 Fly()endEventfunction Fly() if Player.IsRunning() posx = Player.GetPositionX() posy = Player.GetPositionY() posz = Player.GetPositionZ() bearing = Player.GetAngleZ() elevation = Player.GetAngleX() speed = 1000 if bearing < 90 posx += (bearing)*speed posy += (90 - bearing)*speed elseif bearing > 90 && bearing < 180 posx +=(180 - bearing)*speed posy +=(90 - bearing)*speed elseif bearing > 180 && bearing < 270 posx += (180 - bearing)*speed posy += (bearing - 270)*speed elseif bearing > 270 posx += (bearing - 360)*speed posy += (bearing - 270)*speed endif posz = Player.GetPositionZ() - (elevation*speed) Player.PlayIdle(JumpFall) Player.TranslateTo(posx,posy,posz,Player.GetAngleX(),Player.GetAngleY(),Player.GetAngleZ(),speed,1) RegisterForSingleUpdate(0.2) if Player.IsSprinting() move = 0 endIf else Player.StopTranslation() endIfendFunctionFunction Toggle() if (bVal == True) bIsOn = True elseif (bVal == False) bIsOn = False endif EndFunction
if !Caster.HasSpell(DVampireBatFormToggle) Caster.AddSpell(DVampireBatFormToggle) ;;; while !Caster.HasSpell(DVampireBatFormToggle) Fly() endWhile ;;;endif
Scriptname Blah Extends ActiveMagicEffectEvent OnEffectStart(Actor akTarget, Actor akCaster) Debug.SendAnimationEvent(akTarget, "SwimStart")EndEventEvent OnEffectFinish(Actor akTarget, Actor akCaster) Debug.SendAnimationEvent(akTarget, "SwimStop")EndEvent