Ir para conteúdo
  • 0
Artur Barbosa

[AJUDA] MVP ROOM

Pergunta

Boa tarde pessoal, estou usando um mvp room e estou tendo problemas com alguns jogadores, eles lotam a sala de mvp e saem atrapalhando os demais, alguém pode me ajudar com alguma ideia para impedir isso? nem que seja um time ou limite de invocação para cada jogador, ou uma checagem no mapa do mvp rom que dê um @killmonster assim que não estiver ninguém no mapa, se alguém poder me ajudar ficarei muito grato.

MVP ROOM utilizado

@edit

Tentei criar um npc de checagem porém não obtive sucesso, alguém me auxilia? 

(Não entendo nada de script)
 

Citar

 

-    script    -1,{
if(getmapusers("rwc03") <= 0){
atcommand "@killmonster";
atcommand "@cleanmap";
end;

}

}

 

 

Editado por Artur Barbosa

Compartilhar este post


Link para o post
Compartilhar em outros sites

13 respostass a esta questão

Recommended Posts

  • 1
12 horas atrás, Artur Barbosa disse:

Vou aceitar sua ajuda Suicune, se possível você me passa o script que voce me indicou?

Segue o Link: https://pastebin.com/raw/YLUBrvcv

Onde está 7227 (que seria o Ticket Cheffenia) eu coloquei >0, para não cobrar, então o player pode entrar sem que tenha que pagar nada.

Compartilhar este post


Link para o post
Compartilhar em outros sites
  • 1

Edit:

Bom dia, meu amigo. Passei a noite fuçando aqui no computador e acabei escrevendo um invocador de MvPs com limite de 1 minuto entre as invocações (finalmente aprendi a usar timers direito). Poderia testar para ver se funciona no seu emulador? No meu está tudo certo.

