It's definitely not that. The objects are from two different mods that I'm working on, so they even have completely different naming prefixes. I also tried checking references persist on everything, not just the called object that's supposed to move. I even checked it off on the ring, and that did nothing. Only activating the ring in the game fixed it. The problem is completely solved by activating the ring in game, but I still want to know why it is bugging out at all.
This is the ring script. Pretty simple stuff:
Begin PGA_SummonRingScript; Summoning ring for creature companion - used instead of standard telepathy ringShort OnPCEquipShort PCSkipEquipShort buttonShort doOnceIf ( doOnce == -1 )	ReturnElseif ( doOnce == 1 )	Set PCSkipEquip to 0	Set OnPCEquip to 0	ReturnEndifSet PCSkipEquip to 1If ( MenuMode )	ReturnEndifIf ( OnPCEquip == 1 )	If ( PGA_packguar->GetHealth > 0 ) ;must be targeted to creature		MessageBox "Summon pack guar?" "Yes" "No"		Set button to -1		Set OnPCEquip to 2	Else		MessageBox "Your pack guar is dead."		Set OnPCEquip to 0		Set PCSkipEquip to 0		Set doOnce to -1		Return	EndifElseif ( OnPCEquip == 2 )	Set button to GetButtonPressed	If ( button == -1 )		Return	Elseif ( button == 0 )		If ( GetInterior == 0 ) ;exterior			Set PGA_portflw to 2			If ( ScriptRunning PGA_FollowPortS == 0 )				StartScript PGA_FollowPortS			Endif		ElseIf ( GetPCCell "Mournhold, Godsreach" == 1 ) 	;Trib fake exteriors			Set PGA_portflw to 2			If ( ScriptRunning PGA_FollowPortS == 0 )				StartScript PGA_FollowPortS			Endif		ElseIf ( GetPCCell "Mournhold, Great Bazaar" == 1 )			Set PGA_portflw to 2			If ( ScriptRunning PGA_FollowPortS == 0 )				StartScript PGA_FollowPortS			Endif		ElseIf ( GetPCCell "Mournhold, Plaza Brindisi Dorom" == 1 )			Set PGA_portflw to 2			If ( ScriptRunning PGA_FollowPortS == 0 )				StartScript PGA_FollowPortS			Endif		ElseIf ( GetPCCell "Mournhold, Temple Courtyard" == 1 )			Set PGA_portflw to 2			If ( ScriptRunning PGA_FollowPortS == 0 )				StartScript PGA_FollowPortS			Endif		ElseIf ( GetPCCell "Mournhold, Royal Palace: Courtyard" == 1 )			Set PGA_portflw to 2			If ( ScriptRunning PGA_FollowPortS == 0 )				StartScript PGA_FollowPortS			Endif		Else 	;not same cell and not an accessible cell			MessageBox "You can't summon your pack guar here"			Set OnPCEquip to 0			Return		Endif	Else		Set OnPCEquip to 0		Return	EndifEndifEnd
Here's the activator script, which is a bit more complicated, and the script for the object that it moves as well.
Begin Uvi_UT_Elevator_Switch; created by Stuporstar; activator for elevator in upper tower; script for moving plug is found in UT_ElevatorPlugShort controlvarShort buttonIf ( MenuMode == 1 )	ReturnEndif; check to make sure plug is not currently movingIf ( OnActivate == 1 )	If ( "uvirith_movableplug_UT".Moving != 0 )		If ( "uvirith_movableplug_UT".Moving != 4 )			If ( "uvirith_movableplug_UT".Moving != 8 )				If ( "uvirith_movableplug_UT".Moving != 12 )					If ( "uvirith_movableplug_UT".Moving != 17 ) ;only used one more time to get plug back into position						Set controlvar to 0						Return					Endif				Endif			Endif		Endif	Endif	If ( Player->GetItemCount "key_teluvirith" > 0 )		If ( controlvar == 0 )			If ( "uvirith_movableplug_UT".Positioner == 4 ) ;basemant				MessageBox "The elevator is currently at the secret lab. Which floor would you like it to stop at?" "First" "Second" "Third" "Nevermind"				Set controlvar to 1			Elseif ( "uvirith_movableplug_UT".Positioner == 3 ) ;third floor				MessageBox "The elevator is currently on the third floor. Which floor would you like it to stop at?" "Secret Lab" "First" "Second" "Nevermind"				Set controlvar to 2			Elseif ( "uvirith_movableplug_UT".Positioner == 2 ) ;second floor				MessageBox "The elevator is currently on the second floor. Which floor would you like it to stop at?" "Secret Lab" "First" "Third" "Nevermind"				Set controlvar to 3			Elseif ( "uvirith_movableplug_UT".Positioner == 1 ) ;first floor				MessageBox "The elevator is currently on the first floor. Which floor would you like it to stop at?" "Secret Lab" "Second" "Third" "Nevermind"				Set controlvar to 4			Endif		Endif	Else		MessageBox "You need the Tel Uvirith Key to activate this switch."		AddTopic "Tel Uvirith Key"		Return	EndifEndifIf ( controlvar > 0 )	Set Button to GetButtonPressed	If ( Button == -1 )		Return	EndifElse	Set Button to 0EndifIf ( controlvar == 1 ) ;moving plug from basemant	If ( Button == 0 )		Set "uvirith_movableplug_UT".Moving to 13		Set "uvirith_movableplug_UT".toggleSound to 1		Set controlvar to 0	Elseif ( Button == 1 )		Set "uvirith_movableplug_UT".Moving to 14		Set "uvirith_movableplug_UT".toggleSound to 1		Set controlvar to 0	Elseif ( Button == 2 )		Set "uvirith_movableplug_UT".Moving to 15		Set "uvirith_movableplug_UT".toggleSound to 1		Set controlvar to 0	Elseif ( Button == 3 )		Set controlvar to 0	EndifElseif ( controlvar == 2 ) ;moving plug from top floor	If ( Button == 0 )		Set "uvirith_movableplug_UT".Moving to 11		Set "uvirith_movableplug_UT".toggleSound to 1		Set controlvar to 0	Elseif ( Button == 1 )		Set "uvirith_movableplug_UT".Moving to 10		Set "uvirith_movableplug_UT".toggleSound to 1		Set controlvar to 0	Elseif ( Button == 2 )		Set "uvirith_movableplug_UT".Moving to 9		Set "uvirith_movableplug_UT".toggleSound to 1		Set controlvar to 0	Elseif ( Button == 3 )		Set controlvar to 0	EndifElseif ( controlvar == 3 ) ;moving plug from second floor	If ( Button == 0 )		Set "uvirith_movableplug_UT".Moving to 7		Set "uvirith_movableplug_UT".toggleSound to 1		Set controlvar to 0	Elseif ( Button == 1 )		Set "uvirith_movableplug_UT".Moving to 6		Set "uvirith_movableplug_UT".toggleSound to 1		Set controlvar to 0	Elseif ( Button == 2 )		Set "uvirith_movableplug_UT".Moving to 5		Set "uvirith_movableplug_UT".toggleSound to 1		Set controlvar to 0	Elseif ( Button == 3 )		Set controlvar to 0	EndifElseif ( controlvar == 4 ) ;moving plug from first floor	If ( Button == 0 )		Set "uvirith_movableplug_UT".Moving to 1		Set "uvirith_movableplug_UT".toggleSound to 1		Set controlvar to 0	Elseif ( Button == 1 )		Set "uvirith_movableplug_UT".Moving to 2		Set "uvirith_movableplug_UT".toggleSound to 1		Set controlvar to 0	Elseif ( Button == 2 )		Set "uvirith_movableplug_UT".Moving to 3		Set "uvirith_movableplug_UT".toggleSound to 1		Set controlvar to 0	Elseif ( Button == 3 )		Set controlvar to 0	EndifEndif; Moving states: local variable for UT elevator plug; 0 At rest in original position on floor one ( Position 1 ); 1 Moving from first floor to basemant; 2 Moving from first floor to second; 3 Moving from first floor to third; 4 At rest on second floor - ( Position 2 ); 5 Moving from second to third floor; 6 Moving from second to first floor; 7 Moving from second floor to basemant; 8 Set on third floor - ( Position 3 ); 9 Moving from third to second floor; 10 Moving from third to first floor; 11 Moving from third floor to basemant; 12 Set on basemant floor - ( Position 4 ); 13 Moving from basemant to first floor; 14 Moving from basemant to second floor; 15 Moving from basemant to third floorEnd
Begin Uvi_UT_ElevatorPlug; created by Stuporstar; activated by 4 switches in the upper tower, acts like an elevator.; just a note for other modders! make sure a collision wall is placed below the floor when making an "elevator" like this one. It gets really buggy if you let it drop into nothingness.Short PositionerShort MovingShort toggleSoundShort StartPosShort StartPosYFloat TimerIf ( MenuMode == 1 )	ReturnEndifIf ( StartPos == 0 )	Set StartPos to ( GetPos, z )EndifIf ( StartPosY == 0 )	Set StartPosY to ( GetPos, y )EndifIf ( Moving == 0 ) ;first floor	If ( Positioner != 1 )		Set Positioner to 1	Endif	SetPos, z, StartPos	ReturnElseif ( Moving == 4 ) ;second floor	If ( Positioner != 2 )		Set Positioner to 2	Endif	SetPos, z, 1000	ReturnElseif ( Moving == 8 ) ;third floor	If ( Positioner != 3 )		Set Positioner to 3	Endif	SetPos, z, 1250	ReturnElseif ( Moving == 12 ) ;basemant	If ( Positioner != 4 )		Set Positioner to 4	Endif	SetPos, z, -20	ReturnElseif ( Moving == 17 )	Set Moving to 18	ReturnEndifIf ( toggleSound == 1 )	PlaySound "Door Stone Open"	Set toggleSound to 0EndifIf ( Moving == 1 )	MoveWorld Z, -125Elseif ( Moving == 2 )	MoveWorld Z, 125Elseif ( Moving == 3 )	MoveWorld Z, 125Elseif ( Moving == 5 )	MoveWorld Z, 125Elseif ( Moving == 6 )	MoveWorld Z, -125Elseif ( Moving == 7 )	MoveWorld Z, -125Elseif ( Moving == 9 )	MoveWorld Z, -125Elseif ( Moving == 10 )	MoveWorld Z, -125Elseif ( Moving == 11 )	MoveWorld Z, -125Elseif ( Moving == 13 )	MoveWorld Z, 125Elseif ( Moving == 14 )	MoveWorld Z, 125Elseif ( Moving == 15 )	MoveWorld Z, 125;Elseif ( Moving == 16 ) - no longer used;	MoveWorld Y, -75Elseif ( Moving == 18 ) ; used one more time to get plug back into hall for people upgrading from old version	MoveWorld Y, 75EndifIf ( Timer > 10 ) ;twice + half	If ( Moving == 11 ) ;twice + half		Set Moving to 12		Set Timer to 0		Return	Elseif ( Moving == 15 ) ;twice + half		Set Moving to 8		Set Timer to 0		Return	EndifElseif ( Timer > 8 ) ;twice	If ( Moving == 7 ) ;twice		Set Moving to 12		Set Timer to 0		Return	Elseif ( Moving == 14 ) ;twice		Set Moving to 4		Set Timer to 0		Return	EndifElseif ( Timer > 6 ) ;once + half	If ( Moving == 3 ) ;once + half		Set Moving to 8		Set Timer to 0		Return	Elseif ( Moving == 10 ) ;once + half		Set Moving to 0		Set Timer to 0		Return	EndifElseif ( Timer > 4 ) ;once	If ( Moving == 1 ) ;once		Set Moving to 12		Set Timer to 0		Return	Elseif ( Moving == 2 ) ;once		Set Moving to 4		Set Timer to 0		Return	Elseif ( Moving == 6 ) ;once		Set Moving to 0		Set Timer to 0		Return	Elseif ( Moving == 13 ) ;once		Set Moving to 0		Set Timer to 0		Return;	Elseif ( Moving == 16 ) ;out - no longer used;		Set Moving to 17;		Set Timer to 0;		Return	Elseif ( Moving == 18 ) ;in - set one more time		If ( Positioner == 1 )			SetPos, y StartPosY			Set Moving to 0			Set Timer to 0			Return		Elseif ( Positioner == 2 )			SetPos, y StartPosY			Set Moving to 4			Set Timer to 0			Return		Elseif ( Positioner == 3 )			SetPos, y StartPosY			Set Moving to 8			Set Timer to 0			Return		Elseif ( Positioner == 4 )			SetPos, y StartPosY			Set Moving to 12			Set Timer to 0			Return		Endif	EndifElseif ( Timer > 2 ) ;half	If ( Moving == 5 ) ;half		Set Moving to 8		Set Timer to 0		Return	Elseif ( Moving == 9 ) ;half		Set Moving to 4		Set Timer to 0		Return	EndifEndifSet Timer to ( Timer + GetSecondsPassed ); Moving states: local variable for UT elevator plug; 0 At rest in original position on floor one ( Positioner 1 ); 1 Moving from first floor to basemant; 2 Moving from first floor to second; 3 Moving from first floor to third; 4 At rest on second floor - ( Positioner 2 ); 5 Moving from second to third floor; 6 Moving from second to first floor; 7 Moving from second floor to basemant; 8 Set on third floor - ( Positioner 3 ); 9 Moving from third to second floor; 10 Moving from third to first floor; 11 Moving from third floor to basemant; 12 Set on basemant floor - ( Positioner 4 ); 13 Moving from basemant to first floor; 14 Moving from basemant to second floor; 15 Moving from basemant to third floor; 16 Moving out of tunnel when player is levitating - no longer used; 17 Set in out position ( no Position set ) - no longer used, reset for players upgrading from older version; 18 Moving back into tunnel - only used one more time for players upgrading from previous versionsEnd
What actually happens is (only if the ring has never been activated and it's in my inventory) the activator pops up its menu, asking which floor you want to go to. Once a button is pressed, it sets the ring's OnPCEquip to 2 (no matter what choice I make) and I get the message "you can't summon your packguar here". The activator gets stuck on its controlvar, and has to be reset to 0 in the console before it will do anything again, and the movable plug does nothing because it's variables aren't being set.
I'm also going to post another script that once messed with this activator in the same way until I fixed it.
begin BOH_Script_Telvanni;script for inventory itemshort OnPCEquipshort buttonshort statefloat pXfloat pYfloat pZfloat pAlong pcCelllong filenameif ( state != 0 )   ;do nothing hereelseif ( OnPCEquip == 1 )   if ( BOHReloadDetect->GetScale > 2 )  ;the container has been activated this session      BagOfHoldingC_Telvanni->activate      set OnPCEquip to 0   else      MessageBox "You need to summon the bag to restore its magical link. Would you like to do this now?" "Yes" "No"      set OnPCEquip to 2   endifelseif ( OnPCEquip == 2 )   set button to ( GetButtonPressed )   if ( button == -1 )      return   elseif ( button == 0 )      set state to 1      BOHReloadDetect->SetScale 0.1  ;let the container know it needs to return the player to stored position   else  ;cancel      set state to 0   endif   set OnPCEquip to 0endifif ( MenuMode )   returnelseif ( state != 1 )   returnendifset pX to ( player->GetPos x )set pY to ( player->GetPos y )set pZ to ( player->GetPos z )set pA to ( player->GetAngle z )setx pcCell to xPCCellIDsetx filename to xStringBuild "BOHcoords"xFileRewind filenamexFileWriteLong filename pXxFileWriteLong filename pYxFileWriteLong filename pZxFileWriteLong filename pAxFileWriteString filename pcCellStartScript BOH_helper_scrset state to 0end
Now, I don't remember what was wrong with it before I fixed it, because it works perfectly fine now, but I had to fix this script in order to make it stop messing with the same activator. What was happening was the object (in this case a dummy inventory bag) was doing something to the activator so that instead of moving the platform, activating the activator set the state of the bag. Again, by setting OnPCEquip to 2 after the menu button was selected.
I also had another ring in my inventory with a very similar script to the first one I posted (again, not activated in the game at that point). It had the exact same structure and variables, just doing something different in the menu choices. It did not have the same problem as the first script at all.