Jump to content

Overhauling the weapon rack scripts


Sclerocephalus

Recommended Posts

The Ghostblade vanished from the weapon rack in Hjerim. It also has rendered that slot unusable.

[03/10/2014 - 10:48:56PM] error: Item 21 in container  (00000014): has no 3d, and so cannot have its motion type changed.
stack:
    [ (00094A2C)].ObjectReference.SetMotionType() - "<native>" Line ?
    [ (000DF575)].WeaponRackActivateScript.PlaceItem() - "WeaponRackActivateSCRIPT.psc" Line 620
    [ (000DF575)].WeaponRackActivateScript.CheckRackType() - "WeaponRackActivateSCRIPT.psc" Line 498
    [ (000DF575)].WeaponRackActivateScript.ActivatorSetup() - "WeaponRackActivateSCRIPT.psc" Line 290
    [ (000DF574)].WeaponRackTriggerSCRIPT.ActivatorCheck() - "WeaponRackTriggerSCRIPT.psc" Line 238
    [ (000DF574)].WeaponRackTriggerSCRIPT.OnCellAttach() - "WeaponRackTriggerSCRIPT.psc" Line 92

Edit: It's not in my inventory either (as the error seems to indicate). Two ESS files [here] for testing if it would help. They're not in the UPP section, so they should be able to be downloaded by anyone.

 

See tracker issue #15077.

Link to comment
Share on other sites

The Ghostblade vanished from the weapon rack in Hjerim. It also has rendered that slot unusable.

Edit: It's not in my inventory either (as the error seems to indicate). Two ESS files [here] for testing if it would help. They're not in the UPP section, so they should be able to be downloaded by anyone.

 

See tracker issue #15077.

This is highly confusing. I tried it with debug messages on, and get the same error, but it seems to be mounted on the rack, yet not visible!

 

[03/11/2014 - 12:33:53PM] [WeaponRackActivateScript < (000DF575)>]CheckRackType() CALL [Form < (00094A2B)>] bStarting = TRUE
yep. that's the base form.

 

[03/11/2014 - 12:33:53PM] [WeaponRackActivateScript < (000DF575)>]PlaceItem() CALL [ObjectReference < (00094A2C)>] layout = 1
yep. that's the object.

 

[03/11/2014 - 12:33:53PM] [WeaponRackActivateScript < (000DF579)>]PlaceItem() CALL [ObjectReference < (FF00114A)>] layout = 1
[03/11/2014 - 12:33:53PM] [WeaponRackActivateScript < (000DF576)>]PlaceItem() CALL [ObjectReference < (FF00096E)>] layout = 1
[03/11/2014 - 12:33:53PM] [WeaponRackActivateScript < (000DF577)>]PlaceItem() CALL [Actor < (FF00095A)>] layout = 1
[03/11/2014 - 12:33:53PM] [WeaponRackActivateScript < (000DF584)>]PlaceItem() CALL [ObjectReference < (FF001848)>] layout = 1
[03/11/2014 - 12:33:53PM] [WeaponRackActivateScript < (000DF575)>]PlaceItem() CALL [ObjectReference < (00094A2C)>] layout = 1
[03/11/2014 - 12:33:53PM] [WeaponRackActivateScript < (00102914)>]PlaceItem() CALL [ObjectReference < (FF001855)>] layout = 0
[03/11/2014 - 12:33:53PM] Error: Item 21 in container  (00000014): has no 3d, and so cannot have its motion type changed.
stack:
    [ (00094A2C)].ObjectReference.SetMotionType() - "<native>" Line ?
    [ (000DF575)].WeaponRackActivateScript.PlaceItem() - "WeaponRackActivateSCRIPT.psc" Line 620
    [ (000DF575)].WeaponRackActivateScript.CheckRackType() - "WeaponRackActivateSCRIPT.psc" Line 498
    [ (000DF575)].WeaponRackActivateScript.ActivatorSetup() - "WeaponRackActivateSCRIPT.psc" Line 290
    [ (000DF574)].WeaponRackTriggerSCRIPT.ActivatorCheck() - "WeaponRackTriggerSCRIPT.psc" Line 238
    [ (000DF574)].WeaponRackTriggerSCRIPT.OnCellAttach() - "WeaponRackTriggerSCRIPT.psc" Line 92
[03/11/2014 - 12:33:53PM] [WeaponRackActivateScript < (00102929)>]PlaceItem() CALL [ObjectReference < (FF0017D0)>] layout = 0
In context, all the others are being mounted, but only yours has no 3D?

Side query: what Actor is mounted on a rack?

 

[03/11/2014 - 12:33:54PM] [WeaponRackActivateScript < (000DF575)>]PlaceItem() [ObjectReference < (00094A2C)>]; Base = [Form < (00094A2B)>]; placed on [WeaponRackTriggerSCRIPT < (000DF574)>]
It thinks it's on the rack.

 