//==============================================================
//   ____                                    _            _     
//  / __ \                                  | |          | |    
// | |  | | __      __   ___   ____   __ _  | |_    ___  | |__  
// | |  | | \ \ /\ / /  / _ \ |_  /  / _` | | __|  / __| | '_ \ 
// | |__| |  \ V  V /  |  __/  / /  | (_| | | |_  | (__  | | | |
//  \___\_\   \_/\_/    \___| /___|  \__,_|  \__|  \___| |_| |_|
//                                                              
//===== Nome ===================================================
//= Aedan, o Invocador de Chefes
//===== Descrição ==============================================
//= Invocador de chefes bem simples. Seleciona monstros usando
//= números como referência e os invoca em uma coordenada
//= aleatória do mapa. Apenas um chefe pode ser invocado por
//= minuto, para evitar spam. Se o player deslogar antes do fim
//= do timer, o NPC resetará o timer para que o player não fique
//= preso em um trecho do código.
//==============================================================
mapa,x,y,4	script	Aedan	855,{
	set .@NPC_Name$,"^4CAF50[ Aedan ]^000000";
	// Armazena "ID" dos MvPs em uma array para gerar a array de nomes e usar no comando monster
	setarray .@MvP_ID[1],1059,1647,1511,1651,1650,1785,1039,1873,1871,1086,1251,1389,1719,1731,1112,1115,1658,1157,1150,1159,1312,1885,1252,1832,1734,1779,1518,1688,1991,1646,1990,1147,1708,1648,1917,1956,1087,1038,1768,1623,1492,1373,1418,2022,1649,1583,1190,1751,1685;
	
	// Essa condição serve para evitar que players usem o NPC antes de um minuto se passar.
	if(getnpctimer(1) == 1){
		mes .@NPC_Name$;
		mes "Eu só posso invocar apenas um chefe por minuto. Por favor, espere um pouco mais.";
		close;
	}
	if(Aedan_First_Talk == 0){
		set Aedan_First_Talk,1;
		mes .@NPC_Name$;
		mes "Olá, meu nome é Aedan. Se quiser, posso invocar um dos chefes do jogo para você. Estaria interessado?";
	} else {
		mes .@NPC_Name$;
		mes "Oh! Você por aqui novamente? Tudo bem, aposto que quer invocar mais alguns chefes, certo?";
	}
	next;
	if(select("Sim:Não") == 2) goto End_Talk;
	
Choose_MvP:
	mes .@NPC_Name$;
	mes "Escolha um dos chefes na lista abaixo. Para invocá-lo, digite o número correspondente na caixa que irá aparecer a seguir.";
	mes " ";
	// Gera uma array com o nome dos chefes e em seguida mostra-os em uma lista
	for (set .@i,1; .@i < getarraysize(.@MvP_ID); set .@i,.@i+1){
		setarray .@MvP_Name$[.@i],strmobinfo(1,.@MvP_ID[.@i]);
		mes "^E53935"+.@i+".^000000 "+.@MvP_Name$[.@i];
	}
	next;
	if(select("Digitar:Cancelar") == 2) goto End_Talk;
	input .@MvP_Index;
	if(.@MvP_Index < 1 || .@MvP_Index > getarraysize(.@MvP_ID)-1) goto Invalid_Input;
	mes .@NPC_Name$;
	mes "Se prepare, "+.@MvP_Name$[.@MvP_Index]+" será invocado em instantes.";
	close2;
	attachnpctimer;
	initnpctimer;
	// Troque "mapa" pelo nome do mapa que deseja invocar os chefes (mantenha as aspas)
	// Se não quiser que os chefes spawnem aleatoriamente pelo mapa, troque 0,0 por outras coordenadas
	monster "mapa",0,0,.@MvP_Name$[.@MvP_Index],.@MvP_ID[.@MvP_Index],1;
	end;
	
OnTimer60000:
	stopnpctimer;
	// Avisa o player sobre o fim do timer
	dispbottom "Um minuto já se passou. Agora você pode invocar mais chefes.";
	detachnpctimer;
	end;
	
Invalid_Input:
	mes .@NPC_Name$;
	mes "Parece que você não digitou um número válido. Por favor, digite apenas um número que esteja entre 1 e 49, tudo bem?";
	next;
	goto Choose_MvP;
	
End_Talk:
	mes .@NPC_Name$;
	mes "Tudo bem. Se precisar invocar chefes, é só me procurar.";
	close;
}

 

Editado por Qwezatch

Compartilhar este post


Link para o post
Compartilhar em outros sites
  • 0

Bom, há várias formas de resolver isso, algumas bem simples, outras mais complexas...

Por exemplo, as vezes o simples fato de você adicionar uma cobrança de zeny razoável para invocar MvPs poderias ser suficiente para acabar com esse spam idiota dos players, dependendo apenas de como anda a economia no seu servidor.

Alternativamente, você poderia limitar as invocações dos players à um número X usando apenas variáveis e comandos de condições como if. Não sei se é possível criar um timer para resetar como você idealizou inicialmente, porém acredito que uma saída razoável seria resetar a variável usando aquelas labels que ativam em certos horários.

Não posso fazer o script agora, mas se até de noite não houver respostas por aqui, tentarei sim.

Compartilhar este post


Link para o post
Compartilhar em outros sites
  • 0
16 horas atrás, Artur Barbosa disse:

Boa tarde pessoal, estou usando um mvp room e estou tendo problemas com alguns jogadores, eles lotam a sala de mvp e saem atrapalhando os demais, alguém pode me ajudar com alguma ideia para impedir isso? nem que seja um time ou limite de invocação para cada jogador, ou uma checagem no mapa do mvp rom que dê um @killmonster assim que não estiver ninguém no mapa, se alguém poder me ajudar ficarei muito grato.

MVP ROOM utilizado

@edit

Tentei criar um npc de checagem porém não obtive sucesso, alguém me auxilia? 

(Não entendo nada de script)
 

 

Tente usar o Cheffenia, é melhor, porque para entrar você cobra um tal item, ai o player vai ter que dar tal item para entrar, seria igual a Cheffenia do BRO com as 4 salas e talz, caso queira eu posso disponibilizar, tenho ele sem bug e traduzido.

