Post Top Ad

20/05/2024

Por (missing text) em 20/05/2024 -
Novo Wired disponível: Variável Wired - Contexto Variável!

Um novo Wired foi lançado nessa manhã: é a WIRED Variável: Contexto Variável! Consequentemente as Variáveis de Contexto foram liberados nos...


Um novo Wired foi lançado nessa manhã: é a WIRED Variável: Contexto Variável! Consequentemente as Variáveis de Contexto foram liberados nos Wireds lançados na semana passada.

Agora você pode, por exemplo, detectar se um usuário está gritando/sussurrando em um quarto, isso com wired.








Essa é uma coisa simples que podemos fazer com Variáveis de Contexto, você pode conferir um pouco mais sobre como elas são úteis no jogo a seguir:


Variáveis de Contexto - Introdução


Além das Variáveis de Mobi, de Usuário e Global, existe um último "tipo" de variável: Variáveis de Contexto  ! Você pode encontrar esse novo wired na loja e no Clube em "Wireds > New Additions":

    
Nome: WIRED Variável: Contexto Variável
Preço catálogo: 7 câmbios
Código: wf_var_context


O que significa “contexto”? O contexto refere-se à execução Wired em que a variável é utilizada. Leia mais sobre isso a seguir:

Espere aí, o que você quer dizer com "refere-se à Execução Wired"? Isso significa que, quando você executa o "EFEITO Wired: Dar Variável", ele pode ser lido posteriormente durante a execução Wired. Isso inclui a cadeia de sinal que segue.

 

Mas vamos primeiro nos aprofundar em algumas variáveis internas que ele tem a oferecer.

Assim como os usuários e os mobis têm algumas informações a serem compartilhadas com o sistema Wired, o mesmo acontece com a execução wired.


Essas são as Variáveis de Contexto disponíveis:

@selector_furni_count  (Total de mobis do Seletor)
@selector_user_count  (Total de usuários do Seletor)
@signal_furni_count   (Total de mobis do Sinal)
@signal_user_count   (Total de usuários do Sinal)
@antenna_id              ("ATIVADOR WIRED: Recebe Sinal")
@chat_type               (0=Falar, 1=Gritar, 2=Sussurrar)
@chat_style               (Balão de Fala específico - você deve informar o número)


As variáveis internas chat_style e chat_type estão disponíveis se a Pilha Wired for acionada pelo "ATIVADOR Wired: Habbo diz algo".

Isso significa que podemos verificar, por exemplo, se o usuário está dizendo algo com o balão de fala de zumbi:


Você também pode ver que os blocos numéricos estão sendo atualizados de acordo com a quantidade de zumbis que estão vivos no momento. Tudo isso é feito em uma única Pilha Wired!

Fazemos isso com a ajuda da variável interna @selector_furni_count. Vamos extrair o primeiro número e o segundo número dessa variável em variáveis de contexto separadas e, em seguida, definir os @state dos mobis correspondentes para ela.

Você notará que as variáveis de contexto são ideais para computação. Podemos armazenar temporariamente a variável interna @selector_furni_count em uma variável de contexto, fazer alguma operação matemática nela para extrair o primeiro número (divisão por 10) e definir o primeiro bloco numérico verde para esse valor.

Vamos fazer algo semelhante para o segundo bloco, através da operação de módulo.


Você pode visitar o quarto abaixo e inspecionar as configurações wireds, o quarto pode ser acessado no Habbo.com (Hotel Inglês), com o comando :roomid 79590533

Proprietário: supersirjonasxx
Comando para ir para o quarto (no Habbo.COM): :roomid 79590533


Você ficará surpreso ao me ouvir dizer que agora sabe funcionalmente tudo o que precisa saber sobre variáveis de contexto, embora eu esteja ciente de que seguirei este post com mais 5 posts sobre variáveis de contexto.

Isso porque os tópicos a seguir não abordam novas funcionalidades, mas sim como usuários avançados podem utilizá-las. Elas explicam principalmente como esse wired muito simples preenche muitos princípios de programação que faltam em Wireds, mas eles estão definitivamente do lado difícil da coisa. Você não precisa lê-los agora e eles não são relevantes para atualizações futuras.

Assim como acontece com muitas coisas, é mais fácil aprender sobre coisas quando você realmente precisa delas, e pode ser difícil aprender coisas avançadas que você não precisa. Mesmo assim, eu recomendaria lê-los se você se enquadrar em uma dessas categorias:

1. Você lê os títulos das postagens e pensa “Preciso disso!”
2. Você está muito entusiasmado com Wireds, tem um bom entendimento deles e está ansioso para aprender tudo o que há para saber sobre eles
3. Você tem experiência em programação


Variáveis de contexto - Ocultar cálculos grandes de variáveis de usuário/mobis/globais


