O TEMA DO FÓRUM ESTÁ EM MANUTENÇÃO. FEEDBACKS AQUI: ACESSAR

[RPG MAKER MV] [Preciso de ajuda]Plugin para seleção de evento aleatório

Iniciado por Chinue, 08/05/2021 às 19:01

 :coffee: :coffee: :coffee:
Boa noite, preciso fazer um plugin de evento aleatório no rpg maker mv, onde o personagem ao falar com um npc sempre falará com um ser aleatório. eu pensei em criar um plugin usando a linguagem RUBY usando o Rand, onde cada evento teria um nome de 1 a 10 em determinado mapa, e quando o ator falar com tal evento ele será um personagem aleatório
[url]https://blog.education-ecosystem.com/ruby-como-gerar-um-numero-aleatorio/]https://blog.education-ecosystem.com/ruby-como-gerar-um-numero-aleatorio/][url]https://blog.education-ecosystem.com/ruby-como-gerar-um-numero-aleatorio/[/url]
1     rand(1..10)
2     8
  :olantern: :olantern: :olantern: :olantern: :olantern: :olantern: :olantern:
ou então usando javascript


substituindo o nome   por um número aleatório:
function getRandomInt(min, max) {
  min = Math.ceil(min);
  max = Math.floor(max);
  return Math.floor(Math.random() * (max - min)) + min;
}
https://developer.mozilla.org/pt-BR/docs/Web/JavaScript/Reference/Global_Objects/Math/random

onde cada nome de evento seria um número inteiro
ou usando este código
Ao falar com x npc, o npc de nome será selecionado
Math.floor(Math.random() * 10 + 1)
onde o nome de cada personagem está no intervalo de 2 a 9
:batrick: :batrick: :batrick: :batrick: :batrick: :batrick: :batrick:

1 - Tem que ser somente os NPCs ou qualquer evento no mapa, inclusive baú?
2 - Esse "falar" é interagir, ou chamar realmente a caixa de dialogo?

teria que ser apenas os eventos com nome de número. Exemplo: Evento nomeado de 1, pois a ideia seria uma porta, onde cada vez que você entrava enfrentaria um sujeito diferente, e depois de vencido você poderia sair da sala e ir enfrentar outro sujeito, algo como os treinadores da torre de batalha do pokémon emerald

Hum... Ok. Qual seria a dúvida? Só pra registro, se vai usar o MV seu plugin deve ser feito em JavaScript, ele não aceita código em Ruby. E você não necessariamente precisa de código pra fazer isso, é um caso em que fazer por eventos mesmo seria menos trabalhoso.

Por javascript é mais prático do que criar um sistema todo por eventos, creio eu.
$gameMap._events[ID].start()
ID = Número da ID do evento alvo.

Por exemplo, inciar o evento 3:
$gameMap._events[3].start()


O método para ler todos os eventos no mapa:
$gameMap.events().forEach(function(ev) {
  /*Script*/
});



A melhor maneira de afetar apenas alguns eventos seria com o sistema de nota, em todo NPC basta colocar no campo de nota o termo "npc".
Então no código para listar apenas os eventos com essa nota em uma Array:
var npcs=[];
if($gameMap.event(ev._eventId).event().note == "npc"){
   npcs.push(ev._eventId);
}


E por fim teria que fazer o sorteio:
Math.floor(Math.random() * npcs.length)

Exemplo:
var npcnow=Math.floor(Math.random() * npcs.length);
$gameMap._events[npcs[npcnow]].start()


O comando completo:
var npcs=[];
$gameMap.events().forEach(function(ev) {
	if($gameMap.event(ev._eventId).event().note == "npc"){
		npcs.push(ev._eventId);
	}
})
var npcnow=Math.floor(Math.random() * npcs.length);
$gameMap._events[npcs[npcnow]].start();


Se preferir usar como função:
function npcRandom(){
	var npcs=[];
	$gameMap.events().forEach(function(ev) {
		if($gameMap.event(ev._eventId).event().note == "npc"){
			npcs.push(ev._eventId);
		}
	})
	var npcnow=Math.floor(Math.random() * npcs.length);
	$gameMap._events[npcs[npcnow]].start();
}



Para chamar basta executar o script:
npcRandom();


qqqqqqqqqqqqqqqqq


qqqqqqqqqqqqqq

Eu coloquei o código completo, basta incluir como Plugin e chamar a função com o comando Script de eventos.