[03/11/2014 - 12:33:55PM] [WeaponRackActivateScript < (000DF577)>]ActivatorSetup() disabled; PlacedItemInit = True; TOC = 1
[03/11/2014 - 12:33:55PM] [WeaponRackActivateScript < (000DF575)>]ActivatorSetup() disabled; PlacedItemInit = True; TOC = 0
[03/11/2014 - 12:33:55PM] [WeaponRackActivateScript < (000DF579)>]ActivatorSetup() disabled; PlacedItemInit = True; TOC = 1
[03/11/2014 - 12:33:55PM] [WeaponRackActivateScript < (000DF576)>]ActivatorSetup() disabled; PlacedItemInit = True; TOC = 1
[03/11/2014 - 12:33:55PM] [WeaponRackActivateScript < (00102A22)>]ActivatorSetup() disabled; PlacedItemInit = True; TOC = 1
[03/11/2014 - 12:33:55PM] [WeaponRackActivateScript < (00102A25)>]ActivatorSetup() disabled; PlacedItemInit = True; TOC = 1
[03/11/2014 - 12:33:55PM] [WeaponRackActivateScript < (0010291C)>]ActivatorSetup() disabled; PlacedItemInit = True; TOC = 1
[03/11/2014 - 12:33:55PM] [WeaponRackActivateScript < (00102929)>]ActivatorSetup() disabled; PlacedItemInit = True; TOC = 1
[03/11/2014 - 12:33:55PM] [WeaponRackActivateScript < (000DF584)>]ActivatorSetup() disabled; PlacedItemInit = True; TOC = 1
[03/11/2014 - 12:33:55PM] [WeaponRackActivateScript < (0010290E)>]ActivatorSetup() disabled; PlacedItemInit = True; TOC = 1
[03/11/2014 - 12:33:55PM] [WeaponRackActivateScript < (00102914)>]ActivatorSetup() disabled; PlacedItemInit = True; TOC = 1
In context, all the others are on the rack, but yours isn't actually hitting Sclero's tiny trigger (TOC = 0). Maybe still has no 3D.

 

So, that's why the rack stops working. You take things off the rack by activating the trigger, and TOC is the number of items in the trigger spot.

 

How long ago did you put this on the rack? Before USKP 2.0.1?

Link to comment
Share on other sites

I added a debug routine:

Function ActivatorSetup3D()

	Cell parentCell = PlayersDroppedWeapon.GetParentCell()
	If parentCell == None
		Trace(Self + "ActivatorSetup3D() ERROR: " + PlayersDroppedWeapon + ".GetParentCell() == None")
	ElseIf parentCell != GetParentCell()
		Trace(Self + "ActivatorSetup3D() ERROR: " + PlayersDroppedWeapon + ".GetParentCell() != GetParentCell")
	ElseIf CheckFor3D(PlayersDroppedWeapon)
		; always re-adjust to match current game mesh defined nodes
		DisableNoWait()
		Message ErrorMessage = CheckRackType(PlayersDroppedWeapon.GetBaseObject(), True)
		if ErrorMessage
			Trace(Self + "ActivatorSetup3D() ERROR:" + ErrorMessage)
		endif
	Else
		Trace(Self + "ActivatorSetup3D() ERROR: " + PlayersDroppedWeapon + " 3D failed")
	EndIf
Sure enough, it's in the same cell with the rack (two tests pass), but its 3D is failing!

[03/11/2014 - 02:53:53PM] Info: [WeaponRackActivateScript < (000DF575)>]CheckFor3D() [ObjectReference < (00094A2C)>] 3D failed, counter = 0/9.
stack:
	<unknown self>.Debug.TraceStack() - "<native>" Line ?
	[ (000DF575)].WeaponRackActivateScript.CheckFor3D() - "WeaponRackActivateSCRIPT.psc" Line 821
	[ (000DF575)].WeaponRackActivateScript.ActivatorSetup3D() - "WeaponRackActivateSCRIPT.psc" Line 333
	[ (000DF575)].WeaponRackActivateScript.ActivatorSetup() - "WeaponRackActivateSCRIPT.psc" Line 286
	[ (000DF574)].WeaponRackTriggerSCRIPT.ActivatorCheck() - "WeaponRackTriggerSCRIPT.psc" Line 238
	[ (000DF574)].WeaponRackTriggerSCRIPT.OnCellAttach() - "WeaponRackTriggerSCRIPT.psc" Line 92
[03/11/2014 - 02:53:53PM] [WeaponRackActivateScript < (000DF575)>]ActivatorSetup3D() ERROR: [ObjectReference < (00094A2C)>] 3D failed
Anybody have any idea how this happens? And what we should do about it to recover?
Link to comment
Share on other sites

This is highly confusing. I tried it with debug messages on, and get the same error, but it seems to be mounted on the rack, yet not visible!

In context, all the others are on the rack, but yours isn't actually hitting Sclero's tiny trigger (TOC = 0). Maybe still has no 3D.

 

< ... >

 

How long ago did you put this on the rack? Before USKP 2.0.1?

When I placed the Ghostblade on the rack I was using USKP 2.0.3, so not very long ago. The game itself was was started in early October of last year (using USKP 1.3.3), so if the changes you say Sclero made were (by chance) non-retroactive that could be the cause of this issue.

 

Link to comment
Share on other sites

