Bem-vindo ao script intermediário! Se ainda não o fez, consulte o guia de script para iniciantes. Este tutorial de script irá ensiná-lo sobre como criar um script em um nível intermediário, em primeiro lugar, como é claro que há com todos os outros tutoriais de script, existem -bem- mais do que alguns conceitos que você deve ter aprendido primeiro - eventos, métodos, tabelas, loops, instruções "if", instruções "else" e instruções "elseif".
Conteúdo
- 1 Apenas uma revisão rápida
- 2 Declarações If
- 2.1 Operadores relacionais
- 2.2 Operadores aritméticos
- 2.3 Operadores lógicos
- 2.4 Valores Verdadeiros / Falsos
- 3 Declarações Else, Elseif e Nesting If
- Serviço 4
- 5 Parâmetros
- 5.1 Tuplas
- 6 Retornando
- 7 Eventos
- 8 instâncias
- 9 funções integradas
- 9.1 Destruir ()
- 9.2 Clone ()
- 9.3 ClearAllChildren ()
- 9.4 FindFirstChild ()
- 9.5 WaitForChild ()
- 9.6 Espere ()
- 10 Mesas
- 11 loops
- 12 O que significa 'local'?
- 13 Scripting intermediário: exemplos
- 13.1 Morte multiuso / tijolo de cura (dificuldade: médio-duro)
- 13.1.1 Extensão: Efeito de Cura Estendido
- 13.1.2 Extensão: Efeito de desaparecimento
- 13.1.3 Gravação do Jogador
- 13.2 A porta VIP (dificuldade: média)
- 13.1 Morte multiuso / tijolo de cura (dificuldade: médio-duro)
Apenas uma revisão rápida
Aqui estão alguns conceitos que você deve saber de antemão:
- Variáveis: marcadores de posição para dados
- Booleanos: afirmações verdadeiras / falsas
- Valores de string: valores de texto
- Propriedades: atributos de um objeto
- Funções: marcadores de posição para código
- Pai: o objeto diretamente acima de outro objeto na janela do Explorer
- Filho: o objeto diretamente abaixo de outro objeto na janela do Explorer
Você deve ter o Roblox Studio aberto para isso e também deve ter um script aberto, bem como o seu Explorer, Propriedades e Saída abertos.
Declarações If
An declaração if executaria um pedaço de código if uma condição é atendida. Por exemplo:
1 Var local = 1 2 se Var == 1 então 3 imprimir ("condição encontrada") 4 fim
Você pode ver que estou declarando uma variável. Então, o script encontrará a instrução if. O script descobre que Var é 1, então a condição é atendida, portanto, ele imprimirá "condição atendida". Não se esqueça das tags finais! Observe que em uma instrução if == deve ser usado. == é para comparar valores e = é para declarar variáveis.
Operadores Relacionais
Se você ainda não está familiarizado com os operadores relacionais, um operador relacional é um operador que compara dois números. Como tal, eles só podem ser usados em valores flutuantes e int. Aqui estão eles:
- == (igual a)
- ~ = (Diferente de)
- <(Menor que)
- > (Maior que)
- <= (Menor ou igual a)
- > = (Maior ou igual a)
Portanto, por exemplo, algumas declarações seriam:
Para referência, se você está confundindo os símbolos maior que (>) e menor que (<), gosto de pensar nesses símbolos como uma boca de crocodilo que "come" o maior número.
Operadores aritméticos
Se você tem algum conhecimento de matemática, deve saber que os números podem ser alterados com operadores. Estes são:
- + (Acrescentar)
- - (subtrair)
- * (Multiplicar)
- / (Divide)
- % (Módulo)
- ^ (Expoentes)
Assim...
Se você não está claro com os dois últimos operadores, módulo retorna o restante quando os dois números são divididos. Então, por exemplo,
Como 7 não é perfeitamente divisível por 2, ele deixa um resto de 1. Portanto, 7 mod 2 é 1.
Expoentes são apenas multiplicações repetidas.
Portanto, 5 ^ 5 é apenas 5 multiplicado por ele mesmo 3 vezes.
Para realizar uma operação em um valor, você deve fazer uma operação aritmética com o valor, como mostra este exemplo:
1 valor = valor + 1 - Adiciona 1 ao valor. 2 valor = valor - 1 - Subtrai 1 do valor. 3 valor = valor / 2 - Divide o valor por 2. 4 valor = valor * 3 - Multiplica o valor por 3. 5 valor = valor% 3 - Divide o valor por 3 e retorna o restante. 6 valor = valor ^ 5 - Multiplica o valor sozinho 5 vezes.
Para maior simplicidade, essas operações podem ser encurtadas, como mostra este exemplo:
1 valor + = 1 - adiciona 1 ao valor 2 valor - = 1 - (tira 1 do valor) 3 valor * = 2 - (multiplica o valor por 2)
Aqui está um exemplo de um operador aritmético que testa se o jogador tem dinheiro suficiente ou não:
1 se plr.Money.Value> = 120 then 2 plr.Money.Value - = 120 3 final
Aqui, ele verifica se o jogador possui $ 120 ou mais. Nesse caso, ele o subtrairia.
Operadores lógicos
Um operador lógico combina dois operadores em um. Estes são:
- e (verifica se AMBAS as condições são verdadeiras)
- or (verifica se QUALQUER condição é verdadeira)
- não (verifica se o estado atual é o OPOSTO da condição)
1 se valor <30 e valor> 15 então 2 - Código 3 fim 4 5 se valor == "queijo" ou valor == "torta" então 6 - Código 7 fim 8 9 se não for valor == 12 então 10 - -Código 11 final
A primeira instrução if verifica se o valor é menor que 30, mas maior que 15. Em outras palavras, ela verifica se o valor está entre 15 e 30. A segunda instrução if verifica se o valor é "queijo" ou "torta", e o terceiro verifica se o valor é não 12.
Valores verdadeiros / falsos
Mas o que isso significa?
1 se o valor, então 2 imprimir ("Oof") 3 fim
Se existem não operadores, a instrução if verifica se o valor é verdade or falsear.
Para ser claro, um falsear valor (também conhecido como Falsey valor), é um valor que é falso or zero.
Todos os outros valores são considerados verdade valores.
Na maioria das vezes, isso é usado para descobrir se um instância existe. Então, se eu fosse fazer isso,
1 Head local = script.Parent: FindFirstChild ("Head") 2 3 se Head then 4 print ("My parent has a head.") 5 end
Vou explicar mais tarde o que FindFirstChild () faz mais tarde, mas basicamente, encontra a parte chamada Cabeça.
Este script verificará se seu pai tem um filho chamado "Cabeça". Se isso acontecer, ele será impresso.
Declarações Else, Elseif e Nesting If
Você também pode colocar uma instrução if dentro de outra. Isso é chamado nidificação uma declaração if.
1 Var1 local = 1 2 Var2 local = falso 3 se Var1 == 1 então 4 se Var2 == falso 5 imprimir ("Oof") 6 fim 7 fim
O script verá que ambas as condições são atendidas, então ele imprime. Lembre-se de que cada instrução if precisa de sua própria tag final.
Colocação outro na instrução if fará com que o script execute um código alternativo, caso a primeira condição não seja atendida.
1 local Var1 = 1 2 se Var1 == 2 then 3 print ("condição atendida") 4 else 5 print ("condição não atendida") 6 end
An elseif basicamente combina "else" com uma instrução if. Se a primeira condição não for atendida, ele verificará se uma segunda condição foi atendida.
1 local Var1 = 1 2 local Var2 = falso 3 se Var1 == 2 then 4 print ("condição 1 encontrada") 5 elseif Var2 == false then 6 print ("condição 2 encontrada") 7 end
Assim, o sistema define ambas as variáveis, então tem que decidir se Var1 é igual a 2. Não é, então ele verifica a outra condição. Ela foi atendida, portanto, imprime "condição 2 atendida". Você pode fazer declarações if tão malucas quanto quiser, com tantos elseifs e declarações if aninhadas quantas desejar.
serviço
Um serviço é qualquer coisa do nível hierárquico mais alto na janela do Explorer. Aqui estão eles:
- Espaço de trabalho: um serviço que contém todas as peças e objetos físicos do jogo.
- Jogadores: um serviço que gerencia todos os jogadores que entram no jogo.
- Iluminação: gerencia os efeitos de iluminação, a hora do dia e o sol, a lua e o céu.
- ReplicatedStorage: serviço que contém objetos replicados para todos os clientes
- ServerScriptService: serviço que contém scripts de servidor; scripts a serem usados para todo o jogo, ou seja: para placares.
- ServerStorage: armazenamento para objetos a serem usados posteriormente.
- StarterGui: serviço que contém ScreenGuis
- StarterPack: Serviço que contém ferramentas
- SoundService: armazenamento para áudio
- Chat: Gerencia o chat
- LocalizationService: gerencia a tradução automática
Isso é muito para descompactar, então concentre-se em Área de trabalho, pois é o serviço usado com mais frequência e o único usado neste tutorial. No tutorial avançado, vamos começar a usar StarterGui.
Existem também dois serviços que você pode adicionar manualmente à janela do Explorer: ReplicatedScriptService e Teams. Para adicioná-los, abra o Ver Tab > Barra de comando. Em seguida, digite o seguinte:
1 jogo: GetService ("ReplicatedScriptService") 2 jogo: GetService ("Teams")
Esses serviços aparecerão então no seu Explorer.
Claro, existem muitos outros serviços ocultos da janela do Explorer. Para acessá-los dentro de um script, você precisa usar o GetService () função para obter o serviço. Por exemplo:
1 UserInputService local = jogo: GetService ("UserInputService")
Agora, dentro do script, o serviço UserInputService estará contido na variável "UserInputService".
parâmetros
No tutorial para iniciantes, expliquei o que era uma função: um espaço reservado para código. Também podemos permitir que uma função tenha um argumentoou parâmetro (um valor que precisa ser inserido), por exemplo:
1 função write (stuff) 2 print (stuff) 3 end 4 5 write ("Hello world!")
Ao declarar uma função, colocando um parâmetro entre colchetes, a função espera um valor. Então, ao chamar a função, você precisa colocar um valor entre colchetes. Nesse caso, a função espera um valor para "coisas". Ao chamar a função, colocando "Hello world!" entre colchetes, você está definindo "coisas" como a string "Olá, mundo!" A partir daí, você pode usar "coisas" como uma variável dentro da função.
Tuplas
Também podemos fazer isso:
1 função write (stuff, morestuff) 2 print (stuff) 3 print (moreuff) 4 end 5 6 write ("Hello", "world!")
O script acima espera dois parâmetros: coisas e mais coisas. Ao chamar a função, definimos coisas as Olá e mais coisas as mundo!.
Você pode ter quantos parâmetros quiser, desde que os separe com vírgulas. Quando usamos mais de um argumento, o chamamos de tupla.
Voltando
Retornar um valor é uma maneira de uma função gerar um valor. Um exemplo real disso é o Google retornando resultados de sua pesquisa.
Digamos que eu queira fazer um conversor que duplique o número de entrada. Simplesmente faça isso:
1 função local DoubleNumber (InputNumber) 2 local OutputNumber = InputNumber * 2 3 retornar OutputNumber 4 fim 5 local Multiply = DoubleNumber (10) 6 imprimir (Multiply)
Aqui, a quarta linha diz para disparar a função DoubleNumber. A função dobra 10 para fazer 20 e retorna 20. Esse número está contido na variável "Multiplicar". Esta variável pode ser usada para a instrução de impressão na linha 6.
Eventos
Os eventos são basicamente situações especiais que podem ser programadas para causar uma reação. O mais comum é o Touched, que pode ser aplicado a Peças e Uniões. Sempre que algo toca uma parte, faz com que uma função seja chamada.
1 função onTouch () 2 print ("fui tocado D =") 3 end 4 5 script.Parent.Touched: conectar (onTouch)
Vamos decompô-lo.
"script.Parent"obviamente se refere à parte que foi tocada. Conecte-se:(), como o nome sugere, conecta o evento à função. Em outras palavras, sempre que o evento ocorre (quando a parte é tocada por uma parte ou player), a função é disparada.
Os eventos também têm parâmetros integrados. No evento Touched, seu parâmetro é a pessoa ou coisa que o tocou.
1 função onTouch (whotouched) 2 whotouched: Destroy () 3 end 4 5 script.Parent.Touched: connect (onTouch)
Nesse caso, você chama a coisa que tocou o objeto de "que tocou". Portanto, quando você dispara o evento, ele dispara a função, e a função destrói o que disparou o evento.
Há uma infinidade de outros eventos, mas para roteiristas intermediários, Touched será o mais importante.
Outra maneira de disparar um evento é:
1 script.Parent.Touched: Connect (function (whoTouched) 2 whoTouched: Destroy () 3 end)
Esta é uma forma de usar menos linhas.
Instância
Uma instância é qualquer objeto ou propriedade no jogo. E se você quiser criar um script que crie uma parte? Você PODERIA fazer isso.
1 Brick local = Instance.new ("Parte", game.Workspace)
Aqui, estou criando uma nova instância. O primeiro parâmetro, "Part", é o nome da classe da instância ou que tipo de objeto é. Então, estou criando uma parte. Ele também possui um segundo parâmetro, para seu pai.
No entanto, esta é uma má prática comum. Nunca é uma boa ideia usar o parâmetro Parent. Isso só torna a função mais lenta.
Em vez disso, defina o pai na próxima linha.
1 Brick local = Instance.new ("Part") 2 Brick.Parent = game.Workspace
E se quisermos definir propriedades? Simples. Após o código acima, digite o seguinte:
1 Brick.Transparency = 1 2 Brick.Name = "Bloco"
O sistema já sabe o que Tijolo meios. Basta definir as propriedades.
Funções incorporadas
Estas são as funções definidas no jogo e nenhuma função personalizada pode ser declarada com o nome.
Destruir()
Esta função define efetivamente o pai do objeto como nulo, removendo-o do jogo. Por exemplo:
1 script.Pai: Destroy ()
Clone()
Torna uma duplicata da peça, com todas as mesmas propriedades, exceto o principal. Você ainda precisa defini-lo na próxima linha.
1 Clone local = script.Parent: Clone () 2 Clone.Parent = game.Workspace
ClearAllChildren ()
Destrói todos os filhos do objeto. Por exemplo, se você usar isso na área de trabalho, ele excluirá tudo na área de trabalho.
1 script.Parent: ClearAllChildren ()
FindFirstChild ()
Se você não tiver certeza se uma variável ou instância existe ou não, FindFirstChild () acessará o objeto se ele existir; caso contrário, o script ainda será executado, mas se você simplesmente tentar acessar um valor nil, o script será interrompido.
Para executar o código apenas se algo existir, use uma instrução if para executar o código apenas se o objeto em FindFirstChild não for igual a nulo.
1 script.Pai: FindFirstChild ("Fire")
WaitForChild ()
Semelhante a FindFirstChild, mas em vez de retornar um valor nulo se o objeto não existir, ele produzirou esperar.
1 game.Workspace: WaitForChild ("Part") 2 print (1)
Aqui, o script vai esperar para uma instância chamada "Parte", e nunca continuará até que exista.
Espere()
Atrasa um código por um determinado número de segundos. Defina o tempo em segundos como parâmetro. Se não houver nenhum parâmetro, por padrão, ele aguardará 1 segundo. Isso também espera se não houver nenhum número entre os parênteses, embora por um período de tempo extremamente curto.
1 espera (0.5) - Atrasos meio segundo. 2 wait () - Atrasos 1 segundo. 3 espere (2) - Atrasos 2 segundos.
tabelas
Tabelas, também conhecidas como arrays, são um tipo de variável em Lua que pode ser usada para armazenar várias partes de dados na mesma variável, por exemplo:
1 a = {a, b, c}
Agora você precisa saber que existem dois valores principais de uma tabela: i e v. I, ou Posição do Índice, é a posição do valor na tabela. Na tabela acima, como "a" é o primeiro número, seu valor de i é 1. "b" é o segundo valor, então seu valor de i é 2 e o valor de i de c é 2. v, ou Valor, é o próprio dado.
Portanto, se você quiser encontrar o valor v dado o valor i, terá que fazer isso.
1 a [2]
O que isso basicamente faz é dizer ao nosso script para acessar o segundo valor na tabela a. Agora, digamos que quiséssemos imprimir os 2 últimos valores da tabela a seguir:
1 a = {"três mil", "novecentos", "e um"}
O que faríamos é o seguinte:
1 impressão (a [2]) 2 impressão (a [3])
Também podemos atribuir valores a espaços individuais em uma tabela:
1 a [2] = "lol" 2 impressão (a [2])
Isso imprimiria o texto lol em nossa saída, porque o valor do segundo espaço na tabela "a" foi alterado para "lol".
Loops
A laço é basicamente um pedaço de código executado repetidamente. Observe que, independentemente do tipo de loop usado, você DEVE usar uma função de espera (atraso). Isso ocorre porque o sistema executará o código tão infinitamente rápido que, sem demora, o servidor irá travar e parar de responder.
Loops While
O loop mais simples é um loop "while", que basicamente age assim:
1 a = verdadeiro 2 enquanto a == verdadeiro faça 3 espere (0.1) 4 imprima ("Eu posso brandir minha espada") 5 final
Basicamente, o que isso faz é que o script verifica continuamente se a ainda é verdadeiro a cada 1 segundos e, se a ainda é verdadeiro, o código dentro do loop será executado novamente.
Se você quisesse um loop while para continuar executando o código incondicionalmente, faria o seguinte:
1 enquanto verdadeiro, faça 2 --Código 3 fim
For Loops
Um segundo loop mais complicado é o loop "for", que pode se repetir um determinado número de vezes, por exemplo:
1 para i = 1,6 faça 2 espere (0.1) 3 imprima ("Olá mãe!") 4 final
Basicamente, isso faz com que o script conte de 1 a 6, executando o código a cada vez. Então, "Olá mãe!" seria impresso 6 vezes.
Se você quer ficar chique ...
Adicionar a terceira parte faz com que nosso loop for conte em 2, o que significa que nosso script contará de 2 a 6 em 2 e será executado sempre que você puder adicionar 2 a 2 antes de se tornar 6.
1 para i = 2,6,2 do 2 esperar (0.1) 3 imprimir ("Olá pai!") 4 final
Também podemos imprimir i:
1 para i = 1,6 faça 2 espere (0.1) 3 imprima (i) 4 final
O que isso basicamente faz nosso script fazer é contar de 1 a 6 e cada vez que ele conta até 1, ele imprime qualquer valor em que esteja.
In Pairs Loops
Este loop exigirá uma compreensão de tabelas, sobre as quais você deve ter aprendido acima.
Um loop em pares é um loop que envolve os valores de uma tabela.
1 local Parts = game.Workspace.Folder: GetChildren () 2 para index, Part in ipairs (Parts) do 3 print (index) 4 Part: Destroy () 5 wait (0.5) 6 end
O que GetChildren () faz é retornar uma matriz contendo todos os valores de instância dentro de cada pasta. Em seguida, mudei o nome de i para index ev para Part. Em seguida, disse ao script qual tabela gostaria de usar depois de "em pares". Então, entre intervalos de meio segundo, o script contaria o número de partes conforme destrói cada parte uma por uma.
O que significa 'local'?
No Tutorial para Iniciantes, mencionei que as variáveis deveriam ter 'local' na frente delas. Agora que você aprendeu algumas habilidades importantes, posso explicar o que isso significa.
Para entender isso, você precisa entender os blocos. Você notará que pedi que você indentasse o código em instruções if, funções e loops. O código inteiro é um bloco de código dentro de si mesmo, e qualquer código dentro de loops, funções e instruções if são outro bloco. Você pode ver com a imagem à direita que existem quatro níveis de blocos nesse script.
Então, o que 'local' significa? Bem, isso significa que a variável só pode ser acessada dentro desse bloco. Esta palavra-chave é semelhante a JavaScript let. Então, se eu fosse usar o seguinte código:
1 banco de dados local = falso 2 se banco de dados == falso então 3 local var = 1 4 fim 5 imprimir (var)
O script apresentaria um erro, porque a instrução print está tentando acessar uma variável que só pode ser acessada dentro da instrução if.
1 banco de dados local = falso 2 local var 3 se banco de dados == falso então 4 var = 1 5 fim 6 imprimir (var)
Você pode ver que, na segunda linha, não dei um valor para var, portanto, ele é automaticamente definido como nulo. Então, a instrução if fará com que var seja igual a 1. Ela não é mais 'local' porque a instrução if está simplesmente atualizando uma variável já existente.
Scripting intermediário: exemplos
Morte multiuso / tijolo de cura (dificuldade: médio-difícil)
Excelente! Agora que entendemos nossos conceitos, vamos começar. Digamos que queríamos um tijolo que removesse a cabeça de Shedletsky sempre que ele pisasse nele, mas curaria outros jogadores quando pisassem nele. Então, crie um script e coloque-o dentro de um tijolo usando o explorer - A seguir, vamos criar nossa função que será chamada pelo evento Touched e nosso valor que será atribuído pelo evento Touched (para verificar se é realmente Shedletsky, é claro !):
1 função de toque (shedletskycheck)
Excelente! Temos a função de toque com o argumento shedletskycheck. Agora temos que declarar o que nossa função faz. Queremos que nossa função verifique primeiro se há Shedletsky:
1 função touch (shedletskycheck) 2 '' 'if shedletskycheck.Parent.Name == "Shedletsky" then' ''
O script agora verifica se o que tocou no nome do pai do tijolo era Shedletsky. Agora devemos criar um caminho que leve do tijolo que se toca à cabeça de Shedletsky:
1 função touch (shedletskycheck) 2 if shedletskycheck.Parent.Name == "Shedletsky" then 3 shedletskycheck.Parent.Head: remove () 4 --Navegamos de shedletskycheck para seu pai, que é o próprio modelo Shedletsky, então encontramos a cabeça dentro do modelo Shedletsky.
Agora, digamos que algo que NÃO ERA o Shedletsky tocou no tijolo. De acordo com a descrição do nosso script, devemos verificar se tudo o que tocou o tijolo que não era Shedletsky era mesmo um jogador, então devemos curá-lo. Como tal, devemos descobrir se o pai da parte tocante tinha um Humanóide nele. Para fazer isso, devemos usar um método; findFirstChild () (se você não sabe o que é isso, consulte o guia para iniciantes em scripts).
1 função touch (shedletskycheck) 2 if shedletskycheck.Parent.Name == "Shedletsky" then 3 shedletskycheck.Parent.Head: remove () 4 elseif shedletskycheck.Parent: findFirstChild ("Humanoid") ~ = zero então
Usando a instrução elseif, se as condições para o "if" anterior (que é quem tocou o tijolo sendo Shedletsky ") não forem atendidas, a instrução elseif verifica a seguinte condição (neste caso, se o pai do tijolo realmente tinha um Humanóide nele, indicando se o que tocou no tijolo foi ou não um jogador), e então executamos um método: findFirstChild () no pai da parte tocante, e se ele encontrou um Humanóide no pai da parte tocante, ele retorna ~ = nil, no entanto, se não encontrar um, retorna nil.
Agora, precisamos curá-los:
1 função touch (shedletskycheck) 2 if shedletskycheck.Parent.Name == "Shedletsky" então 3 shedletskycheck.Parent.Head: remove () 4 elseif shedletskycheck.Parent: findFirstchild ("Humanoid") ~ = zero então 5 shedletskycheck.Parent. Humanoid.Health = shedletsky.Parent.Humanoid.MaxHealth
Isso basicamente define o valor de sua saúde para sua saúde máxima, efetivamente curando-os até sua capacidade total. Viva! Quase temos nosso roteiro. Agora tudo o que temos a fazer é adicionar um "fim" para cada "função" e "se" que tivermos, excluindo "elseif" s.
1 função touch (shedletskycheck) 2 if shedletskycheck.Parent.Name == "Shedletsky" então 3 shedletskycheck.Parent.Head: remove () 4 elseif shedletskycheck.Parent: findFirstChild ("Humanoid") ~ = zero então 5 shedletskycheck.Parent. Humanoid.Health = shedletsky.Parent.Humanoid.MaxHealth 6 end 7 end
Temos uma função e uma if, excluindo o "if" em "elseif", então adicionamos duas extremidades.
Por último, precisamos adicionar a conexão:
1 função touch (shedletskycheck) 2 if shedletskycheck.Parent.Name == "Shedletsky" então 3 shedletskycheck.Parent.Head: remove () 4 elseif shedletskycheck.Parent: findFirstChild ("Humanoid") ~ = zero então 5 shedletskycheck.Parent. Humanoid.Health = shedletsky.Parent.Humanoid.MaxHealth 6 end 7 end 8 script.Parent.Touched: conectar (tocar)
Viva! Agora, se executarmos nosso script no Play Solo, se você renomear um personagem Shedletsky, quando ele tocar no tijolo, sua cabeça deverá ser removida! No entanto, se você se machucar e tocar no tijolo, você deve ser curado de volta à saúde total!
Extensão: Efeito de Cura Estendido
Agora, digamos que não queríamos que nosso tijolo curasse outros jogadores instantaneamente, mas em vez disso, ele os curaria em 20 a cada 5 segundos 5 vezes. Você adivinhou: estamos usando loops "for".
1 função toque (shedletskycheck) 2 se shedletskycheck.Parent.Name == "Shedletsky" então 3 shedletskycheck.Parent.Head: remove () 4 elseif shedletskycheck.Parent: findFirstChild ("Humanoid") ~ = nulo então 5 para i = 1,5 , Script 6 do 7 fim 8 fim XNUMX.Pai. Tocou: conectar (toque)
Então, substituímos o código de cura inicial por um loop "for" que conta de 1 a 5 (de 1 a 5 vezes), em seguida, devemos adicionar o código de cura para fazer o Humanóide ganhar 20 de saúde extra (usei uma variável para definir o humanóide, neste caso, para encurtar o código, mas não é necessário) e adicionar o método de espera que faz o script esperar 5 segundos antes de adicionar mais integridade:
1 função toque (shedletskycheck) 2 se shedletskycheck.Parent.Name == "Shedletsky" então 3 shedletskycheck.Parent.Head: remove () 4 elseif shedletskycheck.Parent: findFirstChild ("Humanoid") ~ = nulo então 5 para i = 1,5 , 6 do 5 wait (7) 8 b = shedletskycheck.Parent: findFirstChild ("Humanoid") 20 b.Health = b.Health + 9 10 end 11 end XNUMX script.Parent.Tocated: connect (touch)
Então, adicionamos uma instrução de espera que faz o script esperar 5 segundos, então - é claro - encontrou o Humanóide e definiu seu valor para seu valor original mais 20. (O valor de uma variável não é constante, é o que era quando seu valor foi definido. A variável não se atualiza continuamente. Portanto:
1 a = 1 2 b = a 3 esperar (1) 4 a = 2 5 imprimir (b)
Na verdade, exibiria 1, já que no momento b foi definido como a, a era 1, no entanto, posteriormente a foi alterado para 2, mas como as variáveis são não constantes, b permaneceu 1.)
Agora, por último, devemos terminar o loop com um "fim":
1 função touch (shedletskycheck) 2 if shedletskycheck.Parent.Name == "Shedletsky" então 3 shedletskycheck.Parent.Head: remove () 4 elseif shedletskycheck.Parent: findFirstChild ("Humanoid") ~ = nulo então 5 para i = 1,5 , 6 do 5 wait (7) 8 b = shedletskycheck.Parent: findFirstChild ("Humanoid") 20 b.Health = b.Health + 9 10 end 11 end 12 end XNUMX script.Parent.Tocated: connect (touch)
Se você fez isso corretamente, ao pisar no bloco de script no Play Solo, se for danificado, você deve aos poucos ganhar Saúde (a menos que seu nome seja Shedletsky).
Extensão: Efeito Desaparecimento
Agora, digamos que quiséssemos que nosso script aumentasse continuamente a transparência da cabeça de Shedletsky a cada 1 segundo, e quando a transparência de sua cabeça atingir 1, SÓ ENTÃO o script removerá a cabeça de Shedletsky. Vamos usar mais alguns loops "for". (Eu usei uma variável para definir a transparência da cabeça de shedletsky, mas você não precisa)
1 função touch (shedletskycheck) 2 if shedletskycheck.Parent.Name == "Shedletsky" then 3 trans = shedletskycheck.Parent.Head.Transparency 4 for i = 1,10 fazer 5 elseif shedletskycheck.Parent: findFirstChild ("Humanoid") ~ = nulo então 6 para i = 1,5 faça 7 b = shedletskycheck.Pai: findFirstChild ("Humanoid") 8 b.Saúde = b.Saúde + 20 9 fim 10 fim 11 fim 12 script.Pai.Tocado: conectar (toque )
Portanto, substituímos o código de configuração de transparência básico por um loop "for" que contava de 1 a 10 e definimos a transparência da cabeça de shedletsky como a variável trans. Agora, devemos adicionar a parte onde sua transparência é aumentada:
1 função touch (shedletskycheck) 2 if shedletskycheck.Parent.Name == "Shedletsky" then 3 trans = shedletskycheck.Parent.Head.Transparency 4 for i = 1,10 do 5 trans = trans + 0.1 6 elseif shedletskycheck.Parent: findFirstChild ("Humanóide") ~ = nulo então 7 para i = 1,5 do 8 b = shedletskycheck.Pai: findFirstChild ("Humanóide") 9 b.Saúde = b.Saúde + 20 10 end 11 end 12 end 13 script.Pai .Tocados: conectar (tocar)
Portanto, agora isso aumentará a transparência da cabeça em 1 10 vezes (um valor de transparência de 1 faz com que um tijolo fique totalmente invisível). Agora temos que adicionar a instrução que faz o script esperar 1 segundo entre os aumentos de transparência:
1 função touch (shedletskycheck) 2 if shedletskycheck.Parent.Name == "Shedletsky" then 3 trans = shedletskycheck.Parent.Head.Transparency 4 for i = 1,10 do 5 wait (0.1) 6 trans = trans + 0.1 7 elseif shedletskycheck.Parent: findFirstChild ("Humanoid") ~ = nulo então 8 para i = 1,5 do 9 b = shedletskycheck.Parent: findFirstChild ("Humanoid") 10 b.Saúde = b.Saúde + 20 11 fim 12 fim 13 fim 14 script.Parente.Tocado: conectar (toque)
Por último, adicionamos a instrução final:
1 função touch (shedletskycheck) 2 se shedletskycheck.Parent.Name == "Shedletsky" then 3 trans = shedletskycheck.Parent.Head.Transparency 4 for i = 1,10 do 5 wait (0.1) 6 trans = trans + 0.1 7 end 8 elseif shedletskycheck.Parent: findFirstChild ("Humanoid") ~ = nil then 9 for i = 1,5 faça 10 b = shedletskycheck.Parent: findFirstChild ("Humanoid") 11 b.Saúde = b.Saúde + 20 12 fim 13 end 14 end 15 script.Parent.Touched: connect (touch)
E a parte que remove a cabeça de Shedletsky:
1 função touch (shedletskycheck) 2 se shedletskycheck.Parent.Name == "Shedletsky" then 3 trans = shedletskycheck.Parent.Head.Transparency 4 for i = 1,10 do 5 wait (0.1) 6 trans = trans + 0.1 7 end 8 shedletskycheck.Parent.Head: remove () 9 elseif shedletskycheck.Parent: findFirstChild ("Humanoid") ~ = nulo então 10 para i = 1,5 do 11 b = shedletskycheck.Parent: findFirstChild ("Humanoid") 12 b. Saúde = b. Saúde + script 20 13 fim 14 fim 15 fim 16.Pai. Tocou: conecte (toque)
Portanto, agora, quando você executa o script em Play Solo, se você se autodenominar Shedletsky, ao pisar no tijolo, sua cabeça deve desaparecer gradualmente até morrer.
Gravação do jogador
Digamos que neste ponto você queira registrar todos os jogadores não Shedletsky que pisarão neste tijolo, para isso devemos usar uma mesa:
1 t = {one} 2 função touch (shedletskycheck) 3 if shedletskycheck.Parent.Name == "Shedletsky" then 4 trans = shedletskycheck.Parent.Head.Transparency 5 for i = 1,10 do 6 wait (0.1) 7 trans = trans + 0.1 8 end 9 shedletskycheck.Parent.Head: remove () 10 elseif shedletskycheck.Parent: findFirstChild ("Humanoid") ~ = nulo então 11 para i = 1,5 do 12 b = shedletskycheck.Parent: findFirstChild (" Humanóide ") 13 b. Saúde = b. Saúde + 20 14 final 15 final 16 final 17 script. Pai. Tocou: conectar (toque)
Criamos uma tabela com o conteúdo "um". Isso ajudará mais tarde. Em seguida, obtenha o número máximo de nossa tabela usando o método table.maxn (), que retorna o maior espaço na tabela:
1 t = {one} 2 função touch (shedletskycheck) 3 maxn = table.maxn (t) 4 se shedletskycheck.Parent.Name == "Shedletsky" then 5 trans = shedletskycheck.Parent.Head.Transparency 6 para i = 1,10, 7 do 0.1 wait (8) 0.1 trans = trans + 9 10 end 11 shedletskycheck.Parent.Head: remove () 12 elseif shedletskycheck.Parent: findFirstChild ("Humanoid") ~ = nulo então 1,5 para i = 13 do 14 b = shedletskycheck.Parent: findFirstChild ("Humanoid") 20 b.Health = b.Health + 15 16 end 17 end 18 end XNUMX script.Parent.Tocado: conectar (tocar)
Agora, devemos fazer com que nossa tabela insira os nomes dos jogadores registrados usando o método table.insert () - table.insert (tabela, localização, valor):
1 t = {one} 2 função touch (shedletskycheck) 3 maxn = table.maxn (t) 4 se shedletskycheck.Parent.Name == "Shedletsky" then 5 trans = shedletskycheck.Parent.Head.Transparency 6 para i = 1,10, 7 do 0.1 wait (8) 0.1 trans = trans + 9 10 end 11 shedletskycheck.Parent.Head: remove () 12 elseif shedletskycheck.Parent: findFirstChild ("Humanoid") ~ = nulo então 1,5 para i = 13 do 14 b = shedletskycheck.Parent: findFirstChild ("Humanoid") 20 b.Health = b.Health + 15 16 end 1 table.insert (t, (maxn - 17), shedletskycheck.Parent.Name) 18 end 19 end XNUMX script. Parent.Touched: conectar (tocar)
O que isso faz é que obtém o lugar mais alto na tabela, subtrai por um e insere o valor do nome lá. Fazemos isso para ter certeza de que a tabela adicionará um novo nome em um novo espaço. Agora, vamos fazer com que ele imprima a tabela inteira quando for tocada usando dois métodos: o método tostring e o método table.concat. O método table.concat basicamente pega todos os valores em uma tabela e os espreme juntos. O método tostring converte qualquer valor (como um valor de tabela) em um valor de string.
1 t = {one} 2 função touch (shedletskycheck) 3 maxn = table.maxn (t) 4 print (tostring (table.concat (t, ''))) 5 se shedletskycheck.Parent.Name == "Shedletsky" então 6 trans = shedletskycheck.Parent.Head.Transparency 7 for i = 1,10 do 8 wait (0.1) 9 trans = trans + 0.1 10 end 11 shedletskycheck.Parent.Head: remove () 12 elseif shedletskycheck.Parent: findFirstChild (" Humanóide ") ~ = nulo então 13 para i = 1,5 do 14 b = shedletskycheck.Pai: findFirstChild (" Humanóide ") 15 b.Saúde = b.Saúde + 20 16 final 17 tabela.inserir (t, (maxn - 1), shedletskycheck.Parent.Name) 18 end 19 end 20 script.Parent.Touched: connect (touch)
A porta VIP (dificuldade: média)
Agora, digamos que você quisesse um tijolo que só permite a passagem de uma determinada pessoa, mas mata todas as outras. Primeiro, crie um tijolo. Coloque um script no tijolo, a seguir, abra seu código-fonte. Primeiramente, devemos criar uma função a ser chamada pelo evento Touched e o valor que será definido pelo evento Touched:
1 função onTouch (vip)
Portanto, temos uma função onTouch e um argumento "vip". Em seguida, criamos uma declaração "if" para verificar se o que tocou no tijolo era um jogador chamado "Bob":
1 função onTouch (vip) 2 se vip.Parent.Name == "Bob" então
Nosso script agora verifica se o nome do pai de tudo o que tocou o tijolo era Bob. Em seguida, como queremos que nosso script permita a passagem de Bob, definimos o valor do cancollide do tijolo como "falso" por 1 segundo. A propriedade CanCollide é a propriedade que faz com que um tijolo seja sólido.
1 função onTouch (vip) 2 se vip.Parent.Name == "Bob" então 3 script.Parent.CanCollide = false 4 wait (1) 5 script.Parent.CanCollide = true
Nosso script agora, quando tocado por Bob, define o CanCollide do tijolo como falso, permitindo que Bob passe, e após 1 segundo - espere (1), ele configura o CanCollide do tijolo como verdadeiro, não permitindo que outros passem. Agora, queremos que Bob saiba quando a porta está aberta, então faremos o tijolo semitransparente enquanto o CanCollide do tijolo é falso:
1 função onTouch (vip) 2 se vip.Parent.Name == "Bob" then 3 script.Parent.Transparency = 0.5 4 script.Parent.CanCollide = false 5 wait (1) 6 script.Parent.Transparency = 0 7 script .Parent.CanCollide = true
Nosso script agora, quando tocado por Bob, não apenas altera o valor do CanCollide do tijolo, mas também o torna semitransparente para que Bob saiba quando a porta está aberta. Após 1 segundo - espere (1), ao mesmo tempo em que CanCollide é definido como verdadeiro, a transparência é definida como 0 para que Bob saiba quando a porta é fechada. Em seguida, adicionamos a parte que verifica se (hipoteticamente falando) o que quer que tenha tocado o bloco NÃO ERA Bob sequer um jogador.
1 função onTouch (vip) 2 se vip.Parent.Name == "Bob" then 3 script.Parent.Transparency = 0.5 4 script.Parent.CanCollide = false 5 wait (1) 6 script.Parent.Transparency = 0 7 script .Parent.CanCollide = true 8 elseif vip.Parent: findFirstChild ("Humanoid") ~ = nil então
Portanto, se as condições para a primeira instrução "if" (o tocador sendo Bob) não forem atendidas, ele executa uma verificação adicional que indica se o tocador era mesmo um jogador. Agora, a parte divertida: matar o jogador.
1 função onTouch (vip) 2 se vip.Parent.Name == "Bob" then 3 script.Parent.Transparency = 0.5 4 script.Parent.CanCollide = false 5 wait (1) 6 script.Parent.Transparency = 0 7 script .Parent.CanCollide = true 8 elseif vip.Parent: findFirstChild ("Humanoid") ~ = nulo então 9 vip.Parent.Humanoid.Health = 0
Portanto, nossa declaração agora definirá a saúde do Humanóide encontrado para zero. Por fim, vamos fechar nossa "função" e ou "se" (excluindo nosso "elseif")
1 função onTouch (vip) 2 se vip.Parent.Name == "Bob" then 3 script.Parent.Transparency = 0.5 4 script.Parent.CanCollide = false 5 wait (1) 6 script.Parent.Transparency = 0 7 script .Parente.CanCollide = true 8 elseif vip.Parent: findFirstChild ("Humanoid") ~ = nulo então 9 vip.Parent.Humanoid.Health = 0 10 fim 11 fim
E por último, vamos criar a declaração de conexão (que faz tudo acontecer :)
1 função onTouch (vip) 2 se vip.Parent.Name == "Bob" then 3 script.Parent.Transparency = 0.5 4 script.Parent.CanCollide = false 5 wait (1) 6 script.Parent.Transparency = 0 7 script .Parent.CanCollide = true 8 elseif vip.Parent: findFirstChild ("Humanoid") ~ = nulo então 9 vip.Parent.Humanoid.Health = 0 10 end 11 end 12 script.Parent.Tocado: conectar (onTouch)
Parabéns! Se o seu script funcionou, qualquer pessoa chamada "Bob" deve conseguir passar pela porta, mas qualquer pessoa que não seja Bob será morta pela porta! Você pode alterar "Bob" para o nome de sua preferência quando estiver pronto para implementar isso em seu local!
É isso para o guia intermediário! Vá para o guia de script avançado para continuar.