Compartilhar este post


Link para o post
Compartilhar em outros sites
  • 0
6 horas atrás, Qwezatch disse:

Bom, há várias formas de resolver isso, algumas bem simples, outras mais complexas...

Por exemplo, as vezes o simples fato de você adicionar uma cobrança de zeny razoável para invocar MvPs poderias ser suficiente para acabar com esse spam idiota dos players, dependendo apenas de como anda a economia no seu servidor.

Alternativamente, você poderia limitar as invocações dos players à um número X usando apenas variáveis e comandos de condições como if. Não sei se é possível criar um timer para resetar como você idealizou inicialmente, porém acredito que uma saída razoável seria resetar a variável usando aquelas labels que ativam em certos horários.

Não posso fazer o script agora, mas se até de noite não houver respostas por aqui, tentarei sim.

Boa tarde, sobre a cobrança de zeny ao invocar provavelmente pode ou nao resolver o problema, pois tem gold room no servidor.

Agora sobre o limite de invocação como funcionaria? 

Uma invocação a cada x tempo? Se for ficaria ótimo também por cada player.

6 horas atrás, Suicune disse:

Tente usar o Cheffenia, é melhor, porque para entrar você cobra um tal item, ai o player vai ter que dar tal item para entrar, seria igual a Cheffenia do BRO com as 4 salas e talz, caso queira eu posso disponibilizar, tenho ele sem bug e traduzido.

Boa tarde, meu servidor é full pvp, eu acho uma sala cobrando x item não cairia muito bem, porém caso eu não conseguir acabar com esse spam eu vou aceitar sim, ai planejo alguma coisa com esse item requirido. Obrigado.

Compartilhar este post


Link para o post
Compartilhar em outros sites
  • 0
10 minutos atrás, Artur Barbosa disse:

Boa tarde, meu servidor é full pvp, eu acho uma sala cobrando x item não cairia muito bem, porém caso eu não conseguir acabar com esse spam eu vou aceitar sim, ai planejo alguma coisa com esse item requirido. Obrigado.

Mas Cheffenia tem opção de não cobrar nada só zeny mesmo.

Compartilhar este post


Link para o post
Compartilhar em outros sites
  • 0
7 horas atrás, Artur Barbosa disse:

Boa tarde, sobre a cobrança de zeny ao invocar provavelmente pode ou nao resolver o problema, pois tem gold room no servidor.

Agora sobre o limite de invocação como funcionaria? 

 Uma invocação a cada x tempo? Se for ficaria ótimo também por cada player.

Boa tarde, meu servidor é full pvp, eu acho uma sala cobrando x item não cairia muito bem, porém caso eu não conseguir acabar com esse spam eu vou aceitar sim, ai planejo alguma coisa com esse item requirido. Obrigado.

Eu pensei em algo do tipo: ao invocar um MvP, o npc usaria uma variável permanente de personagem (ou de conta, se preferir) para fazer a contagem de quantos já foram invocados. No começo do script colocaria um check para barrar os players após essa variável alcançar um determinado valor, e de tempos em tempos essa variável seria resetada usando aquelas labels que ativam em determinadas horas do dia.

Assim, seria possível, por exemplo, proibir que um player invoque mais de 5 MvPs por hora, etc...

 

Edit:

Bom, estava aqui tentando fazer o que disse mais cedo, porém acabei de me tocar que não me parece possível mexer no valor de uma variável permanente de player usando labels, uma vez que elas não possuem um RID para usar como referência... Talvez eu esteja errado, deixo a critério de um scripter mais experiente elucidar-nos a respeito disso.

Por enquanto, podemos pensar em outras formas de resolver o problema. Uma solução seria reformular um pouco o NPC e usar aquele parâmetro de event label dos monstros para limitar o número de MvPs que um player pode invocar. Dessa forma, eles só conseguiriam invocar mais após matar os que eles invocaram antes...

Outra solução seria usar um item, como algo ganho em eventos automáticos, para servir como  "crédito". Dessa forma os players trocariam esse item por um número x de invocações.

Editado por Qwezatch

Compartilhar este post


Link para o post
Compartilhar em outros sites
  • 0
Em 01/11/2018 at 15:53, Suicune disse:

Mas Cheffenia tem opção de não cobrar nada só zeny mesmo.

Vou aceitar sua ajuda Suicune, se possível você me passa o script que voce me indicou?

Em 01/11/2018 at 16:25, Qwezatch disse:

Eu pensei em algo do tipo: ao invocar um MvP, o npc usaria uma variável permanente de personagem (ou de conta, se preferir) para fazer a contagem de quantos já foram invocados. No começo do script colocaria um check para barrar os players após essa variável alcançar um determinado valor, e de tempos em tempos essa variável seria resetada usando aquelas labels que ativam em determinadas horas do dia.

Assim, seria possível, por exemplo, proibir que um player invoque mais de 5 MvPs por hora, etc...

 

Edit:

Bom, estava aqui tentando fazer o que disse mais cedo, porém acabei de me tocar que não me parece possível mexer no valor de uma variável permanente de player usando labels, uma vez que elas não possuem um RID para usar como referência... Talvez eu esteja errado, deixo a critério de um scripter mais experiente elucidar-nos a respeito disso.

Por enquanto, podemos pensar em outras formas de resolver o problema. Uma solução seria reformular um pouco o NPC e usar aquele parâmetro de event label dos monstros para limitar o número de MvPs que um player pode invocar. Dessa forma, eles só conseguiriam invocar mais após matar os que eles invocaram antes...

Outra solução seria usar um item, como algo ganho em eventos automáticos, para servir como  "crédito". Dessa forma os players trocariam esse item por um número x de invocações.

Entendi, vai ser meio complicado pelo visto, porém se fosse possível invocar mais monstros só  quando o jogador matace o Mvp que ele invocou é o ponto que eu queria chegar, só que eu imaginei a checagem no mapa, assim que o player sair automaticamente daria um killmonster, mas sua ideia sim resolveria o problema, acabaria o spam do mvp.

Compartilhar este post


Link para o post
Compartilhar em outros sites
  • 0
3 horas atrás, Artur Barbosa disse:

Vou aceitar sua ajuda Suicune, se possível você me passa o script que voce me indicou?

Entendi, vai ser meio complicado pelo visto, porém se fosse possível invocar mais monstros só  quando o jogador matace o Mvp que ele invocou é o ponto que eu queria chegar, só que eu imaginei a checagem no mapa, assim que o player sair automaticamente daria um killmonster, mas sua ideia sim resolveria o problema, acabaria o spam do mvp.

Bom, é possível sim fazer com que um player só consiga invocar um MvP após matar o que ele invocou, o problema é que o monstro invocado não "sabe diferenciar" quem o invocou, logo, em uma sala MvP aberta onde qualquer um pode matar o monstro do outro, players poderiam ter seus monstros mortos por outras pessoas, e aí eles teriam que matar o mvp de outra pessoa para resetar a contagem deles... uma bagunça! Até consigo pensar em algumas soluções para isso, mas me incomoda um pouco pois são um pouco "gambiarra" de mais para o meu gosto.

Sei que não é o ideal, mas se você quiser, pode adicionar esse script aqui no seu NPC. Ele serve para matar todos os monstros do mapa sempre que os minutos do servidor chegarem em 30, ou seja, de hora em hora... Não é o ideal, mas pelo menos deve impedir que a sala fique abarrotada toda hora. (Não cheguei a testar, mas deve funcionar certinho)

OnMinute30:
	killmonster "rwc03","All";
	//atcommand "@killmonster"; // Se o seu emulador não suportar o comando acima, use esse atcommand mesmo
	atcommand "@cleanmap";
	end;

 

Editado por Qwezatch

Compartilhar este post


Link para o post
Compartilhar em outros sites
  • 0
7 horas atrás, Qwezatch disse:

