<?xml version="1.0"?>
<?xml-stylesheet type="text/css" href="http://opensimulator.org/skins/common/feed.css?303"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
		<id>http://opensimulator.org/index.php?action=history&amp;feed=atom&amp;title=User%3AAllen_Kerensky%2FMyriad_Lite_Dev%2FMyriad_Lite_Turret-v0.0.0-20120510.lsl</id>
		<title>User:Allen Kerensky/Myriad Lite Dev/Myriad Lite Turret-v0.0.0-20120510.lsl - Revision history</title>
		<link rel="self" type="application/atom+xml" href="http://opensimulator.org/index.php?action=history&amp;feed=atom&amp;title=User%3AAllen_Kerensky%2FMyriad_Lite_Dev%2FMyriad_Lite_Turret-v0.0.0-20120510.lsl"/>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/index.php?title=User:Allen_Kerensky/Myriad_Lite_Dev/Myriad_Lite_Turret-v0.0.0-20120510.lsl&amp;action=history"/>
		<updated>2026-05-11T06:53:49Z</updated>
		<subtitle>Revision history for this page on the wiki</subtitle>
		<generator>MediaWiki 1.19.9</generator>

	<entry>
		<id>http://opensimulator.org/index.php?title=User:Allen_Kerensky/Myriad_Lite_Dev/Myriad_Lite_Turret-v0.0.0-20120510.lsl&amp;diff=29838&amp;oldid=prev</id>
		<title>Allen Kerensky: created</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/index.php?title=User:Allen_Kerensky/Myriad_Lite_Dev/Myriad_Lite_Turret-v0.0.0-20120510.lsl&amp;diff=29838&amp;oldid=prev"/>
				<updated>2012-05-20T17:09:00Z</updated>
		
		<summary type="html">&lt;p&gt;created&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;= Myriad_Lite_Turret-v0.0.0-20120510.lsl =&lt;br /&gt;
 &amp;lt;source lang=&amp;quot;lsl&amp;quot;&amp;gt;&lt;br /&gt;
