Script causing lag, help?

Post » Tue Nov 20, 2012 3:38 pm

So I made this message box script, attached it to a book. (The script may have redundant choices but now it's just for testing)
The script fires but when I press 'Done' and the message box closes Skyrim becomes really laggy every time (goes down to 1 fps) and I have to close it.
Can someone take a look at this and point out what to do?


Spoiler
Scriptname po3MessageBoxChoice extends ObjectReferenceMessage Property po3BackgroundConfig  AutoMessage Property po3GenderConfig  AutoMessage Property po3ChoiceConfig  AutoMessage Property po3KillChoiceConfig  AutoMessage Property po3HuntChoiceConfig  AutoMessage Property po3SaveChoiceConfig  AutoEvent OnRead()	    If Utility.IsInMenuMode()			    Game.DisablePlayerControls(False, False, False, False, False, True)			    Game.EnablePlayerControls(False, False, False, False, False, True)	    EndIf	    Menu()EndEventFunction Menu(Int aiMessage = 0, Int aiButton = 0, Bool abMenu = True)	   While aiMessage			    If aiButton == -1					    Return				    ElseIf aiMessage == 1 ; Main					    aiButton = po3BackgroundConfig.Show()						  If (aiButton == 0)					    aiMessage = 2					    ElseIf (aiButton == 1)					    aiMessage = 2					    ElseIf (aiButton == 2)					    aiMessage = 2					    ElseIf (aiButton == 3)					    aiMessage = 2					    ElseIf (aiButton == 4)					    aiMessage = 2					    ElseIf (aiButton == 5)					    aiMessage = 2					    ElseIf (aiButton == 6)					    aiMessage = 2					    EndIf				    ElseIf aiMessage == 2 ; Page 02					    aiButton = po3GenderConfig.Show()					    If (aiButton == 0)					    aiMessage = 3					    ElseIf (aiButton == 1)					    aiMessage = 3					    EndIf				    ElseIf (aiMessage == 3) ; Page 03					    aiButton = po3ChoiceConfig.Show()						 If (aiButton == 0)					    aiMessage = 4					    ElseIf (aiButton == 1)					    aiMessage = 5					    ElseIf (aiButton == 2)					    aiMessage = 6					    ElseIf (aiButton == 3)					    aiMessage = -1					    EndIf				    ElseIf (aiMessage == 4) ; Page 04					    aiButton =  po3KillChoiceConfig .Show()					    If (aiButton == 0)					    ElseIf (aiButton == 1)					    ElseIf (aiButton == 2) ; Return					    aiMessage = 3					   EndIf				    ElseIf (aiMessage == 5) ; Page 05					    aiButton =  po3HuntChoiceConfig.Show()						 If (aiButton == 0)					    ElseIf (aiButton == 1)					    ElseIf (aiButton == 2)    ; Return			 					    aiMessage = 3					    EndIf				    ElseIf (aiMessage == 6) ; Page 06					    aiButton = po3SaveChoiceConfig.Show()					    If (aiButton == 0)					    ElseIf (aiButton == 1)					    ElseIf (aiButton == 2)    ;Return				   					    aiMessage = 3					    EndIf			    EndIf			    EndWhile	   EndFunction

edited: to fix the missing function defintion
User avatar
James Potter
 
Posts: 3418
Joined: Sat Jul 07, 2007 11:40 am

Post » Tue Nov 20, 2012 6:15 am

Spoiler
ScriptName po3MessageBoxChoice Extends ObjectReferenceMessage Property po3BackgroundConfig AutoMessage Property po3GenderConfig AutoMessage Property po3ChoiceConfig AutoMessage Property po3KillChoiceConfig AutoMessage Property po3HuntChoiceConfig AutoMessage Property po3SaveChoiceConfig AutoEvent OnRead()	If Utility.IsInMenuMode()		Game.DisablePlayerControls(False, False, False, False, False, True)		Game.EnablePlayerControls(False, False, False, False, False, True)	EndIf	Menu(1) ; So it starts in the first menuEndEventFunction Menu(Int aiMessage = 0, Int aiButton = 0, Bool abMenu = True)	While abMenu		If aiButton == -1		ElseIf aiMessage == 1 ; Main			aiButton = po3BackgroundConfig.Show()			If aiButton == 0			ElseIf aiButton == 1			ElseIf aiButton == 2			ElseIf aiButton == 3			ElseIf aiButton == 4			ElseIf aiButton == 5			ElseIf aiButton == 6			ElseIf aiButton == 7			ElseIf aiButton == 8 ; More				aiMessage += 1			ElseIf aiButton == 9 ; Done				abMenu = False			EndIf		ElseIf aiMessage == 2 ; Page 02			aiButton = po3GenderConfig.Show()			If aiButton == 0			ElseIf aiButton == 1			ElseIf aiButton == 2			ElseIf aiButton == 3			ElseIf aiButton == 4			ElseIf aiButton == 5			ElseIf aiButton == 6			ElseIf aiButton == 7 ; Back				aiMessage -= 1			ElseIf aiButton == 8 ; More				aiMessage += 1			ElseIf aiButton == 9 ; Done				abMenu = False			EndIf		ElseIf aiMessage == 3 ; Page 03			aiButton = po3ChoiceConfig.Show()			If aiButton == 0			ElseIf aiButton == 1			ElseIf aiButton == 2			ElseIf aiButton == 3			ElseIf aiButton == 4			ElseIf aiButton == 5			ElseIf aiButton == 6			ElseIf aiButton == 7 ; Back				aiMessage -= 1			ElseIf aiButton == 8 ; More				aiMessage += 1			ElseIf aiButton == 9 ; Done				abMenu = False			EndIf		ElseIf aiMessage == 4 ; Page 04			aiButton =  po3KillChoiceConfig .Show()			If aiButton == 0			ElseIf aiButton == 1			ElseIf aiButton == 2			ElseIf aiButton == 3			ElseIf aiButton == 4			ElseIf aiButton == 5			ElseIf aiButton == 6			ElseIf aiButton == 7 ; Back				aiMessage -= 1			ElseIf aiButton == 8 ; More				aiMessage += 1			ElseIf aiButton == 9 ; Done				abMenu = False			EndIf		ElseIf aiMessage == 5 ; Page 05			aiButton =  po3HuntChoiceConfig.Show()			If aiButton == 0			ElseIf aiButton == 1			ElseIf aiButton == 2			ElseIf aiButton == 3			ElseIf aiButton == 4			ElseIf aiButton == 5			ElseIf aiButton == 6			ElseIf aiButton == 7 ; Back				aiMessage -= 1			ElseIf aiButton == 8 ; More				aiMessage += 1			ElseIf aiButton == 9 ; Done				abMenu = False			EndIf		ElseIf aiMessage == 6 ; Page 06			aiButton = po3SaveChoiceConfig.Show()			If aiButton == 0			ElseIf aiButton == 1			ElseIf aiButton == 2			ElseIf aiButton == 3			ElseIf aiButton == 4			ElseIf aiButton == 5			ElseIf aiButton == 6			ElseIf aiButton == 7 ; 			ElseIf aiButton == 8 ; Back			ElseIf aiButton == 9 ; Done				abMenu = False			EndIf		EndIf	EndWhileEndFunction
Where was the function definition? As that was, there's no way it compiled. You've to exit the while loop, by setting abMenu to false or it'll keep spinning. I'd add ten buttons to each message form and make sure button 9 is "Done" for each page. Even if you don't immediately need all the buttons, you can always hide them as mentioned on the Wiki.

Also, if there's no 0 menu, you'll want to specify where you wanna start via aiMessage.
User avatar
Karine laverre
 
Posts: 3439
Joined: Tue Mar 20, 2007 7:50 am

Post » Tue Nov 20, 2012 6:46 am

Thanks for that, yes it did have a function defined, Menu (), but I suppose I must have accidentally deleted that off while posting it here.
Now there's no more lag :)
User avatar
Racheal Robertson
 
Posts: 3370
Joined: Thu Aug 16, 2007 6:03 pm

Post » Tue Nov 20, 2012 8:12 pm

Cool! :) I suspect the While loop had been left running, somehow. Shouldn't be doing anything in 'Game Mode' so long as abMenu is set to false on the way out.
User avatar
Tasha Clifford
 
Posts: 3295
Joined: Fri Jul 21, 2006 7:08 am


Return to V - Skyrim