16 Técnicas Smarty Scripting Para Deixar Seus Templates Ainda Mais Inteligentes
LSL - Linden Scripting Language Trabalhando com Scripts...
Transcript of LSL - Linden Scripting Language Trabalhando com Scripts...
![Page 1: LSL - Linden Scripting Language Trabalhando com Scripts ...ccaetano/aulas/aula_sl_lsl_parte_1.pdf · ... quando é conveniente que elas ocorram. Já os Eventos são executados ...](https://reader030.fdocumentos.tips/reader030/viewer/2022021608/5c12113109d3f267308cf28d/html5/thumbnails/1.jpg)
LSL - Linden Scripting LanguageTrabalhando com Scripts
Parte 1
Monitora: Cintia CaetanoMestradoUFF – IC2009/02
11
![Page 2: LSL - Linden Scripting Language Trabalhando com Scripts ...ccaetano/aulas/aula_sl_lsl_parte_1.pdf · ... quando é conveniente que elas ocorram. Já os Eventos são executados ...](https://reader030.fdocumentos.tips/reader030/viewer/2022021608/5c12113109d3f267308cf28d/html5/thumbnails/2.jpg)
LSL ou Linden Scripting Language, em referência obvia ao laboratório Linden que projetou e desenvolveu o Second Life.
Linguagem usada para dar comportamento aos objetos no SL.
Linguagem de programação interpretada, orientada a eventos.
2
LSL
2
![Page 3: LSL - Linden Scripting Language Trabalhando com Scripts ...ccaetano/aulas/aula_sl_lsl_parte_1.pdf · ... quando é conveniente que elas ocorram. Já os Eventos são executados ...](https://reader030.fdocumentos.tips/reader030/viewer/2022021608/5c12113109d3f267308cf28d/html5/thumbnails/3.jpg)
Os Scripts em Second Life seguem, de forma geral, a sintaxe da linguagem Java, ou C++ / C#.
Dispondo, até o momento, de aproximadamente 400 funções.
Dispõe também de eventos, constantes, comandos de decisão e loop.
3
LSL
3
![Page 4: LSL - Linden Scripting Language Trabalhando com Scripts ...ccaetano/aulas/aula_sl_lsl_parte_1.pdf · ... quando é conveniente que elas ocorram. Já os Eventos são executados ...](https://reader030.fdocumentos.tips/reader030/viewer/2022021608/5c12113109d3f267308cf28d/html5/thumbnails/4.jpg)
Um Evento é quando alguma coisa acontece no mundo, como ex.: Tocar (touch) Colidir (collision) Pagar (pay) Dizer (say) Ouvir (listen) Etc.
Existem 33 eventos que pode acionar nossas funções.
4
Evento
4
![Page 5: LSL - Linden Scripting Language Trabalhando com Scripts ...ccaetano/aulas/aula_sl_lsl_parte_1.pdf · ... quando é conveniente que elas ocorram. Já os Eventos são executados ...](https://reader030.fdocumentos.tips/reader030/viewer/2022021608/5c12113109d3f267308cf28d/html5/thumbnails/5.jpg)
Possui uma máquina de estado implícita para cada Script.
Vários Scripts podem ser anexados ao mesmo objeto, ou seja, vários Scripts podem rodar simultaneamente.
5
Máquina de Estado
5
![Page 6: LSL - Linden Scripting Language Trabalhando com Scripts ...ccaetano/aulas/aula_sl_lsl_parte_1.pdf · ... quando é conveniente que elas ocorram. Já os Eventos são executados ...](https://reader030.fdocumentos.tips/reader030/viewer/2022021608/5c12113109d3f267308cf28d/html5/thumbnails/6.jpg)
Os Scripts podem executar funções específicas, tipo agarrar, seguir, etc.
Também podem ser combinados para dar novos comportamentos aos objetos.
6
Máquina de Estado
6
![Page 7: LSL - Linden Scripting Language Trabalhando com Scripts ...ccaetano/aulas/aula_sl_lsl_parte_1.pdf · ... quando é conveniente que elas ocorram. Já os Eventos são executados ...](https://reader030.fdocumentos.tips/reader030/viewer/2022021608/5c12113109d3f267308cf28d/html5/thumbnails/7.jpg)
O texto do Script é compilado num código executável, chamado byte code, como no Java.
Esse byte code é executado num simulador.
Cada script recebe uma fração do tempo total do simulador que foi alocado para os Scripts.
7
Simulador
7
![Page 8: LSL - Linden Scripting Language Trabalhando com Scripts ...ccaetano/aulas/aula_sl_lsl_parte_1.pdf · ... quando é conveniente que elas ocorram. Já os Eventos são executados ...](https://reader030.fdocumentos.tips/reader030/viewer/2022021608/5c12113109d3f267308cf28d/html5/thumbnails/8.jpg)
Se o simulador atribuir um tempo menor que o necessário. Cada script é executado no seu próprio espaço de memória.
Os scripts não podem escrever na memória protegida do simulador, nem em outros scripts.
8
Simulador
8
![Page 9: LSL - Linden Scripting Language Trabalhando com Scripts ...ccaetano/aulas/aula_sl_lsl_parte_1.pdf · ... quando é conveniente que elas ocorram. Já os Eventos são executados ...](https://reader030.fdocumentos.tips/reader030/viewer/2022021608/5c12113109d3f267308cf28d/html5/thumbnails/9.jpg)
default{
state_entry(){
llSay(0, "Hello, Avatar!"); }touch_start(integer total_number) {
llSay(0, "Touched."); }
}
9
Script Padrão
9
![Page 10: LSL - Linden Scripting Language Trabalhando com Scripts ...ccaetano/aulas/aula_sl_lsl_parte_1.pdf · ... quando é conveniente que elas ocorram. Já os Eventos são executados ...](https://reader030.fdocumentos.tips/reader030/viewer/2022021608/5c12113109d3f267308cf28d/html5/thumbnails/10.jpg)
10
Como escrever um Script Crie um novo objeto dentro do programa
utilizando-se da ferramenta build.
Clique sobre o objeto com o botão direito do mouse e clique em Edit.
Clique em more e na guia (necessita o nome da guia).
Clique então no botão New Script.
Uma janela se abrirá com o conteúdo padrão do arquivo de script.
10
![Page 11: LSL - Linden Scripting Language Trabalhando com Scripts ...ccaetano/aulas/aula_sl_lsl_parte_1.pdf · ... quando é conveniente que elas ocorram. Já os Eventos são executados ...](https://reader030.fdocumentos.tips/reader030/viewer/2022021608/5c12113109d3f267308cf28d/html5/thumbnails/11.jpg)
11
Script Padrão O estado “default” é o primeiro a ser
executado pelo objeto, na sua instanciação, ou inicialização.
A partir dele, podemos chamar outros estados criados por nós.
default {
}
11
![Page 12: LSL - Linden Scripting Language Trabalhando com Scripts ...ccaetano/aulas/aula_sl_lsl_parte_1.pdf · ... quando é conveniente que elas ocorram. Já os Eventos são executados ...](https://reader030.fdocumentos.tips/reader030/viewer/2022021608/5c12113109d3f267308cf28d/html5/thumbnails/12.jpg)
Eventos são situações a que o Script esta apto a responder, automatica-mente, na medida em que ocorrem.
nome_do_evento( ) {
codigo_a_executar; }
12
Eventos
12
![Page 13: LSL - Linden Scripting Language Trabalhando com Scripts ...ccaetano/aulas/aula_sl_lsl_parte_1.pdf · ... quando é conveniente que elas ocorram. Já os Eventos são executados ...](https://reader030.fdocumentos.tips/reader030/viewer/2022021608/5c12113109d3f267308cf28d/html5/thumbnails/13.jpg)
state_entry() {
}
touch_start(integer total_number) {
}
13
Eventos
13
![Page 14: LSL - Linden Scripting Language Trabalhando com Scripts ...ccaetano/aulas/aula_sl_lsl_parte_1.pdf · ... quando é conveniente que elas ocorram. Já os Eventos são executados ...](https://reader030.fdocumentos.tips/reader030/viewer/2022021608/5c12113109d3f267308cf28d/html5/thumbnails/14.jpg)
14
Eventos state_entry() ocorre sempre que um
novo estado é incorporado, incluindo o início do programa e é sempre o primeiro evento a ser executado.
Sua utilidade para nós é atribuir valores á variáveis, definir propriedades do objeto, entre outros.
14
![Page 15: LSL - Linden Scripting Language Trabalhando com Scripts ...ccaetano/aulas/aula_sl_lsl_parte_1.pdf · ... quando é conveniente que elas ocorram. Já os Eventos são executados ...](https://reader030.fdocumentos.tips/reader030/viewer/2022021608/5c12113109d3f267308cf28d/html5/thumbnails/15.jpg)
15
Eventos touch_start() ocorre sempre que o
objeto for tocado pelo avatar.
Responde ao evento de toque, que no nosso caso é o clique do mouse.
15
![Page 16: LSL - Linden Scripting Language Trabalhando com Scripts ...ccaetano/aulas/aula_sl_lsl_parte_1.pdf · ... quando é conveniente que elas ocorram. Já os Eventos são executados ...](https://reader030.fdocumentos.tips/reader030/viewer/2022021608/5c12113109d3f267308cf28d/html5/thumbnails/16.jpg)
16
Funções Função é simplesmente o que fazer e
como fazer, com relação a um objetivo específico.
Diferença Funções são chamadas explicitamente,
ou seja, quando é conveniente que elas ocorram.
Já os Eventos são executados automaticamente.
16
![Page 17: LSL - Linden Scripting Language Trabalhando com Scripts ...ccaetano/aulas/aula_sl_lsl_parte_1.pdf · ... quando é conveniente que elas ocorram. Já os Eventos são executados ...](https://reader030.fdocumentos.tips/reader030/viewer/2022021608/5c12113109d3f267308cf28d/html5/thumbnails/17.jpg)
17
Funções Embutidas Não possuir visualmente o código a
executar, ele encontra-se embutido, não disponível para visualização.
As funções no SL começar com ll.
llSay(0, “Hello, Avatar!”); // Diz no canal público a mensagem Hello Avatar!
llOwnerSay(“Touched”);// Diz no canal público a mensagem Touched.
17
![Page 18: LSL - Linden Scripting Language Trabalhando com Scripts ...ccaetano/aulas/aula_sl_lsl_parte_1.pdf · ... quando é conveniente que elas ocorram. Já os Eventos são executados ...](https://reader030.fdocumentos.tips/reader030/viewer/2022021608/5c12113109d3f267308cf28d/html5/thumbnails/18.jpg)
Integer Float String Vector Key List Rotation (quaternion)
R
18
Tipos de dados
18
![Page 19: LSL - Linden Scripting Language Trabalhando com Scripts ...ccaetano/aulas/aula_sl_lsl_parte_1.pdf · ... quando é conveniente que elas ocorram. Já os Eventos são executados ...](https://reader030.fdocumentos.tips/reader030/viewer/2022021608/5c12113109d3f267308cf28d/html5/thumbnails/19.jpg)
Valores inteiros, sem casas decimais.
Possui valores de 32 bits.
Sua faixa de valores vai de:-2.147.483.648 até +2.147.483.647
19
Integer
19
![Page 20: LSL - Linden Scripting Language Trabalhando com Scripts ...ccaetano/aulas/aula_sl_lsl_parte_1.pdf · ... quando é conveniente que elas ocorram. Já os Eventos são executados ...](https://reader030.fdocumentos.tips/reader030/viewer/2022021608/5c12113109d3f267308cf28d/html5/thumbnails/20.jpg)
Exemplo:
integer numero = -23; integer teste = 235632; integer idade = 0;
20
Integer
20
![Page 21: LSL - Linden Scripting Language Trabalhando com Scripts ...ccaetano/aulas/aula_sl_lsl_parte_1.pdf · ... quando é conveniente que elas ocorram. Já os Eventos são executados ...](https://reader030.fdocumentos.tips/reader030/viewer/2022021608/5c12113109d3f267308cf28d/html5/thumbnails/21.jpg)
Números de ponto flutuante.
São números de 32 bits (IEEE-754)
Sua faixa vai de:1.175494351E-38 até 3.402823466E+38
21
Float
21
![Page 22: LSL - Linden Scripting Language Trabalhando com Scripts ...ccaetano/aulas/aula_sl_lsl_parte_1.pdf · ... quando é conveniente que elas ocorram. Já os Eventos são executados ...](https://reader030.fdocumentos.tips/reader030/viewer/2022021608/5c12113109d3f267308cf28d/html5/thumbnails/22.jpg)
Exemplo:
float peso = 2.718128; float abc = 0.f; float numero = 1;
22
Float
22
![Page 23: LSL - Linden Scripting Language Trabalhando com Scripts ...ccaetano/aulas/aula_sl_lsl_parte_1.pdf · ... quando é conveniente que elas ocorram. Já os Eventos são executados ...](https://reader030.fdocumentos.tips/reader030/viewer/2022021608/5c12113109d3f267308cf28d/html5/thumbnails/23.jpg)
23
String O tipo string armazena texto, números,
caracteres, com exceção da barra invertida (\).
Toda informação atribuída a uma string deve estar entre aspas.
A barra invertida serve para alterar como o compilador irá interpretar o próximo caractere.
23
![Page 24: LSL - Linden Scripting Language Trabalhando com Scripts ...ccaetano/aulas/aula_sl_lsl_parte_1.pdf · ... quando é conveniente que elas ocorram. Já os Eventos são executados ...](https://reader030.fdocumentos.tips/reader030/viewer/2022021608/5c12113109d3f267308cf28d/html5/thumbnails/24.jpg)
24
String \n → Nova linha, ou quebra de linha. \t → 4 Espaços. Insere 4 espaços entre
o texto, ou uma tabulação. \” → Insere aspas ao texto. \\ → Insere uma barra invertida no
texto. Para concatenar strings, usa-se o sinal
de mais (+). Por exemplo: “Cintia” + “Caetano” = “Cintia Caetano”
24
![Page 25: LSL - Linden Scripting Language Trabalhando com Scripts ...ccaetano/aulas/aula_sl_lsl_parte_1.pdf · ... quando é conveniente que elas ocorram. Já os Eventos são executados ...](https://reader030.fdocumentos.tips/reader030/viewer/2022021608/5c12113109d3f267308cf28d/html5/thumbnails/25.jpg)
Exemplo:
string name = “Aprendendo LSL"; string letra = "c"; string numero = "1"; // note que "1" ≠ 1
25
String
25
![Page 26: LSL - Linden Scripting Language Trabalhando com Scripts ...ccaetano/aulas/aula_sl_lsl_parte_1.pdf · ... quando é conveniente que elas ocorram. Já os Eventos são executados ...](https://reader030.fdocumentos.tips/reader030/viewer/2022021608/5c12113109d3f267308cf28d/html5/thumbnails/26.jpg)
26
Vector Um vetor é um tipo composto de 3
floats. Sua sintaxe é: <float,float,float>. Cada elemento pode ser
individualmente acessado e alterado através dos atributos .x .y .z da variável vetor.
Um vetor é geralmente utilizado para expressar uma posição, velocidade, aceleração ou cor.
26
![Page 27: LSL - Linden Scripting Language Trabalhando com Scripts ...ccaetano/aulas/aula_sl_lsl_parte_1.pdf · ... quando é conveniente que elas ocorram. Já os Eventos são executados ...](https://reader030.fdocumentos.tips/reader030/viewer/2022021608/5c12113109d3f267308cf28d/html5/thumbnails/27.jpg)
27
Vector Exemplo:
vector meu_vetor = <1.0 , 2.5 , 0.5> meu_vetor.x → 1.0 meu_vetor.y → 2.5 meu_vetor.z + 1. → 1.5
27
![Page 28: LSL - Linden Scripting Language Trabalhando com Scripts ...ccaetano/aulas/aula_sl_lsl_parte_1.pdf · ... quando é conveniente que elas ocorram. Já os Eventos são executados ...](https://reader030.fdocumentos.tips/reader030/viewer/2022021608/5c12113109d3f267308cf28d/html5/thumbnails/28.jpg)
28
Vector Vetores suportam as quatro operações
matemáticas, divisão, multiplicação, adição e subtração.
x, y e z representam coordenadas cartesianas, mundo tridimendional.
Um vector pode ser multiplicado por um quaternion para rotacionar.
28
![Page 29: LSL - Linden Scripting Language Trabalhando com Scripts ...ccaetano/aulas/aula_sl_lsl_parte_1.pdf · ... quando é conveniente que elas ocorram. Já os Eventos são executados ...](https://reader030.fdocumentos.tips/reader030/viewer/2022021608/5c12113109d3f267308cf28d/html5/thumbnails/29.jpg)
Uma chave (key) é um identificador único do SL, também conhecido como UUID (Universally Unique Identifier).
Definição: UUID é um identificador único para tudo dentro do Second Life (primitivas, avatares, texturas, etc.).
A utilidade em armazenar este identificador é podermos nos referenciar a objetos e avatares em nossos scripts.
29
Key
29
![Page 30: LSL - Linden Scripting Language Trabalhando com Scripts ...ccaetano/aulas/aula_sl_lsl_parte_1.pdf · ... quando é conveniente que elas ocorram. Já os Eventos são executados ...](https://reader030.fdocumentos.tips/reader030/viewer/2022021608/5c12113109d3f267308cf28d/html5/thumbnails/30.jpg)
Os nomes dos objetos podem se repetir, porém uma Key não.
Uma chave (key) é formada por caracteres hexadecimais (de A até F e de 0 até 9).
Exemplo de uma UUID:"a822ff2b-ff02-461d-b45d-dcd10a2de0c2".
30
Key
30
![Page 31: LSL - Linden Scripting Language Trabalhando com Scripts ...ccaetano/aulas/aula_sl_lsl_parte_1.pdf · ... quando é conveniente que elas ocorram. Já os Eventos são executados ...](https://reader030.fdocumentos.tips/reader030/viewer/2022021608/5c12113109d3f267308cf28d/html5/thumbnails/31.jpg)
Uma lista é um tipo de dado que contém 0 ou mais elementos de qualquer outro tipo de dados.
Uma lista é delimitada por Colchetes [], e seus valores são separados um do outro por vírgula.
31
List
31
![Page 32: LSL - Linden Scripting Language Trabalhando com Scripts ...ccaetano/aulas/aula_sl_lsl_parte_1.pdf · ... quando é conveniente que elas ocorram. Já os Eventos são executados ...](https://reader030.fdocumentos.tips/reader030/viewer/2022021608/5c12113109d3f267308cf28d/html5/thumbnails/32.jpg)
32
ListSeja um exemplo: list minha_lista=[“Cintia”, 9.5 , 12,
"a822ff2b-ff02-461d-b45d-dcd10a2de0c2”, <8.5,2.5,1>, [“LSL”, 2 , 4.5] ]
Quantos elementos possui nossa lista exemplo? Quais são eles?
32
![Page 33: LSL - Linden Scripting Language Trabalhando com Scripts ...ccaetano/aulas/aula_sl_lsl_parte_1.pdf · ... quando é conveniente que elas ocorram. Já os Eventos são executados ...](https://reader030.fdocumentos.tips/reader030/viewer/2022021608/5c12113109d3f267308cf28d/html5/thumbnails/33.jpg)
33
ListVejamos:
String = “Cintia”Float = 9.5 Integer = 12Key = a822ff2b-ff02-461d-b45d-
dcd10a2de0c2Vector = <8.5,2.5,1>List = [“LSL”, 2 , 4.5]
33
![Page 34: LSL - Linden Scripting Language Trabalhando com Scripts ...ccaetano/aulas/aula_sl_lsl_parte_1.pdf · ... quando é conveniente que elas ocorram. Já os Eventos são executados ...](https://reader030.fdocumentos.tips/reader030/viewer/2022021608/5c12113109d3f267308cf28d/html5/thumbnails/34.jpg)
34
Rotation (Quaternion) Este tipo é usado para armazenar
valores relativos a rotação de um objeto.
Utiliza conceitos sobre rotação global e local, grau e radiano, assim como, de rotação relativa ao objeto raiz, ou principal, etc.
34
![Page 35: LSL - Linden Scripting Language Trabalhando com Scripts ...ccaetano/aulas/aula_sl_lsl_parte_1.pdf · ... quando é conveniente que elas ocorram. Já os Eventos são executados ...](https://reader030.fdocumentos.tips/reader030/viewer/2022021608/5c12113109d3f267308cf28d/html5/thumbnails/35.jpg)
35
Rotation (Quaternion) Quaternions suportam as quatro operações
matemáticas: divisão, multiplicação, adição e subtração.
rotation rot = <0.f, 0.f, 0.f, 1.f>; // Rotations em LSL são internamente
normalizados
rotation rot = <32, 2, -9, 128>; // Mesmo que na sua initialização não seja.
35
![Page 36: LSL - Linden Scripting Language Trabalhando com Scripts ...ccaetano/aulas/aula_sl_lsl_parte_1.pdf · ... quando é conveniente que elas ocorram. Já os Eventos são executados ...](https://reader030.fdocumentos.tips/reader030/viewer/2022021608/5c12113109d3f267308cf28d/html5/thumbnails/36.jpg)
3636
![Page 37: LSL - Linden Scripting Language Trabalhando com Scripts ...ccaetano/aulas/aula_sl_lsl_parte_1.pdf · ... quando é conveniente que elas ocorram. Já os Eventos são executados ...](https://reader030.fdocumentos.tips/reader030/viewer/2022021608/5c12113109d3f267308cf28d/html5/thumbnails/37.jpg)
37
Tipos de Operadores Unário + (soma), - (subtração), * (multiplicação), /
(divisão), % (módulo), ^ (ou exclusivo), << (shift left), >> (shift right)
integer count = 1; count++; llSay(0, (string)count);
37
![Page 38: LSL - Linden Scripting Language Trabalhando com Scripts ...ccaetano/aulas/aula_sl_lsl_parte_1.pdf · ... quando é conveniente que elas ocorram. Já os Eventos são executados ...](https://reader030.fdocumentos.tips/reader030/viewer/2022021608/5c12113109d3f267308cf28d/html5/thumbnails/38.jpg)
38
Tipos de Operadores Binário Operadores binários são operadores
aritméticos que atuam sobre dois valores para a produção de um terceiro.
integer a = 5;integer b = 2; integer c = a % b; // a modulo b, então c = 1.
38
![Page 39: LSL - Linden Scripting Language Trabalhando com Scripts ...ccaetano/aulas/aula_sl_lsl_parte_1.pdf · ... quando é conveniente que elas ocorram. Já os Eventos são executados ...](https://reader030.fdocumentos.tips/reader030/viewer/2022021608/5c12113109d3f267308cf28d/html5/thumbnails/39.jpg)
39
Tipos de Operadores Boolean <, >, <=, >=, &&, ||, !
Operadores booleanos sempre geram resultados TRUE (1) ou FALSE (0):
integer a = 5; integer b = 2; integer c = a != b; // retorna TRUE (1) se as
variáveis não forem iguais.
39
![Page 40: LSL - Linden Scripting Language Trabalhando com Scripts ...ccaetano/aulas/aula_sl_lsl_parte_1.pdf · ... quando é conveniente que elas ocorram. Já os Eventos são executados ...](https://reader030.fdocumentos.tips/reader030/viewer/2022021608/5c12113109d3f267308cf28d/html5/thumbnails/40.jpg)
40
Tipos de Operadores Lógico &, |, ~
integer a = 5; // 0x101 em bináriointeger b = 2; // 0x010 integer c = a | b; // a or b = 0x111, so c = 7
40
![Page 41: LSL - Linden Scripting Language Trabalhando com Scripts ...ccaetano/aulas/aula_sl_lsl_parte_1.pdf · ... quando é conveniente que elas ocorram. Já os Eventos são executados ...](https://reader030.fdocumentos.tips/reader030/viewer/2022021608/5c12113109d3f267308cf28d/html5/thumbnails/41.jpg)
41
Tipos de Operadores Atribuição +=, -=, /=, *=
Exemplo:
integer a = 5; a += 5; //a = 10
41
![Page 42: LSL - Linden Scripting Language Trabalhando com Scripts ...ccaetano/aulas/aula_sl_lsl_parte_1.pdf · ... quando é conveniente que elas ocorram. Já os Eventos são executados ...](https://reader030.fdocumentos.tips/reader030/viewer/2022021608/5c12113109d3f267308cf28d/html5/thumbnails/42.jpg)
42
Controle de Fluxo - While While verifica uma condição e, caso ela
retorne verdadeira, executa o bloco de código.
Esse processo se repete ate que o teste da condição retorne falso.
while(condição) { //comandos a executar; }
42
![Page 43: LSL - Linden Scripting Language Trabalhando com Scripts ...ccaetano/aulas/aula_sl_lsl_parte_1.pdf · ... quando é conveniente que elas ocorram. Já os Eventos são executados ...](https://reader030.fdocumentos.tips/reader030/viewer/2022021608/5c12113109d3f267308cf28d/html5/thumbnails/43.jpg)
integer contador = 0;default{ state_entry() { llSay(0, "Hello, Avatar!"); } touch_start(integer total_number) { llSay(0, "Touched."); while(contador <= 10) { llOwnerSay((string)contador);
contador++; } }}
Controle de Fluxo - While
43
![Page 44: LSL - Linden Scripting Language Trabalhando com Scripts ...ccaetano/aulas/aula_sl_lsl_parte_1.pdf · ... quando é conveniente que elas ocorram. Já os Eventos são executados ...](https://reader030.fdocumentos.tips/reader030/viewer/2022021608/5c12113109d3f267308cf28d/html5/thumbnails/44.jpg)
44
Controle de Fluxo - Do While Executa o laço um vez e verifica uma
condição e, caso ela retorne verdadeira, executa o bloco de código.
Esse processo se repete até que o teste da condição retorne falso.
do{ //comandos a executar; } While(condição)
44
![Page 45: LSL - Linden Scripting Language Trabalhando com Scripts ...ccaetano/aulas/aula_sl_lsl_parte_1.pdf · ... quando é conveniente que elas ocorram. Já os Eventos são executados ...](https://reader030.fdocumentos.tips/reader030/viewer/2022021608/5c12113109d3f267308cf28d/html5/thumbnails/45.jpg)
Controle de Fluxo - Do Whileinteger contador = 0;
default{ state_entry() { llSay(0, "Hello, Avatar!"); } touch_start(integer total_number) { llSay(0, "Touched."); do { contador++; llOwnerSay((string)contador); } while(contador < 10); }}
45
![Page 46: LSL - Linden Scripting Language Trabalhando com Scripts ...ccaetano/aulas/aula_sl_lsl_parte_1.pdf · ... quando é conveniente que elas ocorram. Já os Eventos são executados ...](https://reader030.fdocumentos.tips/reader030/viewer/2022021608/5c12113109d3f267308cf28d/html5/thumbnails/46.jpg)
46
Controle de Fluxo - For Seu principal uso é a execução de um
bloco de código, um número de vezes predeterminado ou não.
for(i = 0; i <=10, i++) {
//seqüência de comandos a executar; }
46
![Page 47: LSL - Linden Scripting Language Trabalhando com Scripts ...ccaetano/aulas/aula_sl_lsl_parte_1.pdf · ... quando é conveniente que elas ocorram. Já os Eventos são executados ...](https://reader030.fdocumentos.tips/reader030/viewer/2022021608/5c12113109d3f267308cf28d/html5/thumbnails/47.jpg)
Controle de Fluxo - Forinteger i = 0;
default{ state_entry() { llSay(0, "Hello, Avatar!"); } touch_start(integer total_number) { for (i=0;i<=10; i++){ llOwnerSay((string)i); } }}
47
![Page 48: LSL - Linden Scripting Language Trabalhando com Scripts ...ccaetano/aulas/aula_sl_lsl_parte_1.pdf · ... quando é conveniente que elas ocorram. Já os Eventos são executados ...](https://reader030.fdocumentos.tips/reader030/viewer/2022021608/5c12113109d3f267308cf28d/html5/thumbnails/48.jpg)
48
Controle de Fluxo – If... Else Um laço condicional, que avalia uma
condição para saber se faz isso ou aquilo.
if (condição) {
//código a executar se verdadeiro; } else {
//código a executar se falso} }
48
![Page 49: LSL - Linden Scripting Language Trabalhando com Scripts ...ccaetano/aulas/aula_sl_lsl_parte_1.pdf · ... quando é conveniente que elas ocorram. Já os Eventos são executados ...](https://reader030.fdocumentos.tips/reader030/viewer/2022021608/5c12113109d3f267308cf28d/html5/thumbnails/49.jpg)
integer i = 0;default{ state_entry() { llSay(0, "Hello, Avatar!"); } touch_start(integer total_number) { for (i=0;i<=10; i++){ llOwnerSay((string)i); if (i<5){ llOwnerSay("Sou menor que 5"); } } }}
Controle de Fluxo – If... Else
49
![Page 50: LSL - Linden Scripting Language Trabalhando com Scripts ...ccaetano/aulas/aula_sl_lsl_parte_1.pdf · ... quando é conveniente que elas ocorram. Já os Eventos são executados ...](https://reader030.fdocumentos.tips/reader030/viewer/2022021608/5c12113109d3f267308cf28d/html5/thumbnails/50.jpg)
50
Jump Executa um pulo até um certo ponto do Script.
Etiquetas (labels), são pontos definidos, e então, quando necessário, dizemos ao script “pule para local1” (jump local1).
Os locais (labels) são definidos colocando o caracter @ na frente do nome que escolhermos.
Exemplo: @local1; @local2;
50
![Page 51: LSL - Linden Scripting Language Trabalhando com Scripts ...ccaetano/aulas/aula_sl_lsl_parte_1.pdf · ... quando é conveniente que elas ocorram. Já os Eventos são executados ...](https://reader030.fdocumentos.tips/reader030/viewer/2022021608/5c12113109d3f267308cf28d/html5/thumbnails/51.jpg)
51
Jump Exemplo:
integer a = 5;jump avance;@agora;
a = 6;@avance;
llOwnerSay((string)a);if(a < 6)
jump agora;else
llSay(0, “Sou maior que 6”);
51
![Page 52: LSL - Linden Scripting Language Trabalhando com Scripts ...ccaetano/aulas/aula_sl_lsl_parte_1.pdf · ... quando é conveniente que elas ocorram. Já os Eventos são executados ...](https://reader030.fdocumentos.tips/reader030/viewer/2022021608/5c12113109d3f267308cf28d/html5/thumbnails/52.jpg)
52
Return Retorno, volta, regresso.
Quando incluímos uma declaração return em uma função ou evento de nosso script, dizemos ao compilador que, “quando chegar aqui, retorne para quem chamou, esqueça o restante da função ou evento”.
52
![Page 53: LSL - Linden Scripting Language Trabalhando com Scripts ...ccaetano/aulas/aula_sl_lsl_parte_1.pdf · ... quando é conveniente que elas ocorram. Já os Eventos são executados ...](https://reader030.fdocumentos.tips/reader030/viewer/2022021608/5c12113109d3f267308cf28d/html5/thumbnails/53.jpg)
53
Funções Second Life disponibiliza, até o momento,
mais de 400 funções pré-definidas.
Será apresentado algumas funções relacionadas com a comunicação.
Para estudar as funções de comunicação é necessário ter em mente a definição de Canal de comunicação.
53
![Page 54: LSL - Linden Scripting Language Trabalhando com Scripts ...ccaetano/aulas/aula_sl_lsl_parte_1.pdf · ... quando é conveniente que elas ocorram. Já os Eventos são executados ...](https://reader030.fdocumentos.tips/reader030/viewer/2022021608/5c12113109d3f267308cf28d/html5/thumbnails/54.jpg)
54
Canal de Comunicação É o canal que se utiliza para se comunicar
com outros avatares, objetos, etc.
Existem 2.147.483.647 canais para comunicação no SL.
Canal 0 é o canal público, onde todas as pessoas que estão próximas a você vêem o que você digitou.
Os objetos (somente eles) podem utilizar canais negativos para comunicação.
54
![Page 55: LSL - Linden Scripting Language Trabalhando com Scripts ...ccaetano/aulas/aula_sl_lsl_parte_1.pdf · ... quando é conveniente que elas ocorram. Já os Eventos são executados ...](https://reader030.fdocumentos.tips/reader030/viewer/2022021608/5c12113109d3f267308cf28d/html5/thumbnails/55.jpg)
55
Canal de Comunicação Todos os canais, exceto o 0, são canais
privados, o que significa que mensagens transmitidas através deles não são ouvidas pelas pessoas próximas ou não de você.
Pode-se enviar mensagens para objetos, basta para isso configurá-lo para ouvir em um determinado canal e dizer sua mensagem através do mesmo.
Isso se consegue com a barra seguida do canal desejado e a mensagem.
Exemplo: /127 execute55
![Page 56: LSL - Linden Scripting Language Trabalhando com Scripts ...ccaetano/aulas/aula_sl_lsl_parte_1.pdf · ... quando é conveniente que elas ocorram. Já os Eventos são executados ...](https://reader030.fdocumentos.tips/reader030/viewer/2022021608/5c12113109d3f267308cf28d/html5/thumbnails/56.jpg)
56
llWhisper / llSay / llShout llWhisper(integer canal, string mensagem); llSay(integer canal, string mensagem); llShout(integer canal, string mensagem);
As três funções fazem a mesma coisa, dizem a mensagem no canal especificado. A diferença é a distancia alcançada por cada uma delas: llWhisper alcança 10 metros; llSay alcança 20 metros; llShout alcança 100 metros.
56
![Page 57: LSL - Linden Scripting Language Trabalhando com Scripts ...ccaetano/aulas/aula_sl_lsl_parte_1.pdf · ... quando é conveniente que elas ocorram. Já os Eventos são executados ...](https://reader030.fdocumentos.tips/reader030/viewer/2022021608/5c12113109d3f267308cf28d/html5/thumbnails/57.jpg)
57
llWhisper / llSay / llShout Observações:
A mensagem não pode ter mais que 512 caracteres.
Um objeto não é capaz de ouvir sua própria mensagem.
57
![Page 58: LSL - Linden Scripting Language Trabalhando com Scripts ...ccaetano/aulas/aula_sl_lsl_parte_1.pdf · ... quando é conveniente que elas ocorram. Já os Eventos são executados ...](https://reader030.fdocumentos.tips/reader030/viewer/2022021608/5c12113109d3f267308cf28d/html5/thumbnails/58.jpg)
58
llOwnerSay llOwnerSay(string mensagem);
Quando desejamos que um objeto envie uma mensagem para nós mesmos, sem usar nenhum canal.
Ela necessita apenas da mensagem desejada como parâmetro.
A única exigência desta função é que você esteja na mesma área em que está o objeto.
58
![Page 59: LSL - Linden Scripting Language Trabalhando com Scripts ...ccaetano/aulas/aula_sl_lsl_parte_1.pdf · ... quando é conveniente que elas ocorram. Já os Eventos são executados ...](https://reader030.fdocumentos.tips/reader030/viewer/2022021608/5c12113109d3f267308cf28d/html5/thumbnails/59.jpg)
59
llInstantMessenger llInstantMessage(key usuário, string
mensagem);
Chamada com os parâmetros chave de usuário e mensagem, envia esta para o usuário especificado.
Não existe a limitação de o usuário ter que estar na mesma área e a mensagem não pode ter mais que 512 caracteres.
Esta função possui um Delay de 2.0 segundos.
59
![Page 60: LSL - Linden Scripting Language Trabalhando com Scripts ...ccaetano/aulas/aula_sl_lsl_parte_1.pdf · ... quando é conveniente que elas ocorram. Já os Eventos são executados ...](https://reader030.fdocumentos.tips/reader030/viewer/2022021608/5c12113109d3f267308cf28d/html5/thumbnails/60.jpg)
60
llInstantMessenger Também conhecida com MI, forma de enviar
mensagem particular para um outro avatar.
As MIs podem ser ouvidas em qualquer lugar do Second Life, mas somente pelo destinatário.
Se o residente estiver off-line, a mensagem será salva e entregue na próxima vez que ele conectar.
60
![Page 61: LSL - Linden Scripting Language Trabalhando com Scripts ...ccaetano/aulas/aula_sl_lsl_parte_1.pdf · ... quando é conveniente que elas ocorram. Já os Eventos são executados ...](https://reader030.fdocumentos.tips/reader030/viewer/2022021608/5c12113109d3f267308cf28d/html5/thumbnails/61.jpg)
61
Evento Listen listen(integer canal, string nome, key pessoa,
string mensagem) {...}
O evento Listen é acionado quando o objeto ouve algo, quando captura qualquer mensagem.
Devemos acionar este evento e codificá-lo para responder a essas mensagens de objetos e pessoas.
O evento Listen só declara as variáveis para trabalhar, passar os valores é trabalho para a função llListen.
61
![Page 62: LSL - Linden Scripting Language Trabalhando com Scripts ...ccaetano/aulas/aula_sl_lsl_parte_1.pdf · ... quando é conveniente que elas ocorram. Já os Eventos são executados ...](https://reader030.fdocumentos.tips/reader030/viewer/2022021608/5c12113109d3f267308cf28d/html5/thumbnails/62.jpg)
62
llListen llListen(integer canal, string nome, key pessoa,
string mensagem);
Considere esta função como um filtro para o evento Listen .
Os parâmetros da função llListen são passados para as variáveis correspondentes criadas no evento Listen.
Retorna um valor inteiro, que pode ser usado para ativar, desativar ou remover o evento Listen.
62
![Page 63: LSL - Linden Scripting Language Trabalhando com Scripts ...ccaetano/aulas/aula_sl_lsl_parte_1.pdf · ... quando é conveniente que elas ocorram. Já os Eventos são executados ...](https://reader030.fdocumentos.tips/reader030/viewer/2022021608/5c12113109d3f267308cf28d/html5/thumbnails/63.jpg)
63
llListendefault{
state_entry(){ llListen(0, “”, llGetOwner(), “”);}listen(integer canal, string nome, key pessoa, string mensagem) { llSay (0, mensagem); }
}
Tudo que esse Script faz é repetir o que o dono do objeto diz. Ao iniciar, llListen define o evento Listen para que o objeto possa ouvir a conversa. 63
![Page 64: LSL - Linden Scripting Language Trabalhando com Scripts ...ccaetano/aulas/aula_sl_lsl_parte_1.pdf · ... quando é conveniente que elas ocorram. Já os Eventos são executados ...](https://reader030.fdocumentos.tips/reader030/viewer/2022021608/5c12113109d3f267308cf28d/html5/thumbnails/64.jpg)
64
llListenControl / Remove llListenControl(integer numero, integer
ativo); Para ativar ou desativar o filtro. Zero significa
falso (FALSE), desativando nosso filtro e 1 significa verdadeiro (TRUE).
llListenRemove(integer numero); Aqui, ao passar o numero do filtro á função,
ela remove definitivamente o evento listen correspondente a este filtro.
64
![Page 65: LSL - Linden Scripting Language Trabalhando com Scripts ...ccaetano/aulas/aula_sl_lsl_parte_1.pdf · ... quando é conveniente que elas ocorram. Já os Eventos são executados ...](https://reader030.fdocumentos.tips/reader030/viewer/2022021608/5c12113109d3f267308cf28d/html5/thumbnails/65.jpg)
65
Exercício 1integer I; //manipulará um dos filtros do evento listen default {
state_entry() {
llListen(127,"","",""); //listen ouvirá no canal 127 e aceitar qualquer outro parâmetro (nome, pessoa e mensagem). l=llListen(0,"","",""); //atribuí o segundo filtro a variável l llListenControl(l,FALSE); //desativa o filtro anterior
}
//apartir daqui trabalha apenas o evento Listenlisten(integer canal, string obj, key id, string msg) {
if (canal==127) //Se o usuário digitar /127{
65
![Page 66: LSL - Linden Scripting Language Trabalhando com Scripts ...ccaetano/aulas/aula_sl_lsl_parte_1.pdf · ... quando é conveniente que elas ocorram. Já os Eventos são executados ...](https://reader030.fdocumentos.tips/reader030/viewer/2022021608/5c12113109d3f267308cf28d/html5/thumbnails/66.jpg)
66
Exercício 1if (msg=="Ativar") //se digitar /127 Ativar{
llListenControl(l,TRUE); //habilita o canalllOwnerSay("Escuntando em todos os Canais"); //Imprime na telareturn;
} if (msg=="Desativar") //se digitar /127 Desativar{
llListenControl(l,FALSE); //desabilitar o canalllOwnerSay("Apenas Escutando Canal 127"); //Imprime na telareturn;
}
66
![Page 67: LSL - Linden Scripting Language Trabalhando com Scripts ...ccaetano/aulas/aula_sl_lsl_parte_1.pdf · ... quando é conveniente que elas ocorram. Já os Eventos são executados ...](https://reader030.fdocumentos.tips/reader030/viewer/2022021608/5c12113109d3f267308cf28d/html5/thumbnails/67.jpg)
67
Exercício 1
67
![Page 68: LSL - Linden Scripting Language Trabalhando com Scripts ...ccaetano/aulas/aula_sl_lsl_parte_1.pdf · ... quando é conveniente que elas ocorram. Já os Eventos são executados ...](https://reader030.fdocumentos.tips/reader030/viewer/2022021608/5c12113109d3f267308cf28d/html5/thumbnails/68.jpg)
68
Exercício 1if (msg=="Rapido") //se digitar /127 Rapido, sem delay{
integer i=1; while(i<10) { llOwnerSay(" Mensagem Rapida " +(string)i); i++; } return;
} }
llOwnerSay(msg); //o que o objeto captou é retransmitido a nós}
}68
![Page 69: LSL - Linden Scripting Language Trabalhando com Scripts ...ccaetano/aulas/aula_sl_lsl_parte_1.pdf · ... quando é conveniente que elas ocorram. Já os Eventos são executados ...](https://reader030.fdocumentos.tips/reader030/viewer/2022021608/5c12113109d3f267308cf28d/html5/thumbnails/69.jpg)
Receptor Transmissor
69
Exercício 2
69
/127
Avatar
/-254
/-500
llOwnerSay
![Page 70: LSL - Linden Scripting Language Trabalhando com Scripts ...ccaetano/aulas/aula_sl_lsl_parte_1.pdf · ... quando é conveniente que elas ocorram. Já os Eventos são executados ...](https://reader030.fdocumentos.tips/reader030/viewer/2022021608/5c12113109d3f267308cf28d/html5/thumbnails/70.jpg)
70
Exercício 2Receptor
default {
state_entry() {
llSetText(" Receptor ", <0.0, 1.0, 0.0>, 1.5);llListen(127,"","",""); //listen ouvirá no canal 127 e aceitar qualquer outro parâmetro (nome, pessoa e mensagem)llListen(-500,"","",""); //listen ouvirá no canal -500 e aceitar qualquer outro parâmetro (nome, pessoa e mensagem)llOwnerSay("Receptor Posicionado \n\t\t\t\t\t Ouvindo Canal 127 e -500 \n\t\t\t\t\tTransmitindo no Canal -254"); //Comunica que está pronto
}
70
![Page 71: LSL - Linden Scripting Language Trabalhando com Scripts ...ccaetano/aulas/aula_sl_lsl_parte_1.pdf · ... quando é conveniente que elas ocorram. Já os Eventos são executados ...](https://reader030.fdocumentos.tips/reader030/viewer/2022021608/5c12113109d3f267308cf28d/html5/thumbnails/71.jpg)
71
Exercício 2listen(integer canal,string nome,key id, string msg) {
if(canal==127) //Se o canal falado for o /127{
if(msg=="Ativar“){
llSay(-254,msg); return;
}if(msg=="Desativar"){
llSay(-254,msg); return;
} }
71
![Page 72: LSL - Linden Scripting Language Trabalhando com Scripts ...ccaetano/aulas/aula_sl_lsl_parte_1.pdf · ... quando é conveniente que elas ocorram. Já os Eventos são executados ...](https://reader030.fdocumentos.tips/reader030/viewer/2022021608/5c12113109d3f267308cf28d/html5/thumbnails/72.jpg)
72
Exercício 2else {
llOwnerSay(msg); }
} }
72
![Page 73: LSL - Linden Scripting Language Trabalhando com Scripts ...ccaetano/aulas/aula_sl_lsl_parte_1.pdf · ... quando é conveniente que elas ocorram. Já os Eventos são executados ...](https://reader030.fdocumentos.tips/reader030/viewer/2022021608/5c12113109d3f267308cf28d/html5/thumbnails/73.jpg)
73
Exercício 2Transmissor
integer l; //manipulará um dos filtros do evento listen default {
state_entry() {
llListen(-254,"","",""); //listen ouvirá no canal -254 e aceitar qualquer outro parâmetro (nome, pessoa e mensagem) l=llListen(0,"","",""); //atribuí o segundo filtro a variável l llListenControl(l,FALSE); //desativa o filtro anteriorllOwnerSay("Transmissor Posicionado \n\t\t\t\t\t Aguardando Inicializacao"); //Comunica com usuário
}
73
![Page 74: LSL - Linden Scripting Language Trabalhando com Scripts ...ccaetano/aulas/aula_sl_lsl_parte_1.pdf · ... quando é conveniente que elas ocorram. Já os Eventos são executados ...](https://reader030.fdocumentos.tips/reader030/viewer/2022021608/5c12113109d3f267308cf28d/html5/thumbnails/74.jpg)
74
Exercício 2//Evento Listenlisten(integer canal, string nome, key id, string msg) {
if (canal==-254) //Se ouviu algo no receptor{
if(msg=="Ativar") //Mensagem for Ativar{
llListenControl(l,1); //ativa filtro llSay(-500,"Transmissor Ativado"); return;
}
74
![Page 75: LSL - Linden Scripting Language Trabalhando com Scripts ...ccaetano/aulas/aula_sl_lsl_parte_1.pdf · ... quando é conveniente que elas ocorram. Já os Eventos são executados ...](https://reader030.fdocumentos.tips/reader030/viewer/2022021608/5c12113109d3f267308cf28d/html5/thumbnails/75.jpg)
75
Exercício 2
75
![Page 76: LSL - Linden Scripting Language Trabalhando com Scripts ...ccaetano/aulas/aula_sl_lsl_parte_1.pdf · ... quando é conveniente que elas ocorram. Já os Eventos são executados ...](https://reader030.fdocumentos.tips/reader030/viewer/2022021608/5c12113109d3f267308cf28d/html5/thumbnails/76.jpg)
76
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
76