🤔 Para Refletir : "Saber a hora de parar é quase tão importante quanto saber a hora de começar" - Ricky O Bardo

Scripts e Eventos #03! (RPG Maker MV)

Colaboração Colaboração
"colore a minha vida com o caos do problema."
Postagens
195
Bravecoins
1.222
De volta a ativa! É isso mesmo, retornamos com os SCRIPTS E EVENTOS! Desta vez, mesmo que o Brasil não tenha levado a taça da copa, utilizo com orgulho a camisa amarelinha!
1.png


Bem, como tradição eu utilizava versões um pouco mais antigas do Maker nos meus tutoriais... Todavia, desta vez vou usar alguns comandos pontuais de JS, vantagem encontrada apenas nas versões mais recentes do programa. Mesmo assim, são apenas para algumas poucas ocasiões que podem ser facilmente adaptadas nas outras versões, se você sabe formas mais eficientes de montar os mesmos itens que vamos aprender hoje, por quê não me mostrar a sua versão? Vamos lá!
O nosso desafio do dia será TORNAR NOSSOS ITENS MAIS INTERESSANTES!

Se tem uma boa qualidade que desenvolvi enquanto trabalhava mais frequentemente em meu projeto Fumiko foi a necessidade de criar itens que fossem interessantes explorando as opções disponíveis dos eventos comuns e as próprias opções do Maker! Desta vez eu bolei três exemplos, e quero que vocês me tragam sugestões de outros itens para uma possível parte II dessa mesma lição! Tudo bem?

Item 1 - Doce Natalino
Seguindo o clima de natal, uma das sugestões que eu trouxe foi a do Doce Natalino que tem a incrível habilidade de aumentar status diferentes do time de protagonistas e se tornar ainda mais poderoso a cada uso! Parece o item perfeito para ser uma recompensa rara ou um item caro do jogo que vai sendo cada vez mais valorizado a medida que o jogador avança em sua jornada.
Print.png


Tudo começa no banco de dados! Crie seu item, escolha seu ícone, faça uma descrição prática para o seu jogador e vamos lá... EVENTOS COMUNS.

Print.png


Você não precisa mais do que uma variável e um comando de script para criar o nosso DOCE NATALINO.
Lembrando que com relação aos parâmetros: 0-MaxHP, 1-MaxMP, 2-Atk, 3-Def, 4- Mat, 5-MDef, 6-Agi, 7-Luck.
Esse tipo de item funciona muito bem em jogos onde você tem poucos protagonistas. Além de que, você pode fazer com que cada personagem tenha uma regra específica de crescimento ou itens que interagem com esse crescimento garantindo bônus melhores de atributos, tudo isso só é restrito a sua criatividade.

Item 2 - Poção Estelar
Outra coisa bastante comum em Fumiko é o RNG! Alguns amam, outros detestam ter de lidar com a sua própria sorte na hora de receber bônus e tesouros na sua jornada. Porém, e se aplicarmos um pouco disso as fórmulas? É bastante simples de se criar um item que use da aleatoriedade para beneficiar o jogador!
Vejamos um exemplo extremamente simples de criar esse efeito ao mesmo tempo que nos aproveitamos do atributo SORTE que é pouco explorado pelos desenvolvedores.
Print.png


Após configurar o item normalmente, todo o trabalho que tive foi o de gerar uma fórmula que se encaixasse nas minhas necessidades.
Eu apliquei dois fatores de sorte na Poção. O primeiro, foi o próprio atributo do personagem e o segundo foi uma geração de cura extra a partir de um valor aleatório que vai de 1-25 com o ajuda do Math.random(), você pode aprender mais sobre esse e outros comandos de JS através das aulas do @DanTheLion aqui mesmo nesta seção de tutorias focados em tecnologia!

Item 3 - Pão Fresco x Pão Duro
Bem... Nós vimos um item que tem seu poder aumentado de acordo com o seu uso a partir de variáveis, vimos um item que baseia sua recompensa quase que totalmente na sorte do jogador e agora, veremos na última sugestão um item que se modifica de acordo com o tempo que o possuímos! Vamos ver como isso funciona...
Como todo item, primeiro vamos criar a sua base no nosso index de itens. (Atente-se que precisaremos criar a versão "base" e a versão "transformada" do item), deste modo:

