I think you're looking at the wrong packet. You should be looking at the definition for IS_BTN:
In the code example you posted you have set the UCID to 255, which means it's displayed to all the players on a host. You need to set it to the specific UCID of the player you want to display the button to.
Note: the UCID is not included in the IS_SPX packet, you need to use the PLID to get that players IS_NPL packet, which contains their UCID.
                
                    
            struct IS_BTN // BuTtoN - button header - followed by 0 to 240 characters
{
	byte	Size;		// 12 + TEXT_SIZE (a multiple of 4)
	byte	Type;		// ISP_BTN
	byte	ReqI;		// non-zero (returned in IS_BTC and IS_BTT packets)
	[b]byte	UCID;		// connection to display the button (0 = local / 255 = all)[/b]
	byte	ClickID;	// button ID (0 to 239)
	byte	Inst;		// some extra flags - see below
	byte	BStyle;		// button style flags - see below
	byte	TypeIn;		// max chars to type in - see below
	byte	L;			// left   : 0 - 200
	byte	T;			// top    : 0 - 200
	byte	W;			// width  : 0 - 200
	byte	H;			// height : 0 - 200
//	char	Text[TEXT_SIZE]; // 0 to 240 characters of text
};In the code example you posted you have set the UCID to 255, which means it's displayed to all the players on a host. You need to set it to the specific UCID of the player you want to display the button to.
Note: the UCID is not included in the IS_SPX packet, you need to use the PLID to get that players IS_NPL packet, which contains their UCID.