No post anterior, você aprendeu como as variáveis de contexto são [ideais para computação].

Mas se você já usa variáveis de mobis, de usuário ou as variáveis globais e pode fazer cálculos diretamente sobre elas, não há necessidade de incluir uma variável de contexto na mistura, certo? Errado (às vezes).

Existem 2 cenários em que você vai desejar fazer um grande cálculo dentro de uma variável de contexto. Vou explicá-los a seguir!

Mas primeiro, o que quero dizer com “cálculo grande”? Significa um cálculo que altera a variável várias vezes ao mesmo tempo, o que aconteceria se:

- Isso é feito em várias pilhas por meio de uma cadeia de sinal
- Isso é feito em uma única pilha com vários Wireds "EFEITO Wired: Mudar Valor Variável", onde "WIRED Extra: Executa na Ordem" é usado. Se você não usar esse complemento, o wired é inteligente o suficiente para combinar tudo em uma única alteração, mas você não pode especificar a ordem das operações.

A ordem das operações, sem usar "WIRED Extra: Executa na Ordem", é (em ordem): Atribuição, Potência, Multiplicação, Divisão, Módulo, Adição, Subtração.


1. A variável está acionando "ATIVADOR Wired: Variável Mudou"

Um cálculo que altera a variável várias vezes também acionará "ATIVADOR Wired: Variável Mudou" várias vezes, isso não é algo que você deseja.

Em vez disso, copie o valor em uma variável de contexto, faça os cálculos lá e copie o valor resultante de volta. O ativador só será acionado uma vez!

2. É uma variável permanente

Se você estiver calculando variáveis permanentes (por exemplo; você possui um RPG e os usuários possuem uma variável que indica quanto ouro eles possuem), considere fazer o cálculo grande dentro de uma variável de contexto por motivos de segurança.

Existem várias maneiras pelas quais um cálculo pode ser interrompido (e a variável acaba com algum valor inesperado):

1. O proprietário ou administrador do grupo evacua o quarto usando o comando :floor
2. A sala será descarregada após algum tempo vazia (ficar sem usuários), o que pode acontecer no meio da execução
3. Acontece uma manutenção no hotel
4. O usuário sai do quarto (o cálculo não será interrompido, mas as alterações restantes na variável não serão mais salvos no banco de dados)
5. Sua sala está usando muitos Wired e o sistema Wired decide cancelar algumas das execuções que faltam. Em circunstâncias infelizes, isso pode acontecer se o hotel estiver com muito delay.

Tudo isso é muito, muito, muito improvável de acontecer. Mas vai, afinal é uma lei!


Variáveis de Contexto – Memorização com Sinais


Nesse espaço vou mostrar como variáveis de contexto podem ser usadas para armazenar e recuperar valores dentro de uma cadeia de sinais.


Observe essa Configuração Wired, acontece o seguinte:

1. Quando a alavanca é usada, 3 cadeias de sinal vão ser acionadas em paralelo (para cada um dos bots)
2. A cadeia de sinal executa:
- O valor que está no piso numérico na frente do bot, é armazenado em uma variável de contexto (original_number)
- A posição Y do bot é armazenada, para que possa ser recuperada posteriormente (original_y_position)
- Os bots deslizam por um trajeto comum até o final
- Quando eles moveram a quantidade de pisos igual ao original_number, eles giram duas vezes antes de continuar. O valor atual é armazenado em outra variável de contexto, current_tile
- Quando chegam ao final, eles dobram a variável de contexto em doubled_original_number e definem o estado do piso numérico de destino para esse
- Os bots voltam ao início

Como você pode ver, esta configuração é totalmente orientada por variáveis de contexto


Você pode visitar o quarto abaixo e inspecionar as configurações wireds, o quarto pode ser acessado no Habbo.com (Hotel Inglês), com o comando :roomid 79590533

Proprietário: supersirjonasxx
Comando para ir para o quarto (no Habbo.COM): :roomid 79590533


Mas você não poderia simplesmente usar variáveis de usuário?

Sim, neste exemplo específico você também poderia ter usado variáveis de usuário, mas:

- Isso não funcionaria se a cadeia de sinal não envolvesse exatamente um usuário. E se não houver usuários? E se houver vários usuários? E se houver vários usuários e mobis?
- Isso não funcionaria em uma configuração onde o usuário envolvido pudesse ser processado em múltiplas cadeias de sinal ao mesmo tempo
- Você teria que limpar as variáveis atribuídas posteriormente

Apesar de tudo, embora tecnicamente seja possível usar variáveis de usuário aqui, isso pode ser considerado um truque e não é escalável para sistemas mais complexos (mas tentei mantê-lo simples). Então, eu encorajaria o uso de variáveis de contexto nesta configuração

Para programadores: variáveis de usuário/mobi/globais são como campos de classe, variáveis de contexto são variáveis locais que só existem dentro de uma função.