When I placed the Ghostblade on the rack I was using USKP 2.0.3, so not very long ago. The game itself was was started in early October of last year (using USKP 1.3.3), so if the changes you say Sclero made were (by chance) non-retroactive that could be the cause of this issue.

No, the tiny triggers aren't the cause. The lack of 3D is the cause.

Yes, Sclero accidentally made some non-retroactive script changes long ago, but I'd thought those were retroactively fixed up in 2.0.0 and 2.0.1.

 

 

The problem here is the Talenden 2.0.1 inventory code somehow isn't quite working. Or working once. Or something. We all banged on this extensively, but I've never personally tested the Ghostblade. It was in Talenden's test suite, I'd assumed he'd tested it himself. Need him here to talk about it.

Link to comment
Share on other sites

I suppose this means I need to go see if Ghostblade is still on the rack I put it on after bringing it back from being vanished. (Yes, that was an adventure)

 

Question is.... which one did I put it on? :X

Link to comment
Share on other sites

Question is.... which one did I put it on? :X

If you remember which place, the error log would tell you which rack -- or it will be on the rack with no problems ... or with different problems.

But it would certainly be helpful to have a second test subject!

Any idea why it's in the correct cell, but the error log above thinks it is item 21 in container (00000014)? Is player inventory in the same cell as player? Do we have a good test for being in a container?

Link to comment
Share on other sites

After many hours staring at logs and playing around with the code, I'm no closer to figuring out how to fix the Ghostblade.

 

However, I did find a tiny bug setting the wrong state after user errors are displayed, such as not fitting in the specific rack.

 

Moreover, as I've learned fixing the various racks around Skyrim, there are far fewer bad invisible activators than bad visible triggers. I've changed the code so that bad or disabled triggers don't keep re-trying after their first time. This saves a vast number of OnCellAttach event executions.

 

Instead, the activator checks whether the trigger is initializing, and kicks it. The activators were already checking themselves for errors, so their same OnCellAttach can also be used to check the trigger. This is a "slow path" -- but should save a lot of papyrus execution time overall, because most of the bad/disabled racks don't have proper activators.

Link to comment
Share on other sites

Still more time experimenting. Still unable to reproduce original failure.

 

The only thing that I notice is this is the only weapon in his list (above) not starting with FF. It's the same in my tests.

[03/12/2014 - 08:31:08PM] [WeaponRackActivateScript < (00102BDA)>]CheckRackType() CALL [WEAPON < (00094A2B)>] bStarting = False
[03/12/2014 - 08:31:08PM] [WeaponRackActivateScript < (00102BDA)>]HandlePlayerItem() CALL [WEAPON < (00094A2B)>] layout = 1
[03/12/2014 - 08:31:08PM] [WeaponRackActivateScript < (00102BDA)>]HandlePlayerItem() dropped [ObjectReference < (00094A2C)>]
[03/12/2014 - 08:31:08PM] [WeaponRackActivateScript < (00102BDA)>]CheckFor3D() [ObjectReference < (00094A2C)>] 3D loaded, delay = 0.000000
[03/12/2014 - 08:31:08PM] [WeaponRackActivateScript < (00102BDA)>]PlaceItem() CALL [ObjectReference < (00094A2C)>] layout = 1
[03/12/2014 - 08:31:08PM] [WeaponRackActivateScript < (00102BDA)>]CheckFor3D() [WeaponRackTriggerSCRIPT < (00102BDB)>] 3D loaded, delay = 0.000000
[03/12/2014 - 08:31:08PM] [WeaponRackActivateScript < (00102BDA)>]PlaceItem() [ObjectReference < (00094A2C)>]; Base = [WEAPON < (00094A2B)>]; placed on [WeaponRackTriggerSCRIPT < (00102BDB)>]
^^^put it on rack^^^

[03/12/2014 - 08:31:23PM] [WeaponRackActivateScript < (00102BDA)>]RackWasTriggered() enabled; TOC = 0
^^^took it off rack^^^

[03/12/2014 - 08:31:49PM] [WeaponRackActivateScript < (00102BDA)>]CheckRackType() CALL [WEAPON < (00094A2B)>] bStarting = False
[03/12/2014 - 08:31:49PM] [WeaponRackActivateScript < (00102BDA)>]HandlePlayerItem() CALL [WEAPON < (00094A2B)>] layout = 1
[03/12/2014 - 08:31:50PM] [WeaponRackActivateScript < (00102BDA)>]HandlePlayerItem() dropped [ObjectReference < (00094A2C)>]
[03/12/2014 - 08:31:50PM] [WeaponRackActivateScript < (00102BDA)>]CheckFor3D() [ObjectReference < (00094A2C)>] 3D loaded, delay = 0.000000
[03/12/2014 - 08:31:50PM] [WeaponRackActivateScript < (00102BDA)>]PlaceItem() CALL [ObjectReference < (00094A2C)>] layout = 1
[03/12/2014 - 08:31:50PM] [WeaponRackActivateScript < (00102BDA)>]CheckFor3D() [WeaponRackTriggerSCRIPT < (00102BDB)>] 3D loaded, delay = 0.000000
[03/12/2014 - 08:31:50PM] [WeaponRackActivateScript < (00102BDA)>]PlaceItem() [ObjectReference < (00094A2C)>]; Base = [WEAPON < (00094A2B)>]; placed on [WeaponRackTriggerSCRIPT < (00102BDB)>]
^^^put it on rack^^^