Bom, é possível sim fazer com que um player só consiga invocar um MvP após matar o que ele invocou, o problema é que o monstro invocado não "sabe diferenciar" quem o invocou, logo, em uma sala MvP aberta onde qualquer um pode matar o monstro do outro, players poderiam ter seus monstros mortos por outras pessoas, e aí eles teriam que matar o mvp de outra pessoa para resetar a contagem deles... uma bagunça! Até consigo pensar em algumas soluções para isso, mas me incomoda um pouco pois são um pouco "gambiarra" de mais para o meu gosto.

Sei que não é o ideal, mas se você quiser, pode adicionar esse script aqui no seu NPC. Ele serve para matar todos os monstros do mapa sempre que os minutos do servidor chegarem em 30, ou seja, de hora em hora... Não é o ideal, mas pelo menos deve impedir que a sala fique abarrotada toda hora. (Não cheguei a testar, mas deve funcionar certinho)


OnMinute30:
	killmonster "rwc03","All";
	//atcommand "@killmonster"; // Se o seu emulador não suportar o comando acima, use esse atcommand mesmo
	atcommand "@cleanmap";
	end;

 

Tá ótimo, vou testar e te dou uma resposta, e com certeza irá acabar meu problema.

 

@Edit

Testei, não deu nenhum erro no mapserver porém não deu kill no MvP, testei com atcommand também. pode ser o local que eu adicionei a função?

ops:
mes "[Invocador de MVP]";
mes "Lamento, mas só posso invocar até 1 monstros.";
close;

OnMinute30:
	//killmonster "rwc03","All";
	atcommand "@killmonster"; 	
	atcommand "@cleanmap";
	end;
}
 

Coloquei no final do script criador.

Editado por Artur Barbosa

Compartilhar este post


Link para o post
Compartilhar em outros sites
  • 0
Em 04/11/2018 at 02:09, Qwezatch disse:

Edit:

Bom dia, meu amigo. Passei a noite fuçando aqui no computador e acabei escrevendo um invocador de MvPs com limite de 1 minuto entre as invocações (finalmente aprendi a usar timers direito). Poderia testar para ver se funciona no seu emulador? No meu está tudo certo.


