//Warp Cross-Sim Teleportation
//Warp from warpPos script by Keknehv Psaltery
//Full Script by Khalek Trescothick
//This Script is classified as open-source
//Do not remove this header
vector pos;
vector my_pos;
vector g_target;
vector save;
string sim;
string dest_sim;
integer c = 92805;
integer NeedToCrossSim = FALSE;
integer near_check = FALSE;
integer target = FALSE;
llWarp2Pos( vector d )
{
if ( d.z > 768 )
d.z = 768;
integer s = (integer)(llVecMag(d-llGetPos())/10)+1;
if ( s > 100 )
s = 100;
integer e = (integer)( llLog( s ) / llLog( 2 ) );
list rules = [ PRIM_POSITION, d ];
integer i;
for ( i = 0 ; i 0 )
rules += llList2List( rules, 0, r * 2 + 1 );
llSetPrimitiveParams( rules );
}
default
{
on_rez(integer rez)
{
llResetScript();
}
state_entry()
{
llListen(92805, "", "", "");
llSitTarget(<0,0,0>,ZERO_ROTATION);
}
dataserver(key TID, string data)
{
g_target += (vector)data;
vector G2 = g_target;
G2.z = 200;
save = llVecNorm(G2 - llGetRegionCorner());
if(llRound(save.y*2)>0)
save = <127 ,255,200>;
else if(llRound(save.y*2)<0)
save = <128,0,200>;
else if(llRound(save.x*2)>0)
save = <255 ,128,200>;
else if(llRound(save.x*2)<0)
save = <0,128,200>;
if(llEdgeOfWorld(llGetPos(), llVecNorm(save - llGetPos())))
{
save = llVecNorm(g_target - llGetRegionCorner());
if(llRound(save.x*2)>0)
save = <255 ,128,200>;
else if(llRound(save.x*2)<0)
save = <0,128,200>;
else if(llRound(save.y*2)>0)
save = <128 ,255,200>;
else if(llRound(save.y*2)<0)
save = <128,1,200>;
if(llEdgeOfWorld(llGetPos(), llVecNorm(save - llGetPos())))
{
llWhisper(0,"Pinpoint Error");
llUnSit(llAvatarOnSitTarget());
llSleep(1.0);
llDie();
}
}
NeedToCrossSim=TRUE;
llWarp2Pos(save);
llMessageLinked(-1,0,"done","");
}
link_message(integer prim,integer chan,string m, key id)
{
if(m == "done")
{
if(NeedToCrossSim)
{
vector P = llGetPos();
if(P.x==0)
P.x = -3;
else if(P.x==255)
P.x = 258;
if(P.y==0)
P.y = -3;
else if(P.y==255)
P.y = 258;
llSleep(3.5);//Needed delay so you do not crash over sim borders!
llSetPos(P);
NeedToCrossSim = FALSE;
llSleep(4);
}
sim = llGetRegionName();
if(sim != dest_sim)
{
g_target.z = 200;
save = llVecNorm(g_target - llGetRegionCorner());
if(llRound(save.y*2)>0)
save = <128 ,255,200>;
else if(llRound(save.y*2)<0)
save = <128,0,200>;
else if(llRound(save.x*2)>0)
save = <255 ,128,200>;
else if(llRound(save.x*2)<0)
save = <0,128,200>;
if(llEdgeOfWorld(llGetPos(), llVecNorm(save - llGetPos())))
{
save = llVecNorm(g_target - llGetRegionCorner());
if(llRound(save.x*2)>0)
save = <255 ,128,200>;
else if(llRound(save.x*2)<0)
save = <0,128,200>;
else if(llRound(save.y*2)>0)
save = <128 ,255,200>;
else if(llRound(save.y*2)<0)
save = <128,0,200>;
}
NeedToCrossSim = TRUE;
llWarp2Pos(save);
llMessageLinked(-1,0,"done","");
}
else if(sim == dest_sim)
{
NeedToCrossSim = FALSE;
llWarp2Pos(my_pos);
llSay(0,"Luccyy im hoomee");
llUnSit(llAvatarOnSitTarget());
llDie();
}
}
else
{
pos = g_target - llGetRegionCorner();
}
}
changed(integer change)
{
if(change & CHANGED_REGION)
{
llMessageLinked(LINK_SET, 0, "done", "");
}
}
listen(integer channel,string name,key id,string message)
{
if(message == message)
{
list d = llParseString2List(message,["*"],[]);
list p = llCSV2List(llList2String(d,0));
float x = llList2Float(p,0);
float y = llList2Float(p,1);
float z = llList2Float(p,2);
pos = ;
my_pos = ;
llMessageLinked(LINK_SET, 0, "bu", NULL_KEY);
dest_sim = llList2String(d,1);
if(llGetSubString(dest_sim,0,0) == " ")
{
dest_sim = llGetSubString(dest_sim,1,-1);
}
if(llGetRegionName() == dest_sim)
{
llWarp2Pos(my_pos);
}
else
{
llRequestSimulatorData(dest_sim, DATA_SIM_POS);
}
}
}
}0>128>0>255>0>255>0>128>0>128>0>255>0>255>0>127>0>>