|
|
| (One intermediate revision by the same user not shown) |
| Line 2: |
Line 2: |
|
| |
|
| ---- | | ---- |
|
| |
| == Less Laggy Follower ==
| |
| --[[User:Zelena DeCuir|Zelena DeCuir]] 01:13, 24 June 2012 (PDT)
| |
|
| |
| This following is a bit less laggy, as it does not use sensor. This is completelly separate system from previous example.
| |
| <br>
| |
| <lsl>
| |
|
| |
| //FOLLOWER SCRIPT
| |
|
| |
| integer count;
| |
| key followee;
| |
|
| |
|
| |
| position()
| |
| {
| |
| vector pos = llList2Vector(llGetObjectDetails(followee, [OBJECT_POS]),0);
| |
|
| |
|
| |
| llSetPos(pos);
| |
|
| |
| count += 1;
| |
|
| |
| if (count > 50)
| |
| {
| |
| llResetScript();
| |
| // llSay(0,"resetting");
| |
| }
| |
| position2();
| |
| }
| |
|
| |
|
| |
|
| |
| position2()
| |
| {
| |
| vector pos = llList2Vector(llGetObjectDetails(followee, [OBJECT_POS]),0);
| |
|
| |
|
| |
|
| |
|
| |
| if (pos == <0,0,0> | pos.z > 1000 | pos.z < 800 )//this is to ensure some limitation how far the follower is following. In this case the roaming area is at 900m height.
| |
| //So agents below 800 or above 1000ms are not followed. <0,0,0> means the avatar has teleported to other sim.
| |
| {
| |
|
| |
| // llRegionSay(-876543,(string)followee);//as you can see the same channel as tellChannel on the assigner script. This in case some object needs to know we have stopped following and deleted ourselves
| |
| llSleep(1);
| |
| llDie();
| |
| }
| |
|
| |
|
| |
|
| |
| llSetPos(pos);
| |
| count += 1;
| |
|
| |
| position();// yes this script loops between position(); and position2();
| |
|
| |
| }
| |
|
| |
|
| |
| default
| |
| {
| |
| state_entry()
| |
| {
| |
| llSetStatus(STATUS_PHYSICS,FALSE);
| |
| llSetStatus(STATUS_PHANTOM,TRUE);
| |
| llSleep(3);
| |
| llMessageLinked(LINK_THIS,700,"who",""); //asks another script in contents who is wanted to be followed (maybe the other script has a listener, getting the to-be-followed agent from a central server or something)
| |
| // llSay(0,"reseted");
| |
|
| |
| }
| |
|
| |
| link_message(integer sender_num, integer num, string message, key id)
| |
| {
| |
| if (num == 500)//the other script replies, giving us an agentkey to follow
| |
| {
| |
| // llfolloweeSay("I follow: " + (string) message);
| |
| followee = (key)message;
| |
| // llfolloweeSay("I will follow: " + (string) followee);
| |
| // llSleep(1);
| |
| if (followee != "")
| |
| {
| |
| llMessageLinked(LINK_THIS,600,"got it","");//we tell the other script we got the name and we are ready
| |
|
| |
|
| |
| position();
| |
|
| |
| }
| |
| return;
| |
| }
| |
| }
| |
| on_rez(integer start_param)
| |
| {
| |
| llResetScript();
| |
| }
| |
|
| |
|
| |
| }
| |
| </lsl>
| |
| <br>
| |
| And here an example of the other script in the prim contents, that will assign followees
| |
| <br>
| |
| <lsl>
| |
|
| |
|
| |
| // ASSIGNER SCRIPT
| |
|
| |
| string agentkey;
| |
| integer deleteChannel = -4567; // the channel your whatever tells this follower to delete itself
| |
| integer listenID = -97654; // the channel your visitor list send names (to be assigned to be followed) to
| |
| integer tellChannel = -86443; //in case there is some object, who needs to know who we are following, this is the channel for it to listen
| |
|
| |
|
| |
| default
| |
| {
| |
| state_entry()
| |
| {
| |
| agentkey = "";
| |
| llListen(listenID,"",NULL_KEY,"");
| |
|
| |
|
| |
| llSetTimerEvent(5);
| |
| }
| |
| link_message(integer sender_num, integer num, string msg, key id)
| |
| {
| |
| if (num == 700 && msg == "who") //the follower script asks us if we know who to follow
| |
| {
| |
| llMessageLinked(LINK_THIS,500,agentkey, "");
| |
|
| |
| }
| |
|
| |
| if (num == 600 && msg == "got it")//the follower script has told us the agent key is received
| |
| {
| |
| llListenRemove(listenID);//we have all the data we need, no point listening anylonger (less laggy this way)
| |
| llSetTimerEvent(0);
| |
|
| |
| state secondary;
| |
| }
| |
|
| |
| }//link_message end
| |
|
| |
|
| |
| on_rez(integer start_param)
| |
| {
| |
| llResetScript();
| |
| }
| |
|
| |
|
| |
| timer()
| |
| {
| |
| if (agentkey == "")
| |
| {
| |
| llRegionSay(-8765433,"who"); //we repeat this until we know who to follow
| |
| return;
| |
| }
| |
| if (agentkey != "")
| |
| {
| |
|
| |
| llMessageLinked(LINK_THIS,500,agentkey, "");//we pass our knowledge to the other script
| |
|
| |
| llRegionSay(tellChannel,agentkey);//in case your whatever needs to know who we are following
| |
|
| |
| llSleep(6);
| |
| state secondary;
| |
| return;
| |
| }
| |
|
| |
| }
| |
| listen( integer channel, string name, key id, string message )
| |
| {
| |
| if (channel == listenID)
| |
| {
| |
| llListenRemove(listenID);
| |
| // llSay(0,"Listen removed, I´ve heard the command");
| |
| agentkey = message;
| |
| llMessageLinked(LINK_THIS,500, agentkey, "");
| |
| llRegionSay(tellChannel,agentkey);// we've got this one to follow
| |
|
| |
| llSetTimerEvent(5);
| |
| return;
| |
| }
| |
|
| |
|
| |
| }
| |
|
| |
| }
| |
|
| |
|
| |
|
| |
| state secondary
| |
| {
| |
| state_entry()
| |
| {
| |
| llSetTimerEvent(0);
| |
| llListen(deleteChannel,"","","");
| |
| }
| |
|
| |
| listen( integer channel, string name, key id, string message )
| |
| {
| |
| if (channel == deleteChannel && message == agentkey)
| |
| {
| |
|
| |
| llDie();
| |
| }
| |
|
| |
| }
| |
|
| |
|
| |
|
| |
| link_message(integer sender_num, integer num, string msg, key id)
| |
| {
| |
| if (num == 700 && msg == "who") //the follower script asks us if we know who to follow
| |
| {
| |
| llMessageLinked(LINK_THIS,500,agentkey, "");
| |
|
| |
| }
| |
| if (num == 600 && msg == "got it")
| |
| {
| |
| return;
| |
| }
| |
|
| |
|
| |
| }
| |
| on_rez(integer start_param)
| |
| {
| |
| llResetScript();
| |
| }
| |
| }
| |
| </lsl>
| |