string prefix;
integer commsChannel;
integer prefixBool;
default
{
on_rez(integer param)
{
llResetScript();
}
state_entry()
{
prefix = "default";
prefixBool = FALSE;
commsChannel = -209138; // arbitrary negative number, important part is every relay uses the same one.
llOwnerSay("Chat Relay System initialized. The current prefix is set as: " + prefix + ". Say 'prefix' on channel 80 to change it.");
integer localListen = llListen(0,"","",""); //setup listen for nearby chat, used for picking up IC chatter.
integer cmdListen = llListen(80,"",llGetOwner(),""); //setup listen for channel 80, used for changing prefixes.
integer commsListen = llListen(commsChannel,"","",""); //setup listen for the channel used for communication between relays.
}
listen(integer channel, string name, key id, string msg)
{
if (channel == 80) //this entire thing just changes prefixes using channel 80. prefixBool is used to toggle between two different kinds of listening.
{
if (prefixBool == TRUE)
{
prefix = msg;
llOwnerSay("Prefix set to '" + prefix + "'.");
prefixBool = FALSE;
}
else if (msg == "prefix")
{
prefixBool = TRUE;
llOwnerSay("Prefix change initiated. Say the new prefix on channel 80 now.");
}
}
else if (channel == 0 && id != llGetKey()) //channel 0 is nearby chat, the other requirement is that something other than the object itself said it.
{
string relayMessage = prefix+"थ"+name+"४"+msg; //weirdass glyphs are here just to try and prevent the message from having the separators.
llRegionSay(commsChannel,relayMessage);
}
else if (channel == commsChannel)
{
vector selfPos = llGetPos();
vector otherPos = llList2Vector(llGetObjectDetails(id, [OBJECT_POS]), 0);
if (llVecDist(selfPos,otherPos) > 20.0) //this whole vector thing is here to prevent an infinite loop by two nearby relays.
{
integer prefixIndex = llSubStringIndex(msg,"थ");
integer nameIndex = llSubStringIndex(msg,"४");
string relayedPrefix = llGetSubString(msg,0,prefixIndex-1);
string relayedName = llGetSubString(msg,prefixIndex+1,nameIndex-1);
string relayedMessage = llGetSubString(msg,nameIndex+1,llStringLength(msg)-1);
if (prefix == relayedPrefix)
{
string tempName = llGetObjectName();
llSetObjectName(relayedName);
llSay(0,relayedMessage);
llSetObjectName(tempName);
}
}
}
}
}