[03/12/2014 - 08:32:13PM] [WeaponRackActivateScript < (00102BDA)>]ActivatorSetup() handling
[03/12/2014 - 08:32:13PM] [WeaponRackActivateScript < (00102C27)>]ActivatorSetup() handling
[03/12/2014 - 08:32:13PM] [WeaponRackActivateScript < (00102C26)>]ActivatorSetup() handling
[03/12/2014 - 08:32:13PM] [WeaponRackActivateScript < (00102C25)>]ActivatorSetup() handling
[03/12/2014 - 08:32:13PM] [WeaponRackActivateScript < (00102C2E)>]ActivatorSetup() handling
[03/12/2014 - 08:32:13PM] [WeaponRackActivateScript < (00102C2D)>]ActivatorSetup() handling
[03/12/2014 - 08:32:13PM] [WeaponRackActivateScript < (00102C32)>]ActivatorSetup() handling
[03/12/2014 - 08:32:13PM] [WeaponRackActivateScript < (00102C18)>]ActivatorSetup() handling
[03/12/2014 - 08:32:13PM] [WeaponRackActivateScript < (00102C1B)>]ActivatorSetup() handling
[03/12/2014 - 08:32:13PM] [WeaponRackActivateScript < (00102C1E)>]ActivatorSetup() handling
[03/12/2014 - 08:32:13PM] [WeaponRackActivateScript < (00102C28)>]ActivatorSetup() handling
[03/12/2014 - 08:32:13PM] [WeaponRackActivateScript < (00102BDA)>]ActivatorSetup() [ObjectReference < (00094A2C)>] not starting item.
[03/12/2014 - 08:32:13PM] [WeaponRackActivateScript < (00102C2D)>]ActivatorSetup() [ObjectReference < (FF000C8E)>] not starting item.
[03/12/2014 - 08:32:13PM] [WeaponRackActivateScript < (00102C2E)>]ActivatorSetup() [ObjectReference < (FF00159A)>] not starting item.
[03/12/2014 - 08:32:13PM] [WeaponRackActivateScript < (00102C32)>]ActivatorSetup() [ObjectReference < (FF000E24)>] not starting item.
[03/12/2014 - 08:32:13PM] [WeaponRackActivateScript < (00102C27)>]CheckFor3D() [ObjectReference < (FF0011AF)>] 3D loaded, delay = 0.000000
[03/12/2014 - 08:32:13PM] [WeaponRackActivateScript < (00102C26)>]CheckFor3D() [ObjectReference < (FF0010D6)>] 3D loaded, delay = 0.000000
[03/12/2014 - 08:32:13PM] [WeaponRackActivateScript < (00102C25)>]CheckFor3D() [ObjectReference < (FF0020E4)>] 3D loaded, delay = 0.000000
[03/12/2014 - 08:32:13PM] [WeaponRackActivateScript < (00102BDA)>]CheckFor3D() [ObjectReference < (00094A2C)>] 3D loaded, delay = 0.000000
[03/12/2014 - 08:32:13PM] [WeaponRackActivateScript < (00102C27)>]CheckRackType() CALL [Form < (000C0186)>] bStarting = TRUE
[03/12/2014 - 08:32:13PM] [WeaponRackActivateScript < (00102C26)>]CheckRackType() CALL [Form < (0007A4FB)>] bStarting = TRUE
[03/12/2014 - 08:32:13PM] [WeaponRackActivateScript < (00102C2D)>]CheckFor3D() [ObjectReference < (FF000C8E)>] 3D loaded, delay = 0.000000
[03/12/2014 - 08:32:13PM] [WeaponRackActivateScript < (00102C2E)>]CheckFor3D() [ObjectReference < (FF00159A)>] 3D loaded, delay = 0.000000
[03/12/2014 - 08:32:13PM] [WeaponRackActivateScript < (00102C32)>]CheckFor3D() [ObjectReference < (FF000E24)>] 3D loaded, delay = 0.000000
[03/12/2014 - 08:32:13PM] [WeaponRackActivateScript < (00102BDA)>]CheckRackType() CALL [WEAPON < (00094A2B)>] bStarting = TRUE
[03/12/2014 - 08:32:13PM] [WeaponRackActivateScript < (00102C27)>]PlaceItem() CALL [ObjectReference < (FF0011AF)>] layout = 1
[03/12/2014 - 08:32:13PM] [WeaponRackActivateScript < (00102C2E)>]CheckRackType() CALL [Form < (00013987)>] bStarting = TRUE
[03/12/2014 - 08:32:13PM] [WeaponRackActivateScript < (00102BDA)>]PlaceItem() CALL [ObjectReference < (00094A2C)>] layout = 1
[03/12/2014 - 08:32:13PM] [WeaponRackActivateScript < (00102C26)>]PlaceItem() CALL [ObjectReference < (FF0010D6)>] layout = 1
[03/12/2014 - 08:32:13PM] [WeaponRackActivateScript < (00102C2D)>]CheckRackType() CALL [Form < (00013987)>] bStarting = TRUE
[03/12/2014 - 08:32:13PM] [WeaponRackActivateScript < (00102C25)>]CheckRackType() CALL [Form < (0301958C)>] bStarting = TRUE
[03/12/2014 - 08:32:13PM] [WeaponRackActivateScript < (00102C25)>]PlaceItem() CALL [ObjectReference < (FF0020E4)>] layout = 1
[03/12/2014 - 08:32:13PM] [WeaponRackActivateScript < (00102C32)>]CheckRackType() CALL [Form < (000214BA)>] bStarting = TRUE
[03/12/2014 - 08:32:13PM] [WeaponRackActivateScript < (00102C2E)>]PlaceItem() CALL [ObjectReference < (FF00159A)>] layout = 3
[03/12/2014 - 08:32:13PM] [WeaponRackActivateScript < (00102C32)>]PlaceItem() CALL [ObjectReference < (FF000E24)>] layout = 0
[03/12/2014 - 08:32:13PM] [WeaponRackActivateScript < (00102C27)>]CheckFor3D() [WeaponRackTriggerSCRIPT < (00102C22)>] 3D loaded, delay = 0.000000
[03/12/2014 - 08:32:13PM] [WeaponRackActivateScript < (00102C2D)>]PlaceItem() CALL [ObjectReference < (FF000C8E)>] layout = 3
[03/12/2014 - 08:32:13PM] [WeaponRackActivateScript < (00102BDA)>]CheckFor3D() [WeaponRackTriggerSCRIPT < (00102BDB)>] 3D loaded, delay = 0.000000
[03/12/2014 - 08:32:13PM] [WeaponRackActivateScript < (00102C26)>]CheckFor3D() [WeaponRackTriggerSCRIPT < (00102C23)>] 3D loaded, delay = 0.000000
[03/12/2014 - 08:32:13PM] [WeaponRackActivateScript < (00102C25)>]CheckFor3D() [WeaponRackTriggerSCRIPT < (00102C24)>] 3D loaded, delay = 0.000000
[03/12/2014 - 08:32:13PM] [WeaponRackActivateScript < (00102C2E)>]CheckFor3D() [WeaponRackTriggerSCRIPT < (00102C2B)>] 3D loaded, delay = 0.000000
[03/12/2014 - 08:32:13PM] [WeaponRackActivateScript < (00102C32)>]CheckFor3D() [WeaponRackTriggerSCRIPT < (00102C33)>] 3D loaded, delay = 0.000000
[03/12/2014 - 08:32:13PM] [WeaponRackActivateScript < (00102C2D)>]CheckFor3D() [WeaponRackTriggerSCRIPT < (00102C2C)>] 3D loaded, delay = 0.000000
[03/12/2014 - 08:32:13PM] [WeaponRackActivateScript < (00102BDA)>]PlaceItem() [ObjectReference < (00094A2C)>]; Base = [WEAPON < (00094A2B)>]; placed on [WeaponRackTriggerSCRIPT < (00102BDB)>]
[03/12/2014 - 08:32:13PM] [WeaponRackActivateScript < (00102C2E)>]PlaceItem() [ObjectReference < (FF00159A)>]; Base = [Form < (00013987)>]; placed on [WeaponRackTriggerSCRIPT < (00102C2B)>]
[03/12/2014 - 08:32:13PM] [WeaponRackActivateScript < (00102C27)>]PlaceItem() [ObjectReference < (FF0011AF)>]; Base = [Form < (000C0186)>]; placed on [WeaponRackTriggerSCRIPT < (00102C22)>]
[03/12/2014 - 08:32:13PM] [WeaponRackActivateScript < (00102C2D)>]PlaceItem() [ObjectReference < (FF000C8E)>]; Base = [Form < (00013987)>]; placed on [WeaponRackTriggerSCRIPT < (00102C2C)>]
[03/12/2014 - 08:32:13PM] [WeaponRackActivateScript < (00102C26)>]PlaceItem() [ObjectReference < (FF0010D6)>]; Base = [Form < (0007A4FB)>]; placed on [WeaponRackTriggerSCRIPT < (00102C23)>]
[03/12/2014 - 08:32:13PM] [WeaponRackActivateScript < (00102C25)>]PlaceItem() [ObjectReference < (FF0020E4)>]; Base = [Form < (0301958C)>]; placed on [WeaponRackTriggerSCRIPT < (00102C24)>]
[03/12/2014 - 08:32:13PM] [WeaponRackActivateScript < (00102C32)>]PlaceItem() [ObjectReference < (FF000E24)>]; Base = [Form < (000214BA)>]; placed on [WeaponRackTriggerSCRIPT < (00102C33)>]
[03/12/2014 - 08:32:14PM] [WeaponRackActivateScript < (00102C1B)>]ActivatorSetup() enabled; PlacedItemInit = True; TOC = 0
[03/12/2014 - 08:32:14PM] [WeaponRackActivateScript < (00102C18)>]ActivatorSetup() enabled; PlacedItemInit = True; TOC = 0
[03/12/2014 - 08:32:14PM] [WeaponRackActivateScript < (00102C28)>]ActivatorSetup() enabled; PlacedItemInit = True; TOC = 0
[03/12/2014 - 08:32:14PM] [WeaponRackActivateScript < (00102C1E)>]ActivatorSetup() enabled; PlacedItemInit = True; TOC = 0
[03/12/2014 - 08:32:14PM] [WeaponRackActivateScript < (00102BDA)>]ActivatorSetup() disabled; PlacedItemInit = True; TOC = 1
[03/12/2014 - 08:32:14PM] [WeaponRackActivateScript < (00102C2E)>]ActivatorSetup() disabled; PlacedItemInit = True; TOC = 1
[03/12/2014 - 08:32:14PM] [WeaponRackActivateScript < (00102C27)>]ActivatorSetup() disabled; PlacedItemInit = True; TOC = 1
[03/12/2014 - 08:32:14PM] [WeaponRackActivateScript < (00102C2D)>]ActivatorSetup() disabled; PlacedItemInit = True; TOC = 1
[03/12/2014 - 08:32:14PM] [WeaponRackActivateScript < (00102C26)>]ActivatorSetup() disabled; PlacedItemInit = True; TOC = 1
[03/12/2014 - 08:32:14PM] [WeaponRackActivateScript < (00102C25)>]ActivatorSetup() disabled; PlacedItemInit = True; TOC = 1
[03/12/2014 - 08:32:14PM] [WeaponRackActivateScript < (00102C32)>]ActivatorSetup() disabled; PlacedItemInit = True; TOC = 1
^^^exit Honeyside and re-enter^^^

