Thanks in advance for any help I can get with this. I have a hard time asking for help so I am really stuck
I am trying to give a hud and a phone attachment to visitors to my art installation.
I set an invisible prim 7m over the platform at the landing zone with the "giver" script triggered by collision_start.
I put it there because if i landed on it i was getting multiple huds!
It works sometimes and sometimes other times i get no hud.
sometimes it leaves a copy of the hud or the phone on the platform. What am I doing wrong here?
here is the giver script triggered by collision:
default
{
state_entry()
{
llVolumeDetect(TRUE);
}
collision_start(integer NumberOfCollisions)
{
integer i = 0;
for(; i < NumberOfCollisions; i++)
{
integer channel = llRound(llFrand(-1000));
key give_to = llDetectedKey(i);
llSay(0, "Rezzing HUD for " + (string)give_to + " using channel " + (string)channel);
llRezObject("phone3", llGetPos(), ZERO_VECTOR, ZERO_ROTATION, channel);
llRezObject("ss-hud-01we5", llGetPos(), ZERO_VECTOR, ZERO_ROTATION, channel);
llRegionSay(channel, "ATTACH|" + (string)give_to);
}
}
}
and here is the script copied from knowledge base that goes in the attachment and the hud (this one has the experience ticked at the bottom)
// Example script for LSL Experience Tools attachment
// This script runs on an object that is rezzed in-world which gets
// an Experience permissions and then attaches to an AV.
integer listener;
integer msg_channel;
integer log_spam_channel = 0; // Change this or remove llSay() commands
default
{
on_rez(integer start_parameter)
{ // Start listening for a message from rezzer
msg_channel = start_parameter;
llSay(log_spam_channel, "Test HUD has been rezzed");
listener = llListen(start_parameter, "", NULL_KEY, "");
}
listen(integer channel, string name, key id, string text)
{ // Listen for the message from the rezzer with the target agent key
if (channel == msg_channel)
{ // Ask for the experience permission
list msg = llParseString2List(text, ["|"], []);
llSay(log_spam_channel, "Trying experience permissions request to " + llList2String(msg, 1));
llRequestExperiencePermissions((key)llList2String(msg, 1), "");
llListenRemove(listener);
llSetTimerEvent(60.0);
}
}
experience_permissions(key target_id)
{ // Permissions granted, so attach to the AV
llSay(log_spam_channel, "Trying llAttachToAvatarTemp()");
llAttachToAvatarTemp(ATTACH_HUD_CENTER_1);
llSay(log_spam_channel, "After llAttachToAvatarTemp() with llGetAttached() returning " + (string)llGetAttached());
llSetTimerEvent(0.0);
if (llGetAttached() == 0)
{ // Attaching failed
llDie();
}
}
experience_permissions_denied( key agent_id, integer reason )
{ // Permissions denied, so go away
llSay(log_spam_channel, "Denied experience permissions for " + (string)agent_id + " due to reason #" + (string) reason);
llDie();
}
attach( key id )
{ // Attached or detached from the avatar
if (id)
{
llSetTimerEvent(0.0);
llSay(log_spam_channel, "Now attached with a key " + (string)id + " and llGetAttached() returning " + (string)llGetAttached());
// From this point, the object can start doing whatever it needs to do.
state running;
}
else
{
llSay(log_spam_channel, "No longer attached");
llDie();
}
}
timer()
{ // Use a timer to catch no permissions response
llSay(log_spam_channel, "Permissions timer expired");
llDie();
}
}
// This state starts when permissions are granted and the object is properly attached
state running
{
state_entry()
{
llSay(log_spam_channel, "off and running!");
}
attach(key id)
{
if (id == NULL_KEY)
{ // if the object ever un-attaches, make sure it deletes itself
llSay(log_spam_channel, "No longer attached");
llDie();
}
}
}