Print.png


Print.png


Com nossos itens programados vamos aos eventos comuns! Também precisaremos criar duas páginas um controlador que ativa e desativa o evento e o contador em si.

Print.png


Print.png


Ao invés de utilizar o tempo de forma padrão, esse evento foi configurado para apenas contabilizar o tempo para transformar o pão conforme o personagem se move dentro do jogo! (Todavia isso também pode ser configurado de modo a respeitar o tempo em minutos reais, apenas adotei esse modelo por preferência pessoal). A sugestão do pãozinho veio do próprio @Dr.XGB peçam a ele para fazer as versões cientificas desse sistema com vários adendos hahaha.

Em suma...
A ideia foi apenas trazer algumas sugestões simplificadas de como criar itens mais interessantes, e até mesmo esses que trouxe podem ser otimizados e montados de outras várias maneiras, e você DEVE encontrar a sua maneira, utilize isso apenas como um ponto de partida para a sua imaginação. Dúvidas, sugestões, pedidos para futuros SCRIPTS e EVENTOS, deixe ai na área dos comentários, tento trazer mais algumas postagens em breve. Grande abraço a todos!
 
Magravilha!
Ficaram legais as estratégias que você planejou para a funcionalidade dos itens.

Acho que só daria um bizú nas switches 0015: Tem Pão e 0016: Não tem Pão. Penso que dá pra enxugar essa parte, uma vez que pode-se controlar apenas uma switch para testar se a Fumiko possui um pão na bolsa. Tipo, se 0015: Tem Pão == OFF não há necessidade de 0016: Não tem Pão virar ON, já que aquela sendo OFF já diz que não tem pão na bolsa.
Acredito que vc pensou nas condições de página, mas isso pode ser resolvido colocando um página vazia no caso do switch estiver ativado, caso o evento deve aparecer somente quando não há o JC na bolsa.

De todo, gostei muito e espero que continue com esta série que, com certeza, vai ajudar muita gente, não importa o momento que seja.
Parabéns! :clap:
 
Opa, eu queria saber como faz um item que seria uma moeda rara que a medida que o tempo passasse seu valor aumentasse
Esse é um momento em que eu gostaria de entender um pouco mais sobre a programação dentro do RPG Maker, porque a lógica para se criar algo assim não é muito complexa. Eu reparei que no post do @Aleth728 ele usa a função
Código:
Esperar: 1 quadro
, o que me dá a entender que a forma de se medir o tempo através da engine são os quadros por segundo. Ou seja, se o jogo roda à 60 fps, você teria que criar um "timer" que à cada 60 quadros adiciona "1" ao valor dos segundos, e à cada 60 segundos reseta o valor dos segundos para "0" e adiciona "1" ao valor dos minutos... e assim por diante. Dessa forma você tem um "relógio" funcional inGame. Aí é só uma questão de: em "X" tempo gasto, adicionar "X" ao valor do item "moeda".

Talvez meus colegas com mais experiência no RPG Maker possam elaborar um pouco mais a respeito do algoritmo que citei acima.
 
