🤔 Para Refletir :
"Mudar não é fraqueza, pelo contrário, é um sinônimo de superação."
- Ricky O Bardo

Sistema aleatório baseado em sorte

9155gabrielgap Masculino

Plebeu
Membro
Membro
Juntou-se
29 de Janeiro de 2017
Postagens
49
Bravecoins
26
  Tenho a seguinte dúvida: para o sistema por eventos que estou criando, preciso de um sistema que escolha, de forma aleatória, como o evento seguirá de acordo com certo status do personagem.

  Exemplo: Eu jogo uma moeda e escolho "cara", se a "Sorte" do personagem for acima de 10 as chances de cair "cara" aumentam, enquanto por outro lado, se for menor que 10, as chances de cair "coroa" aumentam.
Isso de forma que eu possa utilizar com todos os status (HP Máximo, Defesa, Agilidade, etc.)
Não precisa, necessariamente ser por eventos, mas que seja de uma forma relativamente prática, se possível.
No mais, obrigado pela atenção.  :XD:
 
Certo, [member=1138]9155gabrielgap[/member], você não especificou a engine, então usarei o VX Ace, mas as funções são praticamente as mesmas em outras versões.
Crie uma variável chamada "Chance" (ou o que quiser mesmo, mas chamarei de chance).
Certo, como essa variável funcionará? O número base será 5. Ao jogar a moeda, será selecionado um número para a variável entre 0 a 10. Se o personagem tiver a sorte maior que 10, será adicionado +3 a esse número final. Se o personagem tiver a sorte menor que 10, será subtraído -3 a esse número final. Para cair cara, o número tem que ser maior que 5, e para cair coroa tem que ser menor que 5.

Então, agora vamos modificar a variável para que selecione um número aleatório de 0 a 10.
Este é o comando que deve ser feito na variável:

5qAWWoA.png

Agora criamos outra variável chamada Sorte, e a colocamos para ser equivalente a Sorte do personagem em questão. Temos que escolher [Informação] e [Herói], escolher o Herói em questão e selecionar Sorte.

LTtWZF2.png

kKZjezM.png

Agora criamos uma Condição para que se a variável Sorte for maior ou igual a 10, a variável Chance aumentará em 3.
Caso contrário (exceção), diminuirá em 3.

0VRyKjp.png

azc037C.png

Feito isso, criamos outra condição que se a variável Chance for maior que 5, será cora.
Se for menor que 5, será cara.
E a chance será aumentada se sua sorte for maior que 10, e diminuirá se for menor que 10.

V7oVbZI.png

ewp4lm5.png

E você pode substituir a sorte por qualquer stat do Herói também. Espero ter ajudado.
 
9155gabrielgap comentou:
  Tenho a seguinte dúvida: para o sistema por eventos que estou criando, preciso de um sistema que escolha, de forma aleatória, como o evento seguirá de acordo com certo status do personagem.

  Exemplo: Eu jogo uma moeda e escolho "cara", se a "Sorte" do personagem for acima de 10 as chances de cair "cara" aumentam, enquanto por outro lado, se for menor que 10, as chances de cair "coroa" aumentam.
Isso de forma que eu possa utilizar com todos os status (HP Máximo, Defesa, Agilidade, etc.)
Não precisa, necessariamente ser por eventos, mas que seja de uma forma relativamente prática, se possível.
No mais, obrigado pela atenção.  :XD:


Escrevi meio tosco, mas depois faço uma versão melhorada... Veja se isso te ajuda...

Código:
//=============================================================================
// testYourLuck.js
//=============================================================================
/*:
 * @plugindesc (v0.1) Possibilita gerar resultados PSEUDOaleatórios entre 2 
 * valores, com algum controle sobre o resultado. 
 * @author eudado@gmail.com
 *
 *
 * @help  
 * Este script gera permite ao usuário gerar um numero inteiro e aleatório dentro
 * de um intervalo estabelecido. Isso pode ser bastante útil  quando se deseja
 * simular por exemplo, uma rolagem de dados.
 *
 * As variáveis do database utilizadas para este scrip são as de numero 1,2,3,4,5 e 6 
 *
 *-----------------------------------------------------------------------------
 *
 * O script possui as seguintes 2 funções que podem ser chamadas pelo usuario:
 *   -playTestLuck -> Possui mais aleatóriedade 
 *   -playTestDoom -> Da ao usuário mais controle sobre o resultado
 * 
 * - min   :menor resultado possivel (INTEIRO positivo ou zero) 
 *
 * - max   :maior resultado possível (INTEIRO positivo ou zero)
 *
 * - bonus :numero inteiro entre min e max. É somado ao valor sorteado para 
 *          forçar um resultado (zero, positivo ou negativo)
 *
 * - id    :id da $gamevariables do DATABASE que receberá o resultado
 *
 * - luck  :valor em porcentagem, representa a sorte (INTEIRO positivo ou zero);
 *
 * - doom  :valor em porcentagem mais deterministico  
 *  
*/