[03/12/2014 - 08:32:21PM] [WeaponRackActivateScript < (00102BDA)>]RackWasTriggered() enabled; TOC = 0
^^^took it off rack^^^

[03/12/2014 - 08:32:42PM] [WeaponRackActivateScript < (00102BDA)>]CheckRackType() CALL [WEAPON < (00094A2B)>] bStarting = False
[03/12/2014 - 08:32:42PM] [WeaponRackActivateScript < (00102BDA)>]HandlePlayerItem() CALL [WEAPON < (00094A2B)>] layout = 1
[03/12/2014 - 08:32:42PM] [WeaponRackActivateScript < (00102BDA)>]HandlePlayerItem() dropped [ObjectReference < (00094A2C)>]
[03/12/2014 - 08:32:42PM] [WeaponRackActivateScript < (00102BDA)>]CheckFor3D() [ObjectReference < (00094A2C)>] 3D loaded, delay = 0.000000
[03/12/2014 - 08:32:42PM] [WeaponRackActivateScript < (00102BDA)>]PlaceItem() CALL [ObjectReference < (00094A2C)>] layout = 1
[03/12/2014 - 08:32:42PM] [WeaponRackActivateScript < (00102BDA)>]CheckFor3D() [WeaponRackTriggerSCRIPT < (00102BDB)>] 3D loaded, delay = 0.000000
[03/12/2014 - 08:32:42PM] [WeaponRackActivateScript < (00102BDA)>]PlaceItem() [ObjectReference < (00094A2C)>]; Base = [WEAPON < (00094A2B)>]; placed on [WeaponRackTriggerSCRIPT < (00102BDB)>]
^^^put it on rack again^^^

