Allen Kerensky"It seems you've been living two lives ..."

Myriad Lite Region Settings Editor

// Myriad_Lite_Region_Settings_Editor-P7a1-v0.0.0-20130928.lsl
// Copyright (c) 2012-2013 by Allen Kerensky (OSG/SL) All Rights Reserved.
// This work is dual-licensed under
// Creative Commons Attribution (CC BY) 3.0 Unported
// http://creativecommons.org/licenses/by/3.0/
// - or -
// Modified BSD License (3-clause)
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are met:
// * Redistributions of source code must retain the above copyright notice, 
//   this list of conditions and the following disclaimer.
// * Redistributions in binary form must reproduce the above copyright notice,
//   this list of conditions and the following disclaimer in the documentation
//   and/or other materials provided with the distribution.
// * Neither the name of Myriad Lite nor the names of its contributors may be
//   used to endorse or promote products derived from this software without
//   specific prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY EXPRESS OR
// IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
// OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN
// NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
// NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
// THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
//
// The Myriad RPG System was designed, written, and illustrated by Ashok Desai
// Myriad RPG System licensed under:
// Creative Commons Attribution (CC BY) 2.0 UK: England and Wales
// http://creativecommons.org/licenses/by/2.0/uk/
 
// FIXME
// Fix button and view prim names to align to functions called
// HELP BUTTON to give user manual
// WIZARD BUTTON to give guided tour
 
// VERSION CONTROL
string VERSION = "0.0.0"; // Allen Kerensky's script version
string VERSIONDATE = "20130928"; // Allen Kerensky's script yyyymmdd
 
integer RENDEZVOUS2; // the dynamic rendezvous channel the server will be listening on
integer CHANNEL; // our dynamic channel where the server can talk back to us
integer HANDLE; // listener control handle
 
string BUTTON;
 
list PRIMS = [];
 
string ASPECT; // singular aspect for record functions
list RECORDLIST;
integer CURRENTRECORD;
 
// Field names for records
string NAME;
string GENERATOR;
string UPDATER;
string STATMIN;
string SKILLMIN;
string STATMAX;
string SKILLMAX;
string SUMMARY;
string DESCRIPTION;
string GENRES;
string TYPE;
string ACTIVATION;
string ACTIONLIST;
string BASESTAT;
string ACTION;
string GPPERLEVEL;
string BOONMAX;
string FLAWMAX;
string STATPOOL;
string SKILLPOOL;
string PERSKILLS;
string SFXPOOL;
string HEALTHPOOL;
string GPPOOL;
string RESOURCES;
string GPCOST;
string STATLIST;
string BOONLIST;
string FLAWLIST;
string SKILLLIST;
string SFXLIST;
string ITEMLIST;
string RANGE;
string DAMAGE;
string RPCOST;
string PERIOD;
string BONUS;
string RATING;
 
integer FLAG_DEBUG;
 
// SWITCH USER INTERFACE BUTTONS FOR EACH ASPECT TO EDIT
// INPUT: 12 item list of texture names ["button1","button2",...,"button12"]
// NOTE: a texture name of "" will remain blank
SWITCHBUTTONS(list textures) {
    integer i = 0;
    for ( i = 0; i < 11; i++) {
        llSetLinkPrimitiveParamsFast(llListFindList(PRIMS,["BUTTON"+(string)(i+1)]),[PRIM_TEXTURE,2,"Blank",<1,1,1>,<0,0,0>,0.0]);
        llSetLinkPrimitiveParamsFast(llListFindList(PRIMS,["TEXT"+(string)(i+1)]),[PRIM_TEXT,"",<1,1,1>,1]);
        llSetLinkPrimitiveParamsFast(llListFindList(PRIMS,["BUTTON"+(string)(i+1)]),[PRIM_TEXTURE,2,llList2String(textures,i),<1,1,1>,<0,0,0>,0.0]);
    }
}
 
// break down the attribute names and values for each incoming aspect record
TOKENPARSE(string msg) {
    // MSG FORMAT: COMMAND[|ATTRIBUTE=VALUE[|ATTRIBUTE=VALUE[|...]]]
    list tokens = llParseString2List(msg,["|"],[]);
    integer tokencount = llGetListLength(tokens);                
 
    // process each attrib=value pair
    integer j;
    for ( j = 0; j <= tokencount; j++) {
        string currenttoken = llList2String(tokens,j);
        list attribvalpair = llParseString2List(currenttoken,["="],[]);
        string attrib = llToLower(llList2String(attribvalpair,0));
        string sdata = llList2String(attribvalpair,1);
        if ( attrib == "name" ) NAME = sdata;
        if ( attrib == "generator" ) GENERATOR = sdata;
        if ( attrib == "updater" ) UPDATER = sdata;
        if ( attrib == "statmin" ) STATMIN = sdata;
        if ( attrib == "statmax" ) STATMAX = sdata;
        if ( attrib == "summary" ) SUMMARY = sdata;
        if ( attrib == "description" ) DESCRIPTION = sdata;
        if ( attrib == "skillmin" ) SKILLMIN = sdata;
        if ( attrib == "skillmax" ) SKILLMAX = sdata;
        if ( attrib == "genres" ) GENRES = sdata;
        if ( attrib == "type" ) TYPE = sdata;
        if ( attrib == "activation" ) ACTIVATION = sdata;
        if ( attrib == "actionlist" ) ACTIONLIST = sdata;
        if ( attrib == "basestat" ) BASESTAT = sdata;
        if ( attrib == "action" ) ACTION = sdata;
        if ( attrib == "gpperlevel" ) GPPERLEVEL = sdata;
        if ( attrib == "boonmax" ) BOONMAX = sdata;
        if ( attrib == "flawmax" ) FLAWMAX = sdata;
        if ( attrib == "statpool" ) STATPOOL = sdata;
        if ( attrib == "skillpool" ) SKILLPOOL = sdata;
        if ( attrib == "perskills" ) PERSKILLS = sdata;
        if ( attrib == "sfxpool" ) SFXPOOL = sdata;
        if ( attrib == "healthpool" ) HEALTHPOOL = sdata;
        if ( attrib == "gppool" ) GPPOOL = sdata;
        if ( attrib == "resources" ) RESOURCES = sdata;
        if ( attrib == "gpcost" ) GPCOST = sdata;
        if ( attrib == "statlist" ) STATLIST = sdata;
        if ( attrib == "boonlist" ) BOONLIST = sdata;
        if ( attrib == "flawlist" ) FLAWLIST = sdata;
        if ( attrib == "skilllist" ) SKILLLIST = sdata;
        if ( attrib == "sfxlist" ) SFXLIST = sdata;
        if ( attrib == "itemlist" ) ITEMLIST = sdata;
        if ( attrib == "range" ) RANGE = sdata;
        if ( attrib == "damage" ) DAMAGE = sdata;
        if ( attrib == "rpcost" ) RPCOST = sdata;
        if ( attrib == "period" ) PERIOD = sdata;
        if ( attrib == "bonus" ) BONUS = sdata;                
        if ( attrib == "rating" ) RATING = sdata;
    }
    if ( ASPECT == "STATISTIC" )  UPDATEVIEW([NAME,GENERATOR,UPDATER,STATMIN,STATMAX,SUMMARY,DESCRIPTION,"","","",""]);
    if ( ASPECT == "SKILL" )      UPDATEVIEW([NAME,GENERATOR,UPDATER,SKILLMIN,SKILLMAX,SUMMARY,GENRES,DESCRIPTION,"","",""]);            
    if ( ASPECT == "EFFECT" )     UPDATEVIEW([NAME,TYPE,ACTIVATION,ACTIONLIST,DESCRIPTION,"","","","","",""]);
    if ( ASPECT == "RESILIENCE")  UPDATEVIEW([NAME,BASESTAT,TYPE,ACTION,DESCRIPTION,"","","","","",""]);
    if ( ASPECT == "BOON")        UPDATEVIEW([NAME,TYPE,GPPERLEVEL,BOONMAX,DESCRIPTION,"","","","","",""]);
    if ( ASPECT == "FLAW")        UPDATEVIEW([NAME,TYPE,GPPERLEVEL,FLAWMAX,DESCRIPTION,"","","","","",""]);
    if ( ASPECT == "CAMPAIGN")    UPDATEVIEW([NAME,STATPOOL,SKILLPOOL,PERSKILLS,SFXPOOL,HEALTHPOOL,GPPOOL,STATMAX,SKILLMAX,RESOURCES,""]);
    if ( ASPECT == "SPECIE" )     UPDATEVIEW([NAME,GPCOST,STATLIST,BOONLIST,FLAWLIST,SFXLIST,SKILLLIST,ITEMLIST,DESCRIPTION,""]);
    if ( ASPECT == "BACKGROUND" ) UPDATEVIEW([NAME,GPCOST,STATLIST,BOONLIST,FLAWLIST,SFXLIST,SKILLLIST,ITEMLIST,DESCRIPTION,""]);
    if ( ASPECT == "CAREER" )     UPDATEVIEW([NAME,GPCOST,STATLIST,BOONLIST,FLAWLIST,SFXLIST,SKILLLIST,ITEMLIST,DESCRIPTION,""]);
    if ( ASPECT == "ITEM" )       UPDATEVIEW([NAME,TYPE,RANGE,DAMAGE,RPCOST,PERIOD,BONUS,RATING,ACTIVATION,ACTIONLIST,DESCRIPTION]);
}
 
