<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.secondlife.com/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Ezian+Ecksol</id>
	<title>Second Life Wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.secondlife.com/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Ezian+Ecksol"/>
	<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/wiki/Special:Contributions/Ezian_Ecksol"/>
	<updated>2026-06-19T02:01:18Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.42.1</generator>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=User:Ezian_Ecksol&amp;diff=92709</id>
		<title>User:Ezian Ecksol</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=User:Ezian_Ecksol&amp;diff=92709"/>
		<updated>2008-09-24T18:46:51Z</updated>

		<summary type="html">&lt;p&gt;Ezian Ecksol: /* Some Scripts */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Some Scripts ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Rangefinder&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
// Rangefinder, (c) Ezian Ecksol, open source. keep credits.&lt;br /&gt;
// usage: compile script, drag it to your av inventory.&lt;br /&gt;
// drop this script into 2 objects, click them to hear the distance&lt;br /&gt;
// possible to move the objects and click again.&lt;br /&gt;
&lt;br /&gt;
integer chan = -947836726;&lt;br /&gt;
integer listen_h;&lt;br /&gt;
key target;&lt;br /&gt;
string target_name;&lt;br /&gt;
&lt;br /&gt;
shout() {&lt;br /&gt;
    llRegionSay(chan,&amp;quot;key$&amp;quot;+(string)llGetKey());&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
info() {&lt;br /&gt;
    llSay(0,&amp;quot;Distance to &amp;quot;+target_name+&amp;quot;: &amp;quot;+(string)get_dist()+ &amp;quot;m.\nMove and touch to hear distance again.&amp;quot;); &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
float get_dist() {&lt;br /&gt;
    return llVecDist(llGetPos(),llList2Vector(llGetObjectDetails(target,[OBJECT_POS]),0));&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry() {&lt;br /&gt;
        listen_h = llListen(chan, &amp;quot;&amp;quot;, NULL_KEY, &amp;quot;&amp;quot;);&lt;br /&gt;
        llSetTimerEvent(2.);&lt;br /&gt;
    }&lt;br /&gt;
   &lt;br /&gt;
    on_rez(integer p) {&lt;br /&gt;
        llResetScript();&lt;br /&gt;
    }&lt;br /&gt;
   &lt;br /&gt;
    listen(integer channel, string name, key id, string msg) {&lt;br /&gt;
        if (llGetOwnerKey(id) == llGetOwner()) {&lt;br /&gt;
            list m = llParseString2List(msg, [&amp;quot;$&amp;quot;], []);&lt;br /&gt;
            if (llList2String(m,0) == &amp;quot;key&amp;quot;){&lt;br /&gt;
                llSetTimerEvent(0.);&lt;br /&gt;
                llListenRemove(listen_h);&lt;br /&gt;
                string t = llList2String(m,1);&lt;br /&gt;
                target = (key)t;&lt;br /&gt;
                target_name = llList2String(llGetObjectDetails(target,[OBJECT_NAME]),0);&lt;br /&gt;
                info();&lt;br /&gt;
                shout();&lt;br /&gt;
            }&lt;br /&gt;
        } &lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    touch_start(integer total_number) {&lt;br /&gt;
        if (target != NULL_KEY)&lt;br /&gt;
            info();&lt;br /&gt;
            &lt;br /&gt;
        else&lt;br /&gt;
            llSay(0,&amp;quot;! Not linked&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
   &lt;br /&gt;
    timer() {&lt;br /&gt;
        shout();   &lt;br /&gt;
    }&lt;br /&gt;
} &lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
--[[User:Ezian Ecksol|Ezian Ecksol]] 11:34, 24 September 2008 (PDT)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;CamJumper&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
// CamJumper (Dash)&lt;br /&gt;
// (c) Ezian Ecksol. Use, modify, steal or sale as you like. Keep credits.&lt;br /&gt;
//&lt;br /&gt;
// usage: attach anywhere. Say /1 jc &lt;br /&gt;
// to jump to cam position. works also to neighbour sims.&lt;br /&gt;
// doesnt work most of the time if flying.&lt;br /&gt;
&lt;br /&gt;
integer jump_max=63;&lt;br /&gt;
integer chan = 1;&lt;br /&gt;
key owner;&lt;br /&gt;
&lt;br /&gt;
integer wouldGoOffWorld(vector here, vector there) {&lt;br /&gt;
&lt;br /&gt;
    if (there.x &amp;lt; 0. || there.x &amp;gt;= 256. || there.y &amp;lt; 0. || there.y &amp;gt;= 256.)&lt;br /&gt;
        return llEdgeOfWorld(here, there - here);&lt;br /&gt;
    else&lt;br /&gt;
        return FALSE;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
jumpto(vector to, float time) {&lt;br /&gt;
    vector e; vector from; vector s; float d; integer i; integer j;&lt;br /&gt;
    vector from0;&lt;br /&gt;
    vector region0; vector region;&lt;br /&gt;
    from = llGetPos();&lt;br /&gt;
&lt;br /&gt;
    if (!wouldGoOffWorld(from, to)) {&lt;br /&gt;
&lt;br /&gt;
        region0 = llGetRegionCorner()/256.;&lt;br /&gt;
&lt;br /&gt;
        do {&lt;br /&gt;
            region = llGetRegionCorner()/256.;&lt;br /&gt;
            if (region != region0) {&lt;br /&gt;
                if (region.x &amp;gt; region0.x)&lt;br /&gt;
                    to.x -= 256.;&lt;br /&gt;
                else if (region.x &amp;lt; region0.x)&lt;br /&gt;
                    to.x += 256.;&lt;br /&gt;
                if (region.y &amp;gt; region0.y)&lt;br /&gt;
                    to.y -= 256.;&lt;br /&gt;
                else if (region.y &amp;lt; region0.y)&lt;br /&gt;
                    to.y += 256.;&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            from0 = from;&lt;br /&gt;
            region0 = region;&lt;br /&gt;
            d = llVecDist(from, to);&lt;br /&gt;
            j = (integer)(d / jump_max)+1;&lt;br /&gt;
            e = from + (to - from) / (float)j;&lt;br /&gt;
            llOwnerSay(&amp;quot;j=&amp;quot;+(string)j+&amp;quot;, d=&amp;quot;+(string)d+&amp;quot;, to=&amp;quot;+(string)to);&lt;br /&gt;
             &lt;br /&gt;
            llMoveToTarget(e, time);&lt;br /&gt;
            llSleep(.5);&lt;br /&gt;
&lt;br /&gt;
            from = llGetPos();&lt;br /&gt;
             &lt;br /&gt;
        } while ((llVecDist(from, to) &amp;gt; 3.) &amp;amp;&amp;amp; (llVecDist(from0, from) &amp;gt; 6.));&lt;br /&gt;
        llStopMoveToTarget();&lt;br /&gt;
       &lt;br /&gt;
    } else&lt;br /&gt;
        llOwnerSay(&amp;quot;Destination is - or would cross - off-world.&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
default {&lt;br /&gt;
&lt;br /&gt;
   state_entry() {&lt;br /&gt;
      owner = llGetOwner();&lt;br /&gt;
      llRequestPermissions(owner, PERMISSION_TRACK_CAMERA);&lt;br /&gt;
     &lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   run_time_permissions(integer perm) {&lt;br /&gt;
      if (perm &amp;amp; PERMISSION_TRACK_CAMERA)&lt;br /&gt;
         llListen(chan, &amp;quot;&amp;quot;, owner, &amp;quot;jc&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
      else&lt;br /&gt;
         llOwnerSay(&amp;quot;Did not get permissions, failed.&amp;quot;);&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   on_rez(integer start_param) {&lt;br /&gt;
      llResetScript();&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   listen(integer ch, string name, key id, string msg) {&lt;br /&gt;
      jumpto(llGetCameraPos() + 3.5 * llRot2Fwd(llGetCameraRot()), .05);&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
--[[User:Ezian Ecksol|Ezian Ecksol]] 17:21, 23 September 2008 (PDT)&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Visitor-Detector&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
// Visitor-Detector 0.66&lt;br /&gt;
// (c) Ezian Ecksol. Use, modify, steal or sale as you like. Keep credits.&lt;br /&gt;
&lt;br /&gt;
// modify these values: /////&lt;br /&gt;
float ignore_time = 20.; // avatars visiting the parcel less than this time in seconds will be ignored&lt;br /&gt;
integer print_method = 1; // 0=llSay, 1=llOwnerSay, 2=llInstantMessage&lt;br /&gt;
float loop_time = 2.; // scanner checks every &amp;lt;loop_time&amp;gt; seconds&lt;br /&gt;
//////////////////////////////////&lt;br /&gt;
&lt;br /&gt;
vector parcel0; vector parcel1;&lt;br /&gt;
vector parcel_center; vector parcel_size;&lt;br /&gt;
float detect_range = 96.;&lt;br /&gt;
key owner;&lt;br /&gt;
string parcel;&lt;br /&gt;
list visitors_long;&lt;br /&gt;
list visitors_short;&lt;br /&gt;
integer active;&lt;br /&gt;
&lt;br /&gt;
string getparcelname(vector p) {&lt;br /&gt;
    return llList2String(llGetParcelDetails(p, [PARCEL_DETAILS_NAME]),0);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
getparcelbounds() {&lt;br /&gt;
    vector pos = llGetPos();&lt;br /&gt;
    vector rpos;&lt;br /&gt;
    pos = &amp;lt;llRound(pos.x), llRound(pos.y), 0.&amp;gt;;&lt;br /&gt;
    string name = getparcelname(pos);&lt;br /&gt;
   &lt;br /&gt;
    rpos = pos;&lt;br /&gt;
    do { rpos.x -= 1.; } while ((getparcelname(rpos) == name) &amp;amp;&amp;amp; (rpos.x&amp;gt;=0.));   &lt;br /&gt;
    parcel0.x = rpos.x + 1.;&lt;br /&gt;
   &lt;br /&gt;
    rpos = pos;&lt;br /&gt;
    do { rpos.y -= 1.; } while ((getparcelname(rpos) == name) &amp;amp;&amp;amp; (rpos.y&amp;gt;=0.));   &lt;br /&gt;
    parcel0.y = rpos.y + 1.;&lt;br /&gt;
   &lt;br /&gt;
    rpos = pos;&lt;br /&gt;
    do { rpos.x += 1.; } while ((getparcelname(rpos) == name) &amp;amp;&amp;amp; (rpos.x&amp;lt;256.));   &lt;br /&gt;
    parcel1.x = rpos.x;&lt;br /&gt;
   &lt;br /&gt;
    rpos = pos;&lt;br /&gt;
    do { rpos.y += 1.; } while ((getparcelname(rpos) == name) &amp;amp;&amp;amp; (rpos.y&amp;lt;256.));   &lt;br /&gt;
    parcel1.y = rpos.y;&lt;br /&gt;
   &lt;br /&gt;
    parcel_center = (parcel1 + parcel0) / 2.;&lt;br /&gt;
    parcel_size = parcel1 - parcel0;&lt;br /&gt;
    float c = llPow(parcel_size.x/2.,2.)+llPow(parcel_size.y/2.,2.);&lt;br /&gt;
    float d = detect_range*detect_range;&lt;br /&gt;
    if (c &amp;gt; d)&lt;br /&gt;
        llOwnerSay(&amp;quot;Your parcel is to large to be covered by a 96-m-scanner. Place the detector in the middle of the parcel at ground, but the corners are not covered.&amp;quot;); &lt;br /&gt;
    else {&lt;br /&gt;
        vector dest = &amp;lt;parcel_center.x, parcel_center.y, llGround(parcel_center-llGetPos())+llSqrt(d-c)&amp;gt;;&lt;br /&gt;
        llOwnerSay(&amp;quot;For optimal scanning range at ground, set position of object to: &amp;quot;+Vector2String(dest));&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
string format_2dig(integer i) {&lt;br /&gt;
    if (i&amp;lt;10)&lt;br /&gt;
        return &amp;quot;0&amp;quot;+(string)i;&lt;br /&gt;
    else&lt;br /&gt;
        return (string)i;   &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
string format_timestamp(string ts) {&lt;br /&gt;
    return parcel+&amp;quot;, &amp;quot;+llGetSubString(ts, 0, 9)+&amp;quot;, &amp;quot;+llGetSubString(ts, 11,18)+&amp;quot; GMT&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
string format_seconds(integer s) {   &lt;br /&gt;
    integer m = s / 60;&lt;br /&gt;
    s %= 60;&lt;br /&gt;
   &lt;br /&gt;
    integer h = m / 60;&lt;br /&gt;
    m %= 60;&lt;br /&gt;
   &lt;br /&gt;
    return format_2dig(h)+&amp;quot;:&amp;quot;+format_2dig(m)+&amp;quot;:&amp;quot;+format_2dig(s);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
console(string txt) {&lt;br /&gt;
    if (print_method == 0)&lt;br /&gt;
        llSay(0, txt);&lt;br /&gt;
       &lt;br /&gt;
    else if (print_method == 1)&lt;br /&gt;
        llOwnerSay(txt);&lt;br /&gt;
       &lt;br /&gt;
    else&lt;br /&gt;
        llInstantMessage(owner, txt);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
visitors_left(list v) {&lt;br /&gt;
    integer j = llGetListLength(v);&lt;br /&gt;
    if (j) {&lt;br /&gt;
        integer i;&lt;br /&gt;
        integer tu = llGetUnixTime();&lt;br /&gt;
        for (i=0; i&amp;lt;j; i+=3)&lt;br /&gt;
            console(&amp;quot;&amp;lt;&amp;lt; &amp;quot;+llList2String(v, i)+&amp;quot; left &amp;quot;+parcel+&amp;quot; after &amp;quot;+format_seconds(tu-llList2Integer(v, i+1)));&lt;br /&gt;
    }&lt;br /&gt;
   &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
string Float2String(float num) {&lt;br /&gt;
    list s = llParseString2List((string)(llRound(num*10.)/10.), [&amp;quot;.&amp;quot;], []);&lt;br /&gt;
    return llList2String(s, 0)+&amp;quot;.&amp;quot;+llGetSubString(llList2String(s, 1), 0, 0);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
string Vector2String(vector v) {&lt;br /&gt;
    return &amp;quot;&amp;lt;&amp;quot;+Float2String(v.x)+&amp;quot;, &amp;quot;+Float2String(v.y)+&amp;quot;, &amp;quot;+Float2String(v.z)+&amp;quot;&amp;gt;&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
activate(integer a) {&lt;br /&gt;
    active = a;&lt;br /&gt;
    if (a) {&lt;br /&gt;
        llOwnerSay(&amp;quot;Scans every &amp;quot;+Float2String(loop_time)+&amp;quot;s. Ignores visitors staying less than &amp;quot;+Float2String(ignore_time)+&amp;quot;s.&amp;quot;);&lt;br /&gt;
        llOwnerSay(&amp;quot;Activated: &amp;quot;+format_timestamp(llGetTimestamp()));&lt;br /&gt;
        llSensorRepeat(&amp;quot;&amp;quot;, NULL_KEY, AGENT, detect_range, PI, loop_time);&lt;br /&gt;
   &lt;br /&gt;
    } else {&lt;br /&gt;
        llOwnerSay(&amp;quot;Deactived.&amp;quot;);&lt;br /&gt;
        llSensorRemove();   &lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
default {&lt;br /&gt;
&lt;br /&gt;
    state_entry() {&lt;br /&gt;
        owner = llGetOwner();&lt;br /&gt;
        parcel = &amp;quot;\&amp;quot;&amp;quot;+llList2String(llGetParcelDetails(llGetPos(), [PARCEL_DETAILS_NAME]),0)+&amp;quot;\&amp;quot;&amp;quot;; // +&amp;quot; in &amp;quot;+llGetRegionName();&lt;br /&gt;
       &lt;br /&gt;
        activate(TRUE);&lt;br /&gt;
        llOwnerSay(&amp;quot;Touch to stop or start.&amp;quot;);&lt;br /&gt;
       &lt;br /&gt;
        getparcelbounds();   &lt;br /&gt;
    }&lt;br /&gt;
   &lt;br /&gt;
    touch_start(integer n) {&lt;br /&gt;
        if (llDetectedKey(0) == owner)&lt;br /&gt;
            activate(!active);&lt;br /&gt;
    }&lt;br /&gt;
   &lt;br /&gt;
    on_rez(integer p) {&lt;br /&gt;
        llResetScript();&lt;br /&gt;
    }&lt;br /&gt;
   &lt;br /&gt;
    changed(integer c) {&lt;br /&gt;
        if (c &amp;amp; CHANGED_OWNER) llResetScript();   &lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    sensor(integer n) {&lt;br /&gt;
        integer i; integer j;&lt;br /&gt;
        integer tu = llGetUnixTime();&lt;br /&gt;
        string ts = llGetTimestamp();&lt;br /&gt;
        string dname;&lt;br /&gt;
        list temp;&lt;br /&gt;
        list temp_short = visitors_short;&lt;br /&gt;
        list temp_long = visitors_long;&lt;br /&gt;
        visitors_short = [];&lt;br /&gt;
        visitors_long = [];&lt;br /&gt;
&lt;br /&gt;
        for (i=0; i&amp;lt;n; ++i) {&lt;br /&gt;
           &lt;br /&gt;
            if (llOverMyLand(llDetectedKey(i))) {&lt;br /&gt;
            //vector dpos = llDetectedPos(i);&lt;br /&gt;
            //if ((dpos.x &amp;gt;= parcel0.x) &amp;amp;&amp;amp; (dpos.x &amp;lt; parcel1.x) &amp;amp;&amp;amp; (dpos.y &amp;gt;= parcel0.y) &amp;amp;&amp;amp; (dpos.y &amp;lt; parcel1.y)) {&lt;br /&gt;
                dname = llDetectedName(i);&lt;br /&gt;
           &lt;br /&gt;
                j = llListFindList(temp_long, [dname]);     &lt;br /&gt;
                if (j != -1) {&lt;br /&gt;
                    visitors_long += llList2List(temp_long, j, j+2);&lt;br /&gt;
                    temp_long = llDeleteSubList(temp_long, j, j+2);&lt;br /&gt;
   &lt;br /&gt;
                } else {&lt;br /&gt;
                    j = llListFindList(temp_short, [dname]);&lt;br /&gt;
                     &lt;br /&gt;
                    if (j != -1) {&lt;br /&gt;
                        temp = llList2List(temp_short, j, j+2);&lt;br /&gt;
                       &lt;br /&gt;
                        if ((tu-llList2Integer(temp, 1)) &amp;gt;= ignore_time) {&lt;br /&gt;
                            visitors_long += temp;&lt;br /&gt;
                            console(&amp;quot;&amp;gt;&amp;gt; &amp;quot;+llList2String(temp, 0)+&amp;quot; entered &amp;quot;+format_timestamp(llList2String(temp, 2)));&lt;br /&gt;
&lt;br /&gt;
                        } else {&lt;br /&gt;
                            visitors_short += temp;&lt;br /&gt;
                        }&lt;br /&gt;
                       &lt;br /&gt;
                    } else {&lt;br /&gt;
                        visitors_short += [dname, tu, ts];&lt;br /&gt;
                    }&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
        }   &lt;br /&gt;
        visitors_left(temp_long);   &lt;br /&gt;
    }&lt;br /&gt;
   &lt;br /&gt;
    no_sensor() {&lt;br /&gt;
        visitors_left(visitors_long);&lt;br /&gt;
        visitors_short = [];&lt;br /&gt;
        visitors_long = [];   &lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;1-Prim Digiclock&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;lsl&amp;gt;// 1-Prim Digiclock&lt;br /&gt;
// (c) Ezian Ecksol, open source, keep credits&lt;br /&gt;
//&lt;br /&gt;
// put to object description the GMT offset in hours, e.g 2.5&lt;br /&gt;
// touch to turn on/off&lt;br /&gt;
&lt;br /&gt;
list faces = [3,2.05,.6,  7,.795,0.,  4,-11.5,-0.73,  6,.795,0.,  1,2.05,-0.6];&lt;br /&gt;
key tx = &amp;quot;2b43c7d6-c96a-b5d9-7210-8bc15451252f&amp;quot;;&lt;br /&gt;
float tx_step = 0.0625;&lt;br /&gt;
float tx_step_2;&lt;br /&gt;
float tx_base;&lt;br /&gt;
integer presence0;&lt;br /&gt;
float gmt_offset;&lt;br /&gt;
float clock_cycle;&lt;br /&gt;
float clock_time;&lt;br /&gt;
integer clock_mode = TRUE;&lt;br /&gt;
&lt;br /&gt;
list construct_face(integer f, integer z) { &lt;br /&gt;
    integer i = f*3;&lt;br /&gt;
    return [PRIM_TEXTURE, llList2Integer(faces,i), tx, &lt;br /&gt;
            &amp;lt;llList2Float(faces,i+1), tx_step, 0.0&amp;gt;, &amp;lt;llList2Float(faces,i+2), tx_base-(float)z*tx_step, 0.0&amp;gt;, 0.0]; &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
setprim(integer z1, integer z2, integer z3, integer z4, integer z5) {&lt;br /&gt;
    llSetPrimitiveParams( &lt;br /&gt;
        construct_face(0,z1)+construct_face(1,z2)+&lt;br /&gt;
        construct_face(2,z3)+construct_face(3,z4)+&lt;br /&gt;
        construct_face(4,z5));      &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
clock() {&lt;br /&gt;
    clock_time = llGetGMTclock() + gmt_offset*3600.0;&lt;br /&gt;
    &lt;br /&gt;
    integer s = (integer) clock_time;&lt;br /&gt;
    integer h = (s / 3600) % 24;&lt;br /&gt;
    integer m = s % 3600;&lt;br /&gt;
    m = m / 60; &lt;br /&gt;
   &lt;br /&gt;
    setprim(h/10,h%10,10,m/10,m%10);&lt;br /&gt;
    &lt;br /&gt;
    llResetTime();&lt;br /&gt;
&lt;br /&gt;
    integer w1 = (integer) (clock_time / clock_cycle);&lt;br /&gt;
    float w2 = clock_time - (float)w1 * clock_cycle;&lt;br /&gt;
    llSetTimerEvent(clock_cycle-w2);  &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry() {&lt;br /&gt;
        &lt;br /&gt;
        integer f;&lt;br /&gt;
        integer i;&lt;br /&gt;
        list j;&lt;br /&gt;
        &lt;br /&gt;
        gmt_offset = (float)llGetObjectDesc();&lt;br /&gt;
        &lt;br /&gt;
        tx_step_2 = tx_step / 2.;&lt;br /&gt;
        tx_base = 0.5 - tx_step_2;&lt;br /&gt;
        clock_cycle = 60.0;&lt;br /&gt;
        &lt;br /&gt;
        setprim(11,11,11,11,11);&lt;br /&gt;
        &lt;br /&gt;
        for (i=0; i&amp;lt;15; i+=3) {&lt;br /&gt;
            f = llList2Integer(faces,i);&lt;br /&gt;
            j += [PRIM_GLOW,f,.01, PRIM_COLOR, f, &amp;lt;0., 0., 1.&amp;gt;, 1.];&lt;br /&gt;
            &lt;br /&gt;
        } &lt;br /&gt;
        llSetPrimitiveParams([&lt;br /&gt;
            PRIM_TYPE, PRIM_TYPE_PRISM, 1, &amp;lt;0.2, 0.8, 0.0&amp;gt;, 0.7, &amp;lt;0.0, 0.0, 0.0&amp;gt;, &amp;lt;1.0, 1.0, 0.0&amp;gt;, &amp;lt;0.0, 0.0, 0.0&amp;gt;,&lt;br /&gt;
            PRIM_SIZE, &amp;lt;0.01, 1.777, 0.577&amp;gt;, PRIM_FULLBRIGHT, ALL_SIDES, TRUE, PRIM_COLOR, ALL_SIDES, &amp;lt;0., 0., 1.&amp;gt;, 0.] + j); &lt;br /&gt;
        &lt;br /&gt;
        clock();&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    on_rez(integer p) {&lt;br /&gt;
        llResetScript();&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    touch_start(integer total_number) { &lt;br /&gt;
        if (llGetOwner() == llDetectedKey(0)) {&lt;br /&gt;
            clock_mode = !clock_mode;&lt;br /&gt;
            if (clock_mode) {&lt;br /&gt;
                clock();&lt;br /&gt;
        &lt;br /&gt;
            } else {&lt;br /&gt;
                llSetTimerEvent(0.);&lt;br /&gt;
                setprim(15,15,15,15,15);&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    timer() {&lt;br /&gt;
        clock();            &lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
}&amp;lt;/lsl&amp;gt;&lt;br /&gt;
--[[User:Ezian Ecksol|Ezian Ecksol]] 17:21, 23 September 2008 (PDT)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Cam Lock/Follow&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
// Camstyle, (c) Ezian Ecksol, feel free to copy, steal, modify&lt;br /&gt;
&lt;br /&gt;
// Put script into prim, attach it.&lt;br /&gt;
// usage: position your camera where you like.&lt;br /&gt;
// enter in chan:&lt;br /&gt;
// /1 camstyle follow    &amp;lt;-- camera is fixed, but follows your av&lt;br /&gt;
// /1 camstyle lock      &amp;lt;-- camera is completly locked&lt;br /&gt;
// /1 camstyle           &amp;lt;-- releases cam again &lt;br /&gt;
&lt;br /&gt;
integer chan = 1;&lt;br /&gt;
&lt;br /&gt;
key owner;&lt;br /&gt;
list keywords = [&amp;quot;lock&amp;quot;, &amp;quot;follow&amp;quot;];&lt;br /&gt;
&lt;br /&gt;
cam_style(integer cs) {&lt;br /&gt;
    &lt;br /&gt;
    llRequestPermissions(owner, PERMISSION_CONTROL_CAMERA | PERMISSION_TRACK_CAMERA);&lt;br /&gt;
    llClearCameraParams(); &lt;br /&gt;
        &lt;br /&gt;
    if (!cs)&lt;br /&gt;
        return;&lt;br /&gt;
        &lt;br /&gt;
    vector cpos = llGetCameraPos();&lt;br /&gt;
    list params = [CAMERA_ACTIVE, TRUE, CAMERA_POSITION_LOCKED, TRUE, CAMERA_POSITION_THRESHOLD, 0.5,&lt;br /&gt;
                    CAMERA_FOCUS_THRESHOLD, 0.5, CAMERA_POSITION, cpos];&lt;br /&gt;
        &lt;br /&gt;
    if (cs == 1) &lt;br /&gt;
        params += [&lt;br /&gt;
            CAMERA_DISTANCE, .5, // ( 0.5 to 10) meters&lt;br /&gt;
            CAMERA_BEHINDNESS_LAG, 0.1, // (0 to 3) seconds&lt;br /&gt;
            CAMERA_PITCH, 10.0, // (-45 to 80) degrees&lt;br /&gt;
            CAMERA_FOCUS, cpos + llRot2Fwd(llGetCameraRot()), // region-relative position&lt;br /&gt;
            CAMERA_FOCUS_LAG, 0.1, // (0 to 3) seconds&lt;br /&gt;
            CAMERA_FOCUS_LOCKED, TRUE, // (TRUE or FALSE)&lt;br /&gt;
            CAMERA_POSITION_LAG, 1.0 // (0 to 3) seconds&lt;br /&gt;
        ];&lt;br /&gt;
        &lt;br /&gt;
    else if (cs == 2) &lt;br /&gt;
        params += [&lt;br /&gt;
            CAMERA_FOCUS_LAG, 0.0, // (0 to 3) seconds&lt;br /&gt;
            CAMERA_BEHINDNESS_LAG, 0.5 // (0 to 3) seconds&lt;br /&gt;
&lt;br /&gt;
        ];&lt;br /&gt;
        &lt;br /&gt;
    llSetCameraParams(params);&lt;br /&gt;
}&lt;br /&gt;
        &lt;br /&gt;
        &lt;br /&gt;
        &lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry() {&lt;br /&gt;
        owner = llGetOwner();&lt;br /&gt;
        llListen(chan, &amp;quot;&amp;quot;, owner, &amp;quot;&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    listen(integer channel, string name, key id, string msg) {&lt;br /&gt;
        msg = llToLower(msg);&lt;br /&gt;
        list m = llParseString2List(msg, [&amp;quot; &amp;quot;], []);&lt;br /&gt;
        &lt;br /&gt;
        if (llList2String(m, 0) == &amp;quot;camstyle&amp;quot;) &lt;br /&gt;
            cam_style(llListFindList(keywords, [llList2String(m, 1)]) + 1);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    changed(integer c) {&lt;br /&gt;
        if (c &amp;amp; CHANGED_OWNER)&lt;br /&gt;
            llResetScript();&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
--[[User:Ezian Ecksol|Ezian Ecksol]] 17:21, 23 September 2008 (PDT)&lt;/div&gt;</summary>
		<author><name>Ezian Ecksol</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=User:Ezian_Ecksol&amp;diff=92708</id>
		<title>User:Ezian Ecksol</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=User:Ezian_Ecksol&amp;diff=92708"/>
		<updated>2008-09-24T18:34:42Z</updated>

		<summary type="html">&lt;p&gt;Ezian Ecksol: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Some Scripts ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Rangerfinder&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
// Rangefinder, (c) Ezian Ecksol, open source. keep credits.&lt;br /&gt;
// usage: compile script, drag it to your av inventory.&lt;br /&gt;
// drop this script into 2 objects, click them to hear the distance&lt;br /&gt;
// possible to move the objects and click again.&lt;br /&gt;
&lt;br /&gt;
integer chan = -947836726;&lt;br /&gt;
integer listen_h;&lt;br /&gt;
key target;&lt;br /&gt;
string target_name;&lt;br /&gt;
&lt;br /&gt;
shout() {&lt;br /&gt;
    llRegionSay(chan,&amp;quot;key$&amp;quot;+(string)llGetKey());&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
info() {&lt;br /&gt;
    llSay(0,&amp;quot;Distance to &amp;quot;+target_name+&amp;quot;: &amp;quot;+(string)get_dist()+ &amp;quot;m.\nMove and touch to hear distance again.&amp;quot;); &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
float get_dist() {&lt;br /&gt;
    return llVecDist(llGetPos(),llList2Vector(llGetObjectDetails(target,[OBJECT_POS]),0));&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry() {&lt;br /&gt;
        listen_h = llListen(chan, &amp;quot;&amp;quot;, NULL_KEY, &amp;quot;&amp;quot;);&lt;br /&gt;
        llSetTimerEvent(2.);&lt;br /&gt;
    }&lt;br /&gt;
   &lt;br /&gt;
    on_rez(integer p) {&lt;br /&gt;
        llResetScript();&lt;br /&gt;
    }&lt;br /&gt;
   &lt;br /&gt;
    listen(integer channel, string name, key id, string msg) {&lt;br /&gt;
        if (llGetOwnerKey(id) == llGetOwner()) {&lt;br /&gt;
            list m = llParseString2List(msg, [&amp;quot;$&amp;quot;], []);&lt;br /&gt;
            if (llList2String(m,0) == &amp;quot;key&amp;quot;){&lt;br /&gt;
                llSetTimerEvent(0.);&lt;br /&gt;
                llListenRemove(listen_h);&lt;br /&gt;
                string t = llList2String(m,1);&lt;br /&gt;
                target = (key)t;&lt;br /&gt;
                target_name = llList2String(llGetObjectDetails(target,[OBJECT_NAME]),0);&lt;br /&gt;
                info();&lt;br /&gt;
                shout();&lt;br /&gt;
            }&lt;br /&gt;
        } &lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    touch_start(integer total_number) {&lt;br /&gt;
        if (target != NULL_KEY)&lt;br /&gt;
            info();&lt;br /&gt;
            &lt;br /&gt;
        else&lt;br /&gt;
            llSay(0,&amp;quot;! Not linked&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
   &lt;br /&gt;
    timer() {&lt;br /&gt;
        shout();   &lt;br /&gt;
    }&lt;br /&gt;
} &lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
--[[User:Ezian Ecksol|Ezian Ecksol]] 11:34, 24 September 2008 (PDT)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;CamJumper&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
// CamJumper (Dash)&lt;br /&gt;
// (c) Ezian Ecksol. Use, modify, steal or sale as you like. Keep credits.&lt;br /&gt;
//&lt;br /&gt;
// usage: attach anywhere. Say /1 jc &lt;br /&gt;
// to jump to cam position. works also to neighbour sims.&lt;br /&gt;
// doesnt work most of the time if flying.&lt;br /&gt;
&lt;br /&gt;
integer jump_max=63;&lt;br /&gt;
integer chan = 1;&lt;br /&gt;
key owner;&lt;br /&gt;
&lt;br /&gt;
integer wouldGoOffWorld(vector here, vector there) {&lt;br /&gt;
&lt;br /&gt;
    if (there.x &amp;lt; 0. || there.x &amp;gt;= 256. || there.y &amp;lt; 0. || there.y &amp;gt;= 256.)&lt;br /&gt;
        return llEdgeOfWorld(here, there - here);&lt;br /&gt;
    else&lt;br /&gt;
        return FALSE;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
jumpto(vector to, float time) {&lt;br /&gt;
    vector e; vector from; vector s; float d; integer i; integer j;&lt;br /&gt;
    vector from0;&lt;br /&gt;
    vector region0; vector region;&lt;br /&gt;
    from = llGetPos();&lt;br /&gt;
&lt;br /&gt;
    if (!wouldGoOffWorld(from, to)) {&lt;br /&gt;
&lt;br /&gt;
        region0 = llGetRegionCorner()/256.;&lt;br /&gt;
&lt;br /&gt;
        do {&lt;br /&gt;
            region = llGetRegionCorner()/256.;&lt;br /&gt;
            if (region != region0) {&lt;br /&gt;
                if (region.x &amp;gt; region0.x)&lt;br /&gt;
                    to.x -= 256.;&lt;br /&gt;
                else if (region.x &amp;lt; region0.x)&lt;br /&gt;
                    to.x += 256.;&lt;br /&gt;
                if (region.y &amp;gt; region0.y)&lt;br /&gt;
                    to.y -= 256.;&lt;br /&gt;
                else if (region.y &amp;lt; region0.y)&lt;br /&gt;
                    to.y += 256.;&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            from0 = from;&lt;br /&gt;
            region0 = region;&lt;br /&gt;
            d = llVecDist(from, to);&lt;br /&gt;
            j = (integer)(d / jump_max)+1;&lt;br /&gt;
            e = from + (to - from) / (float)j;&lt;br /&gt;
            llOwnerSay(&amp;quot;j=&amp;quot;+(string)j+&amp;quot;, d=&amp;quot;+(string)d+&amp;quot;, to=&amp;quot;+(string)to);&lt;br /&gt;
             &lt;br /&gt;
            llMoveToTarget(e, time);&lt;br /&gt;
            llSleep(.5);&lt;br /&gt;
&lt;br /&gt;
            from = llGetPos();&lt;br /&gt;
             &lt;br /&gt;
        } while ((llVecDist(from, to) &amp;gt; 3.) &amp;amp;&amp;amp; (llVecDist(from0, from) &amp;gt; 6.));&lt;br /&gt;
        llStopMoveToTarget();&lt;br /&gt;
       &lt;br /&gt;
    } else&lt;br /&gt;
        llOwnerSay(&amp;quot;Destination is - or would cross - off-world.&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
default {&lt;br /&gt;
&lt;br /&gt;
   state_entry() {&lt;br /&gt;
      owner = llGetOwner();&lt;br /&gt;
      llRequestPermissions(owner, PERMISSION_TRACK_CAMERA);&lt;br /&gt;
     &lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   run_time_permissions(integer perm) {&lt;br /&gt;
      if (perm &amp;amp; PERMISSION_TRACK_CAMERA)&lt;br /&gt;
         llListen(chan, &amp;quot;&amp;quot;, owner, &amp;quot;jc&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
      else&lt;br /&gt;
         llOwnerSay(&amp;quot;Did not get permissions, failed.&amp;quot;);&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   on_rez(integer start_param) {&lt;br /&gt;
      llResetScript();&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   listen(integer ch, string name, key id, string msg) {&lt;br /&gt;
      jumpto(llGetCameraPos() + 3.5 * llRot2Fwd(llGetCameraRot()), .05);&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
--[[User:Ezian Ecksol|Ezian Ecksol]] 17:21, 23 September 2008 (PDT)&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Visitor-Detector&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
// Visitor-Detector 0.66&lt;br /&gt;
// (c) Ezian Ecksol. Use, modify, steal or sale as you like. Keep credits.&lt;br /&gt;
&lt;br /&gt;
// modify these values: /////&lt;br /&gt;
float ignore_time = 20.; // avatars visiting the parcel less than this time in seconds will be ignored&lt;br /&gt;
integer print_method = 1; // 0=llSay, 1=llOwnerSay, 2=llInstantMessage&lt;br /&gt;
float loop_time = 2.; // scanner checks every &amp;lt;loop_time&amp;gt; seconds&lt;br /&gt;
//////////////////////////////////&lt;br /&gt;
&lt;br /&gt;
vector parcel0; vector parcel1;&lt;br /&gt;
vector parcel_center; vector parcel_size;&lt;br /&gt;
float detect_range = 96.;&lt;br /&gt;
key owner;&lt;br /&gt;
string parcel;&lt;br /&gt;
list visitors_long;&lt;br /&gt;
list visitors_short;&lt;br /&gt;
integer active;&lt;br /&gt;
&lt;br /&gt;
string getparcelname(vector p) {&lt;br /&gt;
    return llList2String(llGetParcelDetails(p, [PARCEL_DETAILS_NAME]),0);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
getparcelbounds() {&lt;br /&gt;
    vector pos = llGetPos();&lt;br /&gt;
    vector rpos;&lt;br /&gt;
    pos = &amp;lt;llRound(pos.x), llRound(pos.y), 0.&amp;gt;;&lt;br /&gt;
    string name = getparcelname(pos);&lt;br /&gt;
   &lt;br /&gt;
    rpos = pos;&lt;br /&gt;
    do { rpos.x -= 1.; } while ((getparcelname(rpos) == name) &amp;amp;&amp;amp; (rpos.x&amp;gt;=0.));   &lt;br /&gt;
    parcel0.x = rpos.x + 1.;&lt;br /&gt;
   &lt;br /&gt;
    rpos = pos;&lt;br /&gt;
    do { rpos.y -= 1.; } while ((getparcelname(rpos) == name) &amp;amp;&amp;amp; (rpos.y&amp;gt;=0.));   &lt;br /&gt;
    parcel0.y = rpos.y + 1.;&lt;br /&gt;
   &lt;br /&gt;
    rpos = pos;&lt;br /&gt;
    do { rpos.x += 1.; } while ((getparcelname(rpos) == name) &amp;amp;&amp;amp; (rpos.x&amp;lt;256.));   &lt;br /&gt;
    parcel1.x = rpos.x;&lt;br /&gt;
   &lt;br /&gt;
    rpos = pos;&lt;br /&gt;
    do { rpos.y += 1.; } while ((getparcelname(rpos) == name) &amp;amp;&amp;amp; (rpos.y&amp;lt;256.));   &lt;br /&gt;
    parcel1.y = rpos.y;&lt;br /&gt;
   &lt;br /&gt;
    parcel_center = (parcel1 + parcel0) / 2.;&lt;br /&gt;
    parcel_size = parcel1 - parcel0;&lt;br /&gt;
    float c = llPow(parcel_size.x/2.,2.)+llPow(parcel_size.y/2.,2.);&lt;br /&gt;
    float d = detect_range*detect_range;&lt;br /&gt;
    if (c &amp;gt; d)&lt;br /&gt;
        llOwnerSay(&amp;quot;Your parcel is to large to be covered by a 96-m-scanner. Place the detector in the middle of the parcel at ground, but the corners are not covered.&amp;quot;); &lt;br /&gt;
    else {&lt;br /&gt;
        vector dest = &amp;lt;parcel_center.x, parcel_center.y, llGround(parcel_center-llGetPos())+llSqrt(d-c)&amp;gt;;&lt;br /&gt;
        llOwnerSay(&amp;quot;For optimal scanning range at ground, set position of object to: &amp;quot;+Vector2String(dest));&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
string format_2dig(integer i) {&lt;br /&gt;
    if (i&amp;lt;10)&lt;br /&gt;
        return &amp;quot;0&amp;quot;+(string)i;&lt;br /&gt;
    else&lt;br /&gt;
        return (string)i;   &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
string format_timestamp(string ts) {&lt;br /&gt;
    return parcel+&amp;quot;, &amp;quot;+llGetSubString(ts, 0, 9)+&amp;quot;, &amp;quot;+llGetSubString(ts, 11,18)+&amp;quot; GMT&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
string format_seconds(integer s) {   &lt;br /&gt;
    integer m = s / 60;&lt;br /&gt;
    s %= 60;&lt;br /&gt;
   &lt;br /&gt;
    integer h = m / 60;&lt;br /&gt;
    m %= 60;&lt;br /&gt;
   &lt;br /&gt;
    return format_2dig(h)+&amp;quot;:&amp;quot;+format_2dig(m)+&amp;quot;:&amp;quot;+format_2dig(s);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
console(string txt) {&lt;br /&gt;
    if (print_method == 0)&lt;br /&gt;
        llSay(0, txt);&lt;br /&gt;
       &lt;br /&gt;
    else if (print_method == 1)&lt;br /&gt;
        llOwnerSay(txt);&lt;br /&gt;
       &lt;br /&gt;
    else&lt;br /&gt;
        llInstantMessage(owner, txt);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
visitors_left(list v) {&lt;br /&gt;
    integer j = llGetListLength(v);&lt;br /&gt;
    if (j) {&lt;br /&gt;
        integer i;&lt;br /&gt;
        integer tu = llGetUnixTime();&lt;br /&gt;
        for (i=0; i&amp;lt;j; i+=3)&lt;br /&gt;
            console(&amp;quot;&amp;lt;&amp;lt; &amp;quot;+llList2String(v, i)+&amp;quot; left &amp;quot;+parcel+&amp;quot; after &amp;quot;+format_seconds(tu-llList2Integer(v, i+1)));&lt;br /&gt;
    }&lt;br /&gt;
   &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
string Float2String(float num) {&lt;br /&gt;
    list s = llParseString2List((string)(llRound(num*10.)/10.), [&amp;quot;.&amp;quot;], []);&lt;br /&gt;
    return llList2String(s, 0)+&amp;quot;.&amp;quot;+llGetSubString(llList2String(s, 1), 0, 0);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
string Vector2String(vector v) {&lt;br /&gt;
    return &amp;quot;&amp;lt;&amp;quot;+Float2String(v.x)+&amp;quot;, &amp;quot;+Float2String(v.y)+&amp;quot;, &amp;quot;+Float2String(v.z)+&amp;quot;&amp;gt;&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
activate(integer a) {&lt;br /&gt;
    active = a;&lt;br /&gt;
    if (a) {&lt;br /&gt;
        llOwnerSay(&amp;quot;Scans every &amp;quot;+Float2String(loop_time)+&amp;quot;s. Ignores visitors staying less than &amp;quot;+Float2String(ignore_time)+&amp;quot;s.&amp;quot;);&lt;br /&gt;
        llOwnerSay(&amp;quot;Activated: &amp;quot;+format_timestamp(llGetTimestamp()));&lt;br /&gt;
        llSensorRepeat(&amp;quot;&amp;quot;, NULL_KEY, AGENT, detect_range, PI, loop_time);&lt;br /&gt;
   &lt;br /&gt;
    } else {&lt;br /&gt;
        llOwnerSay(&amp;quot;Deactived.&amp;quot;);&lt;br /&gt;
        llSensorRemove();   &lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
default {&lt;br /&gt;
&lt;br /&gt;
    state_entry() {&lt;br /&gt;
        owner = llGetOwner();&lt;br /&gt;
        parcel = &amp;quot;\&amp;quot;&amp;quot;+llList2String(llGetParcelDetails(llGetPos(), [PARCEL_DETAILS_NAME]),0)+&amp;quot;\&amp;quot;&amp;quot;; // +&amp;quot; in &amp;quot;+llGetRegionName();&lt;br /&gt;
       &lt;br /&gt;
        activate(TRUE);&lt;br /&gt;
        llOwnerSay(&amp;quot;Touch to stop or start.&amp;quot;);&lt;br /&gt;
       &lt;br /&gt;
        getparcelbounds();   &lt;br /&gt;
    }&lt;br /&gt;
   &lt;br /&gt;
    touch_start(integer n) {&lt;br /&gt;
        if (llDetectedKey(0) == owner)&lt;br /&gt;
            activate(!active);&lt;br /&gt;
    }&lt;br /&gt;
   &lt;br /&gt;
    on_rez(integer p) {&lt;br /&gt;
        llResetScript();&lt;br /&gt;
    }&lt;br /&gt;
   &lt;br /&gt;
    changed(integer c) {&lt;br /&gt;
        if (c &amp;amp; CHANGED_OWNER) llResetScript();   &lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    sensor(integer n) {&lt;br /&gt;
        integer i; integer j;&lt;br /&gt;
        integer tu = llGetUnixTime();&lt;br /&gt;
        string ts = llGetTimestamp();&lt;br /&gt;
        string dname;&lt;br /&gt;
        list temp;&lt;br /&gt;
        list temp_short = visitors_short;&lt;br /&gt;
        list temp_long = visitors_long;&lt;br /&gt;
        visitors_short = [];&lt;br /&gt;
        visitors_long = [];&lt;br /&gt;
&lt;br /&gt;
        for (i=0; i&amp;lt;n; ++i) {&lt;br /&gt;
           &lt;br /&gt;
            if (llOverMyLand(llDetectedKey(i))) {&lt;br /&gt;
            //vector dpos = llDetectedPos(i);&lt;br /&gt;
            //if ((dpos.x &amp;gt;= parcel0.x) &amp;amp;&amp;amp; (dpos.x &amp;lt; parcel1.x) &amp;amp;&amp;amp; (dpos.y &amp;gt;= parcel0.y) &amp;amp;&amp;amp; (dpos.y &amp;lt; parcel1.y)) {&lt;br /&gt;
                dname = llDetectedName(i);&lt;br /&gt;
           &lt;br /&gt;
                j = llListFindList(temp_long, [dname]);     &lt;br /&gt;
                if (j != -1) {&lt;br /&gt;
                    visitors_long += llList2List(temp_long, j, j+2);&lt;br /&gt;
                    temp_long = llDeleteSubList(temp_long, j, j+2);&lt;br /&gt;
   &lt;br /&gt;
                } else {&lt;br /&gt;
                    j = llListFindList(temp_short, [dname]);&lt;br /&gt;
                     &lt;br /&gt;
                    if (j != -1) {&lt;br /&gt;
                        temp = llList2List(temp_short, j, j+2);&lt;br /&gt;
                       &lt;br /&gt;
                        if ((tu-llList2Integer(temp, 1)) &amp;gt;= ignore_time) {&lt;br /&gt;
                            visitors_long += temp;&lt;br /&gt;
                            console(&amp;quot;&amp;gt;&amp;gt; &amp;quot;+llList2String(temp, 0)+&amp;quot; entered &amp;quot;+format_timestamp(llList2String(temp, 2)));&lt;br /&gt;
&lt;br /&gt;
                        } else {&lt;br /&gt;
                            visitors_short += temp;&lt;br /&gt;
                        }&lt;br /&gt;
                       &lt;br /&gt;
                    } else {&lt;br /&gt;
                        visitors_short += [dname, tu, ts];&lt;br /&gt;
                    }&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
        }   &lt;br /&gt;
        visitors_left(temp_long);   &lt;br /&gt;
    }&lt;br /&gt;
   &lt;br /&gt;
    no_sensor() {&lt;br /&gt;
        visitors_left(visitors_long);&lt;br /&gt;
        visitors_short = [];&lt;br /&gt;
        visitors_long = [];   &lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;1-Prim Digiclock&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;lsl&amp;gt;// 1-Prim Digiclock&lt;br /&gt;
// (c) Ezian Ecksol, open source, keep credits&lt;br /&gt;
//&lt;br /&gt;
// put to object description the GMT offset in hours, e.g 2.5&lt;br /&gt;
// touch to turn on/off&lt;br /&gt;
&lt;br /&gt;
list faces = [3,2.05,.6,  7,.795,0.,  4,-11.5,-0.73,  6,.795,0.,  1,2.05,-0.6];&lt;br /&gt;
key tx = &amp;quot;2b43c7d6-c96a-b5d9-7210-8bc15451252f&amp;quot;;&lt;br /&gt;
float tx_step = 0.0625;&lt;br /&gt;
float tx_step_2;&lt;br /&gt;
float tx_base;&lt;br /&gt;
integer presence0;&lt;br /&gt;
float gmt_offset;&lt;br /&gt;
float clock_cycle;&lt;br /&gt;
float clock_time;&lt;br /&gt;
integer clock_mode = TRUE;&lt;br /&gt;
&lt;br /&gt;
list construct_face(integer f, integer z) { &lt;br /&gt;
    integer i = f*3;&lt;br /&gt;
    return [PRIM_TEXTURE, llList2Integer(faces,i), tx, &lt;br /&gt;
            &amp;lt;llList2Float(faces,i+1), tx_step, 0.0&amp;gt;, &amp;lt;llList2Float(faces,i+2), tx_base-(float)z*tx_step, 0.0&amp;gt;, 0.0]; &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
setprim(integer z1, integer z2, integer z3, integer z4, integer z5) {&lt;br /&gt;
    llSetPrimitiveParams( &lt;br /&gt;
        construct_face(0,z1)+construct_face(1,z2)+&lt;br /&gt;
        construct_face(2,z3)+construct_face(3,z4)+&lt;br /&gt;
        construct_face(4,z5));      &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
clock() {&lt;br /&gt;
    clock_time = llGetGMTclock() + gmt_offset*3600.0;&lt;br /&gt;
    &lt;br /&gt;
    integer s = (integer) clock_time;&lt;br /&gt;
    integer h = (s / 3600) % 24;&lt;br /&gt;
    integer m = s % 3600;&lt;br /&gt;
    m = m / 60; &lt;br /&gt;
   &lt;br /&gt;
    setprim(h/10,h%10,10,m/10,m%10);&lt;br /&gt;
    &lt;br /&gt;
    llResetTime();&lt;br /&gt;
&lt;br /&gt;
    integer w1 = (integer) (clock_time / clock_cycle);&lt;br /&gt;
    float w2 = clock_time - (float)w1 * clock_cycle;&lt;br /&gt;
    llSetTimerEvent(clock_cycle-w2);  &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry() {&lt;br /&gt;
        &lt;br /&gt;
        integer f;&lt;br /&gt;
        integer i;&lt;br /&gt;
        list j;&lt;br /&gt;
        &lt;br /&gt;
        gmt_offset = (float)llGetObjectDesc();&lt;br /&gt;
        &lt;br /&gt;
        tx_step_2 = tx_step / 2.;&lt;br /&gt;
        tx_base = 0.5 - tx_step_2;&lt;br /&gt;
        clock_cycle = 60.0;&lt;br /&gt;
        &lt;br /&gt;
        setprim(11,11,11,11,11);&lt;br /&gt;
        &lt;br /&gt;
        for (i=0; i&amp;lt;15; i+=3) {&lt;br /&gt;
            f = llList2Integer(faces,i);&lt;br /&gt;
            j += [PRIM_GLOW,f,.01, PRIM_COLOR, f, &amp;lt;0., 0., 1.&amp;gt;, 1.];&lt;br /&gt;
            &lt;br /&gt;
        } &lt;br /&gt;
        llSetPrimitiveParams([&lt;br /&gt;
            PRIM_TYPE, PRIM_TYPE_PRISM, 1, &amp;lt;0.2, 0.8, 0.0&amp;gt;, 0.7, &amp;lt;0.0, 0.0, 0.0&amp;gt;, &amp;lt;1.0, 1.0, 0.0&amp;gt;, &amp;lt;0.0, 0.0, 0.0&amp;gt;,&lt;br /&gt;
            PRIM_SIZE, &amp;lt;0.01, 1.777, 0.577&amp;gt;, PRIM_FULLBRIGHT, ALL_SIDES, TRUE, PRIM_COLOR, ALL_SIDES, &amp;lt;0., 0., 1.&amp;gt;, 0.] + j); &lt;br /&gt;
        &lt;br /&gt;
        clock();&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    on_rez(integer p) {&lt;br /&gt;
        llResetScript();&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    touch_start(integer total_number) { &lt;br /&gt;
        if (llGetOwner() == llDetectedKey(0)) {&lt;br /&gt;
            clock_mode = !clock_mode;&lt;br /&gt;
            if (clock_mode) {&lt;br /&gt;
                clock();&lt;br /&gt;
        &lt;br /&gt;
            } else {&lt;br /&gt;
                llSetTimerEvent(0.);&lt;br /&gt;
                setprim(15,15,15,15,15);&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    timer() {&lt;br /&gt;
        clock();            &lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
}&amp;lt;/lsl&amp;gt;&lt;br /&gt;
--[[User:Ezian Ecksol|Ezian Ecksol]] 17:21, 23 September 2008 (PDT)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Cam Lock/Follow&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
// Camstyle, (c) Ezian Ecksol, feel free to copy, steal, modify&lt;br /&gt;
&lt;br /&gt;
// Put script into prim, attach it.&lt;br /&gt;
// usage: position your camera where you like.&lt;br /&gt;
// enter in chan:&lt;br /&gt;
// /1 camstyle follow    &amp;lt;-- camera is fixed, but follows your av&lt;br /&gt;
// /1 camstyle lock      &amp;lt;-- camera is completly locked&lt;br /&gt;
// /1 camstyle           &amp;lt;-- releases cam again &lt;br /&gt;
&lt;br /&gt;
integer chan = 1;&lt;br /&gt;
&lt;br /&gt;
key owner;&lt;br /&gt;
list keywords = [&amp;quot;lock&amp;quot;, &amp;quot;follow&amp;quot;];&lt;br /&gt;
&lt;br /&gt;
cam_style(integer cs) {&lt;br /&gt;
    &lt;br /&gt;
    llRequestPermissions(owner, PERMISSION_CONTROL_CAMERA | PERMISSION_TRACK_CAMERA);&lt;br /&gt;
    llClearCameraParams(); &lt;br /&gt;
        &lt;br /&gt;
    if (!cs)&lt;br /&gt;
        return;&lt;br /&gt;
        &lt;br /&gt;
    vector cpos = llGetCameraPos();&lt;br /&gt;
    list params = [CAMERA_ACTIVE, TRUE, CAMERA_POSITION_LOCKED, TRUE, CAMERA_POSITION_THRESHOLD, 0.5,&lt;br /&gt;
                    CAMERA_FOCUS_THRESHOLD, 0.5, CAMERA_POSITION, cpos];&lt;br /&gt;
        &lt;br /&gt;
    if (cs == 1) &lt;br /&gt;
        params += [&lt;br /&gt;
            CAMERA_DISTANCE, .5, // ( 0.5 to 10) meters&lt;br /&gt;
            CAMERA_BEHINDNESS_LAG, 0.1, // (0 to 3) seconds&lt;br /&gt;
            CAMERA_PITCH, 10.0, // (-45 to 80) degrees&lt;br /&gt;
            CAMERA_FOCUS, cpos + llRot2Fwd(llGetCameraRot()), // region-relative position&lt;br /&gt;
            CAMERA_FOCUS_LAG, 0.1, // (0 to 3) seconds&lt;br /&gt;
            CAMERA_FOCUS_LOCKED, TRUE, // (TRUE or FALSE)&lt;br /&gt;
            CAMERA_POSITION_LAG, 1.0 // (0 to 3) seconds&lt;br /&gt;
        ];&lt;br /&gt;
        &lt;br /&gt;
    else if (cs == 2) &lt;br /&gt;
        params += [&lt;br /&gt;
            CAMERA_FOCUS_LAG, 0.0, // (0 to 3) seconds&lt;br /&gt;
            CAMERA_BEHINDNESS_LAG, 0.5 // (0 to 3) seconds&lt;br /&gt;
&lt;br /&gt;
        ];&lt;br /&gt;
        &lt;br /&gt;
    llSetCameraParams(params);&lt;br /&gt;
}&lt;br /&gt;
        &lt;br /&gt;
        &lt;br /&gt;
        &lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry() {&lt;br /&gt;
        owner = llGetOwner();&lt;br /&gt;
        llListen(chan, &amp;quot;&amp;quot;, owner, &amp;quot;&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    listen(integer channel, string name, key id, string msg) {&lt;br /&gt;
        msg = llToLower(msg);&lt;br /&gt;
        list m = llParseString2List(msg, [&amp;quot; &amp;quot;], []);&lt;br /&gt;
        &lt;br /&gt;
        if (llList2String(m, 0) == &amp;quot;camstyle&amp;quot;) &lt;br /&gt;
            cam_style(llListFindList(keywords, [llList2String(m, 1)]) + 1);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    changed(integer c) {&lt;br /&gt;
        if (c &amp;amp; CHANGED_OWNER)&lt;br /&gt;
            llResetScript();&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
--[[User:Ezian Ecksol|Ezian Ecksol]] 17:21, 23 September 2008 (PDT)&lt;/div&gt;</summary>
		<author><name>Ezian Ecksol</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=User:Ezian_Ecksol&amp;diff=92568</id>
		<title>User:Ezian Ecksol</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=User:Ezian_Ecksol&amp;diff=92568"/>
		<updated>2008-09-24T00:21:48Z</updated>

		<summary type="html">&lt;p&gt;Ezian Ecksol: /* Some Scripts */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Some Scripts ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;CamJumper&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
// CamJumper&lt;br /&gt;
// (c) Ezian Ecksol. Use, modify, steal or sale as you like. Keep credits.&lt;br /&gt;
//&lt;br /&gt;
// usage: attach anywhere. Say /1 jc &lt;br /&gt;
// to jump to cam position. works also to neighbour sims.&lt;br /&gt;
// doesnt work most of the time if flying.&lt;br /&gt;
&lt;br /&gt;
integer jump_max=63;&lt;br /&gt;
integer chan = 1;&lt;br /&gt;
key owner;&lt;br /&gt;
&lt;br /&gt;
integer wouldGoOffWorld(vector here, vector there) {&lt;br /&gt;
&lt;br /&gt;
    if (there.x &amp;lt; 0. || there.x &amp;gt;= 256. || there.y &amp;lt; 0. || there.y &amp;gt;= 256.)&lt;br /&gt;
        return llEdgeOfWorld(here, there - here);&lt;br /&gt;
    else&lt;br /&gt;
        return FALSE;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
jumpto(vector to, float time) {&lt;br /&gt;
    vector e; vector from; vector s; float d; integer i; integer j;&lt;br /&gt;
    vector from0;&lt;br /&gt;
    vector region0; vector region;&lt;br /&gt;
    from = llGetPos();&lt;br /&gt;
&lt;br /&gt;
    if (!wouldGoOffWorld(from, to)) {&lt;br /&gt;
&lt;br /&gt;
        region0 = llGetRegionCorner()/256.;&lt;br /&gt;
&lt;br /&gt;
        do {&lt;br /&gt;
            region = llGetRegionCorner()/256.;&lt;br /&gt;
            if (region != region0) {&lt;br /&gt;
                if (region.x &amp;gt; region0.x)&lt;br /&gt;
                    to.x -= 256.;&lt;br /&gt;
                else if (region.x &amp;lt; region0.x)&lt;br /&gt;
                    to.x += 256.;&lt;br /&gt;
                if (region.y &amp;gt; region0.y)&lt;br /&gt;
                    to.y -= 256.;&lt;br /&gt;
                else if (region.y &amp;lt; region0.y)&lt;br /&gt;
                    to.y += 256.;&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            from0 = from;&lt;br /&gt;
            region0 = region;&lt;br /&gt;
            d = llVecDist(from, to);&lt;br /&gt;
            j = (integer)(d / jump_max)+1;&lt;br /&gt;
            e = from + (to - from) / (float)j;&lt;br /&gt;
            llOwnerSay(&amp;quot;j=&amp;quot;+(string)j+&amp;quot;, d=&amp;quot;+(string)d+&amp;quot;, to=&amp;quot;+(string)to);&lt;br /&gt;
             &lt;br /&gt;
            llMoveToTarget(e, time);&lt;br /&gt;
            llSleep(.5);&lt;br /&gt;
&lt;br /&gt;
            from = llGetPos();&lt;br /&gt;
             &lt;br /&gt;
        } while ((llVecDist(from, to) &amp;gt; 3.) &amp;amp;&amp;amp; (llVecDist(from0, from) &amp;gt; 6.));&lt;br /&gt;
        llStopMoveToTarget();&lt;br /&gt;
       &lt;br /&gt;
    } else&lt;br /&gt;
        llOwnerSay(&amp;quot;Destination is - or would cross - off-world.&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
default {&lt;br /&gt;
&lt;br /&gt;
   state_entry() {&lt;br /&gt;
      owner = llGetOwner();&lt;br /&gt;
      llRequestPermissions(owner, PERMISSION_TRACK_CAMERA);&lt;br /&gt;
     &lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   run_time_permissions(integer perm) {&lt;br /&gt;
      if (perm &amp;amp; PERMISSION_TRACK_CAMERA)&lt;br /&gt;
         llListen(chan, &amp;quot;&amp;quot;, owner, &amp;quot;jc&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
      else&lt;br /&gt;
         llOwnerSay(&amp;quot;Did not get permissions, failed.&amp;quot;);&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   on_rez(integer start_param) {&lt;br /&gt;
      llResetScript();&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   listen(integer ch, string name, key id, string msg) {&lt;br /&gt;
      jumpto(llGetCameraPos() + 3.5 * llRot2Fwd(llGetCameraRot()), .05);&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
--[[User:Ezian Ecksol|Ezian Ecksol]] 17:21, 23 September 2008 (PDT)&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Visitor-Detector&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
// Visitor-Detector 0.66&lt;br /&gt;
// (c) Ezian Ecksol. Use, modify, steal or sale as you like. Keep credits.&lt;br /&gt;
&lt;br /&gt;
// modify these values: /////&lt;br /&gt;
float ignore_time = 20.; // avatars visiting the parcel less than this time in seconds will be ignored&lt;br /&gt;
integer print_method = 1; // 0=llSay, 1=llOwnerSay, 2=llInstantMessage&lt;br /&gt;
float loop_time = 2.; // scanner checks every &amp;lt;loop_time&amp;gt; seconds&lt;br /&gt;
//////////////////////////////////&lt;br /&gt;
&lt;br /&gt;
vector parcel0; vector parcel1;&lt;br /&gt;
vector parcel_center; vector parcel_size;&lt;br /&gt;
float detect_range = 96.;&lt;br /&gt;
key owner;&lt;br /&gt;
string parcel;&lt;br /&gt;
list visitors_long;&lt;br /&gt;
list visitors_short;&lt;br /&gt;
integer active;&lt;br /&gt;
&lt;br /&gt;
string getparcelname(vector p) {&lt;br /&gt;
    return llList2String(llGetParcelDetails(p, [PARCEL_DETAILS_NAME]),0);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
getparcelbounds() {&lt;br /&gt;
    vector pos = llGetPos();&lt;br /&gt;
    vector rpos;&lt;br /&gt;
    pos = &amp;lt;llRound(pos.x), llRound(pos.y), 0.&amp;gt;;&lt;br /&gt;
    string name = getparcelname(pos);&lt;br /&gt;
   &lt;br /&gt;
    rpos = pos;&lt;br /&gt;
    do { rpos.x -= 1.; } while ((getparcelname(rpos) == name) &amp;amp;&amp;amp; (rpos.x&amp;gt;=0.));   &lt;br /&gt;
    parcel0.x = rpos.x + 1.;&lt;br /&gt;
   &lt;br /&gt;
    rpos = pos;&lt;br /&gt;
    do { rpos.y -= 1.; } while ((getparcelname(rpos) == name) &amp;amp;&amp;amp; (rpos.y&amp;gt;=0.));   &lt;br /&gt;
    parcel0.y = rpos.y + 1.;&lt;br /&gt;
   &lt;br /&gt;
    rpos = pos;&lt;br /&gt;
    do { rpos.x += 1.; } while ((getparcelname(rpos) == name) &amp;amp;&amp;amp; (rpos.x&amp;lt;256.));   &lt;br /&gt;
    parcel1.x = rpos.x;&lt;br /&gt;
   &lt;br /&gt;
    rpos = pos;&lt;br /&gt;
    do { rpos.y += 1.; } while ((getparcelname(rpos) == name) &amp;amp;&amp;amp; (rpos.y&amp;lt;256.));   &lt;br /&gt;
    parcel1.y = rpos.y;&lt;br /&gt;
   &lt;br /&gt;
    parcel_center = (parcel1 + parcel0) / 2.;&lt;br /&gt;
    parcel_size = parcel1 - parcel0;&lt;br /&gt;
    float c = llPow(parcel_size.x/2.,2.)+llPow(parcel_size.y/2.,2.);&lt;br /&gt;
    float d = detect_range*detect_range;&lt;br /&gt;
    if (c &amp;gt; d)&lt;br /&gt;
        llOwnerSay(&amp;quot;Your parcel is to large to be covered by a 96-m-scanner. Place the detector in the middle of the parcel at ground, but the corners are not covered.&amp;quot;); &lt;br /&gt;
    else {&lt;br /&gt;
        vector dest = &amp;lt;parcel_center.x, parcel_center.y, llGround(parcel_center-llGetPos())+llSqrt(d-c)&amp;gt;;&lt;br /&gt;
        llOwnerSay(&amp;quot;For optimal scanning range at ground, set position of object to: &amp;quot;+Vector2String(dest));&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
string format_2dig(integer i) {&lt;br /&gt;
    if (i&amp;lt;10)&lt;br /&gt;
        return &amp;quot;0&amp;quot;+(string)i;&lt;br /&gt;
    else&lt;br /&gt;
        return (string)i;   &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
string format_timestamp(string ts) {&lt;br /&gt;
    return parcel+&amp;quot;, &amp;quot;+llGetSubString(ts, 0, 9)+&amp;quot;, &amp;quot;+llGetSubString(ts, 11,18)+&amp;quot; GMT&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
string format_seconds(integer s) {   &lt;br /&gt;
    integer m = s / 60;&lt;br /&gt;
    s %= 60;&lt;br /&gt;
   &lt;br /&gt;
    integer h = m / 60;&lt;br /&gt;
    m %= 60;&lt;br /&gt;
   &lt;br /&gt;
    return format_2dig(h)+&amp;quot;:&amp;quot;+format_2dig(m)+&amp;quot;:&amp;quot;+format_2dig(s);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
console(string txt) {&lt;br /&gt;
    if (print_method == 0)&lt;br /&gt;
        llSay(0, txt);&lt;br /&gt;
       &lt;br /&gt;
    else if (print_method == 1)&lt;br /&gt;
        llOwnerSay(txt);&lt;br /&gt;
       &lt;br /&gt;
    else&lt;br /&gt;
        llInstantMessage(owner, txt);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
visitors_left(list v) {&lt;br /&gt;
    integer j = llGetListLength(v);&lt;br /&gt;
    if (j) {&lt;br /&gt;
        integer i;&lt;br /&gt;
        integer tu = llGetUnixTime();&lt;br /&gt;
        for (i=0; i&amp;lt;j; i+=3)&lt;br /&gt;
            console(&amp;quot;&amp;lt;&amp;lt; &amp;quot;+llList2String(v, i)+&amp;quot; left &amp;quot;+parcel+&amp;quot; after &amp;quot;+format_seconds(tu-llList2Integer(v, i+1)));&lt;br /&gt;
    }&lt;br /&gt;
   &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
string Float2String(float num) {&lt;br /&gt;
    list s = llParseString2List((string)(llRound(num*10.)/10.), [&amp;quot;.&amp;quot;], []);&lt;br /&gt;
    return llList2String(s, 0)+&amp;quot;.&amp;quot;+llGetSubString(llList2String(s, 1), 0, 0);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
string Vector2String(vector v) {&lt;br /&gt;
    return &amp;quot;&amp;lt;&amp;quot;+Float2String(v.x)+&amp;quot;, &amp;quot;+Float2String(v.y)+&amp;quot;, &amp;quot;+Float2String(v.z)+&amp;quot;&amp;gt;&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
activate(integer a) {&lt;br /&gt;
    active = a;&lt;br /&gt;
    if (a) {&lt;br /&gt;
        llOwnerSay(&amp;quot;Scans every &amp;quot;+Float2String(loop_time)+&amp;quot;s. Ignores visitors staying less than &amp;quot;+Float2String(ignore_time)+&amp;quot;s.&amp;quot;);&lt;br /&gt;
        llOwnerSay(&amp;quot;Activated: &amp;quot;+format_timestamp(llGetTimestamp()));&lt;br /&gt;
        llSensorRepeat(&amp;quot;&amp;quot;, NULL_KEY, AGENT, detect_range, PI, loop_time);&lt;br /&gt;
   &lt;br /&gt;
    } else {&lt;br /&gt;
        llOwnerSay(&amp;quot;Deactived.&amp;quot;);&lt;br /&gt;
        llSensorRemove();   &lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
default {&lt;br /&gt;
&lt;br /&gt;
    state_entry() {&lt;br /&gt;
        owner = llGetOwner();&lt;br /&gt;
        parcel = &amp;quot;\&amp;quot;&amp;quot;+llList2String(llGetParcelDetails(llGetPos(), [PARCEL_DETAILS_NAME]),0)+&amp;quot;\&amp;quot;&amp;quot;; // +&amp;quot; in &amp;quot;+llGetRegionName();&lt;br /&gt;
       &lt;br /&gt;
        activate(TRUE);&lt;br /&gt;
        llOwnerSay(&amp;quot;Touch to stop or start.&amp;quot;);&lt;br /&gt;
       &lt;br /&gt;
        getparcelbounds();   &lt;br /&gt;
    }&lt;br /&gt;
   &lt;br /&gt;
    touch_start(integer n) {&lt;br /&gt;
        if (llDetectedKey(0) == owner)&lt;br /&gt;
            activate(!active);&lt;br /&gt;
    }&lt;br /&gt;
   &lt;br /&gt;
    on_rez(integer p) {&lt;br /&gt;
        llResetScript();&lt;br /&gt;
    }&lt;br /&gt;
   &lt;br /&gt;
    changed(integer c) {&lt;br /&gt;
        if (c &amp;amp; CHANGED_OWNER) llResetScript();   &lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    sensor(integer n) {&lt;br /&gt;
        integer i; integer j;&lt;br /&gt;
        integer tu = llGetUnixTime();&lt;br /&gt;
        string ts = llGetTimestamp();&lt;br /&gt;
        string dname;&lt;br /&gt;
        list temp;&lt;br /&gt;
        list temp_short = visitors_short;&lt;br /&gt;
        list temp_long = visitors_long;&lt;br /&gt;
        visitors_short = [];&lt;br /&gt;
        visitors_long = [];&lt;br /&gt;
&lt;br /&gt;
        for (i=0; i&amp;lt;n; ++i) {&lt;br /&gt;
           &lt;br /&gt;
            if (llOverMyLand(llDetectedKey(i))) {&lt;br /&gt;
            //vector dpos = llDetectedPos(i);&lt;br /&gt;
            //if ((dpos.x &amp;gt;= parcel0.x) &amp;amp;&amp;amp; (dpos.x &amp;lt; parcel1.x) &amp;amp;&amp;amp; (dpos.y &amp;gt;= parcel0.y) &amp;amp;&amp;amp; (dpos.y &amp;lt; parcel1.y)) {&lt;br /&gt;
                dname = llDetectedName(i);&lt;br /&gt;
           &lt;br /&gt;
                j = llListFindList(temp_long, [dname]);     &lt;br /&gt;
                if (j != -1) {&lt;br /&gt;
                    visitors_long += llList2List(temp_long, j, j+2);&lt;br /&gt;
                    temp_long = llDeleteSubList(temp_long, j, j+2);&lt;br /&gt;
   &lt;br /&gt;
                } else {&lt;br /&gt;
                    j = llListFindList(temp_short, [dname]);&lt;br /&gt;
                     &lt;br /&gt;
                    if (j != -1) {&lt;br /&gt;
                        temp = llList2List(temp_short, j, j+2);&lt;br /&gt;
                       &lt;br /&gt;
                        if ((tu-llList2Integer(temp, 1)) &amp;gt;= ignore_time) {&lt;br /&gt;
                            visitors_long += temp;&lt;br /&gt;
                            console(&amp;quot;&amp;gt;&amp;gt; &amp;quot;+llList2String(temp, 0)+&amp;quot; entered &amp;quot;+format_timestamp(llList2String(temp, 2)));&lt;br /&gt;
&lt;br /&gt;
                        } else {&lt;br /&gt;
                            visitors_short += temp;&lt;br /&gt;
                        }&lt;br /&gt;
                       &lt;br /&gt;
                    } else {&lt;br /&gt;
                        visitors_short += [dname, tu, ts];&lt;br /&gt;
                    }&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
        }   &lt;br /&gt;
        visitors_left(temp_long);   &lt;br /&gt;
    }&lt;br /&gt;
   &lt;br /&gt;
    no_sensor() {&lt;br /&gt;
        visitors_left(visitors_long);&lt;br /&gt;
        visitors_short = [];&lt;br /&gt;
        visitors_long = [];   &lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;1-Prim Digiclock&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;lsl&amp;gt;// 1-Prim Digiclock&lt;br /&gt;
// (c) Ezian Ecksol, open source, keep credits&lt;br /&gt;
//&lt;br /&gt;
// put to object description the GMT offset in hours, e.g 2.5&lt;br /&gt;
// touch to turn on/off&lt;br /&gt;
&lt;br /&gt;
list faces = [3,2.05,.6,  7,.795,0.,  4,-11.5,-0.73,  6,.795,0.,  1,2.05,-0.6];&lt;br /&gt;
key tx = &amp;quot;2b43c7d6-c96a-b5d9-7210-8bc15451252f&amp;quot;;&lt;br /&gt;
float tx_step = 0.0625;&lt;br /&gt;
float tx_step_2;&lt;br /&gt;
float tx_base;&lt;br /&gt;
integer presence0;&lt;br /&gt;
float gmt_offset;&lt;br /&gt;
float clock_cycle;&lt;br /&gt;
float clock_time;&lt;br /&gt;
integer clock_mode = TRUE;&lt;br /&gt;
&lt;br /&gt;
list construct_face(integer f, integer z) { &lt;br /&gt;
    integer i = f*3;&lt;br /&gt;
    return [PRIM_TEXTURE, llList2Integer(faces,i), tx, &lt;br /&gt;
            &amp;lt;llList2Float(faces,i+1), tx_step, 0.0&amp;gt;, &amp;lt;llList2Float(faces,i+2), tx_base-(float)z*tx_step, 0.0&amp;gt;, 0.0]; &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
setprim(integer z1, integer z2, integer z3, integer z4, integer z5) {&lt;br /&gt;
    llSetPrimitiveParams( &lt;br /&gt;
        construct_face(0,z1)+construct_face(1,z2)+&lt;br /&gt;
        construct_face(2,z3)+construct_face(3,z4)+&lt;br /&gt;
        construct_face(4,z5));      &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
clock() {&lt;br /&gt;
    clock_time = llGetGMTclock() + gmt_offset*3600.0;&lt;br /&gt;
    &lt;br /&gt;
    integer s = (integer) clock_time;&lt;br /&gt;
    integer h = (s / 3600) % 24;&lt;br /&gt;
    integer m = s % 3600;&lt;br /&gt;
    m = m / 60; &lt;br /&gt;
   &lt;br /&gt;
    setprim(h/10,h%10,10,m/10,m%10);&lt;br /&gt;
    &lt;br /&gt;
    llResetTime();&lt;br /&gt;
&lt;br /&gt;
    integer w1 = (integer) (clock_time / clock_cycle);&lt;br /&gt;
    float w2 = clock_time - (float)w1 * clock_cycle;&lt;br /&gt;
    llSetTimerEvent(clock_cycle-w2);  &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry() {&lt;br /&gt;
        &lt;br /&gt;
        integer f;&lt;br /&gt;
        integer i;&lt;br /&gt;
        list j;&lt;br /&gt;
        &lt;br /&gt;
        gmt_offset = (float)llGetObjectDesc();&lt;br /&gt;
        &lt;br /&gt;
        tx_step_2 = tx_step / 2.;&lt;br /&gt;
        tx_base = 0.5 - tx_step_2;&lt;br /&gt;
        clock_cycle = 60.0;&lt;br /&gt;
        &lt;br /&gt;
        setprim(11,11,11,11,11);&lt;br /&gt;
        &lt;br /&gt;
        for (i=0; i&amp;lt;15; i+=3) {&lt;br /&gt;
            f = llList2Integer(faces,i);&lt;br /&gt;
            j += [PRIM_GLOW,f,.01, PRIM_COLOR, f, &amp;lt;0., 0., 1.&amp;gt;, 1.];&lt;br /&gt;
            &lt;br /&gt;
        } &lt;br /&gt;
        llSetPrimitiveParams([&lt;br /&gt;
            PRIM_TYPE, PRIM_TYPE_PRISM, 1, &amp;lt;0.2, 0.8, 0.0&amp;gt;, 0.7, &amp;lt;0.0, 0.0, 0.0&amp;gt;, &amp;lt;1.0, 1.0, 0.0&amp;gt;, &amp;lt;0.0, 0.0, 0.0&amp;gt;,&lt;br /&gt;
            PRIM_SIZE, &amp;lt;0.01, 1.777, 0.577&amp;gt;, PRIM_FULLBRIGHT, ALL_SIDES, TRUE, PRIM_COLOR, ALL_SIDES, &amp;lt;0., 0., 1.&amp;gt;, 0.] + j); &lt;br /&gt;
        &lt;br /&gt;
        clock();&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    on_rez(integer p) {&lt;br /&gt;
        llResetScript();&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    touch_start(integer total_number) { &lt;br /&gt;
        if (llGetOwner() == llDetectedKey(0)) {&lt;br /&gt;
            clock_mode = !clock_mode;&lt;br /&gt;
            if (clock_mode) {&lt;br /&gt;
                clock();&lt;br /&gt;
        &lt;br /&gt;
            } else {&lt;br /&gt;
                llSetTimerEvent(0.);&lt;br /&gt;
                setprim(15,15,15,15,15);&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    timer() {&lt;br /&gt;
        clock();            &lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
}&amp;lt;/lsl&amp;gt;&lt;br /&gt;
--[[User:Ezian Ecksol|Ezian Ecksol]] 17:21, 23 September 2008 (PDT)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Cam Lock/Follow&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
// Camstyle, (c) Ezian Ecksol, feel free to copy, steal, modify&lt;br /&gt;
&lt;br /&gt;
// Put script into prim, attach it.&lt;br /&gt;
// usage: position your camera where you like.&lt;br /&gt;
// enter in chan:&lt;br /&gt;
// /1 camstyle follow    &amp;lt;-- camera is fixed, but follows your av&lt;br /&gt;
// /1 camstyle lock      &amp;lt;-- camera is completly locked&lt;br /&gt;
// /1 camstyle           &amp;lt;-- releases cam again &lt;br /&gt;
&lt;br /&gt;
integer chan = 1;&lt;br /&gt;
&lt;br /&gt;
key owner;&lt;br /&gt;
list keywords = [&amp;quot;lock&amp;quot;, &amp;quot;follow&amp;quot;];&lt;br /&gt;
&lt;br /&gt;
cam_style(integer cs) {&lt;br /&gt;
    &lt;br /&gt;
    llRequestPermissions(owner, PERMISSION_CONTROL_CAMERA | PERMISSION_TRACK_CAMERA);&lt;br /&gt;
    llClearCameraParams(); &lt;br /&gt;
        &lt;br /&gt;
    if (!cs)&lt;br /&gt;
        return;&lt;br /&gt;
        &lt;br /&gt;
    vector cpos = llGetCameraPos();&lt;br /&gt;
    list params = [CAMERA_ACTIVE, TRUE, CAMERA_POSITION_LOCKED, TRUE, CAMERA_POSITION_THRESHOLD, 0.5,&lt;br /&gt;
                    CAMERA_FOCUS_THRESHOLD, 0.5, CAMERA_POSITION, cpos];&lt;br /&gt;
        &lt;br /&gt;
    if (cs == 1) &lt;br /&gt;
        params += [&lt;br /&gt;
            CAMERA_DISTANCE, .5, // ( 0.5 to 10) meters&lt;br /&gt;
            CAMERA_BEHINDNESS_LAG, 0.1, // (0 to 3) seconds&lt;br /&gt;
            CAMERA_PITCH, 10.0, // (-45 to 80) degrees&lt;br /&gt;
            CAMERA_FOCUS, cpos + llRot2Fwd(llGetCameraRot()), // region-relative position&lt;br /&gt;
            CAMERA_FOCUS_LAG, 0.1, // (0 to 3) seconds&lt;br /&gt;
            CAMERA_FOCUS_LOCKED, TRUE, // (TRUE or FALSE)&lt;br /&gt;
            CAMERA_POSITION_LAG, 1.0 // (0 to 3) seconds&lt;br /&gt;
        ];&lt;br /&gt;
        &lt;br /&gt;
    else if (cs == 2) &lt;br /&gt;
        params += [&lt;br /&gt;
            CAMERA_FOCUS_LAG, 0.0, // (0 to 3) seconds&lt;br /&gt;
            CAMERA_BEHINDNESS_LAG, 0.5 // (0 to 3) seconds&lt;br /&gt;
&lt;br /&gt;
        ];&lt;br /&gt;
        &lt;br /&gt;
    llSetCameraParams(params);&lt;br /&gt;
}&lt;br /&gt;
        &lt;br /&gt;
        &lt;br /&gt;
        &lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry() {&lt;br /&gt;
        owner = llGetOwner();&lt;br /&gt;
        llListen(chan, &amp;quot;&amp;quot;, owner, &amp;quot;&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    listen(integer channel, string name, key id, string msg) {&lt;br /&gt;
        msg = llToLower(msg);&lt;br /&gt;
        list m = llParseString2List(msg, [&amp;quot; &amp;quot;], []);&lt;br /&gt;
        &lt;br /&gt;
        if (llList2String(m, 0) == &amp;quot;camstyle&amp;quot;) &lt;br /&gt;
            cam_style(llListFindList(keywords, [llList2String(m, 1)]) + 1);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    changed(integer c) {&lt;br /&gt;
        if (c &amp;amp; CHANGED_OWNER)&lt;br /&gt;
            llResetScript();&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
--[[User:Ezian Ecksol|Ezian Ecksol]] 17:21, 23 September 2008 (PDT)&lt;/div&gt;</summary>
		<author><name>Ezian Ecksol</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=User:Ezian_Ecksol&amp;diff=92567</id>
		<title>User:Ezian Ecksol</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=User:Ezian_Ecksol&amp;diff=92567"/>
		<updated>2008-09-24T00:20:31Z</updated>

		<summary type="html">&lt;p&gt;Ezian Ecksol: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Some Scripts ==&lt;br /&gt;
&lt;br /&gt;
--[[User:Ezian Ecksol|Ezian Ecksol]] 17:20, 23 September 2008 (PDT)&lt;br /&gt;
&#039;&#039;&#039;CamJumper&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
// CamJumper&lt;br /&gt;
// (c) Ezian Ecksol. Use, modify, steal or sale as you like. Keep credits.&lt;br /&gt;
//&lt;br /&gt;
// usage: attach anywhere. Say /1 jc &lt;br /&gt;
// to jump to cam position. works also to neighbour sims.&lt;br /&gt;
// doesnt work most of the time if flying.&lt;br /&gt;
&lt;br /&gt;
integer jump_max=63;&lt;br /&gt;
integer chan = 1;&lt;br /&gt;
key owner;&lt;br /&gt;
&lt;br /&gt;
integer wouldGoOffWorld(vector here, vector there) {&lt;br /&gt;
&lt;br /&gt;
    if (there.x &amp;lt; 0. || there.x &amp;gt;= 256. || there.y &amp;lt; 0. || there.y &amp;gt;= 256.)&lt;br /&gt;
        return llEdgeOfWorld(here, there - here);&lt;br /&gt;
    else&lt;br /&gt;
        return FALSE;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
jumpto(vector to, float time) {&lt;br /&gt;
    vector e; vector from; vector s; float d; integer i; integer j;&lt;br /&gt;
    vector from0;&lt;br /&gt;
    vector region0; vector region;&lt;br /&gt;
    from = llGetPos();&lt;br /&gt;
&lt;br /&gt;
    if (!wouldGoOffWorld(from, to)) {&lt;br /&gt;
&lt;br /&gt;
        region0 = llGetRegionCorner()/256.;&lt;br /&gt;
&lt;br /&gt;
        do {&lt;br /&gt;
            region = llGetRegionCorner()/256.;&lt;br /&gt;
            if (region != region0) {&lt;br /&gt;
                if (region.x &amp;gt; region0.x)&lt;br /&gt;
                    to.x -= 256.;&lt;br /&gt;
                else if (region.x &amp;lt; region0.x)&lt;br /&gt;
                    to.x += 256.;&lt;br /&gt;
                if (region.y &amp;gt; region0.y)&lt;br /&gt;
                    to.y -= 256.;&lt;br /&gt;
                else if (region.y &amp;lt; region0.y)&lt;br /&gt;
                    to.y += 256.;&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            from0 = from;&lt;br /&gt;
            region0 = region;&lt;br /&gt;
            d = llVecDist(from, to);&lt;br /&gt;
            j = (integer)(d / jump_max)+1;&lt;br /&gt;
            e = from + (to - from) / (float)j;&lt;br /&gt;
            llOwnerSay(&amp;quot;j=&amp;quot;+(string)j+&amp;quot;, d=&amp;quot;+(string)d+&amp;quot;, to=&amp;quot;+(string)to);&lt;br /&gt;
             &lt;br /&gt;
            llMoveToTarget(e, time);&lt;br /&gt;
            llSleep(.5);&lt;br /&gt;
&lt;br /&gt;
            from = llGetPos();&lt;br /&gt;
             &lt;br /&gt;
        } while ((llVecDist(from, to) &amp;gt; 3.) &amp;amp;&amp;amp; (llVecDist(from0, from) &amp;gt; 6.));&lt;br /&gt;
        llStopMoveToTarget();&lt;br /&gt;
       &lt;br /&gt;
    } else&lt;br /&gt;
        llOwnerSay(&amp;quot;Destination is - or would cross - off-world.&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
default {&lt;br /&gt;
&lt;br /&gt;
   state_entry() {&lt;br /&gt;
      owner = llGetOwner();&lt;br /&gt;
      llRequestPermissions(owner, PERMISSION_TRACK_CAMERA);&lt;br /&gt;
     &lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   run_time_permissions(integer perm) {&lt;br /&gt;
      if (perm &amp;amp; PERMISSION_TRACK_CAMERA)&lt;br /&gt;
         llListen(chan, &amp;quot;&amp;quot;, owner, &amp;quot;jc&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
      else&lt;br /&gt;
         llOwnerSay(&amp;quot;Did not get permissions, failed.&amp;quot;);&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   on_rez(integer start_param) {&lt;br /&gt;
      llResetScript();&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   listen(integer ch, string name, key id, string msg) {&lt;br /&gt;
      jumpto(llGetCameraPos() + 3.5 * llRot2Fwd(llGetCameraRot()), .05);&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--[[User:Ezian Ecksol|Ezian Ecksol]] 17:20, 23 September 2008 (PDT)&lt;br /&gt;
&#039;&#039;&#039;Visitor-Detector&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
// Visitor-Detector 0.66&lt;br /&gt;
// (c) Ezian Ecksol. Use, modify, steal or sale as you like. Keep credits.&lt;br /&gt;
&lt;br /&gt;
// modify these values: /////&lt;br /&gt;
float ignore_time = 20.; // avatars visiting the parcel less than this time in seconds will be ignored&lt;br /&gt;
integer print_method = 1; // 0=llSay, 1=llOwnerSay, 2=llInstantMessage&lt;br /&gt;
float loop_time = 2.; // scanner checks every &amp;lt;loop_time&amp;gt; seconds&lt;br /&gt;
//////////////////////////////////&lt;br /&gt;
&lt;br /&gt;
vector parcel0; vector parcel1;&lt;br /&gt;
vector parcel_center; vector parcel_size;&lt;br /&gt;
float detect_range = 96.;&lt;br /&gt;
key owner;&lt;br /&gt;
string parcel;&lt;br /&gt;
list visitors_long;&lt;br /&gt;
list visitors_short;&lt;br /&gt;
integer active;&lt;br /&gt;
&lt;br /&gt;
string getparcelname(vector p) {&lt;br /&gt;
    return llList2String(llGetParcelDetails(p, [PARCEL_DETAILS_NAME]),0);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
getparcelbounds() {&lt;br /&gt;
    vector pos = llGetPos();&lt;br /&gt;
    vector rpos;&lt;br /&gt;
    pos = &amp;lt;llRound(pos.x), llRound(pos.y), 0.&amp;gt;;&lt;br /&gt;
    string name = getparcelname(pos);&lt;br /&gt;
   &lt;br /&gt;
    rpos = pos;&lt;br /&gt;
    do { rpos.x -= 1.; } while ((getparcelname(rpos) == name) &amp;amp;&amp;amp; (rpos.x&amp;gt;=0.));   &lt;br /&gt;
    parcel0.x = rpos.x + 1.;&lt;br /&gt;
   &lt;br /&gt;
    rpos = pos;&lt;br /&gt;
    do { rpos.y -= 1.; } while ((getparcelname(rpos) == name) &amp;amp;&amp;amp; (rpos.y&amp;gt;=0.));   &lt;br /&gt;
    parcel0.y = rpos.y + 1.;&lt;br /&gt;
   &lt;br /&gt;
    rpos = pos;&lt;br /&gt;
    do { rpos.x += 1.; } while ((getparcelname(rpos) == name) &amp;amp;&amp;amp; (rpos.x&amp;lt;256.));   &lt;br /&gt;
    parcel1.x = rpos.x;&lt;br /&gt;
   &lt;br /&gt;
    rpos = pos;&lt;br /&gt;
    do { rpos.y += 1.; } while ((getparcelname(rpos) == name) &amp;amp;&amp;amp; (rpos.y&amp;lt;256.));   &lt;br /&gt;
    parcel1.y = rpos.y;&lt;br /&gt;
   &lt;br /&gt;
    parcel_center = (parcel1 + parcel0) / 2.;&lt;br /&gt;
    parcel_size = parcel1 - parcel0;&lt;br /&gt;
    float c = llPow(parcel_size.x/2.,2.)+llPow(parcel_size.y/2.,2.);&lt;br /&gt;
    float d = detect_range*detect_range;&lt;br /&gt;
    if (c &amp;gt; d)&lt;br /&gt;
        llOwnerSay(&amp;quot;Your parcel is to large to be covered by a 96-m-scanner. Place the detector in the middle of the parcel at ground, but the corners are not covered.&amp;quot;); &lt;br /&gt;
    else {&lt;br /&gt;
        vector dest = &amp;lt;parcel_center.x, parcel_center.y, llGround(parcel_center-llGetPos())+llSqrt(d-c)&amp;gt;;&lt;br /&gt;
        llOwnerSay(&amp;quot;For optimal scanning range at ground, set position of object to: &amp;quot;+Vector2String(dest));&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
string format_2dig(integer i) {&lt;br /&gt;
    if (i&amp;lt;10)&lt;br /&gt;
        return &amp;quot;0&amp;quot;+(string)i;&lt;br /&gt;
    else&lt;br /&gt;
        return (string)i;   &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
string format_timestamp(string ts) {&lt;br /&gt;
    return parcel+&amp;quot;, &amp;quot;+llGetSubString(ts, 0, 9)+&amp;quot;, &amp;quot;+llGetSubString(ts, 11,18)+&amp;quot; GMT&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
string format_seconds(integer s) {   &lt;br /&gt;
    integer m = s / 60;&lt;br /&gt;
    s %= 60;&lt;br /&gt;
   &lt;br /&gt;
    integer h = m / 60;&lt;br /&gt;
    m %= 60;&lt;br /&gt;
   &lt;br /&gt;
    return format_2dig(h)+&amp;quot;:&amp;quot;+format_2dig(m)+&amp;quot;:&amp;quot;+format_2dig(s);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
console(string txt) {&lt;br /&gt;
    if (print_method == 0)&lt;br /&gt;
        llSay(0, txt);&lt;br /&gt;
       &lt;br /&gt;
    else if (print_method == 1)&lt;br /&gt;
        llOwnerSay(txt);&lt;br /&gt;
       &lt;br /&gt;
    else&lt;br /&gt;
        llInstantMessage(owner, txt);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
visitors_left(list v) {&lt;br /&gt;
    integer j = llGetListLength(v);&lt;br /&gt;
    if (j) {&lt;br /&gt;
        integer i;&lt;br /&gt;
        integer tu = llGetUnixTime();&lt;br /&gt;
        for (i=0; i&amp;lt;j; i+=3)&lt;br /&gt;
            console(&amp;quot;&amp;lt;&amp;lt; &amp;quot;+llList2String(v, i)+&amp;quot; left &amp;quot;+parcel+&amp;quot; after &amp;quot;+format_seconds(tu-llList2Integer(v, i+1)));&lt;br /&gt;
    }&lt;br /&gt;
   &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
string Float2String(float num) {&lt;br /&gt;
    list s = llParseString2List((string)(llRound(num*10.)/10.), [&amp;quot;.&amp;quot;], []);&lt;br /&gt;
    return llList2String(s, 0)+&amp;quot;.&amp;quot;+llGetSubString(llList2String(s, 1), 0, 0);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
string Vector2String(vector v) {&lt;br /&gt;
    return &amp;quot;&amp;lt;&amp;quot;+Float2String(v.x)+&amp;quot;, &amp;quot;+Float2String(v.y)+&amp;quot;, &amp;quot;+Float2String(v.z)+&amp;quot;&amp;gt;&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
activate(integer a) {&lt;br /&gt;
    active = a;&lt;br /&gt;
    if (a) {&lt;br /&gt;
        llOwnerSay(&amp;quot;Scans every &amp;quot;+Float2String(loop_time)+&amp;quot;s. Ignores visitors staying less than &amp;quot;+Float2String(ignore_time)+&amp;quot;s.&amp;quot;);&lt;br /&gt;
        llOwnerSay(&amp;quot;Activated: &amp;quot;+format_timestamp(llGetTimestamp()));&lt;br /&gt;
        llSensorRepeat(&amp;quot;&amp;quot;, NULL_KEY, AGENT, detect_range, PI, loop_time);&lt;br /&gt;
   &lt;br /&gt;
    } else {&lt;br /&gt;
        llOwnerSay(&amp;quot;Deactived.&amp;quot;);&lt;br /&gt;
        llSensorRemove();   &lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
default {&lt;br /&gt;
&lt;br /&gt;
    state_entry() {&lt;br /&gt;
        owner = llGetOwner();&lt;br /&gt;
        parcel = &amp;quot;\&amp;quot;&amp;quot;+llList2String(llGetParcelDetails(llGetPos(), [PARCEL_DETAILS_NAME]),0)+&amp;quot;\&amp;quot;&amp;quot;; // +&amp;quot; in &amp;quot;+llGetRegionName();&lt;br /&gt;
       &lt;br /&gt;
        activate(TRUE);&lt;br /&gt;
        llOwnerSay(&amp;quot;Touch to stop or start.&amp;quot;);&lt;br /&gt;
       &lt;br /&gt;
        getparcelbounds();   &lt;br /&gt;
    }&lt;br /&gt;
   &lt;br /&gt;
    touch_start(integer n) {&lt;br /&gt;
        if (llDetectedKey(0) == owner)&lt;br /&gt;
            activate(!active);&lt;br /&gt;
    }&lt;br /&gt;
   &lt;br /&gt;
    on_rez(integer p) {&lt;br /&gt;
        llResetScript();&lt;br /&gt;
    }&lt;br /&gt;
   &lt;br /&gt;
    changed(integer c) {&lt;br /&gt;
        if (c &amp;amp; CHANGED_OWNER) llResetScript();   &lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    sensor(integer n) {&lt;br /&gt;
        integer i; integer j;&lt;br /&gt;
        integer tu = llGetUnixTime();&lt;br /&gt;
        string ts = llGetTimestamp();&lt;br /&gt;
        string dname;&lt;br /&gt;
        list temp;&lt;br /&gt;
        list temp_short = visitors_short;&lt;br /&gt;
        list temp_long = visitors_long;&lt;br /&gt;
        visitors_short = [];&lt;br /&gt;
        visitors_long = [];&lt;br /&gt;
&lt;br /&gt;
        for (i=0; i&amp;lt;n; ++i) {&lt;br /&gt;
           &lt;br /&gt;
            if (llOverMyLand(llDetectedKey(i))) {&lt;br /&gt;
            //vector dpos = llDetectedPos(i);&lt;br /&gt;
            //if ((dpos.x &amp;gt;= parcel0.x) &amp;amp;&amp;amp; (dpos.x &amp;lt; parcel1.x) &amp;amp;&amp;amp; (dpos.y &amp;gt;= parcel0.y) &amp;amp;&amp;amp; (dpos.y &amp;lt; parcel1.y)) {&lt;br /&gt;
                dname = llDetectedName(i);&lt;br /&gt;
           &lt;br /&gt;
                j = llListFindList(temp_long, [dname]);     &lt;br /&gt;
                if (j != -1) {&lt;br /&gt;
                    visitors_long += llList2List(temp_long, j, j+2);&lt;br /&gt;
                    temp_long = llDeleteSubList(temp_long, j, j+2);&lt;br /&gt;
   &lt;br /&gt;
                } else {&lt;br /&gt;
                    j = llListFindList(temp_short, [dname]);&lt;br /&gt;
                     &lt;br /&gt;
                    if (j != -1) {&lt;br /&gt;
                        temp = llList2List(temp_short, j, j+2);&lt;br /&gt;
                       &lt;br /&gt;
                        if ((tu-llList2Integer(temp, 1)) &amp;gt;= ignore_time) {&lt;br /&gt;
                            visitors_long += temp;&lt;br /&gt;
                            console(&amp;quot;&amp;gt;&amp;gt; &amp;quot;+llList2String(temp, 0)+&amp;quot; entered &amp;quot;+format_timestamp(llList2String(temp, 2)));&lt;br /&gt;
&lt;br /&gt;
                        } else {&lt;br /&gt;
                            visitors_short += temp;&lt;br /&gt;
                        }&lt;br /&gt;
                       &lt;br /&gt;
                    } else {&lt;br /&gt;
                        visitors_short += [dname, tu, ts];&lt;br /&gt;
                    }&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
        }   &lt;br /&gt;
        visitors_left(temp_long);   &lt;br /&gt;
    }&lt;br /&gt;
   &lt;br /&gt;
    no_sensor() {&lt;br /&gt;
        visitors_left(visitors_long);&lt;br /&gt;
        visitors_short = [];&lt;br /&gt;
        visitors_long = [];   &lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
--[[User:Ezian Ecksol|Ezian Ecksol]] 17:20, 23 September 2008 (PDT)&lt;br /&gt;
&#039;&#039;&#039;1-Prim Digiclock&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;lsl&amp;gt;// 1-Prim Digiclock&lt;br /&gt;
// (c) Ezian Ecksol, open source, keep credits&lt;br /&gt;
//&lt;br /&gt;
// put to object description the GMT offset in hours, e.g 2.5&lt;br /&gt;
// touch to turn on/off&lt;br /&gt;
&lt;br /&gt;
list faces = [3,2.05,.6,  7,.795,0.,  4,-11.5,-0.73,  6,.795,0.,  1,2.05,-0.6];&lt;br /&gt;
key tx = &amp;quot;2b43c7d6-c96a-b5d9-7210-8bc15451252f&amp;quot;;&lt;br /&gt;
float tx_step = 0.0625;&lt;br /&gt;
float tx_step_2;&lt;br /&gt;
float tx_base;&lt;br /&gt;
integer presence0;&lt;br /&gt;
float gmt_offset;&lt;br /&gt;
float clock_cycle;&lt;br /&gt;
float clock_time;&lt;br /&gt;
integer clock_mode = TRUE;&lt;br /&gt;
&lt;br /&gt;
list construct_face(integer f, integer z) { &lt;br /&gt;
    integer i = f*3;&lt;br /&gt;
    return [PRIM_TEXTURE, llList2Integer(faces,i), tx, &lt;br /&gt;
            &amp;lt;llList2Float(faces,i+1), tx_step, 0.0&amp;gt;, &amp;lt;llList2Float(faces,i+2), tx_base-(float)z*tx_step, 0.0&amp;gt;, 0.0]; &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
setprim(integer z1, integer z2, integer z3, integer z4, integer z5) {&lt;br /&gt;
    llSetPrimitiveParams( &lt;br /&gt;
        construct_face(0,z1)+construct_face(1,z2)+&lt;br /&gt;
        construct_face(2,z3)+construct_face(3,z4)+&lt;br /&gt;
        construct_face(4,z5));      &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
clock() {&lt;br /&gt;
    clock_time = llGetGMTclock() + gmt_offset*3600.0;&lt;br /&gt;
    &lt;br /&gt;
    integer s = (integer) clock_time;&lt;br /&gt;
    integer h = (s / 3600) % 24;&lt;br /&gt;
    integer m = s % 3600;&lt;br /&gt;
    m = m / 60; &lt;br /&gt;
   &lt;br /&gt;
    setprim(h/10,h%10,10,m/10,m%10);&lt;br /&gt;
    &lt;br /&gt;
    llResetTime();&lt;br /&gt;
&lt;br /&gt;
    integer w1 = (integer) (clock_time / clock_cycle);&lt;br /&gt;
    float w2 = clock_time - (float)w1 * clock_cycle;&lt;br /&gt;
    llSetTimerEvent(clock_cycle-w2);  &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry() {&lt;br /&gt;
        &lt;br /&gt;
        integer f;&lt;br /&gt;
        integer i;&lt;br /&gt;
        list j;&lt;br /&gt;
        &lt;br /&gt;
        gmt_offset = (float)llGetObjectDesc();&lt;br /&gt;
        &lt;br /&gt;
        tx_step_2 = tx_step / 2.;&lt;br /&gt;
        tx_base = 0.5 - tx_step_2;&lt;br /&gt;
        clock_cycle = 60.0;&lt;br /&gt;
        &lt;br /&gt;
        setprim(11,11,11,11,11);&lt;br /&gt;
        &lt;br /&gt;
        for (i=0; i&amp;lt;15; i+=3) {&lt;br /&gt;
            f = llList2Integer(faces,i);&lt;br /&gt;
            j += [PRIM_GLOW,f,.01, PRIM_COLOR, f, &amp;lt;0., 0., 1.&amp;gt;, 1.];&lt;br /&gt;
            &lt;br /&gt;
        } &lt;br /&gt;
        llSetPrimitiveParams([&lt;br /&gt;
            PRIM_TYPE, PRIM_TYPE_PRISM, 1, &amp;lt;0.2, 0.8, 0.0&amp;gt;, 0.7, &amp;lt;0.0, 0.0, 0.0&amp;gt;, &amp;lt;1.0, 1.0, 0.0&amp;gt;, &amp;lt;0.0, 0.0, 0.0&amp;gt;,&lt;br /&gt;
            PRIM_SIZE, &amp;lt;0.01, 1.777, 0.577&amp;gt;, PRIM_FULLBRIGHT, ALL_SIDES, TRUE, PRIM_COLOR, ALL_SIDES, &amp;lt;0., 0., 1.&amp;gt;, 0.] + j); &lt;br /&gt;
        &lt;br /&gt;
        clock();&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    on_rez(integer p) {&lt;br /&gt;
        llResetScript();&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    touch_start(integer total_number) { &lt;br /&gt;
        if (llGetOwner() == llDetectedKey(0)) {&lt;br /&gt;
            clock_mode = !clock_mode;&lt;br /&gt;
            if (clock_mode) {&lt;br /&gt;
                clock();&lt;br /&gt;
        &lt;br /&gt;
            } else {&lt;br /&gt;
                llSetTimerEvent(0.);&lt;br /&gt;
                setprim(15,15,15,15,15);&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    timer() {&lt;br /&gt;
        clock();            &lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
}&amp;lt;/lsl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
--[[User:Ezian Ecksol|Ezian Ecksol]] 17:20, 23 September 2008 (PDT)&lt;br /&gt;
&#039;&#039;&#039;Cam Lock/Follow&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
// Camstyle, (c) Ezian Ecksol, feel free to copy, steal, modify&lt;br /&gt;
&lt;br /&gt;
// Put script into prim, attach it.&lt;br /&gt;
// usage: position your camera where you like.&lt;br /&gt;
// enter in chan:&lt;br /&gt;
// /1 camstyle follow    &amp;lt;-- camera is fixed, but follows your av&lt;br /&gt;
// /1 camstyle lock      &amp;lt;-- camera is completly locked&lt;br /&gt;
// /1 camstyle           &amp;lt;-- releases cam again &lt;br /&gt;
&lt;br /&gt;
integer chan = 1;&lt;br /&gt;
&lt;br /&gt;
key owner;&lt;br /&gt;
list keywords = [&amp;quot;lock&amp;quot;, &amp;quot;follow&amp;quot;];&lt;br /&gt;
&lt;br /&gt;
cam_style(integer cs) {&lt;br /&gt;
    &lt;br /&gt;
    llRequestPermissions(owner, PERMISSION_CONTROL_CAMERA | PERMISSION_TRACK_CAMERA);&lt;br /&gt;
    llClearCameraParams(); &lt;br /&gt;
        &lt;br /&gt;
    if (!cs)&lt;br /&gt;
        return;&lt;br /&gt;
        &lt;br /&gt;
    vector cpos = llGetCameraPos();&lt;br /&gt;
    list params = [CAMERA_ACTIVE, TRUE, CAMERA_POSITION_LOCKED, TRUE, CAMERA_POSITION_THRESHOLD, 0.5,&lt;br /&gt;
                    CAMERA_FOCUS_THRESHOLD, 0.5, CAMERA_POSITION, cpos];&lt;br /&gt;
        &lt;br /&gt;
    if (cs == 1) &lt;br /&gt;
        params += [&lt;br /&gt;
            CAMERA_DISTANCE, .5, // ( 0.5 to 10) meters&lt;br /&gt;
            CAMERA_BEHINDNESS_LAG, 0.1, // (0 to 3) seconds&lt;br /&gt;
            CAMERA_PITCH, 10.0, // (-45 to 80) degrees&lt;br /&gt;
            CAMERA_FOCUS, cpos + llRot2Fwd(llGetCameraRot()), // region-relative position&lt;br /&gt;
            CAMERA_FOCUS_LAG, 0.1, // (0 to 3) seconds&lt;br /&gt;
            CAMERA_FOCUS_LOCKED, TRUE, // (TRUE or FALSE)&lt;br /&gt;
            CAMERA_POSITION_LAG, 1.0 // (0 to 3) seconds&lt;br /&gt;
        ];&lt;br /&gt;
        &lt;br /&gt;
    else if (cs == 2) &lt;br /&gt;
        params += [&lt;br /&gt;
            CAMERA_FOCUS_LAG, 0.0, // (0 to 3) seconds&lt;br /&gt;
            CAMERA_BEHINDNESS_LAG, 0.5 // (0 to 3) seconds&lt;br /&gt;
&lt;br /&gt;
        ];&lt;br /&gt;
        &lt;br /&gt;
    llSetCameraParams(params);&lt;br /&gt;
}&lt;br /&gt;
        &lt;br /&gt;
        &lt;br /&gt;
        &lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry() {&lt;br /&gt;
        owner = llGetOwner();&lt;br /&gt;
        llListen(chan, &amp;quot;&amp;quot;, owner, &amp;quot;&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    listen(integer channel, string name, key id, string msg) {&lt;br /&gt;
        msg = llToLower(msg);&lt;br /&gt;
        list m = llParseString2List(msg, [&amp;quot; &amp;quot;], []);&lt;br /&gt;
        &lt;br /&gt;
        if (llList2String(m, 0) == &amp;quot;camstyle&amp;quot;) &lt;br /&gt;
            cam_style(llListFindList(keywords, [llList2String(m, 1)]) + 1);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    changed(integer c) {&lt;br /&gt;
        if (c &amp;amp; CHANGED_OWNER)&lt;br /&gt;
            llResetScript();&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ezian Ecksol</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=User:Ezian_Ecksol&amp;diff=92440</id>
		<title>User:Ezian Ecksol</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=User:Ezian_Ecksol&amp;diff=92440"/>
		<updated>2008-09-23T10:06:54Z</updated>

		<summary type="html">&lt;p&gt;Ezian Ecksol: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== Some Scripts ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;1-Prim Digiclock&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;lsl&amp;gt;// 1-Prim Digiclock&lt;br /&gt;
// (c) Ezian Ecksol, open source, keep credits&lt;br /&gt;
//&lt;br /&gt;
// put to object description the GMT offset in hours, e.g 2.5&lt;br /&gt;
// touch to turn on/off&lt;br /&gt;
&lt;br /&gt;
list faces = [3,2.05,.6,  7,.795,0.,  4,-11.5,-0.73,  6,.795,0.,  1,2.05,-0.6];&lt;br /&gt;
key tx = &amp;quot;2b43c7d6-c96a-b5d9-7210-8bc15451252f&amp;quot;;&lt;br /&gt;
float tx_step = 0.0625;&lt;br /&gt;
float tx_step_2;&lt;br /&gt;
float tx_base;&lt;br /&gt;
integer presence0;&lt;br /&gt;
float gmt_offset;&lt;br /&gt;
float clock_cycle;&lt;br /&gt;
float clock_time;&lt;br /&gt;
integer clock_mode = TRUE;&lt;br /&gt;
&lt;br /&gt;
list construct_face(integer f, integer z) { &lt;br /&gt;
    integer i = f*3;&lt;br /&gt;
    return [PRIM_TEXTURE, llList2Integer(faces,i), tx, &lt;br /&gt;
            &amp;lt;llList2Float(faces,i+1), tx_step, 0.0&amp;gt;, &amp;lt;llList2Float(faces,i+2), tx_base-(float)z*tx_step, 0.0&amp;gt;, 0.0]; &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
setprim(integer z1, integer z2, integer z3, integer z4, integer z5) {&lt;br /&gt;
    llSetPrimitiveParams( &lt;br /&gt;
        construct_face(0,z1)+construct_face(1,z2)+&lt;br /&gt;
        construct_face(2,z3)+construct_face(3,z4)+&lt;br /&gt;
        construct_face(4,z5));      &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
clock() {&lt;br /&gt;
    clock_time = llGetGMTclock() + gmt_offset*3600.0;&lt;br /&gt;
    &lt;br /&gt;
    integer s = (integer) clock_time;&lt;br /&gt;
    integer h = (s / 3600) % 24;&lt;br /&gt;
    integer m = s % 3600;&lt;br /&gt;
    m = m / 60; &lt;br /&gt;
   &lt;br /&gt;
    setprim(h/10,h%10,10,m/10,m%10);&lt;br /&gt;
    &lt;br /&gt;
    llResetTime();&lt;br /&gt;
&lt;br /&gt;
    integer w1 = (integer) (clock_time / clock_cycle);&lt;br /&gt;
    float w2 = clock_time - (float)w1 * clock_cycle;&lt;br /&gt;
    llSetTimerEvent(clock_cycle-w2);  &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry() {&lt;br /&gt;
        &lt;br /&gt;
        integer f;&lt;br /&gt;
        integer i;&lt;br /&gt;
        list j;&lt;br /&gt;
        &lt;br /&gt;
        gmt_offset = (float)llGetObjectDesc();&lt;br /&gt;
        &lt;br /&gt;
        tx_step_2 = tx_step / 2.;&lt;br /&gt;
        tx_base = 0.5 - tx_step_2;&lt;br /&gt;
        clock_cycle = 60.0;&lt;br /&gt;
        &lt;br /&gt;
        setprim(11,11,11,11,11);&lt;br /&gt;
        &lt;br /&gt;
        for (i=0; i&amp;lt;15; i+=3) {&lt;br /&gt;
            f = llList2Integer(faces,i);&lt;br /&gt;
            j += [PRIM_GLOW,f,.01, PRIM_COLOR, f, &amp;lt;0., 0., 1.&amp;gt;, 1.];&lt;br /&gt;
            &lt;br /&gt;
        } &lt;br /&gt;
        llSetPrimitiveParams([&lt;br /&gt;
            PRIM_TYPE, PRIM_TYPE_PRISM, 1, &amp;lt;0.2, 0.8, 0.0&amp;gt;, 0.7, &amp;lt;0.0, 0.0, 0.0&amp;gt;, &amp;lt;1.0, 1.0, 0.0&amp;gt;, &amp;lt;0.0, 0.0, 0.0&amp;gt;,&lt;br /&gt;
            PRIM_SIZE, &amp;lt;0.01, 1.777, 0.577&amp;gt;, PRIM_FULLBRIGHT, ALL_SIDES, TRUE, PRIM_COLOR, ALL_SIDES, &amp;lt;0., 0., 1.&amp;gt;, 0.] + j); &lt;br /&gt;
        &lt;br /&gt;
        clock();&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    on_rez(integer p) {&lt;br /&gt;
        llResetScript();&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    touch_start(integer total_number) { &lt;br /&gt;
        if (llGetOwner() == llDetectedKey(0)) {&lt;br /&gt;
            clock_mode = !clock_mode;&lt;br /&gt;
            if (clock_mode) {&lt;br /&gt;
                clock();&lt;br /&gt;
        &lt;br /&gt;
            } else {&lt;br /&gt;
                llSetTimerEvent(0.);&lt;br /&gt;
                setprim(15,15,15,15,15);&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    timer() {&lt;br /&gt;
        clock();            &lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
}&amp;lt;/lsl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Cam Lock/Follow&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
// Camstyle, (c) Ezian Ecksol, feel free to copy, steal, modify&lt;br /&gt;
&lt;br /&gt;
// Put script into prim, attach it.&lt;br /&gt;
// usage: position your camera where you like.&lt;br /&gt;
// enter in chan:&lt;br /&gt;
// /1 camstyle follow    &amp;lt;-- camera is fixed, but follows your av&lt;br /&gt;
// /1 camstyle lock      &amp;lt;-- camera is completly locked&lt;br /&gt;
// /1 camstyle           &amp;lt;-- releases cam again &lt;br /&gt;
&lt;br /&gt;
integer chan = 1;&lt;br /&gt;
&lt;br /&gt;
key owner;&lt;br /&gt;
list keywords = [&amp;quot;lock&amp;quot;, &amp;quot;follow&amp;quot;];&lt;br /&gt;
&lt;br /&gt;
cam_style(integer cs) {&lt;br /&gt;
    &lt;br /&gt;
    llRequestPermissions(owner, PERMISSION_CONTROL_CAMERA | PERMISSION_TRACK_CAMERA);&lt;br /&gt;
    llClearCameraParams(); &lt;br /&gt;
        &lt;br /&gt;
    if (!cs)&lt;br /&gt;
        return;&lt;br /&gt;
        &lt;br /&gt;
    vector cpos = llGetCameraPos();&lt;br /&gt;
    list params = [CAMERA_ACTIVE, TRUE, CAMERA_POSITION_LOCKED, TRUE, CAMERA_POSITION_THRESHOLD, 0.5,&lt;br /&gt;
                    CAMERA_FOCUS_THRESHOLD, 0.5, CAMERA_POSITION, cpos];&lt;br /&gt;
        &lt;br /&gt;
    if (cs == 1) &lt;br /&gt;
        params += [&lt;br /&gt;
            CAMERA_DISTANCE, .5, // ( 0.5 to 10) meters&lt;br /&gt;
            CAMERA_BEHINDNESS_LAG, 0.1, // (0 to 3) seconds&lt;br /&gt;
            CAMERA_PITCH, 10.0, // (-45 to 80) degrees&lt;br /&gt;
            CAMERA_FOCUS, cpos + llRot2Fwd(llGetCameraRot()), // region-relative position&lt;br /&gt;
            CAMERA_FOCUS_LAG, 0.1, // (0 to 3) seconds&lt;br /&gt;
            CAMERA_FOCUS_LOCKED, TRUE, // (TRUE or FALSE)&lt;br /&gt;
            CAMERA_POSITION_LAG, 1.0 // (0 to 3) seconds&lt;br /&gt;
        ];&lt;br /&gt;
        &lt;br /&gt;
    else if (cs == 2) &lt;br /&gt;
        params += [&lt;br /&gt;
            CAMERA_FOCUS_LAG, 0.0, // (0 to 3) seconds&lt;br /&gt;
            CAMERA_BEHINDNESS_LAG, 0.5 // (0 to 3) seconds&lt;br /&gt;
&lt;br /&gt;
        ];&lt;br /&gt;
        &lt;br /&gt;
    llSetCameraParams(params);&lt;br /&gt;
}&lt;br /&gt;
        &lt;br /&gt;
        &lt;br /&gt;
        &lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry() {&lt;br /&gt;
        owner = llGetOwner();&lt;br /&gt;
        llListen(chan, &amp;quot;&amp;quot;, owner, &amp;quot;&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    listen(integer channel, string name, key id, string msg) {&lt;br /&gt;
        msg = llToLower(msg);&lt;br /&gt;
        list m = llParseString2List(msg, [&amp;quot; &amp;quot;], []);&lt;br /&gt;
        &lt;br /&gt;
        if (llList2String(m, 0) == &amp;quot;camstyle&amp;quot;) &lt;br /&gt;
            cam_style(llListFindList(keywords, [llList2String(m, 1)]) + 1);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    changed(integer c) {&lt;br /&gt;
        if (c &amp;amp; CHANGED_OWNER)&lt;br /&gt;
            llResetScript();&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ezian Ecksol</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=User:Ezian_Ecksol&amp;diff=92439</id>
		<title>User:Ezian Ecksol</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=User:Ezian_Ecksol&amp;diff=92439"/>
		<updated>2008-09-23T10:06:03Z</updated>

		<summary type="html">&lt;p&gt;Ezian Ecksol: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;1-Prim Digiclock&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;lsl&amp;gt;// 1-Prim Digiclock&lt;br /&gt;
// (c) Ezian Ecksol, open source, keep credits&lt;br /&gt;
//&lt;br /&gt;
// put to object description the GMT offset in hours, e.g 2.5&lt;br /&gt;
// touch to turn on/off&lt;br /&gt;
&lt;br /&gt;
list faces = [3,2.05,.6,  7,.795,0.,  4,-11.5,-0.73,  6,.795,0.,  1,2.05,-0.6];&lt;br /&gt;
key tx = &amp;quot;2b43c7d6-c96a-b5d9-7210-8bc15451252f&amp;quot;;&lt;br /&gt;
float tx_step = 0.0625;&lt;br /&gt;
float tx_step_2;&lt;br /&gt;
float tx_base;&lt;br /&gt;
integer presence0;&lt;br /&gt;
float gmt_offset;&lt;br /&gt;
float clock_cycle;&lt;br /&gt;
float clock_time;&lt;br /&gt;
integer clock_mode = TRUE;&lt;br /&gt;
&lt;br /&gt;
list construct_face(integer f, integer z) { &lt;br /&gt;
    integer i = f*3;&lt;br /&gt;
    return [PRIM_TEXTURE, llList2Integer(faces,i), tx, &lt;br /&gt;
            &amp;lt;llList2Float(faces,i+1), tx_step, 0.0&amp;gt;, &amp;lt;llList2Float(faces,i+2), tx_base-(float)z*tx_step, 0.0&amp;gt;, 0.0]; &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
setprim(integer z1, integer z2, integer z3, integer z4, integer z5) {&lt;br /&gt;
    llSetPrimitiveParams( &lt;br /&gt;
        construct_face(0,z1)+construct_face(1,z2)+&lt;br /&gt;
        construct_face(2,z3)+construct_face(3,z4)+&lt;br /&gt;
        construct_face(4,z5));      &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
clock() {&lt;br /&gt;
    clock_time = llGetGMTclock() + gmt_offset*3600.0;&lt;br /&gt;
    &lt;br /&gt;
    integer s = (integer) clock_time;&lt;br /&gt;
    integer h = (s / 3600) % 24;&lt;br /&gt;
    integer m = s % 3600;&lt;br /&gt;
    m = m / 60; &lt;br /&gt;
   &lt;br /&gt;
    setprim(h/10,h%10,10,m/10,m%10);&lt;br /&gt;
    &lt;br /&gt;
    llResetTime();&lt;br /&gt;
&lt;br /&gt;
    integer w1 = (integer) (clock_time / clock_cycle);&lt;br /&gt;
    float w2 = clock_time - (float)w1 * clock_cycle;&lt;br /&gt;
    llSetTimerEvent(clock_cycle-w2);  &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry() {&lt;br /&gt;
        &lt;br /&gt;
        integer f;&lt;br /&gt;
        integer i;&lt;br /&gt;
        list j;&lt;br /&gt;
        &lt;br /&gt;
        gmt_offset = (float)llGetObjectDesc();&lt;br /&gt;
        &lt;br /&gt;
        tx_step_2 = tx_step / 2.;&lt;br /&gt;
        tx_base = 0.5 - tx_step_2;&lt;br /&gt;
        clock_cycle = 60.0;&lt;br /&gt;
        &lt;br /&gt;
        setprim(11,11,11,11,11);&lt;br /&gt;
        &lt;br /&gt;
        for (i=0; i&amp;lt;15; i+=3) {&lt;br /&gt;
            f = llList2Integer(faces,i);&lt;br /&gt;
            j += [PRIM_GLOW,f,.01, PRIM_COLOR, f, &amp;lt;0., 0., 1.&amp;gt;, 1.];&lt;br /&gt;
            &lt;br /&gt;
        } &lt;br /&gt;
        llSetPrimitiveParams([&lt;br /&gt;
            PRIM_TYPE, PRIM_TYPE_PRISM, 1, &amp;lt;0.2, 0.8, 0.0&amp;gt;, 0.7, &amp;lt;0.0, 0.0, 0.0&amp;gt;, &amp;lt;1.0, 1.0, 0.0&amp;gt;, &amp;lt;0.0, 0.0, 0.0&amp;gt;,&lt;br /&gt;
            PRIM_SIZE, &amp;lt;0.01, 1.777, 0.577&amp;gt;, PRIM_FULLBRIGHT, ALL_SIDES, TRUE, PRIM_COLOR, ALL_SIDES, &amp;lt;0., 0., 1.&amp;gt;, 0.] + j); &lt;br /&gt;
        &lt;br /&gt;
        clock();&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    on_rez(integer p) {&lt;br /&gt;
        llResetScript();&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    touch_start(integer total_number) { &lt;br /&gt;
        if (llGetOwner() == llDetectedKey(0)) {&lt;br /&gt;
            clock_mode = !clock_mode;&lt;br /&gt;
            if (clock_mode) {&lt;br /&gt;
                clock();&lt;br /&gt;
        &lt;br /&gt;
            } else {&lt;br /&gt;
                llSetTimerEvent(0.);&lt;br /&gt;
                setprim(15,15,15,15,15);&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    timer() {&lt;br /&gt;
        clock();            &lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
}&amp;lt;/lsl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Cam Lock/Follow&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
// Camstyle, (c) Ezian Ecksol, feel free to copy, steal, modify&lt;br /&gt;
&lt;br /&gt;
// Put script into prim, attach it.&lt;br /&gt;
// usage: position your camera where you like.&lt;br /&gt;
// enter in chan:&lt;br /&gt;
// /1 camstyle follow    &amp;lt;-- camera is fixed, but follows your av&lt;br /&gt;
// /1 camstyle lock      &amp;lt;-- camera is completly locked&lt;br /&gt;
// /1 camstyle           &amp;lt;-- releases cam again &lt;br /&gt;
&lt;br /&gt;
integer chan = 1;&lt;br /&gt;
&lt;br /&gt;
key owner;&lt;br /&gt;
list keywords = [&amp;quot;lock&amp;quot;, &amp;quot;follow&amp;quot;];&lt;br /&gt;
&lt;br /&gt;
cam_style(integer cs) {&lt;br /&gt;
    &lt;br /&gt;
    llRequestPermissions(owner, PERMISSION_CONTROL_CAMERA | PERMISSION_TRACK_CAMERA);&lt;br /&gt;
    llClearCameraParams(); &lt;br /&gt;
        &lt;br /&gt;
    if (!cs)&lt;br /&gt;
        return;&lt;br /&gt;
        &lt;br /&gt;
    vector cpos = llGetCameraPos();&lt;br /&gt;
    list params = [CAMERA_ACTIVE, TRUE, CAMERA_POSITION_LOCKED, TRUE, CAMERA_POSITION_THRESHOLD, 0.5,&lt;br /&gt;
                    CAMERA_FOCUS_THRESHOLD, 0.5, CAMERA_POSITION, cpos];&lt;br /&gt;
        &lt;br /&gt;
    if (cs == 1) &lt;br /&gt;
        params += [&lt;br /&gt;
            CAMERA_DISTANCE, .5, // ( 0.5 to 10) meters&lt;br /&gt;
            CAMERA_BEHINDNESS_LAG, 0.1, // (0 to 3) seconds&lt;br /&gt;
            CAMERA_PITCH, 10.0, // (-45 to 80) degrees&lt;br /&gt;
            CAMERA_FOCUS, cpos + llRot2Fwd(llGetCameraRot()), // region-relative position&lt;br /&gt;
            CAMERA_FOCUS_LAG, 0.1, // (0 to 3) seconds&lt;br /&gt;
            CAMERA_FOCUS_LOCKED, TRUE, // (TRUE or FALSE)&lt;br /&gt;
            CAMERA_POSITION_LAG, 1.0 // (0 to 3) seconds&lt;br /&gt;
        ];&lt;br /&gt;
        &lt;br /&gt;
    else if (cs == 2) &lt;br /&gt;
        params += [&lt;br /&gt;
            CAMERA_FOCUS_LAG, 0.0, // (0 to 3) seconds&lt;br /&gt;
            CAMERA_BEHINDNESS_LAG, 0.5 // (0 to 3) seconds&lt;br /&gt;
&lt;br /&gt;
        ];&lt;br /&gt;
        &lt;br /&gt;
    llSetCameraParams(params);&lt;br /&gt;
}&lt;br /&gt;
        &lt;br /&gt;
        &lt;br /&gt;
        &lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry() {&lt;br /&gt;
        owner = llGetOwner();&lt;br /&gt;
        llListen(chan, &amp;quot;&amp;quot;, owner, &amp;quot;&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    listen(integer channel, string name, key id, string msg) {&lt;br /&gt;
        msg = llToLower(msg);&lt;br /&gt;
        list m = llParseString2List(msg, [&amp;quot; &amp;quot;], []);&lt;br /&gt;
        &lt;br /&gt;
        if (llList2String(m, 0) == &amp;quot;camstyle&amp;quot;) &lt;br /&gt;
            cam_style(llListFindList(keywords, [llList2String(m, 1)]) + 1);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    changed(integer c) {&lt;br /&gt;
        if (c &amp;amp; CHANGED_OWNER)&lt;br /&gt;
            llResetScript();&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ezian Ecksol</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=User:Ezian_Ecksol&amp;diff=92069</id>
		<title>User:Ezian Ecksol</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=User:Ezian_Ecksol&amp;diff=92069"/>
		<updated>2008-09-20T12:23:01Z</updated>

		<summary type="html">&lt;p&gt;Ezian Ecksol: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Cam Lock/Follow&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
// Camstyle, (c) Ezian Ecksol, feel free to copy, steal, modify&lt;br /&gt;
&lt;br /&gt;
// Put script into prim, attach it.&lt;br /&gt;
// usage: position your camera where you like.&lt;br /&gt;
// enter in chan:&lt;br /&gt;
// /1 camstyle follow    &amp;lt;-- camera is fixed, but follows your av&lt;br /&gt;
// /1 camstyle lock      &amp;lt;-- camera is completly locked&lt;br /&gt;
// /1 camstyle           &amp;lt;-- releases cam again &lt;br /&gt;
&lt;br /&gt;
integer chan = 1;&lt;br /&gt;
&lt;br /&gt;
key owner;&lt;br /&gt;
list keywords = [&amp;quot;lock&amp;quot;, &amp;quot;follow&amp;quot;];&lt;br /&gt;
&lt;br /&gt;
cam_style(integer cs) {&lt;br /&gt;
    &lt;br /&gt;
    llRequestPermissions(owner, PERMISSION_CONTROL_CAMERA | PERMISSION_TRACK_CAMERA);&lt;br /&gt;
    llClearCameraParams(); &lt;br /&gt;
        &lt;br /&gt;
    if (!cs)&lt;br /&gt;
        return;&lt;br /&gt;
        &lt;br /&gt;
    vector cpos = llGetCameraPos();&lt;br /&gt;
    list params = [CAMERA_ACTIVE, TRUE, CAMERA_POSITION_LOCKED, TRUE, CAMERA_POSITION_THRESHOLD, 0.5,&lt;br /&gt;
                    CAMERA_FOCUS_THRESHOLD, 0.5, CAMERA_POSITION, cpos];&lt;br /&gt;
        &lt;br /&gt;
    if (cs == 1) &lt;br /&gt;
        params += [&lt;br /&gt;
            CAMERA_DISTANCE, .5, // ( 0.5 to 10) meters&lt;br /&gt;
            CAMERA_BEHINDNESS_LAG, 0.1, // (0 to 3) seconds&lt;br /&gt;
            CAMERA_PITCH, 10.0, // (-45 to 80) degrees&lt;br /&gt;
            CAMERA_FOCUS, cpos + llRot2Fwd(llGetCameraRot()), // region-relative position&lt;br /&gt;
            CAMERA_FOCUS_LAG, 0.1, // (0 to 3) seconds&lt;br /&gt;
            CAMERA_FOCUS_LOCKED, TRUE, // (TRUE or FALSE)&lt;br /&gt;
            CAMERA_POSITION_LAG, 1.0 // (0 to 3) seconds&lt;br /&gt;
        ];&lt;br /&gt;
        &lt;br /&gt;
    else if (cs == 2) &lt;br /&gt;
        params += [&lt;br /&gt;
            CAMERA_FOCUS_LAG, 0.0, // (0 to 3) seconds&lt;br /&gt;
            CAMERA_BEHINDNESS_LAG, 0.5 // (0 to 3) seconds&lt;br /&gt;
&lt;br /&gt;
        ];&lt;br /&gt;
        &lt;br /&gt;
    llSetCameraParams(params);&lt;br /&gt;
}&lt;br /&gt;
        &lt;br /&gt;
        &lt;br /&gt;
        &lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry() {&lt;br /&gt;
        owner = llGetOwner();&lt;br /&gt;
        llListen(chan, &amp;quot;&amp;quot;, owner, &amp;quot;&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    listen(integer channel, string name, key id, string msg) {&lt;br /&gt;
        msg = llToLower(msg);&lt;br /&gt;
        list m = llParseString2List(msg, [&amp;quot; &amp;quot;], []);&lt;br /&gt;
        &lt;br /&gt;
        if (llList2String(m, 0) == &amp;quot;camstyle&amp;quot;) &lt;br /&gt;
            cam_style(llListFindList(keywords, [llList2String(m, 1)]) + 1);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    changed(integer c) {&lt;br /&gt;
        if (c &amp;amp; CHANGED_OWNER)&lt;br /&gt;
            llResetScript();&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ezian Ecksol</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=User:Ezian_Ecksol&amp;diff=91836</id>
		<title>User:Ezian Ecksol</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=User:Ezian_Ecksol&amp;diff=91836"/>
		<updated>2008-09-18T16:59:42Z</updated>

		<summary type="html">&lt;p&gt;Ezian Ecksol: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Cam Lock/Follow&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
// (c) Ezian Ecksol. Use, modify as you like.&lt;br /&gt;
//&lt;br /&gt;
// Put script into prim, attach it. &lt;br /&gt;
// Position your cam as you like.  Say &lt;br /&gt;
// &#039;/1 camstyle follow&#039; to lock the cam, but let it follow you AV&lt;br /&gt;
// &#039;/1 camstyle lock&#039; to lock the cam completly&lt;br /&gt;
// &#039;/1 camstyle&#039; to release cam again.&lt;br /&gt;
&lt;br /&gt;
integer chan = 1;&lt;br /&gt;
&lt;br /&gt;
key owner;&lt;br /&gt;
list keywords = [&amp;quot;lock&amp;quot;, &amp;quot;follow&amp;quot;];&lt;br /&gt;
&lt;br /&gt;
cam_style(integer cs) {&lt;br /&gt;
    &lt;br /&gt;
    llRequestPermissions(owner, PERMISSION_CONTROL_CAMERA | PERMISSION_TRACK_CAMERA);&lt;br /&gt;
    llClearCameraParams(); &lt;br /&gt;
        &lt;br /&gt;
    if (!cs)&lt;br /&gt;
        return;&lt;br /&gt;
        &lt;br /&gt;
    vector cpos = llGetCameraPos();&lt;br /&gt;
    list params = [CAMERA_ACTIVE, TRUE, CAMERA_POSITION_LOCKED, TRUE, CAMERA_POSITION_THRESHOLD, 0.5,&lt;br /&gt;
                    CAMERA_FOCUS_THRESHOLD, 0.5, CAMERA_POSITION, cpos];&lt;br /&gt;
        &lt;br /&gt;
    if (cs == 1) &lt;br /&gt;
        params += [&lt;br /&gt;
            CAMERA_DISTANCE, .5, // ( 0.5 to 10) meters&lt;br /&gt;
            CAMERA_BEHINDNESS_LAG, 0.1, // (0 to 3) seconds&lt;br /&gt;
            CAMERA_PITCH, 10.0, // (-45 to 80) degrees&lt;br /&gt;
            CAMERA_FOCUS, cpos + llRot2Fwd(llGetCameraRot()), // region-relative position&lt;br /&gt;
            CAMERA_FOCUS_LAG, 0.1, // (0 to 3) seconds&lt;br /&gt;
            CAMERA_FOCUS_LOCKED, TRUE, // (TRUE or FALSE)&lt;br /&gt;
            CAMERA_POSITION_LAG, 1.0 // (0 to 3) seconds&lt;br /&gt;
        ];&lt;br /&gt;
        &lt;br /&gt;
    else if (cs == 2) &lt;br /&gt;
        params += [&lt;br /&gt;
            CAMERA_FOCUS_LAG, 0.0, // (0 to 3) seconds&lt;br /&gt;
            CAMERA_BEHINDNESS_LAG, 0.5 // (0 to 3) seconds&lt;br /&gt;
&lt;br /&gt;
        ];&lt;br /&gt;
        &lt;br /&gt;
    llSetCameraParams(params);&lt;br /&gt;
}&lt;br /&gt;
        &lt;br /&gt;
        &lt;br /&gt;
        &lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry() {&lt;br /&gt;
        owner = llGetOwner();&lt;br /&gt;
        llListen(chan, &amp;quot;&amp;quot;, owner, &amp;quot;&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    listen(integer channel, string name, key id, string msg) {&lt;br /&gt;
        msg = llToLower(msg);&lt;br /&gt;
        list m = llParseString2List(msg, [&amp;quot; &amp;quot;], []);&lt;br /&gt;
        &lt;br /&gt;
        if (llList2String(m, 0) == &amp;quot;camstyle&amp;quot;) &lt;br /&gt;
            cam_style(llListFindList(keywords, [llList2String(m, 1)]) + 1);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    changed(integer c) {&lt;br /&gt;
        if (c &amp;amp; CHANGED_OWNER)&lt;br /&gt;
            llResetScript();&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ezian Ecksol</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=User:Ezian_Ecksol&amp;diff=91821</id>
		<title>User:Ezian Ecksol</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=User:Ezian_Ecksol&amp;diff=91821"/>
		<updated>2008-09-18T15:10:18Z</updated>

		<summary type="html">&lt;p&gt;Ezian Ecksol: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;nowiki&amp;gt;integer chan = 1;&lt;br /&gt;
&lt;br /&gt;
key owner;&lt;br /&gt;
list keywords = [&amp;quot;lock&amp;quot;, &amp;quot;follow&amp;quot;];&lt;br /&gt;
&lt;br /&gt;
cam_style(integer cs) {&lt;br /&gt;
    &lt;br /&gt;
    llRequestPermissions(owner, PERMISSION_CONTROL_CAMERA | PERMISSION_TRACK_CAMERA);&lt;br /&gt;
    llClearCameraParams(); &lt;br /&gt;
        &lt;br /&gt;
    if (!cs)&lt;br /&gt;
        return;&lt;br /&gt;
        &lt;br /&gt;
    vector cpos = llGetCameraPos();&lt;br /&gt;
    list params = [CAMERA_ACTIVE, TRUE, CAMERA_POSITION_LOCKED, TRUE, CAMERA_POSITION_THRESHOLD, 0.5,&lt;br /&gt;
                    CAMERA_FOCUS_THRESHOLD, 0.5, CAMERA_POSITION, cpos];&lt;br /&gt;
        &lt;br /&gt;
    if (cs == 1) &lt;br /&gt;
        params += [&lt;br /&gt;
            CAMERA_DISTANCE, .5, // ( 0.5 to 10) meters&lt;br /&gt;
            CAMERA_BEHINDNESS_LAG, 0.1, // (0 to 3) seconds&lt;br /&gt;
            CAMERA_PITCH, 10.0, // (-45 to 80) degrees&lt;br /&gt;
            CAMERA_FOCUS, cpos + llRot2Fwd(llGetCameraRot()), // region-relative position&lt;br /&gt;
            CAMERA_FOCUS_LAG, 0.1, // (0 to 3) seconds&lt;br /&gt;
            CAMERA_FOCUS_LOCKED, TRUE, // (TRUE or FALSE)&lt;br /&gt;
            CAMERA_POSITION_LAG, 1.0 // (0 to 3) seconds&lt;br /&gt;
        ];&lt;br /&gt;
        &lt;br /&gt;
    else if (cs == 2) &lt;br /&gt;
        params += [&lt;br /&gt;
            CAMERA_FOCUS_LAG, 0.0, // (0 to 3) seconds&lt;br /&gt;
            CAMERA_BEHINDNESS_LAG, 0.5 // (0 to 3) seconds&lt;br /&gt;
&lt;br /&gt;
        ];&lt;br /&gt;
        &lt;br /&gt;
    llSetCameraParams(params);&lt;br /&gt;
}&lt;br /&gt;
        &lt;br /&gt;
        &lt;br /&gt;
        &lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        owner = llGetOwner();&lt;br /&gt;
        llListen(chan, &amp;quot;&amp;quot;, owner, &amp;quot;&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    listen(integer channel, string name, key id, string msg) {&lt;br /&gt;
        msg = llToLower(msg);&lt;br /&gt;
        list m = llParseString2List(msg, [&amp;quot; &amp;quot;], []);&lt;br /&gt;
        &lt;br /&gt;
        if (llList2String(m, 0) == &amp;quot;camstyle&amp;quot;) &lt;br /&gt;
            cam_style(llListFindList(keywords, [llList2String(m, 1)]) + 1);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    &lt;br /&gt;
    changed(integer c) {&lt;br /&gt;
        if (c &amp;amp; CHANGED_OWNER)&lt;br /&gt;
            llResetScript();&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ezian Ecksol</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=User:Ezian_Ecksol&amp;diff=91820</id>
		<title>User:Ezian Ecksol</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=User:Ezian_Ecksol&amp;diff=91820"/>
		<updated>2008-09-18T15:09:39Z</updated>

		<summary type="html">&lt;p&gt;Ezian Ecksol: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;nowiki&amp;gt;integer chan = 1;&lt;br /&gt;
&lt;br /&gt;
key owner;&lt;br /&gt;
list keywords = [&amp;quot;lock&amp;quot;, &amp;quot;follow&amp;quot;];&lt;br /&gt;
&lt;br /&gt;
cam_style(integer cs) {&lt;br /&gt;
    &lt;br /&gt;
    llRequestPermissions(owner, PERMISSION_CONTROL_CAMERA | PERMISSION_TRACK_CAMERA);&lt;br /&gt;
    llClearCameraParams(); &lt;br /&gt;
        &lt;br /&gt;
    if (!cs)&lt;br /&gt;
        return;&lt;br /&gt;
        &lt;br /&gt;
    vector cpos = llGetCameraPos();&lt;br /&gt;
    list params = [CAMERA_ACTIVE, TRUE, CAMERA_POSITION_LOCKED, TRUE, CAMERA_POSITION_THRESHOLD, 0.5,&lt;br /&gt;
                    CAMERA_FOCUS_THRESHOLD, 0.5, CAMERA_POSITION, cpos];&lt;br /&gt;
        &lt;br /&gt;
    if (cs == 1) &lt;br /&gt;
        params += [&lt;br /&gt;
            CAMERA_DISTANCE, .5, // ( 0.5 to 10) meters&lt;br /&gt;
            CAMERA_BEHINDNESS_LAG, 0.1, // (0 to 3) seconds&lt;br /&gt;
            CAMERA_PITCH, 10.0, // (-45 to 80) degrees&lt;br /&gt;
            CAMERA_FOCUS, cpos + llRot2Fwd(llGetCameraRot()), // region-relative position&lt;br /&gt;
            CAMERA_FOCUS_LAG, 0.1, // (0 to 3) seconds&lt;br /&gt;
            CAMERA_FOCUS_LOCKED, TRUE, // (TRUE or FALSE)&lt;br /&gt;
            CAMERA_POSITION_LAG, 1.0 // (0 to 3) seconds&lt;br /&gt;
        ];&lt;br /&gt;
        &lt;br /&gt;
    else if (cs == 2) &lt;br /&gt;
        params += [&lt;br /&gt;
            CAMERA_FOCUS_LAG, 0.0, // (0 to 3) seconds&lt;br /&gt;
            CAMERA_BEHINDNESS_LAG, 0.5 // (0 to 3) seconds&lt;br /&gt;
&lt;br /&gt;
        ];&lt;br /&gt;
        &lt;br /&gt;
    llSetCameraParams(params);&lt;br /&gt;
}&lt;br /&gt;
        &lt;br /&gt;
        &lt;br /&gt;
        &lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        owner = llGetOwner();&lt;br /&gt;
        llListen(chan, &amp;quot;&amp;quot;, owner, &amp;quot;&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    listen(integer channel, string name, key id, string msg) {&lt;br /&gt;
        msg = llToLower(msg);&lt;br /&gt;
        list m = llParseString2List(msg, [&amp;quot; &amp;quot;], []);&lt;br /&gt;
        &lt;br /&gt;
        if (llList2String(m, 0) == &amp;quot;camstyle&amp;quot;) &lt;br /&gt;
            cam_style(llListFindList(keywords, [llList2String(m, 1)]) + 1);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    &lt;br /&gt;
    changed(integer c) {&lt;br /&gt;
        if (c &amp;amp; CHANGED_OWNER)&lt;br /&gt;
            llResetScript();&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ezian Ecksol</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=User:Ezian_Ecksol&amp;diff=91819</id>
		<title>User:Ezian Ecksol</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=User:Ezian_Ecksol&amp;diff=91819"/>
		<updated>2008-09-18T15:09:11Z</updated>

		<summary type="html">&lt;p&gt;Ezian Ecksol: New page: integer chan = 1;  key owner; list keywords = [&amp;quot;lock&amp;quot;, &amp;quot;follow&amp;quot;];  cam_style(integer cs) {          llRequestPermissions(owner, PERMISSION_CONTROL_CAMERA | PERMISSION_TRACK_CAMERA);     ll...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;integer chan = 1;&lt;br /&gt;
&lt;br /&gt;
key owner;&lt;br /&gt;
list keywords = [&amp;quot;lock&amp;quot;, &amp;quot;follow&amp;quot;];&lt;br /&gt;
&lt;br /&gt;
cam_style(integer cs) {&lt;br /&gt;
    &lt;br /&gt;
    llRequestPermissions(owner, PERMISSION_CONTROL_CAMERA | PERMISSION_TRACK_CAMERA);&lt;br /&gt;
    llClearCameraParams(); &lt;br /&gt;
        &lt;br /&gt;
    if (!cs)&lt;br /&gt;
        return;&lt;br /&gt;
        &lt;br /&gt;
    vector cpos = llGetCameraPos();&lt;br /&gt;
    list params = [CAMERA_ACTIVE, TRUE, CAMERA_POSITION_LOCKED, TRUE, CAMERA_POSITION_THRESHOLD, 0.5,&lt;br /&gt;
                    CAMERA_FOCUS_THRESHOLD, 0.5, CAMERA_POSITION, cpos];&lt;br /&gt;
        &lt;br /&gt;
    if (cs == 1) &lt;br /&gt;
        params += [&lt;br /&gt;
            CAMERA_DISTANCE, .5, // ( 0.5 to 10) meters&lt;br /&gt;
            CAMERA_BEHINDNESS_LAG, 0.1, // (0 to 3) seconds&lt;br /&gt;
            CAMERA_PITCH, 10.0, // (-45 to 80) degrees&lt;br /&gt;
            CAMERA_FOCUS, cpos + llRot2Fwd(llGetCameraRot()), // region-relative position&lt;br /&gt;
            CAMERA_FOCUS_LAG, 0.1, // (0 to 3) seconds&lt;br /&gt;
            CAMERA_FOCUS_LOCKED, TRUE, // (TRUE or FALSE)&lt;br /&gt;
            CAMERA_POSITION_LAG, 1.0 // (0 to 3) seconds&lt;br /&gt;
        ];&lt;br /&gt;
        &lt;br /&gt;
    else if (cs == 2) &lt;br /&gt;
        params += [&lt;br /&gt;
            CAMERA_FOCUS_LAG, 0.0, // (0 to 3) seconds&lt;br /&gt;
            CAMERA_BEHINDNESS_LAG, 0.5 // (0 to 3) seconds&lt;br /&gt;
&lt;br /&gt;
        ];&lt;br /&gt;
        &lt;br /&gt;
    llSetCameraParams(params);&lt;br /&gt;
}&lt;br /&gt;
        &lt;br /&gt;
        &lt;br /&gt;
        &lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        owner = llGetOwner();&lt;br /&gt;
        llListen(chan, &amp;quot;&amp;quot;, owner, &amp;quot;&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    listen(integer channel, string name, key id, string msg) {&lt;br /&gt;
        msg = llToLower(msg);&lt;br /&gt;
        list m = llParseString2List(msg, [&amp;quot; &amp;quot;], []);&lt;br /&gt;
        &lt;br /&gt;
        if (llList2String(m, 0) == &amp;quot;camstyle&amp;quot;) &lt;br /&gt;
            cam_style(llListFindList(keywords, [llList2String(m, 1)]) + 1);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    &lt;br /&gt;
    changed(integer c) {&lt;br /&gt;
        if (c &amp;amp; CHANGED_OWNER)&lt;br /&gt;
            llResetScript();&lt;br /&gt;
    }&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Ezian Ecksol</name></author>
	</entry>
</feed>