EDIT: better indicate the explanatory lines are below, and with cumulative delay (always zero here, never needed delay).

Link to comment
Share on other sites

For the record, after putting the Ghostblade on the rack, save and quit.

Now, the name of the sword has changed:

[03/12/2014 - 09:50:49PM] [WeaponRackActivateScript < (00102BDA)>]RackWasTriggered() enabled; TOC = 0
^^^took it off rack^^^

[03/12/2014 - 09:51:01PM] [WeaponRackActivateScript < (00102BDA)>]CheckRackType() CALL [WEAPON < (00094A2B)>] bStarting = False
[03/12/2014 - 09:51:01PM] [WeaponRackActivateScript < (00102BDA)>]HandlePlayerItem() CALL [WEAPON < (00094A2B)>] layout = 1
[03/12/2014 - 09:51:01PM] [WeaponRackActivateScript < (00102BDA)>]HandlePlayerItem() dropped [defaultDisableHavokOnLoad < (00094A2C)>]
[03/12/2014 - 09:51:01PM] [WeaponRackActivateScript < (00102BDA)>]CheckFor3D() [defaultDisableHavokOnLoad < (00094A2C)>] 3D loaded, delay = 0.000000
[03/12/2014 - 09:51:01PM] [WeaponRackActivateScript < (00102BDA)>]PlaceItem() CALL [defaultDisableHavokOnLoad < (00094A2C)>] layout = 1
[03/12/2014 - 09:51:01PM] [WeaponRackActivateScript < (00102BDA)>]CheckFor3D() [WeaponRackTriggerSCRIPT < (00102BDB)>] 3D loaded, delay = 0.000000
[03/12/2014 - 09:51:01PM] [WeaponRackActivateScript < (00102BDA)>]PlaceItem() [defaultDisableHavokOnLoad < (00094A2C)>]; Base = [WEAPON < (00094A2B)>]; placed on [WeaponRackTriggerSCRIPT < (00102BDB)>]
^^^put it on rack again^^^
Link to comment
Share on other sites

