Eu vi que existem muitas maneiras de localizar itens dentro da memória de um jogo em tempo real pra adicionar dinheiro ou munição apenas alterando o valor, mas existem jogos que isto é impossível no jogo sem modificações.
Com isso eu percebi que jogos que permitem uso de Console pra poder modificar ou softwares que peguem as informações em tempo real seriam vulneráveis, assim como a maioria do jogos simples ou antigos feitos pra Android, navegador com HTML5 ou Javascript puro.
Então eu pensei em uma maneira, mas coloquei em pratica hoje, tornar o dinheiro do jogo uma array que através de uma função criada pro jogo pra adicionar e outra pra remover através de um loop.
No exemplo que eu criei usando como base Javascript eu criei dois itens, gold e diamond me baseando na maioria dos joguinhos de Android, Gold e Diamond, ambas funções afetam ambos itens.
Veja funcionando:
Game - Basic Gold and Diamond - JSFiddle - Code Playground
Função - Adicionar item:
Função - Remover item:
Então seguindo as variáveis de exemplo que eu criei, para torna-las Arrays já faço isso ao declarar cada uma, de preferência no inicio do jogo:
Para mostrar o valor ou comparar (Quando for fazer uma compra durante o jogo) use a propriedade length, veja o exemplo se eu quiser retornar a quantidade de "golds" no console que o jogador tem no momento:
Agora se eu quiser permitir uma compra de um item de 120 golds:
Aqui o que deixei foi a ideia, dessa mesma base também estou criando aquele sistema de Loot Box, mas que ao invés de ser uma Array seria um Vetor, ou seja, os itens recebidos seriam randômicos na hora que recebesse, mas se o jogador não abrir eles não mudariam mesmo com o passar do tempo.
Mas por que teria que ser diferente do dinheiro do jogo? Digamos que o jogador não possa receber certos itens com um nível muito baixo ou que nunca tenha visto ou que não seja da região onde conseguiu o Loot Box, então se ele abrir a primeira caixa que recebeu somente após muitos niveis ainda receberia itens simples dela pois foi pega no começo do jogo.
A ideia pode ser aplicada em outras linguagens de programação, como C# que é a mais usada em jogos criados com Unity.
Com isso eu percebi que jogos que permitem uso de Console pra poder modificar ou softwares que peguem as informações em tempo real seriam vulneráveis, assim como a maioria do jogos simples ou antigos feitos pra Android, navegador com HTML5 ou Javascript puro.
Então eu pensei em uma maneira, mas coloquei em pratica hoje, tornar o dinheiro do jogo uma array que através de uma função criada pro jogo pra adicionar e outra pra remover através de um loop.
No exemplo que eu criei usando como base Javascript eu criei dois itens, gold e diamond me baseando na maioria dos joguinhos de Android, Gold e Diamond, ambas funções afetam ambos itens.
Veja funcionando:
Game - Basic Gold and Diamond - JSFiddle - Code Playground
Função - Adicionar item:
Código:
function moneyAdd(target, amount) {
/*
* Syntaxe:
* moneyAdd(Variavel alvo criada no jogo, Valor à ser adicionado);
* Exemplo:
* moneyAdd(money, 1500);
*/
var d, nYYYY, nMM, nDD, nHH, nMi, nSS, k;
for (i = 0; i < amount; i++) {
d = new Date();
nYYYY = d.getFullYear();
nMM = d.getMonth();
nMM = nMM + 1;
if (nMM < 10) {
nMM = "0" + nMM;
}
nDD = d.getDate();
if (nDD < 10) {
nDD = "0" + nDD;
}
nHH = d.getHours();
if (nHH < 10) {
nHH = "0" + nHH;
}
nMi = d.getMinutes();
if (nMi < 10) {
nMi = "0" + nMi;
}
nSS = d.getSeconds();
if (nSS < 10) {
nSS = "0" + nSS;
}
k = i + "" + nYYYY + "" + nMM + "" + nDD + "" + nHH + "" + nMi + "" + nSS;
target.push(k);
}
}
function moneyDrop(target, amount) {
/*
* Syntaxe:
* moneyDrop(Variavel alvo criada no jogo, Valor à ser subtraido);
* Exemplo:
* moneyDrop(gold, 1500);
*/
for (i = 0; i < amount; i++) {
target.shift()
}
}
Função - Remover item:
Código:
function moneyDrop(target, amount){
/*
* Sintaxe:
* moneyDrop(Variável alvo criada no jogo, Valor à ser subtraído);
* Exemplo:
* moneyDrop(money, 1500);
*/
for(i=0;i<amount;i++){
target.shift();
}
}
Então seguindo as variáveis de exemplo que eu criei, para torna-las Arrays já faço isso ao declarar cada uma, de preferência no inicio do jogo:
Código:
var gold=[];
var diamond=[];
Para mostrar o valor ou comparar (Quando for fazer uma compra durante o jogo) use a propriedade length, veja o exemplo se eu quiser retornar a quantidade de "golds" no console que o jogador tem no momento:
console.log(gold.length)
Agora se eu quiser permitir uma compra de um item de 120 golds:
Código:
if(gold.length < 120){
alert(Você não possuí ouro suficiente);
}else{
moneyDrop(gold, 120); //retira 120 do jogador
}
Aqui o que deixei foi a ideia, dessa mesma base também estou criando aquele sistema de Loot Box, mas que ao invés de ser uma Array seria um Vetor, ou seja, os itens recebidos seriam randômicos na hora que recebesse, mas se o jogador não abrir eles não mudariam mesmo com o passar do tempo.
Mas por que teria que ser diferente do dinheiro do jogo? Digamos que o jogador não possa receber certos itens com um nível muito baixo ou que nunca tenha visto ou que não seja da região onde conseguiu o Loot Box, então se ele abrir a primeira caixa que recebeu somente após muitos niveis ainda receberia itens simples dela pois foi pega no começo do jogo.
A ideia pode ser aplicada em outras linguagens de programação, como C# que é a mais usada em jogos criados com Unity.
Última edição: