messages inside messages

Post » Sun Jun 24, 2012 7:11 am

Hi all,

I would like a message box to call another message when the proper box is chosen by the player.
this
 Event OnActivate(ObjectReference triggerRef)string sResultint ibutton = css_craftingtanning_base.Show()if iButton == 0 int ibuttonleatherstrips = css_tanning_LeatherStrips.Show()  if ibuttonleatherstrips == 0 ;craft leather strips from bad leather   sResult = css_check_success(5,12,20,css_tanning_skill,10)   debug.messageBox(sResult)  elseif ibuttonleatherstrips == 1 ;craft leather strips from normal leather   sResult = css_check_success(5,12,20,css_tanning_skill,-10)   debug.messageBox(sResult)  endif   endifEndEvent
Doesn't work, although it shows the css_craftingtanning_base message and options, returns the first sResult string, but without showing the css_tanning_LeatherStrips message.

Any ideas please ?
User avatar
Svenja Hedrich
 
Posts: 3496
Joined: Mon Apr 23, 2007 3:18 pm

Post » Sun Jun 24, 2012 1:55 am

Hi all,

I would like a message box to call another message when the proper box is chosen by the player.
this
Event OnActivate(ObjectReference triggerRef)string sResultint ibutton = css_craftingtanning_base.Show()if iButton == 0int ibuttonleatherstrips = css_tanning_LeatherStrips.Show()  if ibuttonleatherstrips == 0 ;craft leather strips from bad leather   sResult = css_check_success(5,12,20,css_tanning_skill,10)   debug.messageBox(sResult)  elseif ibuttonleatherstrips == 1 ;craft leather strips from normal leather   sResult = css_check_success(5,12,20,css_tanning_skill,-10)   debug.messageBox(sResult)  endif  endifEndEvent
Doesn't work, although it shows the css_craftingtanning_base message and options, returns the first sResult string, but without showing the css_tanning_LeatherStrips message.

Any ideas please ?
I think this is because it's all in a 'OnActivate' event which only fires once. I think you need to do the Skyrim equivalent of a GameMode block so that it checks for the pressed button every single frame, and does the approrpiate action.

Sorry I'm not more help. Still learning Papyrus. :confused:
User avatar
Sudah mati ini Keparat
 
Posts: 3605
Joined: Mon Jul 23, 2007 6:14 pm

Post » Sun Jun 24, 2012 3:28 pm

I've been able to show a message box and get back the button chosen in an OnActivate event. I've never tried showing two message boxes in a row though. Maybe you need to add a Utility.Wait() in there.
User avatar
m Gardner
 
Posts: 3510
Joined: Sun Jun 03, 2007 8:08 pm

Post » Sun Jun 24, 2012 1:07 pm

You use a 'while' loop like so.
I am using a while loop because I want to go back to the first menu sometimes.

If you don't need to, you just put them one after the other. The script will not leave this one iteration until its done.

This is an example of "3" message menus deep:

Spoiler

Event OnActivate(ObjectReference akActionRef)If akActionRef == Game.GetPlayer()  PlayAnimationAndWait("Trigger01","done")  myState = 1  while myState > 0   Button1 = LevelersArrowQ1MSG.Show()   if Button1 == 0;   *Store arrows*	myState = 0	myArrow = LevelersArrowGBL.GetValue() as int	if myArrow == 0	 Game.GetPlayer().RemoveItem(IronArrow, 999, true, ArrowContainerREF)	elseif myArrow == 1	 Game.GetPlayer().RemoveItem(DwarvenArrow, 999, true, ArrowContainerREF)	elseif myArrow == 2	 Game.GetPlayer().RemoveItem(ElvenArrow, 999, true, ArrowContainerREF)	elseif myArrow == 3	 Game.GetPlayer().RemoveItem(ForswornArrow, 999, true, ArrowContainerREF)	endif	LevelersArrowStoreMSG.Show()   elseif Button1 == 1;   *Exclude arrow*	Button2 = LevelersArrowQ2MSG.Show()	myState = 0	if Button2 == 0	 LevelersArrowGBL.SetValue(1)	 LevelersArrowSetMSG.Show()	elseif Button2 == 1	 LevelersArrowGBL.SetValue(2)	 LevelersArrowSetMSG.Show()	elseif Button2 == 2	 LevelersArrowGBL.SetValue(3)	 LevelersArrowSetMSG.Show()	elseif Button2 == 4	 myState = 2	 Button3 = LevelersArrowQ3MSG.Show()	 myState = 0	 if Button3 == 0	  LevelersArrowGBL.SetValue(7)	  LevelersArrowSetMSG.Show()	 elseif Button3 == 1	  LevelersArrowGBL.SetValue(8)	  LevelersArrowSetMSG.Show()	 elseif Button3 == 2	  LevelersArrowGBL.SetValue(9)	  LevelersArrowSetMSG.Show()	 endif	elseif Button2 == 7	 myState = 0	endif   elseif Button1 == 2	myState = 0   endif  endwhileendifendEvent
User avatar
IsAiah AkA figgy
 
