Difference between revisions of "Your Articlename/Send vector as on rez parameter"

From Second Life Wiki
Jump to navigation Jump to search
(Created page with "== Send vector as on_rez parameter == this script is to demonstrate how a vector could be sent to a rezzed object without using the listen event, sending it throught the start p…")
 
(Blanked the page)
 
Line 1: Line 1:
== Send vector as on_rez parameter ==


this script is to demonstrate how a vector could be sent to a rezzed object
without using the listen event, sending it throught the start parameter in
the llRezObject() function.  There are two parts, the decoder that would be
in the rezzed object to convert the start_parameter back to a vector the
other part(s) is the encoder there are two encoders one to send a float vector
eg <1.34,4.87,9.96> and one to send a integer vector eg <13,4,999>
== Limitations ==
-- using the float encoder the maximum value that can be sent is 9.99
-- using the float encoder it is only accurate to 2 decimal places
-- using the integer encoder the maximum value that can be sent is 999
-- one big limitation at the moment is that only posative values can be sent
== Links to simmilar content ==
[[WaS Pass data to rezzed object|Wizardry_and_Steamworks/LSL#Pass_Data_to_a_Rezzed_Object]]
<lsl>
// [M] moonbuggy- 2012, License: GPLv3             
// Please see: http://www.gnu.org/licenses/gpl.html   
// for legal details, rights of fair usage and         
// the disclaimer and warranty conditions. 
//this script is to demonstrate how a vector could be sent to a rezzed object
//without using the listen event, sending it throught the start parameter in
//the llRezObject() function.  There are two parts, the decoder that would be
//in the rezzed object to convert the start_parameter back to a vector the
//other part(s) is the encoder there are two encoders one to send a float vector
// eg <1.34,4.87,9.96> and one to send a integer vector eg <13,4,999>
//****LIMITATIONS****
//using the float encoder the maximum value that can be sent is 9.99
//using the float encoder it is only accurate to 2 decimal places
//using the integer encoder the maximum value that can be sent is 999
//one big limitation at the moment is that only posative values can be sent
//if anyone has any ideas to overcome these limitaions and would like to talk to me
//please IM me :)
vector start_vec=<8,26,999>;
integer encoded;
vector decoded;
//--------------------------------------------------------------------------------------------
integer encode_float_vect(vector vec)// there is a maximum value of 9.99 in each float to send
{   
    string v_int = "1";
    list string_split=llParseString2List((string)vec,[",","<",">"," "],[""]);
    integer i;
    for(i=0;i<3;++i)
    {
    list temp=llParseString2List(llList2String(string_split,i),["."],[""]);
    v_int+=llGetSubString(llList2String(temp,0)+llList2String(temp,1),0,2);
    }
    return (integer)v_int;
}
//--------------------------------------------------------------------------------------------
integer encode_integer_vect(vector vec)//there is a maximum value of 999 in each integer to send
{
    string v_int="-1";
    list string_split=llParseString2List((string)vec,[",","<",">"," "],[""]);
    integer i;
    for(i=0;i<3;++i)
    {
    list temp=llParseString2List(llList2String(string_split,i),["."],[""]);
    string temp_string=llGetSubString(llList2String(temp,0),0,2);
    while(llStringLength(temp_string)<3)
    {temp_string="0"+temp_string;}
    v_int+=temp_string;
    }
    return (integer)v_int;
}
//--------------------------------------------------------------------------------------------
vector decode_vector(integer int)//decode the integer into vector
{
    vector decode;
    integer n=0;
    if(int<0){n=1;}
    string vec_x=llGetSubString((string)int,1+n,3+n);
    string vec_y=llGetSubString((string)int,4+n,6+n);
    string vec_z=llGetSubString((string)int,7+n,10+n);
    if(int<0)
    {decode.x=(integer)vec_x;decode.y=(integer)vec_y;decode.z=(integer)vec_z;}
    else
    {
        decode.x=(float)(llGetSubString(vec_x,0,0)+"."+llGetSubString(vec_x,1,2));
        decode.y=(float)(llGetSubString(vec_y,0,0)+"."+llGetSubString(vec_y,1,2));
        decode.z=(float)(llGetSubString(vec_z,0,0)+"."+llGetSubString(vec_z,1,2));
    }
    return decode;
}
//--------------------------------------------------------------------------------------------
default
{
    touch_start(integer total_number)
    {
        encoded=encode_integer_vect(start_vec);
        decoded=decode_vector(encoded);
        llSay(0,"START:"+(string)start_vec);
        llSay(0,"ENCODE:"+(string)encoded);
        llSay(0,"DECODE:"+(string)decoded);
       
//IN LINE USE, BELOW IS AN EXAMPLE HOW TO ENCODE THE VECTOR AND SEND IT TO THE OBJECT DIRECTLY
        llRezObject("rezme",llGetPos()+<0,0,1>,ZERO_VECTOR,ZERO_ROTATION,encode_integer_vect(start_vec));
       
    }
    //BELOW IS AN EXAMPLE HOW TO DECODE IN THE OBJECT BEING REZZED
    //on_rez(integer start_param)
    //{
    //    vector DECODED_VECTOR = decode_vector(start_param);
    //}
}
</lsl>

Latest revision as of 12:15, 23 June 2012