GetSummoner
Jump to navigation
Jump to search
A User Function for use with Oblivion Script Extender
Syntax:
(summoner:ref) reference.Call GetSummoner
Returns a reference to whoever summoned the calling actor.
Notes[edit | edit source]
- This function must be called on a reference (Ref.call <function>)
- If the summoner is not in the same cell as the summon then it will return 0.
- Always check to see if a valid reference was found by the function.
- The very last piece of code has something that scans the player's last cell for the summoner. It should work for 95% of the time when a summon is in a different cell than its summoner.
- When called on a summon that is in the process of disappearing it will return 0 since the summoning has ended. Use GetDead to determine if a summon is still summoned.
Examples:[edit | edit source]
Getting the actor who summoned the calling a reference (in this case a summon that is stored in the someSummonRef variable).
Let rSummoner := someSummonRef.Call GetSummoner If rSummoner ;A valid summoner was found Endif
Code[edit | edit source]
ScriptName GetSummoner ref rSummon array_var arSummons ref rActor ref rFollower long iFollower Begin Function {} let rSummon := GetSelf
let arSummons := player.GetFollowers let iFollower := player.GetNumFollowers While iFollower > 0 let iFollower -= 1 let rFollower := player.GetNthFollower iFollower ar_Erase arSummons (ar_Find rFollower arSummons ) Loop if eval (ar_Find rSummon arSummons) != -99999 SetFunctionValue player let arSummons := ar_Null else let rActor := GetFirstRef 69 2 While rActor if rActor.GetDead == 0 && rActor.GetDisabled == 0 let arSummons := rActor.GetFollowers let iFollower := rActor.GetNumFollowers While iFollower > 0 let iFollower -= 1 let rFollower := rActor.GetNthFollower iFollower ar_Erase arSummons (ar_Find rFollower arSummons ) Loop if eval (ar_Find rSummon arSummons) != -99999 SetFunctionValue rActor endif endif let rActor := GetNextRef Loop endif let arSummons := ar_Null End
Alternative code for use with GetSummons (to avoid duplicate code).
ScriptName GetSummoner ref rSummon array_var arSummons ref rActor Begin Function {} let rSummon := GetSelf let arSummons := player.Call GetSummons if eval (ar_Find rSummon arSummons) != -99999 SetFunctionValue player let arSummons := ar_Null else let rActor := GetFirstRef 69 2 While rActor if rActor.GetDead == 0 && rActor.GetDisabled == 0 let arSummons := rActor.Call GetSummons if eval (ar_Find rSummon arSummons) != -99999 SetFunctionValue rActor endif endif let rActor := GetNextRef Loop endif let arSummons := ar_Null End
Code that also checks the player's last visited cell when it was not found in the current cell (also uses GetSummons).
ScriptName GetSummoner ref rSummon array_var arSummons ref rActor ref rLast Begin Function {} let rSummon := GetSelf let arSummons := player.Call GetSummons if eval (ar_Find rSummon arSummons) != -99999 SetFunctionValue player let arSummons := ar_Null else let rActor := GetFirstRef 69 2 While rActor if rActor.GetDead == 0 && rActor.GetDisabled == 0 let arSummons := rActor.Call GetSummons if eval (ar_Find rSummon arSummons) != -99999 SetFunctionValue rActor endif endif let rActor := GetNextRef Loop if rActor == 0 let rLast := GetPlayersLastActivatedLoadDoor if rLast let rLast := rLast.GetParentCell if rLast let rActor := GetFirstRefInCell rLast 69 2 While rActor if rActor.GetDead == 0 && rActor.GetDisabled == 0 let arSummons := rActor.Call GetSummons if eval (ar_Find rSummon arSummons) != -99999 SetFunctionValue rActor Break endif endif let rActor := GetNextRef Loop endif endif endif endif let arSummons := ar_Null End
See Also[edit | edit source]