Posts: 3398
Joined: Tue Oct 09, 2007 7:43 am

Post » Sun Jun 24, 2012 1:35 pm

Thank you so much for your answers people, especially WillieSea :-)
User avatar
Robyn Howlett
 
Posts: 3332
Joined: Wed Aug 23, 2006 9:01 pm

Post » Sun Jun 24, 2012 3:18 pm

Here's [BORG].ESM's menu skeleton. It loops so pressing only a "Done" button leaves the menu.

Spoiler
ScriptName InfinimenuScript extends Quest  Import DebugImport UtilityInt iVar = 0Int iButton = 0Int iMessageMessage Property InfinimenuOptions01MESG AutoMessage Property InfinimenuOptions02MESG AutoMessage Property InfinimenuOptions03MESG AutoMessage Property InfinimenuOptions04MESG AutoMessage Property InfinimenuOptions05MESG AutoMessage Property InfinimenuOptions06MESG AutoMessage Property InfinimenuOptions07MESG AutoMessage Property InfinimenuOptions08MESG AutoMessage Property InfinimenuOptions09MESG AutoMessage Property InfinimenuOptions10MESG AutoEvent OnInit()	RegisterForSingleUpdate(1)EndEvent;=============================Event OnUpdate()	If Game.GetPlayer().IsEquipped(InfinimenuARMO)		iMessage = 1		RegisterForUpdate(0.1)		Game.GetPlayer().UnequipItem(InfinimenuARMO, False, True)	ElseIf (iMessage == 0)		iVar = Game.GetPlayer().GetItemCount(InfinimenuARMO)		If (iVar > 0)			If (iVar == 1)				If (SKSE.GetValue() > 1)					Game.GetPlayer().RemoveItem(InfinimenuARMO, iVar, True)				EndIf			Else				iVar -= 1				Game.GetPlayer().RemoveItem(InfinimenuARMO, iVar, True)			EndIf		Else			Game.GetPlayer().AddItem(InfinimenuARMO, 1, True)			Stop() ; Start externally with ^		EndIf	ElseIf (iMessage == 1)		iMessage = 0		iButton = InfinimenuOptions01MESG.Show()		If (iButton != -1)			iMessage = 1			If (iButton == 0)			ElseIf (iButton == 1)			ElseIf (iButton == 4)			ElseIf (iButton == 5)			ElseIf (iButton == 6)			ElseIf (iButton == 7)			ElseIf (iButton == 8)				iMessage = 2			ElseIf (iButton == 9)				iMessage = 0				Stop()			EndIf		EndIf	ElseIf (iMessage == 2)		iMessage = 0		iButton = InfinimenuOptions02MESG.Show()		If (iButton != -1)			iMessage = 2			If (iButton == 0)			ElseIf (iButton == 1)			ElseIf (iButton == 2)			ElseIf (iButton == 3)			ElseIf (iButton == 4)			ElseIf (iButton == 5)			ElseIf (iButton == 6)			ElseIf (iButton == 7) ; Back				iMessage = 1			ElseIf (iButton == 8) ; More				iMessage = 3			ElseIf (iButton == 9) ; Done				iMessage = 0				Stop()			EndIf		EndIf	ElseIf (iMessage == 3)		iMessage = 0		iButton = InfinimenuOptions03MESG.Show()		If (iButton != -1)			iMessage = 3			If (iButton == 0)			ElseIf (iButton == 1)			ElseIf (iButton == 2)			ElseIf (iButton == 3)			ElseIf (iButton == 4)			ElseIf (iButton == 5)			ElseIf (iButton == 6)			ElseIf (iButton == 7) ; Back				iMessage = 2			ElseIf (iButton == 8) ; More				iMessage = 4			ElseIf (iButton == 9) ; Done				iMessage = 0				Stop()			EndIf		EndIf	ElseIf (iMessage == 4)		iMessage = 0		iButton = InfinimenuOptions04MESG.Show()		If (iButton != -1)			iMessage = 4			If (iButton == 0)			ElseIf (iButton == 1)			ElseIf (iButton == 2)			ElseIf (iButton == 3)			ElseIf (iButton == 4)			ElseIf (iButton == 5)			ElseIf (iButton == 6)			ElseIf (iButton == 7) ; Back				iMessage = 3			ElseIf (iButton == 8) ; More				iMessage = 5			ElseIf (iButton == 9) ; Done				iMessage = 0				Stop()			EndIf		EndIf	ElseIf (iMessage == 5)		iMessage = 0		iButton = InfinimenuOptions05MESG.Show()		If (iButton != -1)			iMessage = 5			If (iButton == 0)			ElseIf (iButton == 1)			ElseIf (iButton == 2)			ElseIf (iButton == 3)			ElseIf (iButton == 4)			ElseIf (iButton == 5)			ElseIf (iButton == 6)			ElseIf (iButton == 7) ; Back				iMessage = 4			ElseIf (iButton == 8) ; More				iMessage = 6			ElseIf (iButton == 9) ; Done				iMessage = 0				Stop()			EndIf		EndIf	ElseIf (iMessage == 6)		iMessage = 0		iButton = InfinimenuOptions06MESG.Show()		If (iButton != -1)			iMessage = 6			If (iButton == 0)			ElseIf (iButton == 1)			ElseIf (iButton == 2)			ElseIf (iButton == 3)			ElseIf (iButton == 4)			ElseIf (iButton == 5)			ElseIf (iButton == 6)			ElseIf (iButton == 7) ; Back				iMessage = 5			ElseIf (iButton == 8) ; More				iMessage = 7			ElseIf (iButton == 9) ; Done				iMessage = 0				Stop()			EndIf		EndIf	ElseIf (iMessage == 7)		iMessage = 0		iButton = InfinimenuOptions07MESG.Show()		If (!iButton != -1)			iMessage = 7			If (iButton == 0)			ElseIf (iButton == 1)			ElseIf (iButton == 2)			ElseIf (iButton == 3)			ElseIf (iButton == 4)			ElseIf (iButton == 5)			ElseIf (iButton == 6)			ElseIf (iButton == 7) ; Back				iMessage = 6			ElseIf (iButton == 8) ; More				iMessage = 8			ElseIf (iButton == 9) ; Done				iMessage = 0				Stop()			EndIf		EndIf	ElseIf (iMessage == 8)		iMessage = 0		iButton = InfinimenuOptions08MESG.Show()		If (iButton != -1)			iMessage = 8			If (iButton == 0)			ElseIf (iButton == 1)			ElseIf (iButton == 2)			ElseIf (iButton == 3)			ElseIf (iButton == 4)			ElseIf (iButton == 5)			ElseIf (iButton == 6)			ElseIf (iButton == 7) ; Back				iMessage = 7			ElseIf (iButton == 8) ; More				iMessage = 9			ElseIf (iButton == 9) ; Done				iMessage = 0				Stop()			EndIf		EndIf	ElseIf (iMessage == 9)		iButton = InfinimenuOptions09MESG.Show()		If (iButton != -1)			iMessage = 9			If (iButton == 0)			ElseIf (iButton == 1)			ElseIf (iButton == 2)			ElseIf (iButton == 3)			ElseIf (iButton == 4)			ElseIf (iButton == 5)			ElseIf (iButton == 6)			ElseIf (iButton == 7) ; Back				iMessage = 8			ElseIf (iButton == 8) ; More				iMessage = 10			ElseIf (iButton == 9) ; Done				iMessage = 0				Stop()			EndIf		EndIf	ElseIf (iMessage == 10)		iButton = InfinimenuOptions10MESG.Show()		If (iButton != -1)			iMessage = 10			If (iButton == 0)			ElseIf (iButton == 1)			ElseIf (iButton == 2)			ElseIf (iButton == 3)			ElseIf (iButton == 4)			ElseIf (iButton == 5)			ElseIf (iButton == 6)			ElseIf (iButton == 7)			ElseIf (iButton == 8) ; Back				iMessage = 9			ElseIf (iButton == 9) ; Done				iMessage = 0				Stop()			EndIf		EndIf	EndIfEndEvent

Could have more than 100 buttons if needed...

Beware of http://i.imgur.com/xPBTt.jpg happening.
User avatar
Harry-James Payne
 
Posts: 3464
Joined: Wed May 09, 2007 6:58 am


Return to V - Skyrim