//==============================================================
//   ____                                    _            _     
//  / __ \                                  | |          | |    
// | |  | | __      __   ___   ____   __ _  | |_    ___  | |__  
// | |  | | \ \ /\ / /  / _ \ |_  /  / _` | | __|  / __| | '_ \ 
// | |__| |  \ V  V /  |  __/  / /  | (_| | | |_  | (__  | | | |
//  \___\_\   \_/\_/    \___| /___|  \__,_|  \__|  \___| |_| |_|
//                                                              
//===== Nome ===================================================
//= Aedan, o Invocador de Chefes
//===== Descrição ==============================================
//= Invocador de chefes bem simples. Seleciona monstros usando
//= números como referência e os invoca em uma coordenada
//= aleatória do mapa. Apenas um chefe pode ser invocado por
//= minuto, para evitar spam. Se o player deslogar antes do fim
//= do timer, o NPC resetará o timer para que o player não fique
//= preso em um trecho do código.
//==============================================================
mapa,x,y,4	script	Aedan	855,{
	set .@NPC_Name$,"^4CAF50[ Aedan ]^000000";
	// Armazena "ID" dos MvPs em uma array para gerar a array de nomes e usar no comando monster
	setarray .@MvP_ID[1],1059,1647,1511,1651,1650,1785,1039,1873,1871,1086,1251,1389,1719,1731,1112,1115,1658,1157,1150,1159,1312,1885,1252,1832,1734,1779,1518,1688,1991,1646,1990,1147,1708,1648,1917,1956,1087,1038,1768,1623,1492,1373,1418,2022,1649,1583,1190,1751,1685;
	
	// Essa condição serve para evitar que players usem o NPC antes de um minuto se passar.
	if(getnpctimer(1) == 1){
		mes .@NPC_Name$;
		mes "Eu só posso invocar apenas um chefe por minuto. Por favor, espere um pouco mais.";
		close;
	}
	if(Aedan_First_Talk == 0){
		set Aedan_First_Talk,1;
		mes .@NPC_Name$;
		mes "Olá, meu nome é Aedan. Se quiser, posso invocar um dos chefes do jogo para você. Estaria interessado?";
	} else {
		mes .@NPC_Name$;
		mes "Oh! Você por aqui novamente? Tudo bem, aposto que quer invocar mais alguns chefes, certo?";
	}
	next;
	if(select("Sim:Não") == 2) goto End_Talk;
	
Choose_MvP:
	mes .@NPC_Name$;
	mes "Escolha um dos chefes na lista abaixo. Para invocá-lo, digite o número correspondente na caixa que irá aparecer a seguir.";
	mes " ";
	// Gera uma array com o nome dos chefes e em seguida mostra-os em uma lista
	for (set .@i,1; .@i < getarraysize(.@MvP_ID); set .@i,.@i+1){
		setarray .@MvP_Name$[.@i],strmobinfo(1,.@MvP_ID[.@i]);
		mes "^E53935"+.@i+".^000000 "+.@MvP_Name$[.@i];
	}
	next;
	if(select("Digitar:Cancelar") == 2) goto End_Talk;
	input .@MvP_Index;
	if(.@MvP_Index < 1 || .@MvP_Index > getarraysize(.@MvP_ID)-1) goto Invalid_Input;
	mes .@NPC_Name$;
	mes "Se prepare, "+.@MvP_Name$[.@MvP_Index]+" será invocado em instantes.";
	close2;
	attachnpctimer;
	initnpctimer;
	// Troque "mapa" pelo nome do mapa que deseja invocar os chefes (mantenha as aspas)
	// Se não quiser que os chefes spawnem aleatoriamente pelo mapa, troque 0,0 por outras coordenadas
	monster "mapa",0,0,.@MvP_Name$[.@MvP_Index],.@MvP_ID[.@MvP_Index],1;
	end;
	
OnTimer60000:
	stopnpctimer;
	// Avisa o player sobre o fim do timer
	dispbottom "Um minuto já se passou. Agora você pode invocar mais chefes.";
	detachnpctimer;
	end;
	
Invalid_Input:
	mes .@NPC_Name$;
	mes "Parece que você não digitou um número válido. Por favor, digite apenas um número que esteja entre 1 e 49, tudo bem?";
	next;
	goto Choose_MvP;
	
End_Talk:
	mes .@NPC_Name$;
	mes "Tudo bem. Se precisar invocar chefes, é só me procurar.";
	close;
}

 

@edit 

Funcionou perfeitamente, todas as funções! 

Obrigado meu bom!

Em 03/11/2018 at 13:47, Suicune disse:

Segue o Link: https://pastebin.com/raw/YLUBrvcv

Onde está 7227 (que seria o Ticket Cheffenia) eu coloquei >0, para não cobrar, então o player pode entrar sem que tenha que pagar nada.

Obrigado por disponibilizar, eu salvei ele aqui, porém o Qwezatch conseguiu fazer um script no jeito pra nós!

Agradecido!

Podem fechar o tópico!

Editado por Artur Barbosa

Compartilhar este post


Link para o post
Compartilhar em outros sites
  • 0
16 minutos atrás, Lasgo13 disse:

...

evite comentários vazios ou algo com intuito de 'up'.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


Seja bem vindo ao Cronus-Emulator.
É sempre um prazer te-lo conosco.
Você pode visualizar nossas áreas de suporte para encontrar suas soluções sem a necessidade de se registrar!
Registrando em nossa comunidade, você poderá conhecer mais sobre nosso projeto, criar tópicos, responder tópicos existentes, baixar milhares de recursos em nosso sistema de downloads, participar de nossa comunidade, customizar seu perfil e muito mais... Se você já possui uma conta, faça seu login - ou crie uma conta. Também temos integração com Google+ e Facebook.

×
×
  • Criar Novo...