Ghostblade is hanging right on the rack I left it on, after I figured out which house it was. I've been in, out, across the map, quit out of the game, come back, and it's still there. Not a peep from the logs about it.

Link to comment
Share on other sites

Ghostblade is hanging right on the rack I left it on, after I figured out which house it was. I've been in, out, across the map, quit out of the game, come back, and it's still there. Not a peep from the logs about it.

Yep, me too. But I'm using a horizontal plaque in Honeyside, the only house I've ever bought. BlackPete used a vertical rack. Did you? Could it be that the vertical rack has a problem? I'm grasping at straws here.

 

I've taken a look at the USKP nifs. Sclero made a pile of node adjustments. Some we don't even have support code for yet.

 

I'm also trying to figure out how we can automatically attempt to restore it. Since we have a nice pair of example files, I've got something to test. But nothing I've tried works yet.

 

My thinking is (looking at my 3D code above) it is in the correct cell and parent and in the PlayersDroppedWeapon, there's plenty of evidence of intent. So I'd like to be able to move it from where it's hiding back to the room.

 

It's initially disabled and don't havoc settle and respawn. Hjerim is NoResetZone, while AnsilvundZone is not. Could AnsilvundZone reset and affect the sword remotely via the editor location?

 

Moreover, there's this defaultDisableHavokOnLoad -- once the sword is taken, property beenSimmed will be true. But I'm not seeing any downside, other than the code is somewhat buggy.

 

The other thing is the FF issue. None of the other swords in the tests gives you the original copy. Is this usual?

Link to comment
Share on other sites

I'm also trying to figure out how we can automatically attempt to restore it. Since we have a nice pair of example files, I've got something to test. But nothing I've tried works yet.

 

My thinking is (looking at my 3D code above) it is in the correct cell and parent and in the PlayersDroppedWeapon, there's plenty of evidence of intent. So I'd like to be able to move it from where it's hiding back to the room.

 

It's initially disabled and don't havoc settle and respawn. Hjerim is NoResetZone, while AnsilvundZone is not. Could AnsilvundZone reset and affect the sword remotely via the editor location?

Aha! Just writing thoughts down helped solve the problem! The answer is YES!!!

I added a line to my debugging code:

Function ActivatorSetup3D()

	If PlayersDroppedWeapon.IsDisabled()
		PlayersDroppedWeapon.EnableNoWait()
		Trace(Self + "ActivatorSetup3D() ERROR: " + PlayersDroppedWeapon + ".IsDisabled()")
	EndIf

	Cell parentCell = PlayersDroppedWeapon.GetParentCell()
...
And there it is! It was somehow reset back to Initially Disabled. As a unique weapon, it probably should be No Respawn.

How many of the other unique weapons that have had problems are affected?

Link to comment
Share on other sites

How many of the other unique weapons that have had problems are affected?

Probably:

10e94c KeeningRewardRef, WinterholdCollegeHallofCountenance

02e526 DA06VolendrungRef, LargashburExterior04

Both Initially Disabled, Respawns, in respawning areas.

Link to comment
Share on other sites

If it still matters, I hung mine on one side of a two-weapon + shield rack in a Hearthfire house.

Link to comment
Share on other sites

If it still matters, I hung mine on one side of a two-weapon + shield rack in a Hearthfire house.

Thanks. So we've covered most of the possibilities.

 

However, for those 3 weapons, I'm pretty sure I've found the answer. It's pretty easy to fix by unchecking the Respawns flag -- and checking disabled for old ones, or by console enable. Should I keep the isDisabled check? Or is it just too rare?

 

Are there any other disappearing weapons we should be concerned about?

Link to comment
Share on other sites

I'd keep the isDisabled() check, you never know what other mod authors might do.

 

It's interesting though that the cell the weapon comes from getting respawned would cause something like this.

Link to comment
Share on other sites

I'd keep the isDisabled() check, you never know what other mod authors might do.

OK.

 

Next I'll try to figure out why Iron maces have their head downward on racks and seem unsupported, while Elven maces have their head up far above the rack and seem unsupported.

 

Also, why curved swords aren't symmetrical on CoA racks. I'm not very knowledgeable about nifs, so it will be painful experimentation....

 

I assume UDGP is next (soonish), so this will be awaiting a future USKP?

Link to comment
Share on other sites

testwr50.esp
 
Fixed the 3 weapons No Respawns. I'm reasonably certain this was the cause. But of course need lots of testing of those quests to make sure they aren't broken by the fix.
 
WRSingle01.nif
 
Used the newest version Sclero posted last October instead of the one in USKP. It has support for crossbows; also more kinds of staves, but that would take some additional software support.
 
