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.