enderalse/source/scripts/defaultghostscript.psc

166 lines
4.1 KiB
Plaintext
Raw Permalink Normal View History

Scriptname defaultGhostScript extends Actor
EFFECTSHADER PROPERTY pGhostFXShader AUTO
FORMLIST PROPERTY pDefaultGhostWeaponFlickerList AUTO
CONTAINER PROPERTY pDefaultGhostCorpse AUTO
EXPLOSION PROPERTY pdefaultGhostDeathExplosion AUTO
LEVELEDITEM PROPERTY pdefaultGhostLeveledList AUTO
BOOL PROPERTY bdefaultLoot=FALSE AUTO
{mark true if you want the default ghost loot and not the NPCs}
BOOL PROPERTY bflicker=FALSE AUTO
{don't use this yet}
SPELL PROPERTY pGhostAbilityNew AUTO
SPELL PROPERTY pGhostResistsAbility AUTO
; //any perks you want to add
PERK PROPERTY pGhostHalfDamagePerk AUTO
BOOL PROPERTY bFade=FALSE AUTO
{makes the ghost fade out instead of explode}
; //make sure only one flash is active
BOOL bFlash=FALSE
; //the person who caused the ghost to flash
ACTOR target
; //////////
; //LOOT PILE VARIABLES
; //////////
; //////////
; //ASH PILE VARIABLES
; //////////
float property fDelay = 0.75 auto
{time to wait before Spawning Ash Pile}
float property fDelayEnd = 1.65 auto
{time to wait before Removing Base Actor}
float property ShaderDuration = 0.00 auto
{Duration of Effect Shader.}
Activator property pDefaultAshPileGhost auto
{The object we use as a pile.}
Bool property bSetAlphaZero = True auto
{The Effect Shader we want.}
FormList Property pDisintegrationMainImmunityList auto
{If the target is in this list, they will not be disintegrated.}
EFFECTSHADER PROPERTY pGhostDeathFXShader AUTO
{the shader to play while dying}
race VictimRace
bool TargetIsImmune = True
; ///////////
; //ONLOAD
; ///////////
EVENT onLoad()
; // add on the abilities
SELF.addSpell(pGhostAbilityNew)
SELF.addSpell(pGhostResistsAbility)
; // for some reason this makes ghostFlash work better
IF(bFlicker)
ghostFlash(1)
ENDIF
ENDEVENT
; /////////
; //ONHIT: When the ghost is hit, if the player isnt using the proper weapon, have them fade
; /////////
EVENT onHIT(OBJECTREFERENCE akAggressor, FORM akSource, Projectile akProjectile, BOOL abPowerAttack, BOOL abSneakAttack, BOOL abBashAttack, BOOL abHitBlocked)
; //if we're supposed to flicker and we're hit by a weapon without turn and we're not blocked, flash
IF(bflicker && !pDefaultGhostWeaponFlickerList.hasForm(akSource) && !abHitBlocked && !bFlash)
bFlash = TRUE
target = akAggressor as ACTOR
ghostFlash(3)
ENDIF
ENDEVENT
; /////////
; //GHOSTFLASH: play this to flash the ghost when hit or attacking
; //
; //float time: the amount of time to be invincible
; /////////
FUNCTION ghostFlash(FLOAT time)
; //stop the effect to keep the particles
pGhostFXShader.stop(SELF)
SELF.setGhost()
; //be invincible for x seconds
utility.wait(time)
; //return the ghost to normal
SELF.setGhost(FALSE)
SELF.setAlpha(0.3)
pGhostFXShader.play(SELF)
bFlash = FALSE
ENDFUNCTION
; /////////
; //ONDYING: On dying play an explosion to mask the ghost vanishing and being replaced by his corpse
; /////////
EVENT onDYING(ACTOR killer)
IF(bFade)
SELF.blockActivation(TRUE)
disable(1)
ELSE
; //check to see if the target is in the immunity list
IF(pDisintegrationMainImmunityList == none)
TargetIsImmune = False
ELSE
ActorBase VictimBase = SELF.GetBaseObject() as ActorBase
VictimRace = VictimBase.GetRace()
IF(pDisintegrationMainImmunityList.hasform(VictimRace) || pDisintegrationMainImmunityList.hasform(VictimBase))
TargetIsImmune = True
ELSE
TargetIsImmune = False
ENDIF
ENDIF
; //if the target is not immune, disintegrate them
IF(TargetIsImmune == False)
; debug.trace("victim just died")
SELF.SetCriticalStage(SELF.CritStage_DisintegrateStart)
IF(pGhostDeathFXShader != none)
pGhostDeathFXShader.play(SELF,ShaderDuration)
ENDIF
SELF.SetAlpha (0.0,True)
; //attach the ash pile
SELF.AttachAshPile(pDefaultAshPileGhost)
IF(bdefaultLoot)
SELF.RemoveAllItems()
SELF.addItem(pdefaultGhostLeveledList)
ENDIF
utility.wait(fDelayEnd)
IF(pGhostDeathFXShader != none)
pGhostDeathFXShader.stop(SELF)
ENDIF
IF(bSetAlphaZero == True)
SELF.SetAlpha (0.0,True)
ENDIF
SELF.SetCriticalStage(SELF.CritStage_DisintegrateEnd)
ENDIF
ENDIF
ENDEVENT