Lined up all the maces on a stretch of weapon racks in Warehouseprefabs, and adjusted them to the best non-interfering level. Some still look unsupported, because their handles are too short. But looks better. Just have to assume leather thongs through them holding them in place. The iron mace even has a hole for one.
 
While I was at it, I did the same for greatswords and battlehammers, many of which had very odd interactions with the vertical racks. This is the best I can do about nails stuck through them and/and or cutting through the wood in various places.
 
Battleaxes and great axes kinda looked OK, so I didn't touch them.
 
WRPlaqueLeft01.nif
 
Fixed the scimitars (actually all swords). The same should probably be done for everything, so that identical items always mirror each other, but it took a long time to figure out the swords -- so that's all I got done today. Please tell me whether it was worth the effort.

[old code removed]

Link to comment
Share on other sites

Maces are not exactly symmetric on CoA plaques. But also very hard to figure out. Skipping.

Happily, battle axes are already symmetric.

Great swords have the same orientation as swords, so applied the same formula to make them symmetric. Asymmetric swords now look better!

War axes were actually off by several degrees (L -45, R 33.75), probably copied L from war hammers and R from great swords. Applying the inverse formula of battle axes sorts them out -- inverse because battle axes are big blade up, smaller axes are blade down.

War hammers need nearly the same parameters as war axes to make the bigger part of the heads face downward, matching the orientation on full-width plaques.

Finally, the StaffPivot01 and StaffPivotFalmer already seem to be symmetric by formula (hard to tell without duplicate staves).

Staff of Magus tests OK everywhere.

But testing Staff of Gaulderson, I've found another bug in the 2.0.1 code. It disappears on either CoA side! That turned out to be an easy fix (a reversed test).

Testing it on standard weapon racks, it mounts OK. But once you take it off, the rack is unusable. Logging shows the Sclero tiny triggers aren't big enough to detect the removal of some staves. And I don't know how to fix them....

[03/15/2014 - 01:14:13PM] [WeaponRackActivateScript < (000DF584)>]RackWasTriggered() Mounted Item = [ObjectReference < (FF001848)>]; Base = [WEAPON < (00035369)>]
[03/15/2014 - 01:14:13PM] [WeaponRackActivateScript < (000DF584)>]RackWasTriggered() enabled; TOC = 0
[03/15/2014 - 01:14:16PM] [WeaponRackActivateScript < (0010291C)>]RackWasTriggered() Mounted Item = [ObjectReference < (FF001634)>]; Base = [Form < (000E5F43)>]
[03/15/2014 - 01:14:16PM] [WeaponRackActivateScript < (0010291C)>]RackWasTriggered() enabled; TOC = 0
[03/15/2014 - 01:14:39PM] [WeaponRackActivateScript < (000DF578)>]RackWasTriggered() Mounted Item = [ObjectReference < (FF001848)>]; Base = [WEAPON < (00035369)>]
[03/15/2014 - 01:14:39PM] [WeaponRackActivateScript < (000DF578)>]RackWasTriggered() enabled; TOC = 0

Removal of the Gaulderson staff shows up on the plaque, not on the standing rack.

UPDATE: found the little triggers. By mixing back some of the vanilla X and Z vertices, and reinstating the radius, made them work again. They are still shorter than the original, but now almost as wide and a bit thicker. The Sclero's X were asymmetric, probably to avoid bows on adjacent racks. These are symmetric, so require further testing.

[old code removed]

Link to comment
Share on other sites

  • 2 weeks later...

[screenshot]

A forsworn bow in Druadach Redoubt appears as though it is placed incorrectly on a weapon rack. I don't know if this is something that can be fixed or not.

Link to comment
Share on other sites

[screenshot]

A forsworn bow in Druadach Redoubt appears as though it is placed incorrectly on a weapon rack. I don't know if this is something that can be fixed or not.

Is this with testwr50a? The revised bow rotations need more testing. CORRECTION: the new script stuff is crossbows. Anything new with regular bows would be in the .nif, which is hard to compare.

 

I'm pretty sure current USKP has some bugs with bows.

Link to comment
Share on other sites

I see that there have been 4 downloads of http://www.afkmods.com/index.php?/topic/3669-overhauling-the-weapon-rack-scripts/?p=150642 -- has anybody checked the mounting of forsworn bows on tall racks reported by Pete?

I tried using your "testwr50a" fix and at least in my game, it doesn't seem to have fixed the issue with forsworn bows. See this screenshot: http://postimg.org/image/6vrlni3j3/

Link to comment
Share on other sites

Cannot replicate it. I tested forsworn bows, and they were the same as other bows. I couldn't find a node distinguisher between different types of forsworn bows. They should mount the same.

 

I've even made lineup of most bow bases in warehouseprefabs. Sclero did make a mistake changing Y 90 to -90, as that flipped them upside down. Some bows are heavier on the bottom, and he put the heavy part on top. Looks wrong. Also, his added "pretty" tilt is too much at 11.5, I reduced it to 5.5 to avoid hitting the tops of great axes.

 

This is just the single revised nif for Arthmoor, with testwr50b for folks who want to test it too.

 

[old code removed]

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...