Os casos de uso prático são muito mais simples do que o exemplo acima. Vou dar um exemplo onde eu pessoalmente usaria variáveis de contexto em 100% do tempo.

Imagine um jogo que poderia terminar de várias maneiras:

- O usuário ganha
- O tempo acaba
- O usuário saiu do jogo
- O usuário é desqualificado por inatividade
- O usuário morre pelo motivo X
- O usuário morre pelo motivo Y

Todas essas condições de "fim de jogo" são verificadas em pilhas separadas no quarto, mas elas têm em comum o fato de enviarem um sinal para as pilhas Wired (vamos chamá-las de fim do jogo) que encerram o jogo, teleportam o usuário para fora o jogo, talvez até resetem o estado do jogo, etc.

No final do jogo, muitas vezes você precisará saber se o usuário ganhou ou não. E, idealmente, você notifica o usuário com o motivo pelo qual ele perdeu/ganhou

Variáveis de contexto são ideais aqui! Atribua um número a cada um dos motivos do fim do jogo e adicione a variável de contexto enquanto envia um sinal para o fim do jogo.

Com o wired "Variável Extra: Conector de Texto" você também poderá vincular cada um desses valores diretamente a uma mensagem de fim de jogo, portanto, não precisará de uma pilha Wired com "Mostrar mensagem" para cada motivo. Haverá 0 pilhas duplicadas!


Variáveis de Contexto – Callbacks


Se você leu o post sobre referências de Mobis/Usuários, você sabe que podemos salvar Mobis/Usuários em variáveis.

Para variáveis de contexto isso abre uma nova possibilidade: retornos de chamada! Isso pode ser facilmente criado armazenando a @id de uma antena dentro de uma variável de contexto e, em seguida, enviando um sinal para as antenas com o @id especificado.


Criei esta pequena configuração wired que gostaria de reutilizar em vários lugares.

Quando a antena for ativada, ela encontrará todos os blocos do Clube do Arquiteto que estão conectados ao bloco que foi repassado no sinal

Então, sempre que encontrar um bloco conectado, ele enviará um sinal para a antena com o id igual a callback_antenna_id, uma variável de contexto que você precisa passar para a configuração wired. Ele encaminhará o bloco do Clube do Arquiteto conectado que foi encontrado.


Isso nos permite fazer muitas coisas totalmente diferentes, com configurações mínimas de wireds, para todos os blocos conectados!


Você pode visitar o quarto abaixo e inspecionar as configurações wireds, o quarto pode ser acessado no Habbo.com (Hotel Inglês), com o comando :roomid 79590533

Proprietário: supersirjonasxx
Comando para ir para o quarto (no Habbo.COM): :roomid 79590533


Como acontece com todas as coisas, certamente haveria maneiras diferentes de fazer isso acontecer sem usar variáveis de contexto, como:

1. Dando previamente a todos os blocos uma variável, em que o valor é o mesmo dos blocos conectados
2. Usando um seletor por ID de variável

Mas, novamente, este é um exemplo muito simples. E se o campo estiver em constante movimento? E se houver alguns parâmetros que você possa passar para a configuração Wired que determina os blocos selecionados? (tais como: direções permitidas, tipos de mobis permitidos, estados permitidos)

De repente, não seria mais tão fácil! Você descobrirá que esta é, na verdade, uma configuração muito escalável que tornará sua vida muito mais fácil ao criar jogos com lógicas complexas. E tudo pode funcionar em paralelo!

Os callbacks (retornos de chamada) também podem ser usados para sinalizar quando uma configuração wired termina de ser executada. Isso pode ser muito útil em configurações onde uma determinada cadeia de sinal precisa ser executada antes que você possa continuar com algumas pilhas Wired diferentes e não relacionadas.

Mas estou me adiantando! Sinalizando quando uma configuração wired foi concluída? Parâmetros de entrada? Isso parece muito com... funções.


Variáveis de Contexto – Funções (valores de entrada e retorno)


Agora você já sabe tudo o que precisa saber para entender o “pináculo da programação” do Projeto Wired: criar funções com Variáveis de Contexto!


Dada uma linha ou coluna de pisos numéricos, você poderia me dizer qual é a sequência máxima de números crescentes?

Por exemplo, considere a seguinte sequência de números:

0 4 9 3 9 1 3 4 5 3 1 3 0

A sequência crescente máxima é 1 3 4 5 e tem tamanho de 4

Hmm.. Quero criar uma função para isso!

Função "get-max-sequence"

IN:

(Encaminhado através do sinal): O primeiro bloco numérico na sequência

(Encaminhado por meio de 2 variáveis de contexto): A direção a ser observada (x_offset e y_offset)

(Encaminhado através de uma variável de contexto): A antena de retorno de chamada, para quando a função for finalizada

