//
www.lsleditor.org by Alphons van der Heijden (SL: Alphons Jano)
integer touchedFace;
integer switch;
integer HANDLE;
integer CHANNEL=10;
key owner;
string _key = "scramble";
string keyRepeat(string text, string ky){
integer i;
integer j;
integer l = llStringLength(text);
string out;
for(i = 0; i <= l; ++i){
out += llGetSubString(ky,j,j);
if(j == llStringLength(ky)){
j = 0;
} else {
++j;
}
}
return out;
}
string encrypt(string text, string ky){
string alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz. ,!?&";
ky = keyRepeat(text,ky);
list t = llParseString2List(text,[],[]);
integer l = llGetListLength(t);
integer i;
string o;
integer prev;
for(i = 0; i < l; ++i){
integer x;
integer y = llStringLength(llList2String(t,i));
string ky_temp = llGetSubString(ky,prev,llStringLength(llList2String(t,i)));
prev = llStringLength(llList2String(t,i));
for(x = 0; x < y; ++x){
integer text_p = llSubStringIndex(alphabet,llGetSubString(llList2String(t,i),x,x));
integer key_p = llSubStringIndex(alphabet,llGetSubString(ky_temp,x,x));
integer pos = (text_p + key_p)%57;
o += llGetSubString(alphabet,pos,pos);
}
o += " ";
}
return o;
}
string decrypt(string text, string ky){
string alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz. ,!?&";
ky = keyRepeat(text,ky);
list t = llParseString2List(text,[],[]);
integer l = llGetListLength(t);
integer i;
string o;
integer prev;
for(i = 0; i < l; ++i){
integer x;
integer y = llStringLength(llList2String(t,i));
string ky_temp = llGetSubString(ky,prev,llStringLength(llList2String(t,i)));
prev = llStringLength(llList2String(t,i));
for(x = 0; x < y; ++x){
integer text_p = llSubStringIndex(alphabet,llGetSubString(llList2String(t,i),x,x));
integer key_p = llSubStringIndex(alphabet,llGetSubString(ky_temp,x,x));
integer pos = (text_p - key_p + 57)%57;
o += llGetSubString(alphabet,pos,pos);
}
o += " ";
}
return o;
}
default
{
state_entry()
{
switch=0;
owner=llGetOwner();
llSetObjectName(llKey2Name(owner));
llOwnerSay("Fantasy translators is off and ready!"

;
}
changed(integer change)
{
if (change & CHANGED_OWNER)
{
llResetScript();
}
}
touch_start(integer total_number)
{
integer f;
for (f = 0; f < total_number; f++)
{
touchedFace = llDetectedTouchFace(f);// other faces can be usefull for anothers functions on your HUD
if (touchedFace == -1)
{
llWhisper(0, "Sorry, your viewer doesn't support touched faces."

;
}
if(touchedFace==0 && switch==0)
{
switch=1;
HANDLE =llListen(CHANNEL,"","",""

;
llOwnerSay("Fantasy translators is on."

;
}
else{
switch=0;
llListenRemove(HANDLE);
llOwnerSay("Fantasy translators is off."

;
}
}
}
listen(integer CHANNEL, string n, key i, string ms)
{
if(switch==1 )
{
if(i == owner)
{
llSay(0,encrypt(ms,_key));
llSay(CHANNEL,encrypt(ms,_key));
}
else
{
llSetObjectName(llKey2Name(i));
llOwnerSay(" says: "+ decrypt(ms,_key));
llSetObjectName(llKey2Name(owner));
}
}
}
}