// UPDATE HOVERTEXT PRIMS WITH CURRENT VALUES BY RECORD
// INPUT: 12 item list of text values ["value1","value2",...,"value12"]
// NOTE: use "" for empty values
UPDATEVIEW(list values) {
    integer i = 0;
    for ( i = 0; i < 11; i++) {
        llSetLinkPrimitiveParamsFast(llListFindList(PRIMS,["TEXT"+(string)(i+1)]),[PRIM_TEXT,"",<1,1,1>,1]);
        llSetLinkPrimitiveParamsFast(llListFindList(PRIMS,["TEXT"+(string)(i+1)]),[PRIM_TEXT,llList2String(values,i),<1,1,1>,1]);        
    }
}
 
default {
 
    state_entry() {
        FLAG_DEBUG = FALSE;
 
        list details = llGetParcelDetails(<0,0,0>,[PARCEL_DETAILS_ID]);
        string parcelid = llList2String(details,0);
        RENDEZVOUS2 = (integer)("0x"+llGetSubString(parcelid,0,7));
        llSay(PUBLIC_CHANNEL,"Rendezvous channel is "+(string)RENDEZVOUS2);
 
        integer prims = llGetNumberOfPrims();
        integer i;
        for ( i = 0; i <= prims; i++ ) {
            string name = llList2String(llGetLinkPrimitiveParams(i,[PRIM_NAME]),0);
            PRIMS = PRIMS + [ name ]; // store name of prim in list to find its prim number fast later
            llSetLinkPrimitiveParamsFast(i,[PRIM_TEXT,"",<0,0,0>,0]); // clear any set hovertext
        }
 
        CHANNEL = (integer)("0x"+llGetSubString(llGetKey(),0,6));
        if ( HANDLE != 0 ) llListenRemove(HANDLE);
        HANDLE = llListen(CHANNEL,"",NULL_KEY,"");
 
        ASPECT = "STATISTIC";
        SWITCHBUTTONS(["Statistic_Name","Statistic_Generator","Statistic_Updater","Statistic_Minimum","Statistic_Maximum","Statistic_Summary","Statistic_Description","","","",""]);
        llRegionSay(RENDEZVOUS2,"LIST_"+ASPECT+"S");
 
        llSay(PUBLIC_CHANNEL,llGetScriptName()+" (version "+VERSION+"-"+VERSIONDATE+") ready.");
 
    }
 
    //------------------------------------------------------------------------
    listen(integer channel,string name,key id,string msg) {
        if ( FLAG_DEBUG == TRUE ) llSay(PUBLIC_CHANNEL,"DEBUG: channel=["+(string)channel+"] name=["+name+"] id=["+(string)id+"] msg=["+msg+"]");
        if ( llGetSubString(msg,0,8) == "RESPONSE=" ) {
            llSay(PUBLIC_CHANNEL,"RESPONSE: "+llGetSubString(msg,9,-1));
            return;
        }
 
        // check for empty list and record messages from server and ignore - this check saves lots of other if thens...
        list badmsgs = [ "STATISTICS|","STATISTIC|","SKILLS|","SKILL|","EFFECTS|","EFFECT|","RESILIENCES|","RESILIENCE|","BOONS|","BOON|","FLAWS|","FLAW|","CAMPAIGNS|","CAMPAIGN|","SPECIES|","SPECIE|","BACKGROUNDS|","BACKGROUND|","CAREERS|","CAREER|","ITEMS|","ITEM|"];
        if ( llListFindList(badmsgs,[msg]) != -1 ) {
            RECORDLIST = [];
            CURRENTRECORD = 0;
            llSetLinkPrimitiveParamsFast(llListFindList(PRIMS,["TEXT_LIST"]),[PRIM_TEXT,"Empty List",<1,1,1>,1]);
            return;
        }
        if ( llGetSubString(msg,0,10) == "STATISTICS|" ) {            
            RECORDLIST = llCSV2List(llGetSubString(msg,11,-1));
            string current = llList2String(RECORDLIST,CURRENTRECORD)+"\nSTATISTIC "+((string)(CURRENTRECORD+1))+" of "+(string)llGetListLength(RECORDLIST);
            llSetLinkPrimitiveParamsFast(llListFindList(PRIMS,["TEXT_LIST"]),[PRIM_TEXT,current,<1,1,1>,1]);
            llRegionSay(RENDEZVOUS2,"GET_STATISTIC|"+llStringTrim(llList2String(RECORDLIST,CURRENTRECORD),STRING_TRIM));
            return;
        }
        if ( llGetSubString(msg,0,6) == "SKILLS|" ) {
            RECORDLIST = llCSV2List(llGetSubString(msg,7,-1));
            string current = llList2String(RECORDLIST,CURRENTRECORD)+"\nSKILL "+((string)(CURRENTRECORD+1))+" of "+(string)llGetListLength(RECORDLIST);
            llSetLinkPrimitiveParamsFast(llListFindList(PRIMS,["TEXT_LIST"]),[PRIM_TEXT,current,<1,1,1>,1]);
            llRegionSay(RENDEZVOUS2,"GET_SKILL|"+llStringTrim(llList2String(RECORDLIST,CURRENTRECORD),STRING_TRIM));
            return;
        }
        if ( llGetSubString(msg,0,7) == "EFFECTS|" ) {
            RECORDLIST = llCSV2List(llGetSubString(msg,8,-1));
            string current = llList2String(RECORDLIST,CURRENTRECORD)+"\nSFX "+((string)(CURRENTRECORD+1))+" of "+(string)llGetListLength(RECORDLIST);
            llSetLinkPrimitiveParamsFast(llListFindList(PRIMS,["TEXT_LIST"]),[PRIM_TEXT,current,<1,1,1>,1]);
            llRegionSay(RENDEZVOUS2,"GET_EFFECT|"+llStringTrim(llList2String(RECORDLIST,CURRENTRECORD),STRING_TRIM));
            return;
        }
        if ( llGetSubString(msg,0,11) == "RESILIENCES|" ) {
            RECORDLIST = llCSV2List(llGetSubString(msg,12,-1));
            string current = llList2String(RECORDLIST,CURRENTRECORD)+"\nRESILIENCE "+((string)(CURRENTRECORD+1))+" of "+(string)llGetListLength(RECORDLIST);
            llSetLinkPrimitiveParamsFast(llListFindList(PRIMS,["TEXT_LIST"]),[PRIM_TEXT,current,<1,1,1>,1]);
            llRegionSay(RENDEZVOUS2,"GET_RESILIENCE|"+llStringTrim(llList2String(RECORDLIST,CURRENTRECORD),STRING_TRIM));
            return;
        }
        if ( llGetSubString(msg,0,5) == "BOONS|" ) {
            RECORDLIST = llCSV2List(llGetSubString(msg,6,-1));
            string current = llList2String(RECORDLIST,CURRENTRECORD)+"\nBOON "+((string)(CURRENTRECORD+1))+" of "+(string)llGetListLength(RECORDLIST);
            llSetLinkPrimitiveParamsFast(llListFindList(PRIMS,["TEXT_LIST"]),[PRIM_TEXT,current,<1,1,1>,1]);
            llRegionSay(RENDEZVOUS2,"GET_BOON|"+llStringTrim(llList2String(RECORDLIST,CURRENTRECORD),STRING_TRIM));
            return;
        }
        if ( llGetSubString(msg,0,5) == "FLAWS|" ) {
            RECORDLIST = llCSV2List(llGetSubString(msg,6,-1));
            string current = llList2String(RECORDLIST,CURRENTRECORD)+"\nFLAW "+((string)(CURRENTRECORD+1))+" of "+(string)llGetListLength(RECORDLIST);
            llSetLinkPrimitiveParamsFast(llListFindList(PRIMS,["TEXT_LIST"]),[PRIM_TEXT,current,<1,1,1>,1]);
            llRegionSay(RENDEZVOUS2,"GET_FLAW|"+llStringTrim(llList2String(RECORDLIST,CURRENTRECORD),STRING_TRIM));
            return;
        }
        if ( llGetSubString(msg,0,9) == "CAMPAIGNS|" ) {
            RECORDLIST = llCSV2List(llGetSubString(msg,10,-1));
            string current = llList2String(RECORDLIST,CURRENTRECORD)+"\nCAMPAIGN "+((string)(CURRENTRECORD+1))+" of "+(string)llGetListLength(RECORDLIST);
            llSetLinkPrimitiveParamsFast(llListFindList(PRIMS,["TEXT_LIST"]),[PRIM_TEXT,current,<1,1,1>,1]);
            llRegionSay(RENDEZVOUS2,"GET_CAMPAIGN|"+llStringTrim(llList2String(RECORDLIST,CURRENTRECORD),STRING_TRIM));
            return;
        }
        if ( llGetSubString(msg,0,7) == "SPECIES|" ) {
            RECORDLIST = llCSV2List(llGetSubString(msg,8,-1));
            string current = llList2String(RECORDLIST,CURRENTRECORD)+"\nSPECIE "+((string)(CURRENTRECORD+1))+" of "+(string)llGetListLength(RECORDLIST);
            llSetLinkPrimitiveParamsFast(llListFindList(PRIMS,["TEXT_LIST"]),[PRIM_TEXT,current,<1,1,1>,1]);
            llRegionSay(RENDEZVOUS2,"GET_SPECIE|"+llStringTrim(llList2String(RECORDLIST,CURRENTRECORD),STRING_TRIM));
            return;
        }
        if ( llGetSubString(msg,0,11) == "BACKGROUNDS|" ) {
            RECORDLIST = llCSV2List(llGetSubString(msg,12,-1));
            string current = llList2String(RECORDLIST,CURRENTRECORD)+"\nBACKGROUND "+((string)(CURRENTRECORD+1))+" of "+(string)llGetListLength(RECORDLIST);
            llSetLinkPrimitiveParamsFast(llListFindList(PRIMS,["TEXT_LIST"]),[PRIM_TEXT,current,<1,1,1>,1]);
            llRegionSay(RENDEZVOUS2,"GET_BACKGROUND|"+llStringTrim(llList2String(RECORDLIST,CURRENTRECORD),STRING_TRIM));
            return;
        }
        if ( llGetSubString(msg,0,7) == "CAREERS|" ) {
            RECORDLIST = llCSV2List(llGetSubString(msg,8,-1));
            string current = llList2String(RECORDLIST,CURRENTRECORD)+"\nCAREER "+((string)(CURRENTRECORD+1))+" of "+(string)llGetListLength(RECORDLIST);
            llSetLinkPrimitiveParamsFast(llListFindList(PRIMS,["TEXT_LIST"]),[PRIM_TEXT,current,<1,1,1>,1]);
            llRegionSay(RENDEZVOUS2,"GET_CAREER|"+llStringTrim(llList2String(RECORDLIST,CURRENTRECORD),STRING_TRIM));
            return;
        }
        if ( llGetSubString(msg,0,5) == "ITEMS|" ) {
            RECORDLIST = llCSV2List(llGetSubString(msg,6,-1));
            string current = llList2String(RECORDLIST,CURRENTRECORD)+"\nITEM "+((string)(CURRENTRECORD+1))+" of "+(string)llGetListLength(RECORDLIST);
            llSetLinkPrimitiveParamsFast(llListFindList(PRIMS,["TEXT_LIST"]),[PRIM_TEXT,current,<1,1,1>,1]);
            llRegionSay(RENDEZVOUS2,"GET_ITEM|"+llStringTrim(llList2String(RECORDLIST,CURRENTRECORD),STRING_TRIM));
            return;
        }
 
        // Break down incoming messages that are individual records
        if ( llGetSubString(msg,0,9) == "STATISTIC|" ) { TOKENPARSE(msg); return;}
        if ( llGetSubString(msg,0,5) == "SKILL|" ) { TOKENPARSE(msg); return;}
        if ( llGetSubString(msg,0,6) == "EFFECT|" ) { TOKENPARSE(msg); return;}
        if ( llGetSubString(msg,0,10) == "RESILIENCE|" ) { TOKENPARSE(msg); return;}
        if ( llGetSubString(msg,0,4) == "BOON|" ) { TOKENPARSE(msg); return;}
        if ( llGetSubString(msg,0,4) == "FLAW|" ) { TOKENPARSE(msg); return;}
        if ( llGetSubString(msg,0,8) == "CAMPAIGN|" ) { TOKENPARSE(msg); return;}
        if ( llGetSubString(msg,0,6) == "SPECIE|" ) { TOKENPARSE(msg); return;}
        if ( llGetSubString(msg,0,10) == "BACKGROUND|" ) { TOKENPARSE(msg); return;}
        if ( llGetSubString(msg,0,6) == "CAREER|" ) { TOKENPARSE(msg); return;}
        if ( llGetSubString(msg,0,4) == "ITEM|" ) { TOKENPARSE(msg); return;}
 
        //
        // DELETE
        //
        if ( msg == "DELETE" ) {
            string currecord;
            list aspectlist = [ "STATISTIC","SKILL","EFFECT","RESILIENCE","BOON","FLAW","CAMPAIGN","SPECIE","BACKGROUND","CAREER","ITEM"];
            if ( llListFindList(aspectlist,[ASPECT]) != -1 ) currecord = llStringTrim(llList2String(RECORDLIST,CURRENTRECORD),STRING_TRIM);
            if ( currecord != "" ) {
                llSay(PUBLIC_CHANNEL,"Sending DELETE_"+ASPECT+" command to server:\n"+currecord);
                llRegionSay(RENDEZVOUS2,"DELETE_"+ASPECT+"|"+currecord);
                CURRENTRECORD=0;
                RECORDLIST=[];
            }
            return;
        }
        if ( msg == "CLOSE" || msg == "CANCEL" || msg == "NO" ) {
            return;
        }
        if ( msg == "YES" ) { // save = yes
            string record;
            if ( ASPECT == "STATISTIC" )  record = "REQUEST=CREATE|ASPECT="+ASPECT+"|NAME="+NAME+"|GENERATOR="+GENERATOR+"|UPDATER="+UPDATER+"|STATMIN="+STATMIN+"|STATMAX="+STATMAX+"|SUMMARY="+SUMMARY+"|DESCRIPTION="+DESCRIPTION;
            if ( ASPECT == "SKILL" )      record = "REQUEST=CREATE|ASPECT="+ASPECT+"|NAME="+NAME+"|GENERATOR="+GENERATOR+"|UPDATER="+UPDATER+"|SKILLMIN="+SKILLMIN+"|SKILLMAX="+SKILLMAX+"|SUMMARY="+SUMMARY+"|GENRES="+GENRES+"|DESCRIPTION="+DESCRIPTION;
            if ( ASPECT == "EFFECT" )     record = "REQUEST=CREATE|ASPECT="+ASPECT+"|NAME="+NAME+"|TYPE="+TYPE+"|ACTIVATION="+ACTIVATION+"|ACTIONLIST="+ACTIONLIST+"|DESCRIPTION="+DESCRIPTION;
            if ( ASPECT == "RESILIENCE" ) record = "REQUEST=CREATE|ASPECT="+ASPECT+"|NAME="+NAME+"|BASESTAT="+BASESTAT+"|TYPE="+TYPE+"|ACTION="+ACTION+"|DESCRIPTION="+DESCRIPTION;
            if ( ASPECT == "BOON" )       record = "REQUEST=CREATE|ASPECT="+ASPECT+"|NAME="+NAME+"|TYPE="+TYPE+"|GPPERLEVEL="+GPPERLEVEL+"|BOONMAX="+BOONMAX+"|DESCRIPTION="+DESCRIPTION;
            if ( ASPECT == "FLAW" )       record = "REQUEST=CREATE|ASPECT="+ASPECT+"|NAME="+NAME+"|TYPE="+TYPE+"|GPPERLEVEL="+GPPERLEVEL+"|FLAWMAX="+FLAWMAX+"|DESCRIPTION="+DESCRIPTION;
            if ( ASPECT == "CAMPAIGN" )   record = "REQUEST=CREATE|ASPECT="+ASPECT+"|NAME="+NAME+"|STATPOOL="+STATPOOL+"|SKILLPOOL="+SKILLPOOL+"|PERSKILLS="+PERSKILLS+"|SFXPOOL="+SFXPOOL+"|HEALTHPOOL="+HEALTHPOOL+"|GPPOOL="+GPPOOL+"|STATMAX="+STATMAX+"|SKILLMAX="+SKILLMAX+"|RESOURCES="+RESOURCES;
            if ( ASPECT == "SPECIE" )     record = "REQUEST=CREATE|ASPECT="+ASPECT+"|NAME="+NAME+"|GPCOST="+GPCOST+"|STATLIST="+STATLIST+"|BOONLIST="+BOONLIST+"|FLAWLIST="+FLAWLIST+"|SFXLIST="+SFXLIST+"|SKILLLIST="+SKILLLIST+"|ITEMLIST="+ITEMLIST+"|DESCRIPTION="+DESCRIPTION;
            if ( ASPECT == "BACKGROUND" ) record = "REQUEST=CREATE|ASPECT="+ASPECT+"|NAME="+NAME+"|GPCOST="+GPCOST+"|STATLIST="+STATLIST+"|BOONLIST="+BOONLIST+"|FLAWLIST="+FLAWLIST+"|SFXLIST="+SFXLIST+"|SKILLLIST="+SKILLLIST+"|ITEMLIST="+ITEMLIST+"|DESCRIPTION="+DESCRIPTION;
            if ( ASPECT == "CAREER" )     record = "REQUEST=CREATE|ASPECT="+ASPECT+"|NAME="+NAME+"|GPCOST="+GPCOST+"|STATLIST="+STATLIST+"|BOONLIST="+BOONLIST+"|FLAWLIST="+FLAWLIST+"|SFXLIST="+SFXLIST+"|SKILLLIST="+SKILLLIST+"|ITEMLIST="+ITEMLIST+"|DESCRIPTION="+DESCRIPTION;
            if ( ASPECT == "ITEM" )       record = "REQUEST=CREATE|ASPECT="+ASPECT+"|NAME="+NAME+"|TYPE="+TYPE+"|RANGE="+RANGE+"|DAMAGE="+DAMAGE+"|RPCOST="+RPCOST+"|PERIOD="+PERIOD+"|BONUS="+BONUS+"|RATING="+RATING+"|ACTIVATION="+ACTIVATION+"|ACTIONLIST="+ACTIONLIST+"|DESCRIPTION="+DESCRIPTION;
            if ( record != "" ) {
                llSay(PUBLIC_CHANNEL,"Sending CREATE_"+ASPECT+" request to server:\n"+record);
                llRegionSay(RENDEZVOUS2,record);
            }
            return;
        }
        if ( msg == "RESET" ) { // reset confirmed
            llResetScript();
            return;
        }
        integer i;
        if ( BUTTON == "BUTTON1" ) {
            i = llListFindList(PRIMS,["TEXT1"]);
            NAME = msg;
            llSay(PUBLIC_CHANNEL,ASPECT+" NAME set to "+NAME);
        }
        if ( BUTTON == "BUTTON2" ) {
            i = llListFindList(PRIMS,["TEXT2"]);
            if ( ASPECT == "STATISTIC" ) {
                GENERATOR = llToUpper(msg);
                if ( GENERATOR != "POINTBUY" && GENERATOR != "TEMPLATE" && GENERATOR != "RANDOM" ) {
                    llSay(PUBLIC_CHANNEL,"Invalid STATISTIC GENERATOR specified. Please re-enter.");
                    return;
                }
                llSay(PUBLIC_CHANNEL,"STATISTIC GENERATOR set to "+GENERATOR);
            }
            if ( ASPECT == "SKILL" ) {
                GENERATOR = llToUpper(msg);
                if ( GENERATOR != "POINTBUY" && GENERATOR != "TEMPLATE" && GENERATOR != "RANDOM" ) {
                    llSay(PUBLIC_CHANNEL,"Invalid SKILL GENERATOR specified. Please re-enter.");
                    return;
                }
                llSay(PUBLIC_CHANNEL,"SKILL GENERATOR set to "+GENERATOR);        
            }
            if ( ASPECT == "EFFECT" ) {
                TYPE = llToUpper(msg);
                if ( TYPE != "MORTAL" && TYPE != "SOCIAL" && TYPE != "MAGIC" && TYPE != "VEHICLE" && TYPE != "ITEM" ) {
                    llSay(PUBLIC_CHANNEL,"Invalid EFFECT TYPE specified. Please re-enter.");
                    return;
                }
                llSay(PUBLIC_CHANNEL,"EFFECT TYPE set to "+TYPE);
            }
            if ( ASPECT == "RESILIENCE" ) { BASESTAT = msg; llSay(PUBLIC_CHANNEL,"RESILIENCE BASESTAT set to "+BASESTAT);}
            if ( ASPECT == "BOON" ) {
                TYPE = llToUpper(msg);
                if ( TYPE != "GENERAL" && TYPE != "RACIAL" ) {
                    llSay(PUBLIC_CHANNEL,"Invalid BOON TYPE specified. Please re-enter.");
                    return;
                }
                llSay(PUBLIC_CHANNEL,"BOON TYPE set to "+TYPE);
            }
            if ( ASPECT == "FLAW" ) {
                TYPE = llToUpper(msg);
                if ( TYPE != "GENERAL" && TYPE != "RACIAL" ) {
                    llSay(PUBLIC_CHANNEL,"Invalid FLAW TYPE specified. Please re-enter.");
                    return;
                }
                llSay(PUBLIC_CHANNEL,"FLAW TYPE set to "+TYPE);
            }
            if ( ASPECT == "CAMPAIGN" ) { STATPOOL = msg; llSay(PUBLIC_CHANNEL,"CAMPAIGN STATPOOL set to "+STATPOOL);}
            if ( ASPECT == "SPECIE" ) { GPCOST = msg; llSay(PUBLIC_CHANNEL,"SPECIE GPCOST set to "+GPCOST);}
            if ( ASPECT == "BACKGROUND" ) { GPCOST = msg; llSay(PUBLIC_CHANNEL,"BACKGROUND GPCOST set to "+GPCOST);}
            if ( ASPECT == "CAREER" ) { GPCOST = msg; llSay(PUBLIC_CHANNEL,"CAREER GPCOST set to "+GPCOST);}
            if ( ASPECT == "ITEM" ) { TYPE = msg; llSay(PUBLIC_CHANNEL,"ITEM TYPE set to "+TYPE);}    
        }
        if ( BUTTON == "BUTTON3" ) {
            i = llListFindList(PRIMS,["TEXT3"]);
            if ( ASPECT == "STATISTIC" ) {
                UPDATER = llToUpper(msg);
                if ( UPDATER != "LEVEL" && UPDATER != "GRADUAL" && UPDATER != "RANDOM" ) {
                    llSay(PUBLIC_CHANNEL,"Invalid STATISTIC UPDATER specified. Please re-enter.");
                    return;
                }            
                llSay(PUBLIC_CHANNEL,"STATISTIC UPDATER set to "+UPDATER);
            }
            if ( ASPECT == "SKILL" ) {
                UPDATER = llToUpper(msg);
                if ( UPDATER != "LEVEL" && UPDATER != "GRADUAL" && UPDATER != "RANDOM" ) {
                    llSay(PUBLIC_CHANNEL,"Invalid SKILL UPDATER specified. Please re-enter.");
                    return;
                }            
                llSay(PUBLIC_CHANNEL,"SKILL UPDATER set to "+UPDATER);            
            }
            if ( ASPECT == "EFFECT" ) { ACTIVATION = msg; llSay(PUBLIC_CHANNEL,"EFFECT ACTIVATION set to "+ACTIVATION);}
            if ( ASPECT == "RESILIENCE") {
                TYPE = llToUpper(msg);
                if ( TYPE != "NONCRITICAL" && TYPE != "CRITICAL" ) {
                    llSay(PUBLIC_CHANNEL,"Invalid RESILIENCE TYPE specified. Please re-enter.");
                    return;
                }
                llSay(PUBLIC_CHANNEL,"RESILIENCE TYPE set to "+TYPE);
            }
            if ( ASPECT == "BOON" ) { GPPERLEVEL = msg; llSay(PUBLIC_CHANNEL,"BOON GPPERLEVEL set to "+GPPERLEVEL);}
            if ( ASPECT == "FLAW" ) { GPPERLEVEL = msg; llSay(PUBLIC_CHANNEL,"FLAW GPPERLEVEL set to "+GPPERLEVEL);}
            if ( ASPECT == "CAMPAIGN" ) { SKILLPOOL = msg; llSay(PUBLIC_CHANNEL,"CAMPAIGN SKILLPOOL set to "+SKILLPOOL);}
            if ( ASPECT == "SPECIE" ){ STATLIST = msg; llSay(PUBLIC_CHANNEL,"SPECIE STATLIST set to "+STATLIST); }
            if ( ASPECT == "BACKGROUND" ){ STATLIST = msg; llSay(PUBLIC_CHANNEL,"BACKGROUND STATLIST set to "+STATLIST); }
            if ( ASPECT == "CAREER" ){ STATLIST = msg; llSay(PUBLIC_CHANNEL,"CAREER STATLIST set to "+STATLIST); }
            if ( ASPECT == "ITEM" ) { RANGE = msg; llSay(PUBLIC_CHANNEL,"ITEM RANGE set to "+RANGE);}
        }
        if ( BUTTON == "BUTTON4" ) {
            i = llListFindList(PRIMS,["TEXT4"]);
            if ( ASPECT == "STATISTIC" ) { STATMIN = msg; llSay(PUBLIC_CHANNEL,"STATISTIC MINIMUM set to "+STATMIN); }
            if ( ASPECT == "SKILL" ){ SKILLMIN = msg; llSay(PUBLIC_CHANNEL,"SKILL MINIMUM set to "+SKILLMIN); }
            if ( ASPECT == "EFFECT" ){ ACTIONLIST = msg; llSay(PUBLIC_CHANNEL,"EFFECT ACTIONLIST set to "+ACTIONLIST); }
            if ( ASPECT == "RESILIENCE" ){ ACTION = msg; llSay(PUBLIC_CHANNEL,"RESILIENCE ACTION set to "+ACTION); }
            if ( ASPECT == "BOON" ){ BOONMAX = msg; llSay(PUBLIC_CHANNEL,"BOON BOONMAX set to "+BOONMAX); }
            if ( ASPECT == "FLAW" ){ FLAWMAX = msg; llSay(PUBLIC_CHANNEL,"FLAW FLAWMAX set to "+FLAWMAX); }
            if ( ASPECT == "CAMPAIGN" ){ PERSKILLS = msg; llSay(PUBLIC_CHANNEL,"CAMPAIGN PERSKILLS set to "+PERSKILLS); }
            if ( ASPECT == "SPECIE" ){ BOONLIST = msg; llSay(PUBLIC_CHANNEL,"SPECIE BOONLIST set to "+BOONLIST); }
            if ( ASPECT == "BACKGROUND" ){ BOONLIST = msg; llSay(PUBLIC_CHANNEL,"BACKGROUND BOONLIST set to "+BOONLIST); }
            if ( ASPECT == "CAREER" ){ BOONLIST = msg; llSay(PUBLIC_CHANNEL,"CAREER BOONLIST set to "+BOONLIST); }
            if ( ASPECT == "ITEM" ){ DAMAGE = msg; llSay(PUBLIC_CHANNEL,"ITEM DAMAGE set to "+DAMAGE); }        
        }
        if ( BUTTON == "BUTTON5" ) {
            i = llListFindList(PRIMS,["TEXT5"]);
            if ( ASPECT == "STATISTIC" ) { STATMAX = msg; llSay(PUBLIC_CHANNEL,"STATISTIC MAXIMUM set to "+STATMAX); }
            if ( ASPECT == "SKILL" ) { SKILLMAX = msg; llSay(PUBLIC_CHANNEL,"SKILL MAXIMUM set to "+SKILLMAX); }
            if ( ASPECT == "EFFECT" ){ DESCRIPTION = msg; llSay(PUBLIC_CHANNEL,"EFFECT DESCRIPTION set to "+DESCRIPTION); }
            if ( ASPECT == "RESILIENCE" ){ DESCRIPTION = msg; llSay(PUBLIC_CHANNEL,"RESILIENCE DESCRIPTION set to "+DESCRIPTION); }
            if ( ASPECT == "BOON" ){ DESCRIPTION = msg; llSay(PUBLIC_CHANNEL,"BOON DESCRIPTION set to "+DESCRIPTION); }
            if ( ASPECT == "FLAW" ){ DESCRIPTION = msg; llSay(PUBLIC_CHANNEL,"FLAW DESCRIPTION set to "+DESCRIPTION); }
            if ( ASPECT == "CAMPAIGN" ){ SFXPOOL = msg; llSay(PUBLIC_CHANNEL,"CAMPAIGN SFXPOOL set to "+SFXPOOL); }
            if ( ASPECT == "SPECIE" ){ FLAWLIST = msg; llSay(PUBLIC_CHANNEL,"SPECIE FLAWLIST set to "+FLAWLIST); }
            if ( ASPECT == "BACKGROUND" ){ FLAWLIST = msg; llSay(PUBLIC_CHANNEL,"BACKGROUND FLAWLIST set to "+FLAWLIST); }
            if ( ASPECT == "CAREER" ){ FLAWLIST = msg; llSay(PUBLIC_CHANNEL,"CAREER FLAWLIST set to "+FLAWLIST); }
            if ( ASPECT == "ITEM" ){ RPCOST = msg; llSay(PUBLIC_CHANNEL,"ITEM RPCOST set to "+RPCOST); }
        }
        if ( BUTTON == "BUTTON6" ) {
            i = llListFindList(PRIMS,["TEXT6"]);
            if ( ASPECT == "STATISTIC" ) { SUMMARY = msg; llSay(PUBLIC_CHANNEL,"STATISTIC SUMMARY set to "+SUMMARY); }
            if ( ASPECT == "SKILL" ) { SUMMARY = msg; llSay(PUBLIC_CHANNEL,"SKILL SUMMARY set to "+SUMMARY); }
            if ( ASPECT == "CAMPAIGN" ){ HEALTHPOOL = msg; llSay(PUBLIC_CHANNEL,"CAMPAIGN HEALTHPOOL set to "+HEALTHPOOL); }
            if ( ASPECT == "SPECIE" ){ SFXLIST = msg; llSay(PUBLIC_CHANNEL,"SPECIE SFXLIST set to "+SFXLIST); }
            if ( ASPECT == "BACKGROUND" ){ SFXLIST = msg; llSay(PUBLIC_CHANNEL,"BACKGROUND SFXLIST set to "+SFXLIST); }
            if ( ASPECT == "CAREER" ){ SFXLIST = msg; llSay(PUBLIC_CHANNEL,"CAREER SFXLIST set to "+SFXLIST); }
            if ( ASPECT == "ITEM" ){ PERIOD = msg; llSay(PUBLIC_CHANNEL,"ITEM PERIOD set to "+PERIOD); }
        }
        if ( BUTTON == "BUTTON7" ) {
            i = llListFindList(PRIMS,["TEXT7"]);
            if ( ASPECT == "STATISTIC" ) { DESCRIPTION = msg; llSay(PUBLIC_CHANNEL,"STATISTIC DESCRIPTION set to "+DESCRIPTION); }
            if ( ASPECT == "SKILL" ) { GENRES = msg; llSay(PUBLIC_CHANNEL,"SKILL GENRES set to "+GENRES); }
            if ( ASPECT == "CAMPAIGN" ){ GPPOOL = msg; llSay(PUBLIC_CHANNEL,"CAMPAIGN GPPOOL set to "+GPPOOL); }
            if ( ASPECT == "SPECIE" ){ SKILLLIST = msg; llSay(PUBLIC_CHANNEL,"SPECIE SKILLLIST set to "+SKILLLIST); }
            if ( ASPECT == "BACKGROUND" ){ SKILLLIST = msg; llSay(PUBLIC_CHANNEL,"BACKGROUND SKILLLIST set to "+SKILLLIST); }
            if ( ASPECT == "CAREER" ){ SKILLLIST = msg; llSay(PUBLIC_CHANNEL,"CAREER SKILLLIST set to "+SKILLLIST); }
            if ( ASPECT == "ITEM" ){ BONUS = msg; llSay(PUBLIC_CHANNEL,"ITEM BONUS set to "+BONUS); }
        }
        if ( BUTTON == "BUTTON8" ) {
            i = llListFindList(PRIMS,["TEXT8"]);
            if ( ASPECT == "SKILL" ) { DESCRIPTION = msg; llSay(PUBLIC_CHANNEL,"SKILL DESCRIPTION set to "+DESCRIPTION); }
            if ( ASPECT == "CAMPAIGN" ){ STATMAX = msg; llSay(PUBLIC_CHANNEL,"CAMPAIGN STATMAX set to "+STATMAX); }
            if ( ASPECT == "SPECIE" ){ ITEMLIST = msg; llSay(PUBLIC_CHANNEL,"SPECIE ITEMLIST set to "+ITEMLIST); }
            if ( ASPECT == "BACKGROUND" ){ ITEMLIST = msg; llSay(PUBLIC_CHANNEL,"BACKGROUND ITEMLIST set to "+ITEMLIST); }
            if ( ASPECT == "CAREER" ){ ITEMLIST = msg; llSay(PUBLIC_CHANNEL,"CAREER ITEMLIST set to "+ITEMLIST); }
            if ( ASPECT == "ITEM" ){ RATING = msg; llSay(PUBLIC_CHANNEL,"ITEM RATING set to "+RATING); }
        }
        if ( BUTTON == "BUTTON9" ) {
            i = llListFindList(PRIMS,["TEXT9"]);
            if ( ASPECT == "CAMPAIGN" ){ SKILLMAX = msg; llSay(PUBLIC_CHANNEL,"CAMPAIGN SKILLMAX set to "+SKILLMAX); }
            if ( ASPECT == "SPECIE" ){ DESCRIPTION = msg; llSay(PUBLIC_CHANNEL,"SPECIE DESCRIPTION set to "+DESCRIPTION); }
            if ( ASPECT == "BACKGROUND" ){ DESCRIPTION = msg; llSay(PUBLIC_CHANNEL,"BACKGROUND DESCRIPTION set to "+DESCRIPTION); }
            if ( ASPECT == "CAREER" ){ DESCRIPTION = msg; llSay(PUBLIC_CHANNEL,"CAREER DESCRIPTION set to "+DESCRIPTION); }
            if ( ASPECT == "ITEM" ){ ACTIVATION = msg; llSay(PUBLIC_CHANNEL,"ITEM ACTIVATION set to "+ACTIVATION); }
        }
        if ( BUTTON == "BUTTON10" ) {
            i = llListFindList(PRIMS,["TEXT10"]);
            if ( ASPECT == "CAMPAIGN" ){ RESOURCES = msg; llSay(PUBLIC_CHANNEL,"CAMPAIGN RESOURCES set to "+RESOURCES); }
            if ( ASPECT == "ITEM" ){ ACTIONLIST = msg; llSay(PUBLIC_CHANNEL,"ITEM ACTIONLIST set to "+ACTIONLIST); }            
        }
        if ( BUTTON == "BUTTON11" ) {
            i = llListFindList(PRIMS,["TEXT11"]);
            if ( ASPECT == "ITEM" ){ DESCRIPTION = msg; llSay(PUBLIC_CHANNEL,"ITEM DESCRIPTION set to "+DESCRIPTION); }
        }        
        llSetLinkPrimitiveParamsFast(i,[PRIM_TEXT,msg,<1,1,1>,1]);
    }
 
    //------------------------------------------------------------------------    
    touch_start(integer touched) {
        if ( FLAG_DEBUG == TRUE ) llSay(PUBLIC_CHANNEL,"DEBUG: touched=["+(string)touched+"]");
        key touchedby = llDetectedKey(0);
        integer primnumber = llDetectedLinkNumber(0);
        string name = llGetLinkName(primnumber);
        BUTTON = name;
        // process the aspect buttons
        if ( name == "STATISTICS" ) {
            ASPECT = "STATISTIC";
            CURRENTRECORD = 0;
            SWITCHBUTTONS(["Statistic_Name","Statistic_Generator","Statistic_Updater","Statistic_Minimum","Statistic_Maximum","Statistic_Summary","Statistic_Description","","","",""]);
            llRegionSay(RENDEZVOUS2,"LIST_STATISTICS");
            return;
        }
        if ( name == "SKILLS" ) { 
            ASPECT = "SKILL";
            CURRENTRECORD = 0;
            SWITCHBUTTONS(["Skill_Name","Skill_Generator","Skill_Updater","Skill_Minimum","Skill_Maximum","Skill_Summary","Skill_Genres","Skill_Description","","",""]);
            llRegionSay(RENDEZVOUS2,"LIST_SKILLS"); return;
        }
        if ( name == "EFFECTS" ) {
            ASPECT = "EFFECT";
            CURRENTRECORD = 0;
            SWITCHBUTTONS(["SFX_Name","SFX_Type","SFX_Activation","SFX_ActionList","SFX_Description","","","","","",""]);        
            llRegionSay(RENDEZVOUS2,"LIST_EFFECTS");
            return;
        }
        if ( name == "RESILIENCES" ) {
            ASPECT = "RESILIENCE";
            CURRENTRECORD = 0;
            SWITCHBUTTONS(["Resilience_Name","Resilience_BaseStat","Resilience_Type","Resilience_Action","Resilience_Description","","","","","",""]);
            llRegionSay(RENDEZVOUS2,"LIST_RESILIENCES");
            return;
        }
        if ( name == "BOONS" ) {
            ASPECT = "BOON";
            CURRENTRECORD = 0;
            SWITCHBUTTONS(["Boon_Name","Boon_Type","Boon_GPperLevel","Boon_Maximum","Boon_Description","","","","","",""]);
            llRegionSay(RENDEZVOUS2,"LIST_BOONS");
            return;
        }
        if ( name == "FLAWS" ) {
            ASPECT = "FLAW";
            CURRENTRECORD = 0;
            SWITCHBUTTONS(["Flaw_Name","Flaw_Type","Flaw_GPperLevel","Flaw_Maximum","Flaw_Description","","","","","",""]);
            llRegionSay(RENDEZVOUS2,"LIST_FLAWS");
            return;
        }
        if ( name == "CAMPAIGNS" ) {
            ASPECT = "CAMPAIGN";
            CURRENTRECORD = 0;
            SWITCHBUTTONS(["Campaign_Name","Campaign_StatPool","Campaign_SkillPool","Campaign_PerSkills","Campaign_SFXPool","Campaign_HealthPool","Campaign_GPPool","Campaign_MaxStat","Campaign_MaxSkill","Campaign_Resources",""]);
            llRegionSay(RENDEZVOUS2,"LIST_CAMPAIGNS"); 
            return;
        }
        if ( name == "SPECIES" ) {
            ASPECT = "SPECIE";
            CURRENTRECORD = 0;
            SWITCHBUTTONS(["Species_Name","Species_GPCost","Species_StatList","Species_BoonList","Species_FlawList","Species_SFXList","Species_SkillList","Species_ItemList","Species_Description","",""]);
            llRegionSay(RENDEZVOUS2,"LIST_SPECIES");
            return;
        }
        if ( name == "BACKGROUNDS" ) {
            ASPECT = "BACKGROUND";
            CURRENTRECORD = 0;
            SWITCHBUTTONS(["Background_Name","Background_GPCost","Background_StatList","Background_BoonList","Background_FlawList","Background_SFXList","Background_SkillList","Background_ItemList","Background_Description","",""]);
            llRegionSay(RENDEZVOUS2,"LIST_BACKGROUNDS");
            return;
        }
        if ( name == "CAREERS" ) {
            ASPECT = "CAREER";
            CURRENTRECORD = 0;
            SWITCHBUTTONS(["Career_Name","Career_GPCost","Career_StatList","Career_BoonList","Career_FlawList","Career_SFXList","Career_SkillList","Career_ItemList","Career_Description","",""]);
            llRegionSay(RENDEZVOUS2,"LIST_CAREERS");
            return;
        }
        if ( name == "ITEMS" ) {
            ASPECT = "ITEM";
            CURRENTRECORD = 0;
            SWITCHBUTTONS(["Item_Name","Item_Type","Item_Range","Item_Damage","Item_RPCost","Item_Period","Item_Bonus","Item_Rating","Item_Activation","Item_Effects","Item_Description"]);
            llRegionSay(RENDEZVOUS2,"LIST_ITEMS");
            return;
        }        
        // process list buttons
        if ( name == "BUTTON_TOP" ) {
            string current;
            integer len;
            string out;
            CURRENTRECORD = 0;
            current = llList2String(RECORDLIST,CURRENTRECORD);
            len = llGetListLength(RECORDLIST);
            if ( len != 0 ) {
                out = current + "\n"+ASPECT+" "+((string)(CURRENTRECORD+1))+" of "+(string)len;
                llSetLinkPrimitiveParamsFast(llListFindList(PRIMS,["TEXT_LIST"]),[PRIM_TEXT,out,<1,1,1>,1]);
                llRegionSay(RENDEZVOUS2,"GET_"+ASPECT+"|"+current);
            }
            return;
        }
        if ( name == "BUTTON_PREV" ) {
            string current;
            integer len;
            string out;            
            CURRENTRECORD--;
            if ( CURRENTRECORD < 0 ) CURRENTRECORD = 0;
            current = llList2String(RECORDLIST,CURRENTRECORD);
            len = llGetListLength(RECORDLIST);
            if ( len != 0 ) {
                out = current + "\n"+ASPECT+" "+((string)(CURRENTRECORD+1))+" of "+(string)len;
                llSetLinkPrimitiveParamsFast(llListFindList(PRIMS,["TEXT_LIST"]),[PRIM_TEXT,out,<1,1,1>,1]);
                llRegionSay(RENDEZVOUS2,"GET_"+ASPECT+"|"+current);
            }
            return;
        }
        if ( name == "BUTTON_NEXT" ) {
            string current;
            integer len;
            string out;
            // split lists like this is ugly but needed due to variable length lists for each aspect
            len = llGetListLength(RECORDLIST);
            if ( len != 0 ) {
                CURRENTRECORD++; // add one to current
                if ( CURRENTRECORD >= len ) CURRENTRECORD = len - 1; // check we didn't run off the end of current list
                if ( CURRENTRECORD < 0 ) CURRENTRECORD = 0;
                // now find list item based on updated record value
                current = llList2String(RECORDLIST,CURRENTRECORD);
                out = current + "\n"+ASPECT+" "+((string)(CURRENTRECORD+1))+" of "+(string)len;
                llSetLinkPrimitiveParamsFast(llListFindList(PRIMS,["TEXT_LIST"]),[PRIM_TEXT,out,<1,1,1>,1]);
                llRegionSay(RENDEZVOUS2,"GET_"+ASPECT+"|"+current);
            }
            return;
        }
        if ( name == "BUTTON_BOTTOM" ) {
            string current;
            integer len;
            string out;
            len = llGetListLength(RECORDLIST);
            if ( len != 0 ) {
                // now set current record to end of current list
                CURRENTRECORD = len - 1;
                // make sure to sanity check the values before looking things up in lists
                if ( CURRENTRECORD >= len ) CURRENTRECORD = len - 1;
                if ( CURRENTRECORD < 0 ) CURRENTRECORD = 0;
                // now that we know the record number, load the specific aspect's record name
                current = llList2String(RECORDLIST,CURRENTRECORD);
                out = current + "\n"+ASPECT+" "+((string)(CURRENTRECORD+1))+" of "+(string)len;
                llSetLinkPrimitiveParamsFast(llListFindList(PRIMS,["TEXT_LIST"]),[PRIM_TEXT,out,<1,1,1>,1]);
                llRegionSay(RENDEZVOUS2,"GET_"+ASPECT+"|"+current);
            }
            return;
        }
        // process action buttons
        if ( name == "BUTTON_NEW" ) {
            llSetLinkPrimitiveParamsFast(llListFindList(PRIMS,["TEXT_LIST"]),[PRIM_TEXT,"CREATING NEW",<1,1,1>,1]);
            integer count = 11;
            while ( count-- ) {
                llSetLinkPrimitiveParamsFast(llListFindList(PRIMS,["TEXT"+(string)count]),[PRIM_TEXT,"",<1,1,1>,1]);
            }
            NAME="";
            GENERATOR="";
            UPDATER="";
            STATMIN="";
            SKILLMIN="";
            STATMAX="";
            SKILLMAX="";
            SUMMARY="";
            DESCRIPTION="";
            GENRES="";
            TYPE="";
            ACTIVATION="";
            ACTIONLIST="";
            BASESTAT="";
            ACTION="";
            GPPERLEVEL="";
            BOONMAX="";
            FLAWMAX="";
            STATPOOL="";
            SKILLPOOL="";
            SFXPOOL="";
            HEALTHPOOL="";
            GPPOOL="";
            RESOURCES="";
            GPCOST="";
            STATLIST="";
            BOONLIST="";
            FLAWLIST="";
            SKILLLIST="";
            SFXLIST="";
            ITEMLIST="";
            RANGE="";
            DAMAGE="";
            RPCOST="";
            PERIOD="";
            BONUS="";
            RATING="";
            llSay(PUBLIC_CHANNEL,"Ready to start creating a new Myriad Lite record using the buttons to the right.");
            return;
        }
        if ( name == "BUTTON_DELETE" ) {
            string currecord;
            currecord = llStringTrim(llList2String(RECORDLIST,CURRENTRECORD),STRING_TRIM);
            if ( currecord != "" ) {
                llDialog(touchedby,"Delete "+ASPECT+" "+currecord+"?",["DELETE","CLOSE"],CHANNEL);
            }
            return;
        }
        if ( name == "SAVE" ) {
            llDialog(llDetectedKey(0),"Are You Sure?",["YES","NO","CLOSE"],CHANNEL);
        }
        if ( name == "RESET" ) {
            llDialog(llDetectedKey(0),"Are You Sure?",["RESET","CANCEL","CLOSE"],CHANNEL);
        }
 
        // process dynamic buttons
        if ( name == "BUTTON1" ) {
            if ( ASPECT == "STATISTIC" ) llTextBox(touchedby,"What Is This Statistic's NAME?",CHANNEL);
            if ( ASPECT == "SKILL" )     llTextBox(touchedby,"What Is This Skill's NAME?",CHANNEL);
            if ( ASPECT == "EFFECT" )    llTextBox(touchedby,"What is this Effect's NAME?",CHANNEL);
            if ( ASPECT == "RESILIENCE") llTextBox(touchedby,"What is this Resilience's NAME?",CHANNEL);
            if ( ASPECT == "BOON" )      llTextBox(touchedby,"What is this Boon's NAME?",CHANNEL);
            if ( ASPECT == "FLAW" )      llTextBox(touchedby,"What is this Flaw's NAME?",CHANNEL);
            if ( ASPECT == "CAMPAIGN" )  llTextBox(touchedby,"What is this Campaign's NAME?",CHANNEL);
            if ( ASPECT == "SPECIE" )    llTextBox(touchedby,"What is this Species' NAME?", CHANNEL);
            if ( ASPECT == "BACKGROUND") llTextBox(touchedby,"What is this Background's NAME?",CHANNEL);
            if ( ASPECT == "CAREER" )    llTextBox(touchedby,"What is this Career's NAME?",CHANNEL);
            if ( ASPECT == "ITEM")       llTextBox(touchedby,"What is this Item's NAME?",CHANNEL);
            return;
        }
        if ( name == "BUTTON2" ) {
            if ( ASPECT == "STATISTIC" ) llDialog(touchedby,"How will players GENERATE this Statistic?",["RANDOM","TEMPLATE","POINTBUY"],CHANNEL);
            if ( ASPECT == "SKILL" )     llDialog(touchedby,"How will players GENERATE this Skill?",["RANDOM","TEMPLATE","POINTBUY"],CHANNEL);
            if ( ASPECT == "EFFECT" )    llDialog(touchedby,"What TYPE of SFX is this?",["MORTAL","SOCIAL","MAGIC","VEHICLE","ITEM"],CHANNEL);
            if ( ASPECT == "RESILIENCE") llTextBox(touchedby,"What is this Resilience's BASESTAT?",CHANNEL);
            if ( ASPECT == "BOON" )      llDialog(touchedby,"What is this Boon's TYPE?",["GENERAL","RACIAL"],CHANNEL);
            if ( ASPECT == "FLAW" )      llDialog(touchedby,"What is this Flaw's TYPE?",["GENERAL","RACIAL"],CHANNEL);
            if ( ASPECT == "CAMPAIGN" )  llTextBox(touchedby,"What is this Campaign's STATPOOL?",CHANNEL);
            if ( ASPECT == "SPECIE" )    llTextBox(touchedby,"What is this Species' GPCOST?", CHANNEL);
            if ( ASPECT == "BACKGROUND") llTextBox(touchedby,"What is this Background's GPCOST?",CHANNEL);
            if ( ASPECT == "CAREER" )    llTextBox(touchedby,"What is this Career's GPCOST?",CHANNEL);
            if ( ASPECT == "ITEM")       llDialog(touchedby,"What is this Item's TYPE?",["WEAPON","ARMOR","ACCESSORY","ESSENTIAL","ENHANCER","SFX"],CHANNEL);
            return;
        }
        if ( name == "BUTTON3" ) {
            if ( ASPECT == "STATISTIC" ) llDialog(touchedby,"How will players UPDATE this Statistic?",["LEVEL","GRADUAL","RANDOM"],CHANNEL);
            if ( ASPECT == "SKILL" )     llDialog(touchedby,"How will players UPDATE this Skill?",["LEVEL","GRADUAL","RANDOM"],CHANNEL);
            if ( ASPECT == "EFFECT" )    llTextBox(touchedby,"What is this Effect's ACTIVATION?",CHANNEL);
            if ( ASPECT == "RESILIENCE") llDialog(touchedby,"What is this Resilience's TYPE?",["NONCRITICAL","CRITICAL"],CHANNEL);
            if ( ASPECT == "BOON" )      llTextBox(touchedby,"What is this Boon's GPPERLEVEL?",CHANNEL);
            if ( ASPECT == "FLAW" )      llTextBox(touchedby,"What is this Flaw's GPPERLEVEL?",CHANNEL);
            if ( ASPECT == "CAMPAIGN" )  llTextBox(touchedby,"What is this Campaign's SKILLPOOL?",CHANNEL);
            if ( ASPECT == "SPECIE" )    llTextBox(touchedby,"What is this Species' STATLIST (CSV)?", CHANNEL);
            if ( ASPECT == "BACKGROUND") llTextBox(touchedby,"What is this Background's STATLIST (CSV)?",CHANNEL);
            if ( ASPECT == "CAREER" )    llTextBox(touchedby,"What is this Career's STATLIST (CSV)?",CHANNEL);
            if ( ASPECT == "ITEM")       llDialog(touchedby,"What is this Item's RANGE?",["MELEE","SHORT","MEDIUM","LONG"],CHANNEL);
            return;
        }
        if ( name == "BUTTON4" ) {
            if ( ASPECT == "STATISTIC" ) llTextBox(touchedby,"Type in the MINIMUM allowed value for this new Statistic:\n1 for Myriad",CHANNEL);
            if ( ASPECT == "SKILL" )     llTextBox(touchedby,"Type in the MINIMUM allowed value for this new Skill:\n1 for Myriad",CHANNEL);
            if ( ASPECT == "EFFECT" )    llTextBox(touchedby,"What is this Effect's ACTIONLIST (CSV)?",CHANNEL);
            if ( ASPECT == "RESILIENCE") llTextBox(touchedby,"What is this Resilience's ACTION?",CHANNEL);
            if ( ASPECT == "BOON" )      llTextBox(touchedby,"What is this Boon's MAXIMUM?",CHANNEL);
            if ( ASPECT == "FLAW" )      llTextBox(touchedby,"What is this Flaw's MAXIMUM?",CHANNEL);
            if ( ASPECT == "CAMPAIGN" )  llTextBox(touchedby,"What is this Campaign's PERSKILLS?",CHANNEL);
            if ( ASPECT == "SPECIE" )    llTextBox(touchedby,"What is this Species' BOONLIST (CSV)?", CHANNEL);
            if ( ASPECT == "BACKGROUND") llTextBox(touchedby,"What is this Background's BOONLIST (CSV)?",CHANNEL);
            if ( ASPECT == "CAREER" )    llTextBox(touchedby,"What is this Career's BOONLIST (CSV)?",CHANNEL);
            if ( ASPECT == "ITEM")       llTextBox(touchedby,"What is this Item's DAMAGE?",CHANNEL);
            return;
        }
        if ( name == "BUTTON5" ) {
            if ( ASPECT == "STATISTIC" ) llTextBox(touchedby,"Type in the MAXIMUM allowed value for this new Statistic:\n10 for Myriad",CHANNEL);
            if ( ASPECT == "SKILL" )     llTextBox(touchedby,"Type in the MAXIMUM allowed value for this new Skill:\n5 for Myriad",CHANNEL);
            if ( ASPECT == "EFFECT" )    llTextBox(touchedby,"What is this Effect's DESCRIPTION?",CHANNEL);
            if ( ASPECT == "RESILIENCE") llTextBox(touchedby,"What is this Resilience's DESCRIPTION?",CHANNEL);
            if ( ASPECT == "BOON" )      llTextBox(touchedby,"What is this Boon's DESCRIPTION?",CHANNEL);
            if ( ASPECT == "FLAW" )      llTextBox(touchedby,"What is this Flaw's DESCRIPTION?",CHANNEL);
            if ( ASPECT == "CAMPAIGN" )  llTextBox(touchedby,"What is this Campaign's SFXPOOL?",CHANNEL);
            if ( ASPECT == "SPECIE" )    llTextBox(touchedby,"What is this Species' FLAWLIST (CSV)?", CHANNEL);
            if ( ASPECT == "BACKGROUND") llTextBox(touchedby,"What is this Background's FLAWLIST (CSV)?",CHANNEL);
            if ( ASPECT == "CAREER" )    llTextBox(touchedby,"What is this Career's FLAWLIST (CSV)?",CHANNEL);
            if ( ASPECT == "ITEM")       llTextBox(touchedby,"What is this Item's RPCOST?",CHANNEL);
            return;
        }
        if ( name == "BUTTON6" ) {
            if ( ASPECT == "STATISTIC" ) llTextBox(touchedby,"Type in a brief SUMMARY of this new Statistic:",CHANNEL);
            if ( ASPECT == "SKILL" )     llTextBox(touchedby,"Type in a brief SUMMARY of this new Skill:",CHANNEL);
            if ( ASPECT == "CAMPAIGN" )  llTextBox(touchedby,"What is this Campaign's HEALTHPOOL?",CHANNEL);
            if ( ASPECT == "SPECIE" )    llTextBox(touchedby,"What is this Species' SFXLIST (CSV)?", CHANNEL);
            if ( ASPECT == "BACKGROUND") llTextBox(touchedby,"What is this Background's SFXLIST (CSV)?",CHANNEL);
            if ( ASPECT == "CAREER" )    llTextBox(touchedby,"What is this Career's SFXLIST (CSV)?",CHANNEL);
            if ( ASPECT == "ITEM")       llDialog(touchedby,"What is this Item's PERIOD?",["ARCHAIC","MODERN","FUTURISTIC"],CHANNEL);
            return;
        }
        if ( name == "BUTTON7" ) {
            if ( ASPECT == "STATISTIC" ) llTextBox(touchedby,"Type in a long DESCRIPTION of this new Statistic:",CHANNEL);
            if ( ASPECT == "SKILL" )     llTextBox(touchedby,"Which GENRES does this skill belong to?\nGENERAL, MEDIEVAL, MODERN, FUTURISTIC, FANTASY, SCIENCE-FICTION, or HORROR\n(CSV List)",CHANNEL);
            if ( ASPECT == "CAMPAIGN" )  llTextBox(touchedby,"What is this Campaign's GPPOOL?",CHANNEL);
            if ( ASPECT == "SPECIE" )    llTextBox(touchedby,"What is this Species' SKILLLIST (CSV)?", CHANNEL);
            if ( ASPECT == "BACKGROUND") llTextBox(touchedby,"What is this Background's SKILLLIST (CSV)?",CHANNEL);
            if ( ASPECT == "CAREER" )    llTextBox(touchedby,"What is this Career's SKILLLIST (CSV)",CHANNEL);
            if ( ASPECT == "ITEM")       llTextBox(touchedby,"What is this Item's BONUS?",CHANNEL);
            return;
        }
        if ( name == "BUTTON8" ) {
            if ( ASPECT == "SKILL" )     llTextBox(touchedby,"Type in a long DESCRIPTION of this new Skill:",CHANNEL);
            if ( ASPECT == "CAMPAIGN" )  llTextBox(touchedby,"What is this Campaign's STATMAX?",CHANNEL);
            if ( ASPECT == "SPECIE" )    llTextBox(touchedby,"What is this Species' ITEMLIST (CSV)?", CHANNEL);
            if ( ASPECT == "BACKGROUND") llTextBox(touchedby,"What is this Background's ITEMLIST (CSV)?",CHANNEL);
            if ( ASPECT == "CAREER" )    llTextBox(touchedby,"What is this Career's ITEMLIST (CSV)?",CHANNEL);
            if ( ASPECT == "ITEM")       llTextBox(touchedby,"What is this Item's RATING?",CHANNEL);
            return;
        }
        if ( name == "BUTTON9" ) {
            if ( ASPECT == "CAMPAIGN" )  llTextBox(touchedby,"What is this Campaign's SKILLMAX?",CHANNEL);
            if ( ASPECT == "SPECIE" )    llTextBox(touchedby,"What is this Species' DESCRIPTION?", CHANNEL);
            if ( ASPECT == "BACKGROUND") llTextBox(touchedby,"What is this Background's DESCRIPTION?",CHANNEL);
            if ( ASPECT == "CAREER" )    llTextBox(touchedby,"What is this Career's DESCRIPTION?",CHANNEL);
            if ( ASPECT == "ITEM")       llTextBox(touchedby,"What is this Item's ACTIVATION?",CHANNEL);
            return;
        }
        if ( name == "BUTTON10" ) {
            if ( ASPECT == "CAMPAIGN" )  llTextBox(touchedby,"What is this Campaign's RESOURCES?",CHANNEL);
            if ( ASPECT == "ITEM")       llTextBox(touchedby,"What is this Item's ACTIONLIST (CSV)?",CHANNEL);
            return;
        }
        if ( name == "BUTTON11" ) {
            if ( ASPECT == "ITEM")       llTextBox(touchedby,"What is this Item's DESCRIPTION?",CHANNEL);
            return;
        }
    }
}
This website uses cookies. By using the website, you agree with storing cookies on your computer. Also you acknowledge that you have read and understand our Privacy Policy. If you do not agree leave the website.More information about cookies
DokuWiki