Acho que só daria um bizú nas switches 0015: Tem Pão e 0016: Não tem Pão. Penso que dá pra enxugar essa parte
Com certeza, Dôtor! Esse esquema que me passou com certeza vai me poupar algumas switchs!!! "Nem sempre um código menor quer dizer um código melhor" como você me ensinou, mas se posso deixar mais legível e gastando menos a máquina do malandro, é isso que vou fazer! Deixar mais otimizado e bem legível. (Geralmente me aproveitava desse "Não tem pão" pra fazer alguma graça kakakakaka

Espero que dê pra ajudar uma boa galera com esses tutoriais, viu!
São coisas simples e práticas que vão deixando nossos jogos com uma cara só nossa, dá pra tentar colocar uma coisa aqui e ali, pô.

Opa, eu queria saber como faz um item que seria uma moeda rara que a medida que o tempo passasse seu valor aumentasse
Respondido!

Talvez meus colegas com mais experiência no RPG Maker possam elaborar um pouco mais a respeito do algoritmo que citei acima.
Exatamente isso Doug! No caso, o Maker conta a 60f por segundo, e calculamos a partir disso!
Postei a minha explicação maior e uma pequena solução a um problema que o sistema como eu concebi poderia gerar.
Valeu por fortalecer!
 
Com certeza, Dôtor! Esse esquema que me passou com certeza vai me poupar algumas switchs!!! "Nem sempre um código menor quer dizer um código melhor" como você me ensinou, mas se posso deixar mais legível e gastando menos a máquina do malandro, é isso que vou fazer! Deixar mais otimizado e bem legível. (Geralmente me aproveitava desse "Não tem pão" pra fazer alguma graça kakakakaka

Espero que dê pra ajudar uma boa galera com esses tutoriais, viu!
São coisas simples e práticas que vão deixando nossos jogos com uma cara só nossa, dá pra tentar colocar uma coisa aqui e ali, pô.


Respondido!


Exatamente isso Doug! No caso, o Maker conta a 60f por segundo, e calculamos a partir disso!
Postei a minha explicação maior e uma pequena solução a um problema que o sistema como eu concebi poderia gerar.
Valeu por fortalecer!

Uma dica geral para programação (mesmo por eventos) é que raramente uma varíavel (ou switch) com negação no nome faz sentido.
É quase unânime que se você precisa verificar alguma condição o melhor a fazer é nomear a forma positiva, como por exemplo, Tem pão e utilizar o operador de negação, também conhecido como não, nos casos que precise fazer a validação contrária.

Isso fica muito mais intuitivo do que utilizar o caso contrário, seguindo neste exemplo, teríamos como nome Não tem pão. Nesse cenário, caso fosse preciso testar a condição positiva, também teríamos que utilizar o operador de negação, tornando a condição: não Não tem pão, que basta ler pra ver que ela fica muito mais complicada do que precisa.

Dito isso, a terceira opção: criar as duas formas possui um problema extra, você não tem nenhum mecanismo que garanta que as duas estejam sempre em sincronia, então por fatores como: crescimento de projeto, mudanças em alguma mecânica e até falha humana, podemos acabar com as duas variáveis (ou switches) tendo o mesmo valor, o que pode causar comportamentos indesejados do sistema.
 
Outra dica aos programadores iniciantes:
O "se não" no RPG Maker, pelo que eu entendi, seria o equivalente ao "else" em outras linguagens de programação. Ou seja, o "caso contrário". Na compilação do script, ele irá seguir pela "prioridade". Sendo assim, como programador, vc terá que decidir qual condição é mais importante checar primeiro, a "afirmativa" ou a "negativa". Por exemplo, se vc estiver criando o script para confirmar a compra de um item, vc precisa checar a condição do jogador possuir dinheiro o bastante. Vc pode seguir de duas formas:

1)
Se o jogador possui dinheiro >= preço do item:
*adicionar item ao inventário;
*remover valor equivalente do dinheiro;
Caso contrário:
*exibir diálogo de que a compra não foi concluída;

OU

2)
Se o jogador NAO (possui dinheiro >= preço do item):
*exibir diálogo de que a compra não foi concluída;
Caso contrário:
*adicionar item ao inventário;
*remover valor equivalente do dinheiro;

No exemplo 1), o computador dá prioridade a conferir se vc tem dinheiro o bastante, e leva mais tempo (consome mais memória) para exibir a mensagem caso vc não possa realizar a compra;

já no exemplo 2), o computador dá prioridade em exibir a mensagem de compra não realizada, e consome mais memória para concluir a compra.

Isso, por si só, é imperceptível em computadores modernos, mas conforme seu código fica mais complexo, e vc adiciona mais e mais condições uma dentro da outra, pode vir a causar problemas de performance desnecessários se vc não organizar adequadamente as prioridades de suas condições.
 
Última edição:
Voltar
Topo