166 lines
4.1 KiB
Plaintext
166 lines
4.1 KiB
Plaintext
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
|