GetEffectiveSkill

From the Oblivion ConstructionSet Wiki
Revision as of 12:40, 20 March 2011 by imported>Low Post (added a required Eval)
Jump to navigation Jump to search

A User Function for use with Oblivion Script Extender

Syntax:

(effectiveSkill:short) reference.Call GetEffectiveSkill skillAVC:short

Returns the current effective value, adjusted by Luck, of the requested skill on the calling actor. The skill is passed as an Actor Value Code; see GetActorValueC.

Notes

  • This function must be called on a reference (Ref.call <function>)
  • Luck cannot increase a skill above 100. However, skills can exceed 100 for other reasons. This is correctly handled.
  • If the value given for SkillAVCode does not correspond to a skill, this function returns -1. Skills cannot be negative, so this is a recognizable error flag.

Code

ScN GetEffectiveSkill

short skillAVC			; Passed from calling script
ref caller			; The calling reference
short callerSkill		; Skill as reported by GetAVC
float value			; Temporary working variable

begin Function {skillAVC}
	if (skillAVC < 12) || (skillAVC > 32)
		SetFunctionValue -1
	else
		let caller := GetSelf
		let callerSkill := caller.GetAVC skillAVC
		let value := caller.GetAV Luck
		let value *= GetGameSetting iActorLuckSkillMult
		let value += GetGameSetting iActorLuckSkillBase
		let value += callerSkill
		if value < 0
			let callerSkill := 0
		elseif Eval value > 100 && !IsPluginInstalled "OBSE_Elys_Uncapper"
			if callerSkill < 100
				let callerSkill := 100
			endif
			; Note: if the unmodified skill is over 100, it remains unmodified!
		else
			let callerSkill := floor value
		endif
		SetFunctionValue callerSkill
	endif
end

See Also