OUT:

(variável de contexto): A quantidade máxima de números crescentes



Tudo pronto! Vamos experimentar:



Mas por que parar aí? Agora que temos uma função, poderíamos aumentá-la facilmente e preencher uma grade inteira de números.

Vamos randomizar o campo de números abaixo e chamar a função para cada linha e coluna, tudo ao mesmo tempo! Exibiremos o resultado nos blocos numéricos pretos ao lado.


Você pode visitar o quarto abaixo e inspecionar as configurações wireds, o quarto pode ser acessado no Habbo.com (Hotel Inglês), com o comando :roomid 79590533

Proprietário: supersirjonasxx
Comando para ir para o quarto (no Habbo.COM): :roomid 79590533


Embora as funções possam parecer um pouco exageradas para Wireds no início, acho que são um requisito para todas as linguagens de programação! Na verdade, eles podem ser o conceito mais importante em qualquer linguagem de programação, porque alcançam total reutilização e modularidade.

Você notará que esta é apenas uma "aplicação de variáveis de contexto", em vez de uma implementação nativa para "funções" em Wireds. Tem algumas deficiências:

1. Variáveis de contexto que foram usadas internamente na Função ainda estarão ativas quando a função terminar (exceto se você as remover). Isso significa que se a configuração wired do "chamador" chamar a função novamente, certifique-se de selecionar "Substituir variável existente", caso contrário você reutilizará um valor anterior e não relacionado das variáveis de contexto.
2. Funções com variáveis de contexto não podem retornar facilmente uma "coleção de mobis" ou "usuários", exceto se você conseguir manter essa coleção no sinal o tempo todo.
- Você poderia contornar isso usando variáveis ​​de mobis/usuário, mas isso quebra a paralelização e a escalabilidade
3. Para funções com suporte nativo, faria sentido que elas fossem executadas inteiramente em uma única execução Wired. Em outras palavras, onde normalmente uma única pilha Wired é executada, toda a função teria sido concluída. Isso porque você não deveria "precisar" usar retornos de chamada (certamente quando não há valor de retorno)

Portanto, embora sejamos capazes de criar funções incríveis com variáveis de contexto, as funções não são suportadas nativamente no Wired. No entanto, já desenvolvi um sistema para fazer exatamente isso. Isso não será implementado tão cedo (ou nunca) e só aconteceria se os usuários avançados da comunidade Wired mostrassem necessidade ou considerassem isso crítico.

Se você (leitor) chegar a um ponto em que ficará limitado por não ter suporte nativo para Funções, o sirjonasxx terá interesse em saber mais sobre seu caso de uso. Certifique-se de o avisar!


Variáveis de Contexto – Tempo de vida


Existe mais uma informação que pode ser importante ao trabalhar com variáveis de contexto: qual é o seu tempo de vida? E o que quero dizer com isso?

1. Uma pilha wired cria uma variável de contexto chamada number e a define como 1.
2. Em seguida, ela envia 2 sinais, de modo que 2 "ramificações" (A e B) de execução wired passam a existir. Eles podem ler e escrever em number
3. A altera o valor de number para 20

Nesse cenário, A e B estão compartilhando a variável de contexto. Isso significa que, como A modificou number para 20, também será 20 para B

No entanto, se B substituir esta variável executando EFEITO Wired: Dar Variável (com "Substituir variável existente" selecionado), ele não compartilhará mais essa variável com A, pois B agora criou uma nova.

Para programadores: isso significa que as variáveis de contexto funcionam exatamente como variáveis na codificação, com escopos

var A = 1; { A = 10; print(A); // 10 } print(A); // 10
var A = 1; { var A = 10; print(A); // 10 } print(A); // 1

Servidor de Wireds no Discord


Momento #publi: Você sabia que existe um servidor no Discord dedicado a Wireds? Você pode conversar e tirar dúvidas com membros do Wired Team, fazer sugestões de novos wireds e mobis úteis para jogos e muito mais!

Para entrar no servidor acesse o link: https://discord.gg/habbowired!








Já experimentou o novo wired? Avalie ou comente:


Comentários:



Post Top Ad

Your Ad Spot

Páginas


Habbo News

Estrelas do nosso portal de notícias!

Vire uma ⭐ do site participando de nossas atividades ou interagindo em nossas notícias diárias através dos comentários.
Um dia você irá brilhar por aqui!


Fã Site OFICIAL!

Copyrights © - Fã Site 2012~2024 Habbo News - Todos os direitos reservados. - Esta Fã Site não está afiliada com, patrocinada por, apoiada por, ou principalmente aprovada pela Sulake Oy ou suas empresas Afiliadas. Esta Fã Site pode utilizar as marcas registradas e outras propriedades intelectuais do Habbo, que estão permitidas sob a Política de Fã Sites Habbo.