Game_Player.prototype.playTestLuck=function(){
  	
  	this.readVariables();
  	var min 	= this._min; 		
  	var max 	= this._max;
  	var bonus	= this._bonus;
  	var luck 	= this._luck;

  	//valida a entrada
  	min 	= Math.abs(Math.ceil(min));
  	max 	= Math.abs(Math.floor(max));
  	luck 	= Math.abs(luck);
  	if(Math.abs(bonus)>max){bonus=max;}
  	if(Math.abs(bonus<min)){bonus=min;}

  	//modela a sorte
  	luck 	= (luck/100)*max;
  	luck	= Math.floor(Math.random()*(luck - min)+ min);
  	
  	//gera o resultado do teste
  	var num = Math.floor(Math.random() * (max - luck)+luck+bonus);
  	
  	//formata o numero caso ele esteja fora do intervalo estabelecido
 	if (num>max){num=max;} 
 	if(num<min){num=min;}
 	
 	// repassao o resultado à id especificada
  	$gameVariables.setValue(6,num);
};


Game_Player.prototype.playTestDoom=function(){
  	this.readVariables();
  	var min 	= this._min; 		
  	var max 	= this._max;
  	var bonus	= this._bonus;
  	var doom 	= this._doom;

  	//valida a entrada
  	min 	= Math.abs(Math.ceil(min));
  	max 	= Math.abs(Math.floor(max));
  	if(Math.abs(bonus)>max){bonus=max;}
  	if(Math.abs(bonus<min)){bonus=min;}

  	// modelea o destino
  	doom 	= Math.floor((doom/100)*max);

  	//gera o resultado do teste
  	var num = Math.floor(Math.random() * (max - min)+doom+bonus);
  	
  	//formata o numero caso ele esteja fora do intervalo estabelecido
 	if (num>max){num=max;} 
 	if(num<min){num=min;}

  	$gameVariables.setValue(6,num);
};

Game_Player.prototype.readVariables=function(){
	this._min   = $gameVariables.value(1);
	this._max   = $gameVariables.value(2);
	this._bonus = $gameVariables.value(3);
	this._luck  = $gameVariables.value(4);
	this._doom  = $gameVariables.value(5);
};

Demo:
https://drive.google.com/open?id=19MwB2ZhtXVUPLZhbMygypt_udp_AlASz
 
Primeiramente, obrigado pelas respostas, [member=1820]Kazzter[/member] e [member=2347]DadoCWB[/member] .
Segundo, peço desculpas por não ter especificado a engine, falha minha. (No caso, é o VX Ace mesmo).
Por fim, a resposta do [member=1820]Kazzter[/member] serviu quase como uma luva, porém, me surge outra dúvida: com aplicar isso relativo ao nível da habilidade do personagem, por exemplo: Você utilizou como base a sorte do personagem sendo 10, porém se, ao nível 20, sua sorte for 200, eu teria que condicionar a variável sorte sendo maior ou igual a 200, e assim para cada nível do personagem?
 
9155gabrielgap comentou:
Primeiramente, obrigado pelas respostas, [member=1820]Kazzter[/member] e [member=2347]DadoCWB[/member] .
Segundo, peço desculpas por não ter especificado a engine, falha minha. (No caso, é o VX Ace mesmo).
Por fim, a resposta do [member=1820]Kazzter[/member] serviu quase como uma luva, porém, me surge outra dúvida: com aplicar isso relativo ao nível da habilidade do personagem, por exemplo: Você utilizou como base a sorte do personagem sendo 10, porém se, ao nível 20, sua sorte for 200, eu teria que condicionar a variável sorte sendo maior ou igual a 200, e assim para cada nível do personagem?

^^
Acho que não vou poder ajudar já que faz um tempão que não manipulo o RGSS. Mas a técnica que eu usei serve para ajudar no que você procura:

Considere que o nível de habilidade minimo é 1 e o máximo é 20 (por exemplo). Você pode tratar isso como uma porcentagem, onde:
habilidade nível 1 equivale a 1%;
habilidade nível 20 equivale a 100%.
 
Voltar
Topo Inferior