Problem is, I don't know how to set the darn rock on fire, or otherwise make it look like a meteor. Any ideas?
Scriptname MeteorStormScript extends activemagiceffect Activator Property DungeonMasterCaster autoMiscObject Property Meteor auto event OnEffectStart(Actor Target, Actor Caster) ObjectReference DM = Target.PlaceAtMe(DungeonMasterCaster) ObjectReference DM2 = Target.PlaceAtMe(DungeonMasterCaster) DM.MoveTo(Target, 0, 0, 1500) float initialX = DM.GetPositionX() float initialY = DM.GetPositionY() float initialZ = DM.GetPositionZ() int i = 0 int randomX int randomY while i<8 DM.SetPosition(initialX, initialY, initialZ) randomX = Utility.RandomInt(-512,512) randomY = Utility.RandomInt(-512,512) DM.MoveTo(DM, randomX, randomY, 0) DM2.MoveTo(DM2, randomX, randomY, 0) ObjectReference SpawnedMeteor = DM.PlaceAtMe(Meteor) SpawnedMeteor.SplineTranslateToRef(DM2, 1, 4000) Utility.Wait(0.30) i=i+1 endwhileendEvent
Scriptname TranslationExplosion extends ObjectReference SPELL Property ExplosionSpellSelf Auto EffectShader Property FireFXShader autoActivator Property DungeonMasterCaster autoSpell Property ExplosionSpell autoActorBase Property MeteoriteActor autoevent OnTranslationAlmostComplete() ExplosionSpellSelf.Cast(self)endEventevent OnLoad() FireFXShader.Play(self)endEventevent OnTranslationComplete()int i = 0while i<10ObjectReference Meteorite = self.PlaceAtMe(self.GetBaseObject())Meteorite.SetScale(0.10)float randomX = Utility.RandomFloat(0.0, 1.0)float randomY = Utility.RandomFloat(0.0, 1.0)float randomZ = Utility.RandomFloat(0.0, 1.0)Meteorite.ApplyHavokImpulse(randomX,randomY,randomZ,100000)i=i+1endWhileself.disable()endEvent
Spell Property ShrapnelSpell AutoInt Property NumShards AutoActivator Property Marker AutoPerk Property ShrapnelPerk AutoSpell Property BaseSpell AutoExplosion Property ExplosionProperty AutoFloat Property Duration AutoEffectShader Property Shader AutoObjectReference[] MarkerTargetArrayObjectReference[] MarkerSourceArrayInt SetupCount = 0Int FragmentsFired = 0ObjectReference SourceInt MarkersDeletedactor Targetactor Casterbool bWait = truebool Wa[censored] = falseFloat RandAngle = 0.0Event OnEffectStart(Actor akTarget, Actor akCaster)Target = akTargetCaster = akCasterShader.Play(Target, -1.0)RegisterForSingleUpdate(Duration)Utility.Wait(0.5)bWait = falseEndEventEvent OnHit(ObjectReference akAggressor, Form akSource, Projectile akProjectile, bool abPowerAttack, bool abSneakAttack, bool abBashAttack, bool abHitBlocked)If !bWait If !Wa[censored] Wa[censored] = true; If Caster.HasPerk(ShrapnelPerk) FireShards(); EndIf Dispel() EndIfEndIfEndEventEvent OnUpdate()If !Wa[censored] Wa[censored] = true; If Caster.HasPerk(ShrapnelPerk) FireShards(); EndIfEndIfDispel()EndEventFunction FireShards()MarkerTargetArray = new ObjectReference[15]MarkerSourceArray = new ObjectReference[15]While (SetupCount < NumShards) RandAngle = Utility.RandomFloat(0, 360) MarkerSourceArray[SetupCount] = Target.PlaceAtMe(Marker) MarkerSourceArray[SetupCount].MoveTo(Target, ((Target.GetHeight() + 10) * Math.Sin(RandAngle)), ((Target.GetHeight() + 10) * Math.Cos(RandAngle)), 10) MarkerTargetArray[SetupCount] = Target.PlaceAtMe(Marker) MarkerTargetArray[SetupCount].MoveTo(Target, (500 * Math.Sin(RandAngle)), (500 * Math.Cos(RandAngle)), (Utility.RandomFloat(0,1.0) * 300)) SetupCount += 1 EndWhileTarget.PlaceAtMe(ExplosionProperty)Shader.Stop(Target)While (FragmentsFired < NumShards) ShrapnelSpell.RemoteCast(MarkerSourceArray[FragmentsFired], Caster, MarkerTargetArray[FragmentsFired]) FragmentsFired += 1EndWhileWhile MarkersDeleted < NumShards MarkerTargetArray[MarkersDeleted].DisableNoWait() MarkerTargetArray[MarkersDeleted].Delete() MarkerSourceArray[MarkersDeleted].DisableNoWait() MarkerSourceArray[MarkersDeleted].Delete() MarkersDeleted += 1EndWhileEndFunction
Scriptname ExampleActivatorScript extends ObjectReferenceActivator Property DummyObject AutoActivator[] Property Meteors AutoFloat Property fSpellRadius = 512.0 AutoFloat Property fDuration = 30.0 AutoFloat Property fPulseRateBase = 1.0 AutoFloat Property fPulseRateRandOffset = 0.5 AutoObjectReference SpellSourceFloat fPosXFloat fPosYFunction CleanUp() UnregisterForUpdate() SpellSource.Disable() SpellSource.Delete() SpellSource = None Disable() Delete()EndFunctionEvent OnInit() SpellSource = PlaceAtMe(DummyObject) fPosX = X fPosY = Y RegisterForSingleUpdate(0.01)EndEventAuto State WaitingEvent OnUpdate() GoToState("Busy") RegisterForSingleUpdate(0.01) Utility.Wait(fDuration) CleanUp()EndEventEndStateState BusyEvent OnUpdate() SetPosition(fPosX + Utility.RandomFloat(-fSpellRadius, fSpellRadius), fPosY + Utility.RandomFloat(-fSpellRadius, fSpellRadius), Z) SpellSource.MoveTo(Self, Utility.RandomFloat(-fSpellRadius, fSpellRadius), Utility.RandomFloat(-fSpellRadius, fSpellRadius), 3000.0) ObjectReference FlamingRock = SpellSource.PlaceAtMe(Meteors[Utility.RandomInt(0, Meteors.Length - 1)]) (FlamingRock as ExampletMeteorScript).Shoot(Self) RegisterForSingleUpdate(fPulseRateBase + Utility.RandomFloat(-fPulseRateRandOffset, fPulseRateRandOffset))EndEventEndStateScriptname ExampleMeteorScript extends ObjectReference EffectShader Property FireCloakFXShader AutoSpell Property MeteorDamageSpell AutoFloat Property Speed AutoFloat PosXFloat PosYFloat PosZFunction Shoot(ObjectReference akTarget) PosX = akTarget.X PosY = akTarget.Y PosZ = akTarget.Z FireCloakFXShader.Play(Self) RegisterForSingleUpdate(0.01)EndFunctionEvent OnUpdate() SetAngle(-180, 0, 0) TranslateTo(PosX, PosY, PosZ, 0, 0, Utility.RandomFloat(-180.0, 180.0), Speed)EndEventEvent OnTranslationAlmostComplete() MeteorDamageSpell.RemoteCast(Self, Game.GetPlayer(), Self) Disable() Delete()EndEvent[