I sort of almost found a fix, but I'd like to see if anyone who understands Papyrus better than me can figure out the source of the errors I am getting after applying the fix. In DGIntimidateAliasScript (and also CompanionsSingleCombatantScript, though I'm not certain when this gets used) I modify the OnMagicEffectApply blocks like so:
Spoiler
Event OnMagicEffectApply(ObjectReference akCaster, MagicEffect akEffect) ; if player hits with any magic effect ; don't do this if it's a Companion's radiant quest ;Bool bIsFootprintsLoaded = Game.GetFormFromFile(0x00001DFB, "Footprints.esp") Actor pActor = GetActorRef() ;Keyword[] MGEFarray = new Keyword[21] ;MGEFarray[0] = GetFormFromFile(0x0001CEAD, "Skyrim.esm") as Keyword ; Fire Damage (902) ;MGEFarray[1] = GetFormFromFile(0x0001CEAE, "Skyrim.esm") as Keyword ; Frost Damage (40) ;MGEFarray[2] = GetFormFromFile(0x0001CEAF, "Skyrim.esm") as Keyword ; Shock Damage (826) ;MGEFarray[3] = GetFormFromFile(0x0001EA70, "Skyrim.esm") as Keyword ; Paralysis (17) ;MGEFarray[4] = GetFormFromFile(0x000424E0, "Skyrim.esm") as Keyword ; Fear (12) ;MGEFarray[5] = GetFormFromFile(0x000424EE, "Skyrim.esm") as Keyword ; Charm (9) ;MGEFarray[6] = GetFormFromFile(0x00042509, "Skyrim.esm") as Keyword ; Harmful Alch (23) ;MGEFarray[7] = GetFormFromFile(0x00046B99, "Skyrim.esm") as Keyword ; Shout (55) ;MGEFarray[8] = GetFormFromFile(0x00078098, "Skyrim.esm") as Keyword ; Influence (53) ;MGEFarray[9] = GetFormFromFile(0x0007F404, "Skyrim.esm") as Keyword ; Telekinesis (3) ;MGEFarray[10] = GetFormFromFile(0x0009F28E, "Skyrim.esm") as Keyword ; Trap Gas (10) ;MGEFarray[11] = GetFormFromFile(0x000B62E4, "Skyrim.esm") as Keyword ; Cloak (Harmful) (7) ;MGEFarray[12] = GetFormFromFile(0x000B729E, "Skyrim.esm") as Keyword ; Slow (7) ;MGEFarray[13] = GetFormFromFile(0x000C44B6, "Skyrim.esm") as Keyword ; Frenzy (5) ;MGEFarray[14] = GetFormFromFile(0x000FBFEE, "Skyrim.esm") as Keyword ; DB Heavy Fire (37) ;MGEFarray[15] = GetFormFromFile(0x000FBFEF, "Skyrim.esm") as Keyword ; DB Light Fire (1) ;MGEFarray[16] = GetFormFromFile(0x00101BDE, "Skyrim.esm") as Keyword ; Drain (1) ;MGEFarray[17] = GetFormFromFile(0x001093BB, "Skyrim.esm") as Keyword ; Trap Poison (1) ;MGEFarray[18] = GetFormFromFile(0x00109D79, "Skyrim.esm") as Keyword ; Rune (4) ;MGEFarray[19] = GetFormFromFile(0x0010E4B3, "Skyrim.esm") as Keyword ; CG Heavy Fire (18) ;MGEFarray[20] = GetFormFromFile(0x0010E4B4, "Skyrim.esm") as Keyword ; CG Light Fire (1) ;Int MGEFindex = MGEFarray.Length ;While MGEFindex > 0 ; MGEFindex -= 1 ; If (pActor.HasMagicEffectWithKeyword(MGEFarray[MGEFindex])) ; bIsNegativelyAffected = True ; MGEFindex = 0 ; EndIf ;EndWhile If (pActor != None) ; Why oh Why do I need to do this? If (pActor.HasMagicEffectWithKeyword(GetFormFromFile(0x0001CEAD, "Skyrim.esm") as Keyword) || \ pActor.HasMagicEffectWithKeyword(GetFormFromFile(0x0001CEAE, "Skyrim.esm") as Keyword) || \ pActor.HasMagicEffectWithKeyword(GetFormFromFile(0x0001CEAF, "Skyrim.esm") as Keyword) || \ pActor.HasMagicEffectWithKeyword(GetFormFromFile(0x0001EA70, "Skyrim.esm") as Keyword) || \ pActor.HasMagicEffectWithKeyword(GetFormFromFile(0x000424E0, "Skyrim.esm") as Keyword) || \ pActor.HasMagicEffectWithKeyword(GetFormFromFile(0x000424EE, "Skyrim.esm") as Keyword) || \ pActor.HasMagicEffectWithKeyword(GetFormFromFile(0x00042509, "Skyrim.esm") as Keyword) || \ pActor.HasMagicEffectWithKeyword(GetFormFromFile(0x00046B99, "Skyrim.esm") as Keyword) || \ pActor.HasMagicEffectWithKeyword(GetFormFromFile(0x00078098, "Skyrim.esm") as Keyword) || \ pActor.HasMagicEffectWithKeyword(GetFormFromFile(0x0007F404, "Skyrim.esm") as Keyword) || \ pActor.HasMagicEffectWithKeyword(GetFormFromFile(0x0009F28E, "Skyrim.esm") as Keyword) || \ pActor.HasMagicEffectWithKeyword(GetFormFromFile(0x000B62E4, "Skyrim.esm") as Keyword) || \ pActor.HasMagicEffectWithKeyword(GetFormFromFile(0x000B729E, "Skyrim.esm") as Keyword) || \ pActor.HasMagicEffectWithKeyword(GetFormFromFile(0x000C44B6, "Skyrim.esm") as Keyword) || \ pActor.HasMagicEffectWithKeyword(GetFormFromFile(0x000FBFEE, "Skyrim.esm") as Keyword) || \ pActor.HasMagicEffectWithKeyword(GetFormFromFile(0x000FBFEF, "Skyrim.esm") as Keyword) || \ pActor.HasMagicEffectWithKeyword(GetFormFromFile(0x00101BDE, "Skyrim.esm") as Keyword) || \ pActor.HasMagicEffectWithKeyword(GetFormFromFile(0x001093BB, "Skyrim.esm") as Keyword) || \ pActor.HasMagicEffectWithKeyword(GetFormFromFile(0x00109D79, "Skyrim.esm") as Keyword) || \ pActor.HasMagicEffectWithKeyword(GetFormFromFile(0x0010E4B3, "Skyrim.esm") as Keyword) || \ pActor.HasMagicEffectWithKeyword(GetFormFromFile(0x0010E4B4, "Skyrim.esm") as Keyword)) bIsNegativelyAffectedByMagic = True EndIf EndIf if (akCaster == GetPlayer()) && ((GetOwningQuest() as DGIntimidateQuestScript).CR04Running == 0) && (bIsNegativelyAffectedByMagic) ; && (!bIsFootprintsLoaded); debug.trace(self + " hit with magic - end Intimidate") bIsNegativelyAffectedByMagic = False GetOwningQuest().SetStage(150) endif endEvent
The attempt at this generic fix basically reads as "Look for certain magic effect keywords on the opponent, and only if these exist is the player cheating" ... I included 20 or so keywords that include almost all MGEFs that are deemed damaging, hostile, etc. ... My previous attempt (commented out above) used an array instead, but the errors I got were even more obscure.
So, this code works brilliantly, up until you decide to cheat. Once you flame Uthgerd to death, for example, I get either a huge amount of errors or just one or two.
Here are the errors:
Spoiler
[08/21/2012 - 01:25:03PM] error: DGIntimidateQuest (00047AE6): attempting to start event scoped quest outside of story manager.stack:[DGIntimidateQuest (00047AE6)].dgintimidatequestscript.SetCurrentStageID() - "" Line ?[DGIntimidateQuest (00047AE6)].dgintimidatequestscript.SetStage() - "Quest.psc" Line 124[alias opponent on quest DGIntimidateQuest (00047AE6)].DGIntimidateAliasScript.OnHit() - "DGIntimidateAliasScript.psc" Line 32[08/21/2012 - 01:25:03PM] error: Cannot call HasMagicEffectWithKeyword() on a None object, aborting function callstack:[alias opponent on quest DGIntimidateQuest (00047AE6)].DGIntimidateAliasScript.OnMagicEffectApply() - "DGIntimidateAliasScript.psc" Line 80[08/21/2012 - 01:25:03PM] warning: Assigning None to a non-object variable named "::temp18"stack:[alias opponent on quest DGIntimidateQuest (00047AE6)].DGIntimidateAliasScript.OnMagicEffectApply() - "DGIntimidateAliasScript.psc" Line 80[08/21/2012 - 01:25:03PM] error: Cannot call HasMagicEffectWithKeyword() on a None object, aborting function callstack:[alias opponent on quest DGIntimidateQuest (00047AE6)].DGIntimidateAliasScript.OnMagicEffectApply() - "DGIntimidateAliasScript.psc" Line 81[08/21/2012 - 01:25:03PM] warning: Assigning None to a non-object variable named "::temp19"stack:[alias opponent on quest DGIntimidateQuest (00047AE6)].DGIntimidateAliasScript.OnMagicEffectApply() - "DGIntimidateAliasScript.psc" Line 81[08/21/2012 - 01:25:03PM] error: Cannot call HasMagicEffectWithKeyword() on a None object, aborting function callstack:[alias opponent on quest DGIntimidateQuest (00047AE6)].DGIntimidateAliasScript.OnMagicEffectApply() - "DGIntimidateAliasScript.psc" Line 82[08/21/2012 - 01:25:03PM] warning: Assigning None to a non-object variable named "::temp19"stack:[alias opponent on quest DGIntimidateQuest (00047AE6)].DGIntimidateAliasScript.OnMagicEffectApply() - "DGIntimidateAliasScript.psc" Line 82[08/21/2012 - 01:25:03PM] error: Cannot call HasMagicEffectWithKeyword() on a None object, aborting function callstack:[alias opponent on quest DGIntimidateQuest (00047AE6)].DGIntimidateAliasScript.OnMagicEffectApply() - "DGIntimidateAliasScript.psc" Line 83[08/21/2012 - 01:25:03PM] warning: Assigning None to a non-object variable named "::temp19"stack:[alias opponent on quest DGIntimidateQuest (00047AE6)].DGIntimidateAliasScript.OnMagicEffectApply() - "DGIntimidateAliasScript.psc" Line 83[08/21/2012 - 01:25:03PM] error: Cannot call HasMagicEffectWithKeyword() on a None object, aborting function callstack:[alias opponent on quest DGIntimidateQuest (00047AE6)].DGIntimidateAliasScript.OnMagicEffectApply() - "DGIntimidateAliasScript.psc" Line 84[08/21/2012 - 01:25:03PM] warning: Assigning None to a non-object variable named "::temp19"stack:[alias opponent on quest DGIntimidateQuest (00047AE6)].DGIntimidateAliasScript.OnMagicEffectApply() - "DGIntimidateAliasScript.psc" Line 84[08/21/2012 - 01:25:03PM] error: Cannot call HasMagicEffectWithKeyword() on a None object, aborting function callstack:[alias opponent on quest DGIntimidateQuest (00047AE6)].DGIntimidateAliasScript.OnMagicEffectApply() - "DGIntimidateAliasScript.psc" Line 85[08/21/2012 - 01:25:03PM] warning: Assigning None to a non-object variable named "::temp19"stack:[alias opponent on quest DGIntimidateQuest (00047AE6)].DGIntimidateAliasScript.OnMagicEffectApply() - "DGIntimidateAliasScript.psc" Line 85[08/21/2012 - 01:25:03PM] error: Cannot call HasMagicEffectWithKeyword() on a None object, aborting function callstack:[alias opponent on quest DGIntimidateQuest (00047AE6)].DGIntimidateAliasScript.OnMagicEffectApply() - "DGIntimidateAliasScript.psc" Line 86[08/21/2012 - 01:25:03PM] warning: Assigning None to a non-object variable named "::temp19"stack:[alias opponent on quest DGIntimidateQuest (00047AE6)].DGIntimidateAliasScript.OnMagicEffectApply() - "DGIntimidateAliasScript.psc" Line 86[08/21/2012 - 01:25:03PM] error: Cannot call HasMagicEffectWithKeyword() on a None object, aborting function callstack:[alias opponent on quest DGIntimidateQuest (00047AE6)].DGIntimidateAliasScript.OnMagicEffectApply() - "DGIntimidateAliasScript.psc" Line 87[08/21/2012 - 01:25:03PM] warning: Assigning None to a non-object variable named "::temp19"stack:[alias opponent on quest DGIntimidateQuest (00047AE6)].DGIntimidateAliasScript.OnMagicEffectApply() - "DGIntimidateAliasScript.psc" Line 87[08/21/2012 - 01:25:03PM] error: Cannot call HasMagicEffectWithKeyword() on a None object, aborting function callstack:[alias opponent on quest DGIntimidateQuest (00047AE6)].DGIntimidateAliasScript.OnMagicEffectApply() - "DGIntimidateAliasScript.psc" Line 88[08/21/2012 - 01:25:03PM] warning: Assigning None to a non-object variable named "::temp19"stack:[alias opponent on quest DGIntimidateQuest (00047AE6)].DGIntimidateAliasScript.OnMagicEffectApply() - "DGIntimidateAliasScript.psc" Line 88[08/21/2012 - 01:25:03PM] error: Cannot call HasMagicEffectWithKeyword() on a None object, aborting function callstack:[alias opponent on quest DGIntimidateQuest (00047AE6)].DGIntimidateAliasScript.OnMagicEffectApply() - "DGIntimidateAliasScript.psc" Line 89[08/21/2012 - 01:25:03PM] warning: Assigning None to a non-object variable named "::temp19"stack:[alias opponent on quest DGIntimidateQuest (00047AE6)].DGIntimidateAliasScript.OnMagicEffectApply() - "DGIntimidateAliasScript.psc" Line 89[08/21/2012 - 01:25:03PM] error: Cannot call HasMagicEffectWithKeyword() on a None object, aborting function callstack:[alias opponent on quest DGIntimidateQuest (00047AE6)].DGIntimidateAliasScript.OnMagicEffectApply() - "DGIntimidateAliasScript.psc" Line 90[08/21/2012 - 01:25:03PM] warning: Assigning None to a non-object variable named "::temp19"stack:[alias opponent on quest DGIntimidateQuest (00047AE6)].DGIntimidateAliasScript.OnMagicEffectApply() - "DGIntimidateAliasScript.psc" Line 90[08/21/2012 - 01:25:03PM] error: Cannot call HasMagicEffectWithKeyword() on a None object, aborting function callstack:[alias opponent on quest DGIntimidateQuest (00047AE6)].DGIntimidateAliasScript.OnMagicEffectApply() - "DGIntimidateAliasScript.psc" Line 91[08/21/2012 - 01:25:03PM] warning: Assigning None to a non-object variable named "::temp19"stack:[alias opponent on quest DGIntimidateQuest (00047AE6)].DGIntimidateAliasScript.OnMagicEffectApply() - "DGIntimidateAliasScript.psc" Line 91[08/21/2012 - 01:25:03PM] error: Cannot call HasMagicEffectWithKeyword() on a None object, aborting function callstack:[alias opponent on quest DGIntimidateQuest (00047AE6)].DGIntimidateAliasScript.OnMagicEffectApply() - "DGIntimidateAliasScript.psc" Line 92[08/21/2012 - 01:25:03PM] warning: Assigning None to a non-object variable named "::temp19"stack:[alias opponent on quest DGIntimidateQuest (00047AE6)].DGIntimidateAliasScript.OnMagicEffectApply() - "DGIntimidateAliasScript.psc" Line 92[08/21/2012 - 01:25:03PM] error: Cannot call HasMagicEffectWithKeyword() on a None object, aborting function callstack:[alias opponent on quest DGIntimidateQuest (00047AE6)].DGIntimidateAliasScript.OnMagicEffectApply() - "DGIntimidateAliasScript.psc" Line 93[08/21/2012 - 01:25:03PM] warning: Assigning None to a non-object variable named "::temp19"stack:[alias opponent on quest DGIntimidateQuest (00047AE6)].DGIntimidateAliasScript.OnMagicEffectApply() - "DGIntimidateAliasScript.psc" Line 93[08/21/2012 - 01:25:03PM] error: Cannot call HasMagicEffectWithKeyword() on a None object, aborting function callstack:[alias opponent on quest DGIntimidateQuest (00047AE6)].DGIntimidateAliasScript.OnMagicEffectApply() - "DGIntimidateAliasScript.psc" Line 94[08/21/2012 - 01:25:03PM] warning: Assigning None to a non-object variable named "::temp19"stack:[alias opponent on quest DGIntimidateQuest (00047AE6)].DGIntimidateAliasScript.OnMagicEffectApply() - "DGIntimidateAliasScript.psc" Line 94[08/21/2012 - 01:25:03PM] error: Cannot call HasMagicEffectWithKeyword() on a None object, aborting function callstack:[alias opponent on quest DGIntimidateQuest (00047AE6)].DGIntimidateAliasScript.OnMagicEffectApply() - "DGIntimidateAliasScript.psc" Line 95[08/21/2012 - 01:25:03PM] warning: Assigning None to a non-object variable named "::temp19"stack:[alias opponent on quest DGIntimidateQuest (00047AE6)].DGIntimidateAliasScript.OnMagicEffectApply() - "DGIntimidateAliasScript.psc" Line 95[08/21/2012 - 01:25:03PM] error: Cannot call HasMagicEffectWithKeyword() on a None object, aborting function callstack:[alias opponent on quest DGIntimidateQuest (00047AE6)].DGIntimidateAliasScript.OnMagicEffectApply() - "DGIntimidateAliasScript.psc" Line 96[08/21/2012 - 01:25:03PM] warning: Assigning None to a non-object variable named "::temp19"stack:[alias opponent on quest DGIntimidateQuest (00047AE6)].DGIntimidateAliasScript.OnMagicEffectApply() - "DGIntimidateAliasScript.psc" Line 96[08/21/2012 - 01:25:03PM] error: Cannot call HasMagicEffectWithKeyword() on a None object, aborting function callstack:[alias opponent on quest DGIntimidateQuest (00047AE6)].DGIntimidateAliasScript.OnMagicEffectApply() - "DGIntimidateAliasScript.psc" Line 97[08/21/2012 - 01:25:03PM] warning: Assigning None to a non-object variable named "::temp19"stack:[alias opponent on quest DGIntimidateQuest (00047AE6)].DGIntimidateAliasScript.OnMagicEffectApply() - "DGIntimidateAliasScript.psc" Line 97[08/21/2012 - 01:25:03PM] error: Cannot call HasMagicEffectWithKeyword() on a None object, aborting function callstack:[alias opponent on quest DGIntimidateQuest (00047AE6)].DGIntimidateAliasScript.OnMagicEffectApply() - "DGIntimidateAliasScript.psc" Line 98[08/21/2012 - 01:25:03PM] warning: Assigning None to a non-object variable named "::temp19"stack:[alias opponent on quest DGIntimidateQuest (00047AE6)].DGIntimidateAliasScript.OnMagicEffectApply() - "DGIntimidateAliasScript.psc" Line 98[08/21/2012 - 01:25:03PM] error: Cannot call HasMagicEffectWithKeyword() on a None object, aborting function callstack:[alias opponent on quest DGIntimidateQuest (00047AE6)].DGIntimidateAliasScript.OnMagicEffectApply() - "DGIntimidateAliasScript.psc" Line 99[08/21/2012 - 01:25:03PM] warning: Assigning None to a non-object variable named "::temp19"stack:[alias opponent on quest DGIntimidateQuest (00047AE6)].DGIntimidateAliasScript.OnMagicEffectApply() - "DGIntimidateAliasScript.psc" Line 99[08/21/2012 - 01:25:03PM] error: Cannot call HasMagicEffectWithKeyword() on a None object, aborting function callstack:[alias opponent on quest DGIntimidateQuest (00047AE6)].DGIntimidateAliasScript.OnMagicEffectApply() - "DGIntimidateAliasScript.psc" Line 100[08/21/2012 - 01:25:03PM] warning: Assigning None to a non-object variable named "::temp19"stack:[alias opponent on quest DGIntimidateQuest (00047AE6)].DGIntimidateAliasScript.OnMagicEffectApply() - "DGIntimidateAliasScript.psc" Line 100[08/21/2012 - 01:25:03PM] error: Cannot call RemoveFromFaction() on a None object, aborting function callstack:[alias opponent on quest DGIntimidateQuest (00047AE6)].DGIntimidateAliasScript.OnHit() - "DGIntimidateAliasScript.psc" Line 28[08/21/2012 - 01:25:03PM] error: Cannot call StopCombat() on a None object, aborting function callstack:[alias opponent on quest DGIntimidateQuest (00047AE6)].DGIntimidateAliasScript.OnHit() - "DGIntimidateAliasScript.psc" Line 29[08/21/2012 - 01:25:03PM] error: Cannot call SendAssaultAlarm() on a None object, aborting function callstack:[alias opponent on quest DGIntimidateQuest (00047AE6)].DGIntimidateAliasScript.OnHit() - "DGIntimidateAliasScript.psc" Line 30[08/21/2012 - 01:25:03PM] error: Cannot call StartCombat() on a None object, aborting function callstack:[alias opponent on quest DGIntimidateQuest (00047AE6)].DGIntimidateAliasScript.OnHit() - "DGIntimidateAliasScript.psc" Line 31[08/21/2012 - 01:25:03PM] error: DGIntimidateQuest (00047AE6): attempting to start event scoped quest outside of story manager.stack:[DGIntimidateQuest (00047AE6)].dgintimidatequestscript.SetCurrentStageID() - " " Line ?[DGIntimidateQuest (00047AE6)].dgintimidatequestscript.SetStage() - "Quest.psc" Line 124[alias opponent on quest DGIntimidateQuest (00047AE6)].DGIntimidateAliasScript.OnHit() - "DGIntimidateAliasScript.psc" Line 32[08/21/2012 - 01:25:03PM] error: DGIntimidateQuest (00047AE6): attempting to start event scoped quest outside of story manager.stack:[DGIntimidateQuest (00047AE6)].dgintimidatequestscript.SetCurrentStageID() - " " Line ?[DGIntimidateQuest (00047AE6)].dgintimidatequestscript.SetStage() - "Quest.psc" Line 124[alias opponent on quest DGIntimidateQuest (00047AE6)].DGIntimidateAliasScript.OnHit() - "DGIntimidateAliasScript.psc" Line 32[08/21/2012 - 01:25:03PM] error: DGIntimidateQuest (00047AE6): attempting to start event scoped quest outside of story manager.stack:[DGIntimidateQuest (00047AE6)].dgintimidatequestscript.SetCurrentStageID() - " " Line ?[DGIntimidateQuest (00047AE6)].dgintimidatequestscript.SetStage() - "Quest.psc" Line 124[alias opponent on quest DGIntimidateQuest (00047AE6)].DGIntimidateAliasScript.OnHit() - "DGIntimidateAliasScript.psc" Line 32[08/21/2012 - 01:25:03PM] error: DGIntimidateQuest (00047AE6): attempting to start event scoped quest outside of story manager.stack:[DGIntimidateQuest (00047AE6)].dgintimidatequestscript.SetCurrentStageID() - " " Line ?[DGIntimidateQuest (00047AE6)].dgintimidatequestscript.SetStage() - "Quest.psc" Line 124[alias opponent on quest DGIntimidateQuest (00047AE6)].DGIntimidateAliasScript.OnMagicEffectApply() - "DGIntimidateAliasScript.psc" Line 110
I always get the top errors about "attempting to start event scoped quest outside of story manager". The rest of the errors happen only intermittently. When I was using an array I got a similar error, and it has something to do with HasMagicEffectKeyword() and GetFormFromFile() but aside from that I'm lost.