// Myriad_Lite_Turret-v0.0.0-20120510.lsl&lt;br /&gt;
// Copyright (c) 2012 By Allen Kerensky (OSG/SL)&lt;br /&gt;
// The Myriad RPG System was designed, written, and illustrated by Ashok Desai&lt;br /&gt;
// Myriad RPG licensed under the Creative Commons Attribution 2.0 UK: England and Wales&lt;br /&gt;
// http://creativecommons.org/licenses/by/2.0/uk/&lt;br /&gt;
// Myriad Lite software Copyright (c) 2011-2012 by Allen Kerensky (OSG/SL)&lt;br /&gt;
// Baroun's Adventure Machine Copyright (c) 2008-2011 by Baroun Tardis (SL)&lt;br /&gt;
// Myriad Lite and Baroun's Adventure Machine licensed under the&lt;br /&gt;
// Creative Commons Attribution-Share Alike-Non-Commercial 3.0 Unported&lt;br /&gt;
// http://creativecommons.org/licenses/by-nc-sa/3.0/&lt;br /&gt;
// You must agree to the terms of this license before making any use of this software.&lt;br /&gt;
// If you do not agree to this license, simply delete these materials.&lt;br /&gt;
// There is no warranty, express or implied, for your use of these materials.&lt;br /&gt;
&lt;br /&gt;
// MYRIAD COMBAT STATS&lt;br /&gt;
integer POWER = 3; // attack stat&lt;br /&gt;
integer ATTSKILL = 1; // attack skill&lt;br /&gt;
integer DAMAGEDICE = 1;&lt;br /&gt;
&lt;br /&gt;
// TURRENT CONFIGURATION&lt;br /&gt;
float RANGE = 30.0; // detection range to start shooting&lt;br /&gt;
float RATE = 0.5; // seconds between shots&lt;br /&gt;
float BULLET_VELOCITY = 30.0;                       // change this to change the speed of the bullet.&lt;br /&gt;
string gunsound = &amp;quot;pistol_shot.wav&amp;quot;;                            // string; name of sound in inventory&lt;br /&gt;
string ammo =  &amp;quot;Myriad Lite Bullet Turret v0.0.0 20120511&amp;quot;; //name of desired object to be shot out. Must be in the inventory of the &amp;quot;gun&amp;quot;.&lt;br /&gt;
integer ANTIDELAY = TRUE; // use antidelay nodes for rapid fire?&lt;br /&gt;
&lt;br /&gt;
// RUNTIME&lt;br /&gt;
integer FLAG_DEBUG;&lt;br /&gt;
integer ISACTIVE = FALSE;&lt;br /&gt;
integer CHANOBJECT;&lt;br /&gt;
integer HANDLE;&lt;br /&gt;
vector OFFSET = &amp;lt;0,0, 2.1&amp;gt;;                // rez offset for bullet&lt;br /&gt;
vector pos;&lt;br /&gt;
rotation rot;&lt;br /&gt;
vector offset;&lt;br /&gt;
string DIV = &amp;quot;|&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
// DEBUG&lt;br /&gt;
DEBUG(string debugmsg) {&lt;br /&gt;
    if ( FLAG_DEBUG == TRUE ) llOwnerSay(&amp;quot;TURRET: &amp;quot;+(string)debugmsg);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// SETUP&lt;br /&gt;
SETUP() {&lt;br /&gt;
    FLAG_DEBUG = FALSE;&lt;br /&gt;
    ANTIDELAY = TRUE;&lt;br /&gt;
    CHANOBJECT = (integer)(&amp;quot;0x&amp;quot;+llGetSubString(llGetKey(),0,6)); // calculate turret's dynamic channel&lt;br /&gt;
    if ( HANDLE != 0 ) llListenRemove(HANDLE);&lt;br /&gt;
    HANDLE = llListen(CHANOBJECT,&amp;quot;&amp;quot;,NULL_KEY,&amp;quot;&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
default {&lt;br /&gt;
    //------------------------------------------------------------------------&lt;br /&gt;
    // LISTEN EVENT - whispers, says, shouts, regionsays&lt;br /&gt;
    //------------------------------------------------------------------------&lt;br /&gt;
    listen(integer channel,string speakername,key speakerid,string message) {&lt;br /&gt;
        DEBUG(&amp;quot;listen: &amp;quot;+message);&lt;br /&gt;
        channel = 0; //LSLINT&lt;br /&gt;
        speakername = &amp;quot;&amp;quot;; //LSLINT&lt;br /&gt;
        speakerid = NULL_KEY; //LSLINT&lt;br /&gt;
        list fields = llParseString2List(message,[DIV],[]); // break line of text into = delimited fields&lt;br /&gt;
        string command = llToLower(llStringTrim(llList2String(fields,0),STRING_TRIM)); // field zero is the &amp;quot;command&amp;quot;&lt;br /&gt;
&lt;br /&gt;
        // If Your Bullet has hit, fire a hitcheck regionwide at targetplayer's channel&lt;br /&gt;
        if ( command == &amp;quot;rangedcombat&amp;quot; ) {&lt;br /&gt;
            integer attdice = llList2Integer(fields,1); // get attack dice of weapon used&lt;br /&gt;
            string hitwho = llList2String(fields,2); // get UUID of who we hit&lt;br /&gt;
            string bywho = llList2String(fields,3); // should be our own UUID&lt;br /&gt;
            string bywhat = llList2String(fields,4); // name of item we hit with (good for bullets/missiles)&lt;br /&gt;
&lt;br /&gt;
            integer victimchan = (integer)(&amp;quot;0x&amp;quot;+llGetSubString(hitwho,0,6)); // calculate victim's dynamic channel&lt;br /&gt;
            llRegionSay(victimchan,&amp;quot;RANGEDHIT&amp;quot;+DIV+(string)POWER+DIV+(string)ATTSKILL+DIV+(string)attdice+DIV+(string)bywho+DIV+bywhat); // attack!&lt;br /&gt;
            DEBUG((string)victimchan+&amp;quot; RANGEDHIT&amp;quot;+DIV+(string)POWER+DIV+(string)ATTSKILL+DIV+(string)attdice+DIV+(string)bywho+DIV+bywhat);&lt;br /&gt;
            return;&lt;br /&gt;
        } // end if RANGEDCOMBAT/TOHIT&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    no_sensor() {&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    // OBJECT_REZ&lt;br /&gt;
    object_rez(key child) { // tell child turret bullet our key for combat resolution&lt;br /&gt;
        integer childchan = (integer)(&amp;quot;0x&amp;quot;+llGetSubString((string)child,0,6)); // get turret bullet's dynamic channel&lt;br /&gt;
        llRegionSay(childchan,(string)llGetKey()); // tell turret bullet who shot them&lt;br /&gt;
    }    &lt;br /&gt;
    &lt;br /&gt;
    sensor(integer num_detected) {&lt;br /&gt;
        num_detected = 0; //LSLINT&lt;br /&gt;
        // use sensor detected index 0 to only shoot at closest &lt;br /&gt;
        vector targetpos = llDetectedPos(0);&lt;br /&gt;
        llLookAt(targetpos,1,1);&lt;br /&gt;
        float dist = llVecDist(llGetPos(),llDetectedPos(0));&lt;br /&gt;
        if(llVecDist(llGetPos(),llDetectedPos(0)+llRot2Fwd(llDetectedRot(0))*dist) &amp;lt; 1.5) {&lt;br /&gt;
            // Fire 1 bullet,,  the heart of the firearm script.&lt;br /&gt;
            pos = llGetPos(); // get our current position&lt;br /&gt;
            rot = llGetRot(); // get our current rotation&lt;br /&gt;
            offset = OFFSET; // start with the base offset for the gun held in the right hand&lt;br /&gt;
            offset *= rot; // now, rotate the offset to match the avatar rotation&lt;br /&gt;
            pos += offset; // now combine the rotated offset with avatar position &lt;br /&gt;
            vector fwd = llRot2Up(rot); // calculate the direction that is &amp;quot;avatar's facing&amp;quot; &lt;br /&gt;
            fwd *= BULLET_VELOCITY; // now multiply that by bullet speed to tell bullet to push in that direction, that fast&lt;br /&gt;
            //rot *= llEuler2Rot(&amp;lt;0, PI_BY_TWO, 0&amp;gt;); // now, straighten rotation for object we're about to rez&lt;br /&gt;
            llPlaySound(gunsound,1.0); // here &amp;quot;gunsound&amp;quot;is a variable defined above.&lt;br /&gt;
            // DAMAGEDICE is passed to rez-param of bullet. Myriad Bullets read this as damage dice to do if they hit&lt;br /&gt;
            if ( ANTIDELAY == FALSE ) {&lt;br /&gt;
                llRezObject(ammo, pos, fwd, rot, DAMAGEDICE); // does the actual work rezzes the ammo in the specified variables.&lt;br /&gt;
            } else {&lt;br /&gt;
                llMessageLinked(LINK_THIS,-123,ammo+&amp;quot;~~~&amp;quot;+(string)pos+&amp;quot;~~~&amp;quot;+(string)fwd+&amp;quot;~~~&amp;quot;+(string)fwd+&amp;quot;~~~&amp;quot;+(string)DAMAGEDICE,&amp;quot;rezobject&amp;quot;);&lt;br /&gt;
            }&lt;br /&gt;
            //llSleep(RATE); // force a pause between shots            &lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    state_entry() {&lt;br /&gt;
        SETUP();&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    touch_start(integer num_detected) {&lt;br /&gt;
        num_detected = 0; // LSLINT&lt;br /&gt;
        if ( ISACTIVE == FALSE ) {&lt;br /&gt;
            ISACTIVE = TRUE;&lt;br /&gt;
            CHANOBJECT = (integer)(&amp;quot;0x&amp;quot;+llGetSubString(llGetKey(),0,6));&lt;br /&gt;
            HANDLE = llListen(CHANOBJECT,&amp;quot;&amp;quot;,NULL_KEY,&amp;quot;&amp;quot;);&lt;br /&gt;
            llSensorRepeat(&amp;quot;&amp;quot;,NULL_KEY,AGENT,RANGE,PI,RATE);&lt;br /&gt;
            llSay(PUBLIC_CHANNEL,&amp;quot;Turret active&amp;quot;);&lt;br /&gt;
        } else {&lt;br /&gt;
            ISACTIVE = FALSE;&lt;br /&gt;
            llSensorRemove();&lt;br /&gt;
            llListenRemove(HANDLE);&lt;br /&gt;
            llSay(PUBLIC_CHANNEL,&amp;quot;Turret no longer active&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Allen Kerensky</name></author>	</entry>

	</feed>