enderalse/source/scripts/defaultghostscriptrefalias.psc

97 lines
2.5 KiB
Plaintext

Scriptname defaultGhostScriptRefAlias extends ReferenceAlias
EFFECTSHADER PROPERTY pGhostFXShader AUTO
FORMLIST PROPERTY pDefaultGhostWeaponFlickerList AUTO
CONTAINER PROPERTY pDefaultGhostCorpse AUTO
EXPLOSION PROPERTY pdefaultGhostDeathExplosion AUTO
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
EVENT onLoad()
; // add on the abilities
SELF.GetActorReference().addSpell(pGhostAbilityNew)
SELF.GetActorReference().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.GetActorReference())
SELF.GetActorReference().setGhost()
; //be invincible for x seconds
utility.wait(time)
; //return the ghost to normal
SELF.GetActorReference().setGhost(FALSE)
SELF.GetActorReference().setAlpha(0.3)
pGhostFXShader.play(SELF.GetActorReference())
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.GetActorReference().disable(1)
ELSE
; //play this explosion on death
SELF.GetActorReference().placeAtMe(pDefaultGhostDeathExplosion)
; //mask the swap in the explosion
utility.wait(0.2)
; //temporary hack
Self.GetActorReference().disable()
ENDIF
Self.GetActorReference().placeAtMe(pDefaultGhostCorpse)
ENDEVENT