Jump to content

Need help finding the source of a script.


DaylenTheMaleficar

Recommended Posts

That is, if FXDragonBloodDamageScript.psc is from a mod and not from the vanilla game.

 

This script seems to be causing some crashing while fighting dragons. I've got Deadly dragons installed, but I had been using Realistic Dragons before that, so I'm worried that it left behind some scripts when I uninstalled it. I did start a new game, but the dragons still seem to be using the flame wall/Fire Breath from RD.

 

Here's the full papyrus log:

 

 

  Reveal hidden contents

 

Link to comment
Share on other sites

That's a vanilla script. If it's not in your Data\Scripts\Source folder, try using Steam's "Verify Integrity of Tool Cache..." option, you could be missing the bulk of the game's PSC files. (There should be > 10,000 files in the Source folder, is your first clue.)

 

Here it is for reference:

 

Scriptname FXDragonBloodDamageScript extends ActiveMagicEffect  
{This script applies blood damage geometry to the dragon and turns it on when they are hit based on the direction they are hit from}

;===============================================
; MARK'S ORIGINAL VARS & PROPERTIES
int frontBloodStepper
int backBloodStepper
int leftBloodStepper
int rightBloodStepper
int dragonHealth 
string hitDirection ;0=front 1=right 2=back 3=left
float hitAngle
Armor Property DragonBloodHeadFXArmor  Auto  
Armor Property DragonBloodTailFXArmor  Auto  
Armor Property DragonBloodWingLFXArmor  Auto  
Armor Property DragonBloodWingRFXArmor  Auto  
Actor selfRef

