LSL - Linden Scripting Language Trabalhando com Scripts Parte 6 Monitora: Cintia Caetano Mestrado UFF – IC 2009/011 1 llSensor llSensor(nome, id, tipo, distancia, arco); Nome: é um nome de um objeto ou avatar, sobre a qual nossa função atuará. ID: é a UUID de algum objeto ou avatar. Tipo: qual é o tipo que iremos procurar (AGENT, ACTIVE, PASSIVE e SCRIPTED) Distância: distancia, em metros, em que a função terá seu efeito. Arco: Arco é o campo de visão, dentro da distancia especificada. É a medida angular em que nossa função atuará. 2 2 llSensor Definindo: Realiza um escaneamento, dentro da distância e abertura especificada pelos parâmetros distância e arco, procurando por objetos ou pessoas, definidos pelos parâmetros tipo, nome e id. 3 3 llSensor AGENT – são avatares, usuários, pessoas. ACTIVE – são os objetos que estão se movendo, ou objetos contendo um script ativo. PASSIVE – objetos que não estão de movendo, ou objetos contendo scripts que estão sem executar nenhuma tarefa, aguardando um toque, ou um evento. SCRIPTED – objetos que possuem um script, ativo ou não. 4 4 llSensorRepeat / Remove llSensorRepeat(nome, id, tipo, distancia, arco, tempo); Realiza o escaneamento repetidamente, em intervalos especificados pelo parâmetro adicional tempo, em segundos. llSensorRemove(); Remove um escaneamento em andamento. Nota: só utilizasse esta função se tivermos usado a função llSensorRepeat anteriormente. Simplesmente desativa o escaneamento. 5 5 Evento Sensor Sensor(integer c){...}; O evento sensor é disparado toda vez que algo, especificado nos argumentos de llSensor ou llSensorRepeat, é detectado, durante um escaneamento. O número de objetos detectados é passado para o script através do parâmetro c do evento. Nota: Há um limite de 16 objetos, dentro de uma distância máxima de 96 metros. 6 6 Evento No_sensor No_sensor(){...}; Durante um escaneamento, enquanto o script não detectar nada, este evento é acionado. 7 7 Exercício 20 float alcance = 96.0; //alcance do sensor em metros float arco = PI; //arco do sensor float tx_repeticao = 1.0; //taxa de repetição do sensor vector cor_texto = <1.0,1.0,1.0>; //Cor do texto branco default { state_entry() { llSetText("", cor_texto, TRUE); //limpa o texto sobre o objeto passando uma string vazia como parâmetro 8 8 Exercício 20 //Chama llSensorRepeat, função para iniciar a detecção avatares. Função que levará o evento sensor() a uma taxa de g_Rate segundos llSensorRepeat("", NULL_KEY, AGENT, alcance, arco, tx_repeticao); //A string vazia olha para qualquer avatar. Se quisermos olhar apenas para um avatar específico, poderia simplesmente passar o nome ou key } //Evento Sensor sensor(integer num_detected) { string saida; //armazena as informações até que estejamos prontos para exibi-las 9 9 Exercício 20 string saida; //armazena as informações até que estejamos prontos para exibi-las integer x; //O for analisará cada um dos avatares detectados e armazenar os resultados numa seqüência de saída. for(x=0; x<num_detected; x++) { integer distancia = (integer) llVecDist(llGetPos(), llDetectedPos(x)); //descobre a distância entre os 2 objetos no espaço 3D. saida += llDetectedName(x) + " (" + (string)distancia + "m)\n"; } 10 10 Exercício 20 llSetText(saida, cor_texto, TRUE); //Apresenta sobre o objeto todas as informações recolhidas } } 11 11 12 Pagar Scripts podem dar e receber Lidens. É muito útil para criação de vendas. Para isso o script deve conter um evento Money. 13 13 Pagar default { money(key giver, integer amount) { llSay(0, “Obrigada pelos” + (string)amount + “L$ donation”); } } 14 14 Pagar Dar dinheiro através de um objeto com Script é um pouco mais complicado. O script precisa pedir permissão ao dono do objeto para debitar os Lindens Dólares da respectiva conta. 15 15 Exercício 21 default { state_entry() { llRequestPermissions(llGetOwner(), PERMISSION_DEBIT); //solicita permissão } touch_start (integer number_touching) { llGiveMoney(llDetectedKey(0), 1); //paga 1 L$ } } 16 16 Dando Notecard llGiveInventory(key destino, string inventario); Destino - avatar ou objeto UUID. Inventário - um item do inventário 17 17 Exercício 22 default { state_entry() { } touch_start(integer total_number) { llGiveInventory(llDetectedKey(0),”Leia"); llSay(0, "Obrigada!"); } } 18 18 Bibliográfia Guia de Script no Second Life. By Valdinei Rodrigues dos Reis Creating Your World: The Official Guide to Advanced Content Creation for Second Life. by Aimee Weber, Kimberly Rufer-Bach and Richard Platel. Wiley Publishing, Inc. ISBN: 978-0-470-17114-1 Second Life For Dummies. By Sarah Robbins, Mark Bell. Wiley Publishing, Inc. ISBN: 978-0-470-18025-9. Second Life: o Guia Oficial. By A P Watt Ltd. Editora: Ediouro. Ano: 2007. Edição: 1. ISBN: 9788500019616. LSL Guide http://wiki.secondlife.com/wiki 19 19