Table of Contents

Shortnote

The following variation on the corrade inviter, invites agents every time they are detected while performing scans every 1 second in a 5 meter range. The difference from the once per agent script is that when no agent is detected, the list is cleared. This prevents spamming agents but ensures that they will be invited again once they return.

This assumes that at some point the script will not detect any agent and by tweaking the line:

llSensorRepeat("", "", AGENT,5, TWO_PI, 1);

in order to allow agents to not be detected at some point. The line above scans for agents in a 5 meter range every 1 second and assumes that at some point nobody is going to be in the 5 meter range so that the visitor list can be deleted.

Code

///////////////////////////////////////////////////////////////////////////
//  Copyright (C) Wizardry and Steamworks 2013 - License: CC BY 2.0      //
///////////////////////////////////////////////////////////////////////////
 
///////////////////////////////////////////////////////////////////////////
//                            CONFIGURATION                              //
///////////////////////////////////////////////////////////////////////////
// The UUID / Key of the scripted agent.
string CORRADE = "aaa465f0-e18c-4aec-baa2-21b153092886";
// The name of the group to invite to.
string GROUP = "My Group";
// The password for that group in Corrade.ini.
string PASSWORD = "mypassword";
///////////////////////////////////////////////////////////////////////////
//                          END CONFIGURATION                            //
///////////////////////////////////////////////////////////////////////////
 
///////////////////////////////////////////////////////////////////////////
//    Copyright (C) 2013 Wizardry and Steamworks - License: CC BY 2.0    //
///////////////////////////////////////////////////////////////////////////
string wasKeyValueGet(string var, string kvp) {
    list dVars = llParseString2List(kvp, ["&"], []);
    do {
        list data = llParseString2List(llList2String(dVars, 0), ["="], []);
        string k = llList2String(data, 0);
        if(k != var) jump continue;
        return llList2String(data, 1);
@continue;
        dVars = llDeleteSubList(dVars, 0, 0);
    } while(llGetListLength(dVars));
    return "";
}
 
///////////////////////////////////////////////////////////////////////////
//    Copyright (C) 2013 Wizardry and Steamworks - License: CC BY 2.0    //
///////////////////////////////////////////////////////////////////////////
string wasKeyValueEncode(list kvp) {
    if(llGetListLength(kvp) < 2) return "";
    string k = llList2String(kvp, 0);
    kvp = llDeleteSubList(kvp, 0, 0);
    string v = llList2String(kvp, 0);
    kvp = llDeleteSubList(kvp, 0, 0);
    if(llGetListLength(kvp) < 2) return k + "=" + v;
    return k + "=" + v + "&" + wasKeyValueEncode(kvp);
}
 
///////////////////////////////////////////////////////////////////////////
//    Copyright (C) 2015 Wizardry and Steamworks - License: CC BY 2.0    //
///////////////////////////////////////////////////////////////////////////
// escapes a string in conformance with RFC1738
string wasURLEscape(string i) {
    string o = "";
    do {
        string c = llGetSubString(i, 0, 0);
        i = llDeleteSubString(i, 0, 0);
        if(c == "") jump continue;
        if(c == " ") {
            o += "+";
            jump continue;
        }
        if(c == "\n") {
            o += "%0D" + llEscapeURL(c);
            jump continue;
        }
        o += llEscapeURL(c);
@continue;
    } while(i != "");
    return o;
}
 
list vList = [];
 
default {
    state_entry() {
        llSensorRepeat("", "", AGENT,64, TWO_PI, 1);
        llSetTimerEvent(1);
    }
    sensor(integer num) {
        --num;
        do {
            string d = llDetectedName(num);
            if(llListFindList(vList, (list)d) != -1) jump next;
            list name = llParseString2List(llDetectedName(num), [" "], []);
            llInstantMessage(CORRADE, wasKeyValueEncode(
                [
                    "command", "invite",
                    "group", wasURLEscape(GROUP),
                    "password", wasURLEscape(PASSWORD),
                    "firstname", llList2String(name, 0),
                    "lastname", llList2String(name, 1)
                ])
            );
            vList += d;
@next;
        } while(--num>=-1);
    }
    no_sensor() {
        vList = [];
    }
    timer() {
        if(llGetFreeMemory() > 2048) return;
        if(llGetListLength(vList) == 0) return;
        vList = llDeleteSubList(vList, 0, 0);
    }
    changed(integer change) {
        if (change & (CHANGED_REGION | CHANGED_REGION_START))
            llResetScript();
    }
    on_rez(integer num) {
        llResetScript();
    }
}

Index


secondlife/scripted_agents/corrade/projects/in_world/group_inviters/every_time.txt ยท Last modified: 2019/01/03 01:36 (external edit)

Access website using Tor Access website using i2p Wizardry and Steamworks PGP Key


For the copyright, license, warranty and privacy terms for the usage of this website please see the license, privacy, copyright and the plagiarism pages.