; JOEL'S VARS & PROPERTIES
; user can override HP percentages
float property HPpctT1 = 0.98 auto
{relative total HP at which first blood should appear DEFAULT: 0.??} 
float property HPpctT2 = 0.95 auto
{relative total HP at which second blood should appear DEFAULT: 0.??} 
float property HPpctT3 = 0.90auto
{relative total HP at which third blood should appear DEFAULT: 0.??} 
float property HPpctT4 = 0.80 auto
{relative total HP at which final blood should appear DEFAULT: "+HPpctT4} 

float previousHP
float diffHP

; tracking values for the amount of damage each "side" has taken.
float HPFront
float HPBack
float HPLeft
float HPRight

; tracking vars for damage to each side
; 0 = no blood, 1 = tier 1 blood, etc.
int stateFront = 0
int stateBack = 0
int stateLeft = 0
int stateRight = 0

; HP tiers.  These are the threshold values below which each blood will play 
float HPt1
float HPt2
float HPt3
float HPt4

bool bDebug = FALSE
 
;===============================================


EVENT OnEffectStart(Actor Target, Actor Caster)
	;Setup stuff has to go here for activeMagicEffect
	selfRef = caster
	; store HP for future use.  THis should usually be 100% HP.
	previousHP = selfRef.getActorValue("health")
; ; 	debug.TraceConditional("TEST JOEL: Dragon has set previousHP to :"+previousHP, bDebug)
; ; 	debug.TraceConditional("TEST JOEL: Dragon Blood FX onEffectStart initialized", bDebug)
	dragonBloodInit()
ENDEVENT

EVENT onLoad()
; ; 	debug.traceConditional("TEST JOEL: Dragon has loaded ("+selfRef+")", bDebug)
endEVENT

EVENT OnHit(ObjectReference akAggressor, Form akSource, Projectile akProjectile, bool abPowerAttack, bool abSneakAttack, bool abBashAttack, bool abHitBlocked)
	
	; first intercept to figure out how much damage was done.
; ; 	debug.TraceConditional("||===============================", bDebug)
; ; 	debug.TraceConditional("|| TEST JOEL: DRAGON HP DIAGNOSTIC", bDebug)
; ; 	debug.TraceConditional("|| TEST JOEL: Dragon previous HP="+previousHP, bDebug)
; ; 	debug.TraceConditional("|| TEST JOEL: Dragon current HP="+selfRef.getActorValue("health"), bDebug)
	
	diffHP = previousHP - (selfRef.getActorValue("health"))
; ; 	debug.TraceConditional("|| TEST JOEL: Dragon damaged for "+diffHP+"HP", bDebug)
	
	; determine if I was hit in the front/back/left/right
	hitAngle = selfRef.GetHeadingAngle(akAggressor) 
	if hitAngle >= -45 && hitAngle <= 45
		hitDirection = "FRONT"
		; decrement a fake HP counter for this side of the body
		HPfront = (HPfront - diffHP)
	endif
	if hitAngle >= 135 || hitAngle <= -135
		hitDirection = "BACK"
		; decrement a fake HP counter for this side of the body
		HPback = (HPback - diffHP)
	endif
	if hitAngle < -45 && hitAngle > -135
		hitDirection = "LEFT"
		; decrement a fake HP counter for this side of the body
		HPleft = (HPleft - diffHP)
	endif
	if hitAngle > 45 && hitAngle < 135
		hitDirection = "RIGHT"
		; decrement a fake HP counter for this side of the body
		HPright = (HPright - diffHP)
	endif
	
; ; 	debug.TraceConditional("|| TEST JOEL: Dragon was hit from the "+hitDirection, bDebug)
; ; 	debug.TraceConditional("|| TEST JOEL: "+hitdirection+" HP = "+HPleft, bDebug)
	
	; ==============================================
	; check for updates to blood state
	if hitDirection == "FRONT"
		
		int prevStateFront = stateFront
	
		if (HPfront <= HPt1) && (HPfront > HPt2)
			stateFront = 1
		elseif (HPfront <= HPt2) && (HPfront > HPt3)
			stateFront = 2
		elseif (HPfront <= HPt3) && (HPfront > HPt4)
			stateFront = 3
		elseif (HPfront <= HPt4)
			stateFront = 4
		endif
		
		; see if there was a change in state for this side
		if stateFront != prevStateFront
			; concatenate and play appropriate blood FX
; ; 			debug.TraceConditional("|| TEST JOEL: Blood FX State Change: HeadBleed0"+stateFront, bDebug)
			selfRef.PlaySubGraphAnimation("HeadBleed0"+stateFront)
		endif
	endif
	
	if hitDirection == "BACK"
		
		int prevStateback = stateback
	
		if (HPback <= HPt1) && (HPback > HPt2)
			stateback = 1
		elseif (HPback <= HPt2) && (HPback > HPt3)
			stateback = 2
		elseif (HPback <= HPt3) && (HPback > HPt4)
			stateback = 3
		elseif (HPback <= HPt4)
			stateback = 4
		endif
		
		; see if there was a change in state for this side
		if stateback != prevStateback
			; concatenate and play appropriate blood FX
; ; 			debug.TraceConditional("|| TEST JOEL: Blood FX State Change: BackBleed0"+stateback, bDebug)
			selfRef.PlaySubGraphAnimation("TailBleed0"+stateback)
		endif
	endif
	
	if hitDirection == "LEFT"
		
		int prevStateleft = stateleft
	
		if (HPleft <= HPt1) && (HPleft > HPt2)
			stateleft = 1
		elseif (HPleft <= HPt2) && (HPleft > HPt3)
			stateleft = 2
		elseif (HPleft <= HPt3) && (HPleft > HPt4)
			stateleft = 3
		elseif (HPleft <= HPt4)
			stateleft = 4
		endif
		
		; see if there was a change in state for this side
		if stateleft != prevStateleft
			; concatenate and play appropriate blood FX
; ; 			debug.TraceConditional("|| TEST JOEL: Blood FX State Change: WingLBleed0"+stateleft, bDebug)
			selfRef.PlaySubGraphAnimation("WingLBleed0"+stateleft)
		endif
	endif
	
		if hitDirection == "RIGHT"
		
		int prevStateright = stateright
	
		if (HPright <= HPt1) && (HPright > HPt2)
			stateright = 1
		elseif (HPright <= HPt2) && (HPright > HPt3)
			stateright = 2
		elseif (HPright <= HPt3) && (HPright > HPt4)
			stateright = 3
		elseif (HPright <= HPt4)
			stateright = 4
		endif
		
		; see if there was a change in state for this side
		if stateright != prevStateright
			; concatenate and play appropriate blood FX
; ; 			debug.TraceConditional("|| TEST JOEL: Blood FX State Change: WingRBleed0"+stateright, bDebug)
			selfRef.PlaySubGraphAnimation("WingRBleed0"+stateright)
		endif
	endif
	
	; ==============================================
	; store our current HP as the previous for accurate maths on future hits.
	previousHP = selfRef.getActorValue("health")
	if bDebug == TRUE
; ; 		debug.TraceConditional("|| TEST JOEL: End of onHit()", bDebug)
		bDebug = false
		debugVars()
	endif
	
endEVENT

; EVENT onDeath(actor myKiller)
	; utility.wait(8.5)
	; selfRef.PlaySubGraphAnimation("BloodFade")
	; utility.wait(1.5)
; ENDEVENT


;====================================================================
;	Initialize a bunch of variables
;====================================================================
FUNCTION dragonBloodInit()
	; quick safety net to convert percentages if they are entered incorrectly (ie 75% = 0.75)
; ; 	debug.TraceConditional("convert % values to integers", bDebug)
	if HPpctT1 > 1.0 && HPpctT1 < 100
		HPpctT1 = HPpctT1*0.01
	endif
	if HPpctT2 > 1.0 && HPpctT2 < 100
		HPpctT2 = HPpctT2*0.01
	endif
	if HPpctT2 > 1.0 && HPpctT2 < 100
		HPpctT2 = HPpctT2*0.01
	endif
	if HPpctT3 > 1.0 && HPpctT3 < 100
		HPpctT3 = HPpctT3*0.01
	endif
	
	; store hard point values so we don't have to always work in percentages later
	HPt1 = HPpctT1 * (selfRef.getBaseAV("health"))
	HPt2 = HPpctT2 * (selfRef.getBaseAV("health"))
	HPt3 = HPpctT3 * (selfRef.getBaseAV("health"))
	HPt4 = HPpctT4 * (selfRef.getBaseAV("health"))
	
	; set fake location HP counters to current(assume full?) HP
	HPfront = selfRef.getAV("health")
	HPback = selfRef.getAV("health")
	HPleft = selfRef.getAV("health")
	HPright = selfRef.getAV("health")
	
	if bDebug == TRUE
; ; 		debug.TraceConditional("|| TEST JOEL : finished Init()", bDebug)
		debugVars()
	endif
	
endFUNCTION

FUNCTION debugVars()
; ; 	debug.TraceConditional("||===============================", bDebug)
; ; 	debug.TraceConditional("|| DRAGON BLOOD FX VARIABLE READOUT", bDebug)
; ; 	debug.TraceConditional("|| HPpctT1 = "+HPpctT1, bDebug)
; ; 	debug.TraceConditional("|| HPpctT2 = "+HPpctT2, bDebug)
; ; 	debug.TraceConditional("|| HPpctT3 = "+HPpctT3, bDebug)
; ; 	debug.TraceConditional("|| HPpctT4 = "+HPpctT4, bDebug)
; ; 	debug.TraceConditional("|| HPFront = "+HPFront, bDebug)
; ; 	debug.TraceConditional("|| HPBack = "+HPBack, bDebug)
; ; 	debug.TraceConditional("|| HPLeft = "+HPLeft, bDebug)
; ; 	debug.TraceConditional("|| HPRight = "+HPRight, bDebug)
; ; 	debug.TraceConditional("|| stateFront = "+stateFront, bDebug)
; ; 	debug.TraceConditional("|| stateBack = "+stateBack, bDebug)
; ; 	debug.TraceConditional("|| stateLeft = "+stateLeft, bDebug)
; ; 	debug.TraceConditional("|| stateRight = "+stateRight, bDebug)
; ; 	debug.TraceConditional("|| HPt1 = "+HPt1, bDebug)
; ; 	debug.TraceConditional("|| HPt2 = "+HPt2, bDebug)
; ; 	debug.TraceConditional("|| HPt3 = "+HPt3, bDebug)
; ; 	debug.TraceConditional("|| HPt4 = "+HPt4, bDebug)
endFUNCTION












STATE markSTATE

	Event OnLoad()
; 		;Debug.Trace("This dragon is loaded, playing animations should work now")
		

	endEvent

		EVENT OnEffectStart(Actor Target, Actor Caster)
			;Play your particles.
			selfRef = caster
			dragonHealth = selfRef.GetAV("Health") as int
		ENDEVENT


	Event OnHit(ObjectReference akAggressor, Form akSource, Projectile akProjectile, bool abPowerAttack, bool abSneakAttack, bool abBashAttack, bool abHitBlocked)
		
		dragonHealth = selfRef.GetAV("Health") as int
; ; 		Debug.TraceConditional("Dragon's health is" + dragonHealth, bDebug)
		hitAngle = selfRef.GetHeadingAngle(akAggressor) 
		if hitAngle >= -45 && hitAngle <= 45
; ; 			Debug.TraceConditional(akAggressor + " angle is " + hitAngle, bDebug)
; ; 			Debug.TraceConditional("Dragon was hit in front", bDebug)
			hitDirection = 0
			frontBloodStepper = frontBloodStepper + 1
		elseIf hitAngle > 45 && hitAngle < 135
; ; 			Debug.TraceConditional(akAggressor + " angle is " + hitAngle, bDebug)
; ; 			Debug.TraceConditional("Dragon was hit on right", bDebug)
			hitDirection = 1
			rightBloodStepper = rightBloodStepper + 1
		elseIf hitAngle >= 135 || hitAngle <= -135
; ; 			Debug.TraceConditional(akAggressor + " angle is " + hitAngle, bDebug)
; ; 			Debug.TraceConditional("Dragon was hit in back", bDebug)	
			hitDirection = 2
			backBloodStepper = backBloodStepper + 1
		elseIf hitAngle < -45 && hitAngle > -135
; ; 			Debug.TraceConditional(akAggressor + " angle is " + hitAngle, bDebug)
; ; 			Debug.TraceConditional("Dragon was hit on left", bDebug)	
			hitDirection = 3
			leftBloodStepper = leftBloodStepper + 1
		endif	
		
		if hitDirection == 0  
			if frontBloodStepper <= 4
; ; 				Debug.TraceConditional("Dragon head blood stage0" + frontBloodStepper, bDebug)
				selfRef.PlaySubGraphAnimation("HeadBleed0" + frontBloodStepper)
			endif
		elseif hitDirection == 1	
			if rightBloodStepper <= 4
; ; 				Debug.TraceConditional("Dragon wing r blood stage0" + rightBloodStepper, bDebug)
				selfRef.PlaySubGraphAnimation("WingRBleed0" + rightBloodStepper)	
			endif
		elseif hitDirection == 2	
			if backBloodStepper <= 4
; ; 				Debug.TraceConditional("Dragon back blood stage0" + backBloodStepper, bDebug)
				selfRef.PlaySubGraphAnimation("TailBleed0" + backBloodStepper)
			endif
		elseif hitDirection == 3	
			if leftBloodStepper <= 4
; ; 				Debug.TraceConditional("Dragon wing l blood stage0" + leftBloodStepper, bDebug)
				selfRef.PlaySubGraphAnimation("WingLBleed0" + leftBloodStepper)	
			endif
		endif	

		
	ENDEVENT
		
		
		EVENT onDeath(actor myKiller)

	;	selfRef.UnequipItem(ChaurusSpitSkin)
		
		ENDEVENT
endSTATE
		
Link to comment
Share on other sites

Yeah, Steam did need to replace about 60mb of data, but the game still crashes while fighting dragons and the same error is all over the place in the log. I'd contact the Deadly Dragons author, since it stands to reason that a script effecting dragons would be...effecting dragons, but he's turned off comments due to something to do with Dragonborn, so I'll just keep slapping my logs here in the hopes that some mysterious stranger can recognize the issue or direct me in the right path.

 

 

 

  Reveal hidden contents

 

Link to comment
Share on other sites

  • 6 months later...
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...