Shadowhawk827 Posted June 13, 2015 Posted June 13, 2015 I managed to duplicate the improper attacks by invincible sentries bug that a few players have complained about relating to my Dawnguard Sentries mod. The mod is supposed to be set up so that player character vampires and their followers are ignored. Occasionally somebody reports that they ge attacked anyway, and that the Sentries cannot be killed despite switching their Essential / Respawn Only toggle (in the MCM menu). For me, this bug hit after completing the Bloodstone Chalice mission and starting the Prophecy quest. It's consistent too. I played through from a few different saves and literally spent all last night (about 6 hours) stripping mods away from my load order trying to find the cause. LONG story short and saving the detailed description of all the mod combinations I disabled and re-enabled, it *seems* like the problem is either in Skyrim / Dawnguard itself OR there is some odd bug in Dawnguard Sentries. At this point, I cut back the Sentries to a really simple AI system. They're basically town guards with Dawnguard gear that can level higher than normal city guards. No Dawnguard related factions at all. No added faction relations at all since the town guards pretty much ignore anything but crimes and dragon or vampire attacks already. Beyond that, they just walk in circles on a path of idle markers. The only scripts I use are the Disable during Civil War sieges (so they don't interfere) and the MCM Menu one. Point being I don't know what I could do to simplify and conflict proof my mod any further. Oddly enough, I figured out how to fix the bug (temporarily?), regardless of the mods I was using; do a clean save with the mod. Exit the game, disable the mod, start it back up, save and exit again, and then re-enable the mod and the Sentries go back to ignoring the vampire player & their followers. Since the problem occurred and the solution worked rather I was using 63 mods or literally just the Unofficial Patches, i'm not sure the mods had anything to do with it. Here's the only "non-vanilla" script I have for the mod: Scriptname DawnSentryMCMStates extends SKI_ConfigBase {Creates Dawnguard Sentries MCM Menu} bool ImmortalCity = Falsebool RedShirtBeGone = Falsebool ImmortalOutside = Falsebool ExteriorBeGone = Falsebool PatrolImmortal = Falsebool PatrolBeGone = Falsebool RoriksteadImmortal = Falsebool RoriksteadBeGone = Falsebool CastleVampsBeGone = False Function theInit() ModName = "Dawnguard Sentries" Pages = new String[1] Pages[0] = "Configuration"EndFunction Event OnConfigInit() theInit()EndEvent Event OnConfigOpen() theInit()EndEvent Event OnVersionUpdate(int a_version) theInit()EndEvent Event OnPageReset(string page) If (page == "") LoadCustomContent("Dawnguard Sentries/DawnguardShield.dds") Return Endif UnloadCustomContent() If (page=="Configuration") SetCursorFillMode(TOP_TO_BOTTOM) AddToggleOptionST ("MakeEssential", "Make Sentries Essential", ImmortalCity) AddEmptyOption() AddToggleOptionST ("DisableRedShirts", "Disable Dawnguard Recruits", RedShirtBeGone) AddEmptyOption() AddToggleOptionST ("ExteriorEssential", "Make Exterior Sentries Essential", ImmortalOutside) AddToggleOptionST ("ExteriorDisable", "Disable Exterior Sentries", ExteriorBeGone) AddEmptyOption() AddToggleOptionST ("PatrolEssential", "Make Sentry Road Patrol Essential", PatrolImmortal) AddToggleOptionST ("PatrolDisable", "Disable Sentry Road Patrol", PatrolBeGone) AddEmptyOption() AddToggleOptionST("RoriksteadEssential", "Set Rorikstead Sentries as Essential", RoriksteadImmortal) AddToggleOptionST("RoriksteadDisabled", "Disable Sentries in Rorikstead", RoriksteadBeGone) AddEmptyOption() AddToggleOptionST("VampireSentries", "Disable Vampires Outside Volkihar", CastleVampsBeGone) EndIfEndEvent State MakeEssential Event OnHighlightST() SetInfoText("Sets Non-Recruit Sentries in Towns & Cities as Essential") EndEvent Event OnSelectST() ImmortalCity = !ImmortalCity SetToggleOptionValueST(ImmortalCity) If ImmortalCity == True DawnSentryEssentialToggleQuest.start() ElseIf ImmortalCity == False DawnSentryEssentialToggleQuest.stop() EndIf EndEvent Event OnDefaultST() ImmortalCity = False SetToggleOptionValueST(False) DawnSentryEssentialToggleQuest.stop() EndEventEndState State DisableRedShirts Event OnHighlightST() SetInfoText("Disables the Dawnguard Recruits in Dayspring Canyon") EndEvent Event OnSelectST() RedShirtBeGone = !RedShirtBeGone SetToggleOptionValueST(RedShirtBeGone) If RedShirtBeGone == True DawnSentryRedShirtDisableXMarker.disable() ElseIf RedShirtBeGone == False DawnSentryRedShirtDisableXMarker.enable() EndIf EndEvent Event OnDefaultST() RedShirtBeGone = False SetToggleOptionValueST(False) DawnSentryRedShirtDisableXMarker.enable() EndEventEndState State ExteriorEssential Event OnHighlightST() SetInfoText("Sets Sentries Patrolling Outside Riften & Solitude as Essential") EndEvent Event OnSelectST() ImmortalOutside = !ImmortalOutside SetToggleOptionValueST(ImmortalOutside) If ImmortalOutside == True DawnSentryEssentialExteriorSentries.Start() ElseIf ImmortalOutside == False DawnSentryEssentialExteriorSentries.Stop() EndIf EndEvent Event OnDefaultST() ImmortalOutside = False SetToggleOptionValueST(False) DawnSentryEssentialExteriorSentries.Stop() EndEventEndState State ExteriorDisable Event OnHighlightST() SetInfoText("Disable the Sentries Patrolling Outside Riften & Solitude") EndEvent Event OnSelectST() ExteriorBeGone = !ExteriorBeGone SetToggleOptionValueST(ExteriorBeGone) If ExteriorBeGone == True DawnSentrySolitudeDocksDisableToggleMarker.disable() DawnSentryRiftenExteriorDisableXMarker.disable() ElseIf ExteriorBeGone == False DawnSentrySolitudeDocksDisableToggleMarker.enable() DawnSentryRiftenExteriorDisableXMarker.enable() EndIf EndEvent Event OnDefaultST() ExteriorBeGone = False SetToggleOptionValueST(False) DawnSentrySolitudeDocksDisableToggleMarker.enable() DawnSentryRiftenExteriorDisableXMarker.enable() EndEventEndState State PatrolEssential Event OnHighlightST() SetInfoText("Sets Sentries Patrolling Between Riften and Dayspring Canyon as Essential") EndEvent Event OnSelectST() PatrolImmortal = !PatrolImmortal SetToggleOptionValueST(PatrolImmortal) If PatrolImmortal == True DawnSentryEssentialPatrolQuest.Start() ElseIf PatrolImmortal == False DawnSentryEssentialPatrolQuest.Stop() EndIf EndEvent Event OnDefaultST() PatrolImmortal = False SetToggleOptionValueST(False) DawnSentryEssentialPatrolQuest.Stop() EndEventEndState State PatrolDisable Event OnHighlightST() SetInfoText("Disables Sentries Patrolling Between Riften and Dayspring Canyon") EndEvent Event OnSelectST() PatrolBeGone = !PatrolBeGone SetToggleOptionValueST(PatrolBeGone) If PatrolBeGone == True DawnSentryPatrolUnitDisableXMarker.disable() ElseIf PatrolBeGone == False DawnSentryPatrolUnitDisableXMarker.enable() EndIf EndEvent Event OnDefaultST() PatrolBeGone = False SetToggleOptionValueST(False) DawnSentryPatrolUnitDisableXMarker.enable() EndEventEndState State RoriksteadEssential Event OnHighlightST() SetInfoText("Sets Sentries Patrolling Rorikstead as Essential") EndEvent Event OnSelectST() RoriksteadImmortal = !RoriksteadImmortal SetToggleOptionValueST(RoriksteadImmortal) If RoriksteadImmortal == True DawnSentryRoriksteadToggleQuest.Start() ElseIf RoriksteadImmortal == False DawnSentryRoriksteadToggleQuest.Stop() EndIf EndEvent Event OnDefaultST() RoriksteadImmortal = False SetToggleOptionValueST(False) DawnSentryRoriksteadToggleQuest.Stop() EndEventEndState State RoriksteadDisabled Event OnHighlightST() SetInfoText("Disables Sentries Patrolling Rorikstead Village") EndEvent Event OnSelectST() RoriksteadBeGone = !RoriksteadBeGone SetToggleOptionValueST(RoriksteadBeGone) If RoriksteadBeGone == True DawnSentryRoriksteadDisableXMarker.disable() ElseIf RoriksteadBeGone == False DawnSentryRoriksteadDisableXMarker.enable() EndIf EndEvent Event OnDefaultST() RoriksteadBeGone = False SetToggleOptionValueST(False) DawnSentryRoriksteadDisableXMarker.enable() EndEventEndState State VampireSentries Event OnHighlightST() SetInfoText("Disables Vampire Guards Patrolling Outside Castle Volkihar") EndEvent Event OnSelectST() CastleVampsBeGone = !CastleVampsBeGone SetToggleOptionValueST(CastleVampsBeGone) If CastleVampsBeGone == True DawnSentryVampCastleGuardDisableXMarker.disable() ElseIf CastleVampsBeGone == False DawnSentryVampCastleGuardDisableXMarker.enable() EndIf EndEvent Event OnDefaultST() CastleVampsBeGone = False SetToggleOptionValueST(False) DawnSentryVampCastleGuardDisableXMarker.enable() EndEventEndState Quest Property DawnSentryEssentialToggleQuest AutoQuest Property DawnSentryEssentialExteriorSentries AutoQuest Property DawnSentryEssentialPatrolQuest AutoQuest Property DawnSentryRoriksteadToggleQuest AutoObjectReference Property DawnSentryPatrolUnitDisableXMarker AutoObjectReference Property DawnSentryRiftenExteriorDisableXMarker AutoObjectReference Property DawnSentryRedShirtDisableXMarker AutoObjectReference Property DawnSentrySolitudeDocksDisableToggleMarker AutoObjectReference Property DawnSentryRoriksteadDisableXMarker AutoObjectReference Property DawnSentryVampCastleGuardDisableXMarker Auto Anybody see anything I goofed? The MCM script seems to work fine and this is the only line I saw in the logs that pertained to my script: [06/13/2015 - 01:30:40AM] Error: Unable to call GetFormID - no native object bound to the script object, or object is of incorrect typestack:[None].DawnSentryMCMStates.GetFormID() - "<native>" Line ?[sKI_ConfigManagerInstance (0E000802)].SKI_ConfigManager.Cleanup() - "SKI_ConfigManager.psc" Line ?[sKI_ConfigManagerInstance (0E000802)].SKI_ConfigManager.OnGameReload() - "SKI_ConfigManager.psc" Line 82[alias PlayerRef on quest SKI_ConfigManagerInstance (0E000802)].SKI_PlayerLoadGameAlias.OnPlayerLoadGame() - "SKI_PlayerLoadGameAlias.psc" Line 6 With no specific line referenced, I'm not sure what native object to look for that it's not seeing connected to a script. ANYWAY... If anybody has any bright ideas what may be causing this, feel free to chime in.
Recommended Posts
Archived
This topic is now archived and is closed to further replies.