Hey Tristan, So I did a stripped down example. Obviously your scriptcard will generate the weapons and do all that you need it to do but I wanted to show a couple things that might work for you with the reentrant buttons. !script {{
--/|DUMMY VARIABLES FOR THE EXAMPLE
--/|IN YOUR REAL SCRIPT THESE WOULD ALL BE GENERATED
--~|array;define;WeaponArr;Small Wood Blowgun;Medium Wood Bard's Friend;Medium Stone Pick, heavy;Medium Stone Urgrosh, dwarven
--h:WeaponHash("Small Wood Blowgun-weight")|1.00 lbs.
--h:WeaponHash("Small Wood Blowgun-cost")|2.5 cp
--h:WeaponHash("Medium Wood Bard's Friend-weight")|0.50 lbs.
--h:WeaponHash("Medium Wood Bard's Friend-cost")|10 cp
--h:WeaponHash("Medium Stone Pick, heavy-weight")|4.50 lbs.
--h:WeaponHash("Medium Stone Pick, heavy-cost")|6 cp
--h:WeaponHash("Medium Stone Urgrosh, dwarven-weight")|9.00 lbs.
--h:WeaponHash("Medium Stone Urgrosh, dwarven-cost")|37.5 cp
--#title|Re-Entry Whisper Example
--~ts|system;date;getdatetime
--#reentrant|WeaponGeneration[&ts]
--%weapon|foreach;WeaponArr
--+|[rbutton][&weapon]::WhisperDescription;[&weapon][/rbutton]
--%|
--:Done|
--X|
--:WhisperDescription|WeaponName
--#whisper|self
--+DEBUG|Sending Player: [&SendingPlayerName]
--+|[c][b][&reentryval] Description[/b][/c]
--+Weight|[:WeaponHash("[&reentryval]-weight")]
--+Cost|[:WeaponHash("[&reentryval]-cost")]
--^Done|
}} So you can see that all players will get the original Scriptcard output with the buttons but when a player clicks, you can see that --#whisper|self is used to limit the output of the descriptions to just the player that clicked. I added the DEBUG output line with the &SendingPlayerName variable to illustrate that only the clicking player sees the description they clicked. Since you mentioned that variable collision was an issue, I used a timestamp in the --#reentrant parameter to help prevent that. I am guessing that you had a static phrase for --#reentrant| previously, eg. `--#reentrant|WeaponGenerator` and that was keeping variables in the same namespace. With a timestamp, each time you call the ScriptCard it should set reentrant to a unique value to help prevent collisions in the variable stash. Hopefully those things are helpful to you.