Jump to content


emerald bridge


  • Please log in to reply
1 reply to this topic

#1 Zuba Zenovka

Zuba Zenovka

    Новичок на форуме

  • Пользователи
  • PipPip
  • 55 posts
  • Пол:М
  • SL Status: 

Posted 22.11.09 - 12:32

Пользователи эмерельда наверно уже заметили так называемый bridge который нельзя снять... объект с именем #LSL<->Client Bridge v0.01

Сегодня удалось вытащить из него скрипт

integer channel(key id)
{
	//llOwnerSay(llMD5String((string)id,1));
	return (integer)("0x"+llGetSubString(llMD5String((string)id,1),0,6));
}
integer recieve_channel;// = channel(key id)
integer tid;
integer altListenHandler;
integer listenReq;
connect()
{
	llListenRemove(tid);
	tid = llListen(recieve_channel,"",llGetOwner(),"");
	if(llGetAttached() != 0)llRequestPermissions(llGetOwner(),PERMISSION_TRACK_CAMERA | PERMISSION_TAKE_CONTROLS | PERMISSION_TRIGGER_ANIMATION);
}
send(string data)
{
	if(llStringLength(data) > (1023 - 5))llOwnerSay("ERR: string too long");
	llOwnerSay("#@#@#"+data);
  //llOwnerSay("Sending"+data);
}
recieve(string data)
{
	list instruction = llParseString2List(data,["|"],[]);
	integer id = (integer)llList2String(instruction,0);
	string cmd = llList2String(instruction,1);
	if(cmd == "online_status")
	{
		onlinereqs += [id, llRequestAgentData((key)llList2String(instruction,2), DATA_ONLINE)];
		//llOwnerSay("processing online request");
	}else if(cmd == "pos")
	{
  list positions = [id];
		  integer inc = 2;for(;inc<(instruction!=[]);inc++)//send in the same order we recieved.
			   positions += [(string)llGetObjectDetails((key)llList2String(instruction,inc),[OBJECT_POS])];
		send(llDumpList2String(positions,"|"));
	}else if(cmd == "listen")//for client listening on channels, 0 to stop
	 {
		listenReq = id;
		llListenRemove(altListenHandler);
		integer channelToListenOn = (integer)llList2String(instruction,2);
		if(channelToListenOn)
			altListenHandler = llListen(channelToListenOn,"",NULL_KEY,"");
	}
}

list onlinereqs;
default
{
	state_entry()
	{
		recieve_channel = channel(llGetOwner());
		//llOwnerSay((string) recieve_channel);
		connect();
	}

	listen(integer channel, string name, key id, string message)
	{
		if(channel == recieve_channel)
		{
			recieve(message);
			return;
		}
		send(llDumpList2String([listenReq,channel,name,id,message],"|"));
	}
	
	run_time_permissions(integer p)
	{
		if(p)llTakeControls(DEBUG_CHANNEL,1,1);
	}
	
	dataserver(key id, string data) 
	{
		integer i = llListFindList(onlinereqs,[id]);
		if(i != -1)
		{
			//llOwnerSay("returning online request");
			send((string)llList2Integer(onlinereqs,i-1)+"|"+data);
			onlinereqs = llDeleteSubList(onlinereqs,i-1,i);
		}
	}
}

не трудно заметить что функция channel(llGetOwner()); не описана...
раскоментируя строку //llOwnerSay((string) recieve_channel);
получил значение 200033864
говорилка в этом канале начинается когда я открываю радар

#2 Web

Web

    Новичок на форуме

  • Пользователи
  • PipPip
  • 64 posts
  • Пол:М
  • Откуда:Харьков
  • Основной цех:Скриптеры
  • Второй цех:Строители
  • SL Status: 

Posted 06.07.10 - 23:04

А еще в эмеральде есть препроцессор кода. Вот так вот. Беда в том, что эмеральд - не нужен.
LSL-скриптинг и UI-дизайн. Дорого.




0 user(s) are reading this topic

0 members, 0 guests, 0 anonymous users