combat arena error

Tio Akima

New member
Messages
349
Points
0
Age
36
Discord
TioAkima#0636
Github
Tio Akima
Emulator
guys, someone help me fix this script

it is not working properly.

sometimes he announces as a winner the player who is dead

gives the prize to the wrong player ... etc

https://pastebin.com/eFv2B5QX

this is a combat arena where the last to survive is the winner.

 
guys, someone help me fix this script

it is not working properly.

sometimes he announces as a winner the player who is dead

gives the prize to the wrong player ... etc

https://pastebin.com/eFv2B5QX

this is a combat arena where the last to survive is the winner.
Not tested, but I think now is working fine.

Code:
//===== Arena de Combate ==========================================

kame_house,196,151,3	script	[RR] Tenente	4_EP16_STOLZ,{

	mes $npc$;
	mes "Olá "+strcharinfo(0)+"!";
	mes "Deseja entrar na Arena de Combate da Destruição?";
	next;
	
switch(select("Entrar:Informações:Não, obrigado")){

	case 1:
		mes $npc$;
		if($aberto == 1) goto entrar;
		if($aberto == 0) mes "As porta para a Arena de Combate estão fechadas. Evento abre a cada 3 horas...";
		close;
		end;
	case 2:
		mes $npc$;
		mes "Na Arena de Combate nós testaremos sua força.";
		mes "Você ira para uma arena onde terá uma guerra, o ultimo(a) player sobrevivente será o vencedor.";
		mes "Lembrando que, não é fácil. Por isso, prepare-se bem.";
		mes "Não será permitido o uso de poções e iteus consumiveis que abram vantagens.";
		mes "Caso você sejá o ultimo sobrevivente da Arena de Combate, você será recompensado!";
		close;
	case 3: 
		close;
end;

}


OnArenaEvnt: if($aberto == 0){ donpcevent strnpcinfo(0)+"::OnArenaEvnt2"; } else { dispbottom "Evento Cancelado!"; donpcevent strnpcinfo(0)+"::OnArenaEvntOff"; } end;


//======================================================= init config's
OnInit:
	
	$npc$ = "[ ^FF0000Red Rebbon^000000 ] ^9400D3 Tenente^000000 ";	//nome npc

	bindatcmd "goarena",strnpcinfo(0)+"::OnArenaEvnt",99;

	waitingroom "Arena da Destruição",0;
	
	$@MaxMin = 1;						// Minutos max pro jogador entrar na arena
	
	$@award = 1002;					//id award

end;
//======================================================= end init


entrar:
	announce "O jogador ["+strcharinfo(0)+"] entrou na Arena da Destruição!",bc_all;
	percentheal 100,100;
	warp "fight_05",0,0;
end;


OnArenaEvnt2:		// Abre-Inicia  A ARENA

	announce "[Arena de Combate] Arena da Destruição está ABERTA!",0;
	set $aberto,1;	//evento aberto para os player entrar
	set $arenaon,1;
	pvpoff "fight_05";

	for(.@i = $@MaxMin; .@i  > 0; .@i--)
	{
		announce "Arena da Desrtuição começará em " + .@i + " minutos!", 0;
		sleep 60000;
	}

	announce "[Arena de Combate] Arena da Destruição COMEÇOU!",0;
	
	//fecha o evento para não entrar mais ninguem
	set $aberto,0;
	
	//liga o pvp
	pvpon "fight_05";
	
	
	set $@qnton,getmapusers("fight_05"); //pega a quantidade de usuarios que tem no mapa

	if($@qnton < 2){
	
		announce "[Arena de Combate] Arena da Destruição foi encerrada por falta de lutadores!",bc_all;
		donpcevent strnpcinfo(0)+"::OnArenaEvntOff";

	}
	
end;


OnPCDieEvent:

	getmapxy(.@mapa$,.@xi,.@yi,0);
	
	if($arenaon){
	
		if(strcharinfo(3) == "fight_05" ) {
			announce "[Arena da Destruição]: "+strcharinfo(0)+" foi derrotado!",bc_all;
			$@qnton--;
			sleep2 2000;
			warp "kame_house",174,177;
		}
		
		if(.@mapa$ == "fight_05"){
			
			if($@qnton < 1){
				announce "Arena da Destruição: Ninguém ganhou a Arena de Combate!",bc_all;
				donpcevent strnpcinfo(0)+"::OnArenaEvntOff";
				end;
			}
				
			if($@qnton == 2){
				announce "[Arena da Destruição]: O grande momento chegou! Restam apenas 2 guerreiros na ARENA! Quem irá vencer?",bc_all;
				end;
			}

			if($@qnton == 1)
			{
				if (isloggedin(killerrid))
				{
					if (attachrid(killerrid))
					{
						donpcevent strnpcinfo(0)+"::OnArenaPremio";
						end;
					}
					else
					{
						donpcevent strnpcinfo(0)+"::OnArenaEvntOff";
						end;
					}
				}
				else
				{
					donpcevent strnpcinfo(0)+"::OnArenaEvntOff";
					end;
				}
			}
		}
	}
	
end;

OnArenaEvntOff:

	//fecha o evento
	set $arenaon,0;
	set $aberto,0;
	
	//desliga o pvp
	pvpoff "fight_05";

	announce "[Arena da Destruição] Arena finalizada!", 0;
	mapwarp "fight_05","kame_house",174,177;

end;


OnArenaPremio:
	
	announce "[Arena da Destruição]: ACABOU! O ganhador da Arena da Destruição foi " + strcharinfo(0) + "!",bc_all;
	sleep2 2000;
	mapannounce "fight_05", "Parabéns! Você é o grande vencedor!", 0;
	
	getitem $@award;	//entrega o premio
	
	sleep2 1000;
	donpcevent strnpcinfo(0)+"::OnArenaEvntOff";	//closed event

end;



}






////////////////////////////////////////

fight_05	mapflag	nowarp
fight_05	mapflag	nowarpto
fight_05	mapflag	noteleport
fight_05	mapflag	nosave	SavePoint
fight_05	mapflag	nomemo
fight_05	mapflag	nobranch
fight_05	mapflag	nopenalty
fight_05	mapflag	nostorage
fight_05	mapflag	pvp_noparty
fight_05	mapflag	pvp_noguild

////////////////////////////////////////

 
Not tested, but I think now is working fine.

//===== Arena de Combate ==========================================

kame_house,196,151,3 script [RR] Tenente 4_EP16_STOLZ,{

mes $npc$;
mes "Olá "+strcharinfo(0)+"!";
mes "Deseja entrar na Arena de Combate da Destruição?";
next;

switch(select("Entrar:Informações:Não, obrigado")){

case 1:
mes $npc$;
if($aberto == 1) goto entrar;
if($aberto == 0) mes "As porta para a Arena de Combate estão fechadas. Evento abre a cada 3 horas...";
close;
end;
case 2:
mes $npc$;
mes "Na Arena de Combate nós testaremos sua força.";
mes "Você ira para uma arena onde terá uma guerra, o ultimo(a) player sobrevivente será o vencedor.";
mes "Lembrando que, não é fácil. Por isso, prepare-se bem.";
mes "Não será permitido o uso de poções e iteus consumiveis que abram vantagens.";
mes "Caso você sejá o ultimo sobrevivente da Arena de Combate, você será recompensado!";
close;
case 3:
close;
end;

}


OnArenaEvnt: if($aberto == 0){ donpcevent strnpcinfo(0)+"::OnArenaEvnt2"; } else { dispbottom "Evento Cancelado!"; donpcevent strnpcinfo(0)+"::OnArenaEvntOff"; } end;


//======================================================= init config's
OnInit:

$npc$ = "[ ^FF0000Red Rebbon^000000 ] ^9400D3 Tenente^000000 "; //nome npc

bindatcmd "goarena",strnpcinfo(0)+"::OnArenaEvnt",99;

waitingroom "Arena da Destruição",0;

$@MaxMin = 1; // Minutos max pro jogador entrar na arena

$@award = 1002; //id award

end;
//======================================================= end init


entrar:
announce "O jogador ["+strcharinfo(0)+"] entrou na Arena da Destruição!",bc_all;
percentheal 100,100;
warp "fight_05",0,0;
end;


OnArenaEvnt2: // Abre-Inicia A ARENA

announce "[Arena de Combate] Arena da Destruição está ABERTA!",0;
set $aberto,1; //evento aberto para os player entrar
set $arenaon,1;
pvpoff "fight_05";

for(.@i = $@MaxMin; .@i > 0; .@i--)
{
announce "Arena da Desrtuição começará em " + .@i + " minutos!", 0;
sleep 60000;
}

announce "[Arena de Combate] Arena da Destruição COMEÇOU!",0;

//fecha o evento para não entrar mais ninguem
set $aberto,0;

//liga o pvp
pvpon "fight_05";


set $@qnton,getmapusers("fight_05"); //pega a quantidade de usuarios que tem no mapa

if($@qnton < 2){

announce "[Arena de Combate] Arena da Destruição foi encerrada por falta de lutadores!",bc_all;
donpcevent strnpcinfo(0)+"::OnArenaEvntOff";

}

end;


OnPCDieEvent:

getmapxy(.@mapa$,.@xi,.@yi,0);

if($arenaon){

if(strcharinfo(3) == "fight_05" ) {
announce "[Arena da Destruição]: "+strcharinfo(0)+" foi derrotado!",bc_all;
$@qnton--;
sleep2 2000;
warp "kame_house",174,177;
}

if(.@mapa$ == "fight_05"){

if($@qnton < 1){
announce "Arena da Destruição: Ninguém ganhou a Arena de Combate!",bc_all;
donpcevent strnpcinfo(0)+"::OnArenaEvntOff";
end;
}

if($@qnton == 2){
announce "[Arena da Destruição]: O grande momento chegou! Restam apenas 2 guerreiros na ARENA! Quem irá vencer?",bc_all;
end;
}

if($@qnton == 1)
{
if (isloggedin(killerrid))
{
if (attachrid(killerrid))
{
donpcevent strnpcinfo(0)+"::OnArenaPremio";
end;
}
else
{
donpcevent strnpcinfo(0)+"::OnArenaEvntOff";
end;
}
}
else
{
donpcevent strnpcinfo(0)+"::OnArenaEvntOff";
end;
}
}
}
}

end;

OnArenaEvntOff:

//fecha o evento
set $arenaon,0;
set $aberto,0;

//desliga o pvp
pvpoff "fight_05";

announce "[Arena da Destruição] Arena finalizada!", 0;
mapwarp "fight_05","kame_house",174,177;

end;


OnArenaPremio:

announce "[Arena da Destruição]: ACABOU! O ganhador da Arena da Destruição foi " + strcharinfo(0) + "!",bc_all;
sleep2 2000;
mapannounce "fight_05", "Parabéns! Você é o grande vencedor!", 0;

getitem $@award; //entrega o premio

sleep2 1000;
donpcevent strnpcinfo(0)+"::OnArenaEvntOff"; //closed event

end;



}






////////////////////////////////////////

fight_05 mapflag nowarp
fight_05 mapflag nowarpto
fight_05 mapflag noteleport
fight_05 mapflag nosave SavePoint
fight_05 mapflag nomemo
fight_05 mapflag nobranch
fight_05 mapflag nopenalty
fight_05 mapflag nostorage
fight_05 mapflag pvp_noparty
fight_05 mapflag pvp_noguild

////////////////////////////////////////

//===== Arena de Combate ==========================================

kame_house,196,151,3 script [RR] Tenente 4_EP16_STOLZ,{

mes $npc$;
mes "Olá "+strcharinfo(0)+"!";
mes "Deseja entrar na Arena de Combate da Destruição?";
next;

switch(select("Entrar:Informações:Não, obrigado")){

case 1:
mes $npc$;
if($aberto == 1) goto entrar;
if($aberto == 0) mes "As porta para a Arena de Combate estão fechadas. Evento abre a cada 3 horas...";
close;
end;
case 2:
mes $npc$;
mes "Na Arena de Combate nós testaremos sua força.";
mes "Você ira para uma arena onde terá uma guerra, o ultimo(a) player sobrevivente será o vencedor.";
mes "Lembrando que, não é fácil. Por isso, prepare-se bem.";
mes "Não será permitido o uso de poções e iteus consumiveis que abram vantagens.";
mes "Caso você sejá o ultimo sobrevivente da Arena de Combate, você será recompensado!";
close;
case 3:
close;
end;

}


OnArenaEvnt: if($aberto == 0){ donpcevent strnpcinfo(0)+"::OnArenaEvnt2"; } else { dispbottom "Evento Cancelado!"; donpcevent strnpcinfo(0)+"::OnArenaEvntOff"; } end;


//======================================================= init config's
OnInit:

$npc$ = "[ ^FF0000Red Rebbon^000000 ] ^9400D3 Tenente^000000 "; //nome npc

bindatcmd "goarena",strnpcinfo(0)+"::OnArenaEvnt",99;

waitingroom "Arena da Destruição",0;

$@MaxMin = 1; // Minutos max pro jogador entrar na arena

$@award = 1002; //id award

end;
//======================================================= end init


entrar:
announce "O jogador ["+strcharinfo(0)+"] entrou na Arena da Destruição!",bc_all;
percentheal 100,100;
warp "fight_05",0,0;
end;


OnArenaEvnt2: // Abre-Inicia A ARENA

announce "[Arena de Combate] Arena da Destruição está ABERTA!",0;
set $aberto,1; //evento aberto para os player entrar
set $arenaon,1;
pvpoff "fight_05";

for(.@i = $@MaxMin; .@i > 0; .@i--)
{
announce "Arena da Desrtuição começará em " + .@i + " minutos!", 0;
sleep 60000;
}

announce "[Arena de Combate] Arena da Destruição COMEÇOU!",0;

//fecha o evento para não entrar mais ninguem
set $aberto,0;

//liga o pvp
pvpon "fight_05";


set $@qnton,getmapusers("fight_05"); //pega a quantidade de usuarios que tem no mapa

if($@qnton < 2){

announce "[Arena de Combate] Arena da Destruição foi encerrada por falta de lutadores!",bc_all;
donpcevent strnpcinfo(0)+"::OnArenaEvntOff";

}

end;


OnPCDieEvent:

getmapxy(.@mapa$,.@xi,.@yi,0);

if($arenaon){

if(strcharinfo(3) == "fight_05" ) {
announce "[Arena da Destruição]: "+strcharinfo(0)+" foi derrotado!",bc_all;
$@qnton--;
sleep2 2000;
warp "kame_house",174,177;
}

if(.@mapa$ == "fight_05"){

if($@qnton < 1){
announce "Arena da Destruição: Ninguém ganhou a Arena de Combate!",bc_all;
donpcevent strnpcinfo(0)+"::OnArenaEvntOff";
end;
}

if($@qnton == 2){
announce "[Arena da Destruição]: O grande momento chegou! Restam apenas 2 guerreiros na ARENA! Quem irá vencer?",bc_all;
end;
}

if($@qnton == 1)
{
if (isloggedin(killerrid))
{
if (attachrid(killerrid))
{
donpcevent strnpcinfo(0)+"::OnArenaPremio";
end;
}
else
{
donpcevent strnpcinfo(0)+"::OnArenaEvntOff";
end;
}
}
else
{
donpcevent strnpcinfo(0)+"::OnArenaEvntOff";
end;
}
}
}
}

end;

OnArenaEvntOff:

//fecha o evento
set $arenaon,0;
set $aberto,0;

//desliga o pvp
pvpoff "fight_05";

announce "[Arena da Destruição] Arena finalizada!", 0;
mapwarp "fight_05","kame_house",174,177;

end;


OnArenaPremio:

announce "[Arena da Destruição]: ACABOU! O ganhador da Arena da Destruição foi " + strcharinfo(0) + "!",bc_all;
sleep2 2000;
mapannounce "fight_05", "Parabéns! Você é o grande vencedor!", 0;

getitem $@award; //entrega o premio

sleep2 1000;
donpcevent strnpcinfo(0)+"::OnArenaEvntOff"; //closed event

end;



}






////////////////////////////////////////

fight_05 mapflag nowarp
fight_05 mapflag nowarpto
fight_05 mapflag noteleport
fight_05 mapflag nosave SavePoint
fight_05 mapflag nomemo
fight_05 mapflag nobranch
fight_05 mapflag nopenalty
fight_05 mapflag nostorage
fight_05 mapflag pvp_noparty
fight_05 mapflag pvp_noguild

////////////////////////////////////////



hi Cretino, Thanks for the answer..
I did a test with two fighters ... And when one of them dies, the prize label is not triggered.
the console error

[Error]: script_rid2sd: fatal error ! player not attached!
[Debug]: Function: strcharinfo (1 parameter):
[Debug]: Data: number value=0

 
hi Cretino, Thanks for the answer..
I did a test with two fighters ... And when one of them dies, the prize label is not triggered.
the console error

[Error]: script_rid2sd: fatal error ! player not attached!
[Debug]: Function: strcharinfo (1 parameter):
[Debug]: Data: number value=0
I made a little mistake, now is tested and working:

Code:
//===== Arena de Combate ==========================================

kame_house,196,151,3	script	[RR] Tenente	4_EP16_STOLZ,{

	mes $npc$;
	mes "Olá "+strcharinfo(0)+"!";
	mes "Deseja entrar na Arena de Combate da Destruição?";
	next;
	
switch(select("Entrar:Informações:Não, obrigado")){

	case 1:
		mes $npc$;
		if($aberto == 1) goto entrar;
		if($aberto == 0) mes "As porta para a Arena de Combate estão fechadas. Evento abre a cada 3 horas...";
		close;
		end;
	case 2:
		mes $npc$;
		mes "Na Arena de Combate nós testaremos sua força.";
		mes "Você ira para uma arena onde terá uma guerra, o ultimo(a) player sobrevivente será o vencedor.";
		mes "Lembrando que, não é fácil. Por isso, prepare-se bem.";
		mes "Não será permitido o uso de poções e iteus consumiveis que abram vantagens.";
		mes "Caso você sejá o ultimo sobrevivente da Arena de Combate, você será recompensado!";
		close;
	case 3: 
		close;
end;

}


OnArenaEvnt: if($aberto == 0){ donpcevent strnpcinfo(0)+"::OnArenaEvnt2"; } else { dispbottom "Evento Cancelado!"; donpcevent strnpcinfo(0)+"::OnArenaEvntOff"; } end;


//======================================================= init config's
OnInit:
	
	$npc$ = "[ ^FF0000Red Rebbon^000000 ] ^9400D3 Tenente^000000 ";	//nome npc

	bindatcmd "goarena",strnpcinfo(0)+"::OnArenaEvnt",99;

	waitingroom "Arena da Destruição",0;
	
	$@MaxMin = 1;						// Minutos max pro jogador entrar na arena
	
	$@award = 1002;					//id award

end;
//======================================================= end init


entrar:
	announce "O jogador ["+strcharinfo(0)+"] entrou na Arena da Destruição!",bc_all;
	percentheal 100,100;
	warp "fight_05",0,0;
end;


OnArenaEvnt2:		// Abre-Inicia  A ARENA

	announce "[Arena de Combate] Arena da Destruição está ABERTA!",0;
	set $aberto,1;	//evento aberto para os player entrar
	set $arenaon,1;
	pvpoff "fight_05";

	for(.@i = $@MaxMin; .@i  > 0; .@i--)
	{
		announce "Arena da Desrtuição começará em " + .@i + " minutos!", 0;
		sleep 60000;
	}

	announce "[Arena de Combate] Arena da Destruição COMEÇOU!",0;
	
	//fecha o evento para não entrar mais ninguem
	set $aberto,0;
	
	//liga o pvp
	pvpon "fight_05";
	
	
	set $@qnton,getmapusers("fight_05"); //pega a quantidade de usuarios que tem no mapa

	if($@qnton < 2){
	
		announce "[Arena de Combate] Arena da Destruição foi encerrada por falta de lutadores!",bc_all;
		donpcevent strnpcinfo(0)+"::OnArenaEvntOff";

	}
	
end;


OnPCDieEvent:

	getmapxy(.@mapa$,.@xi,.@yi,0);
	
	if($arenaon){
	
		if(strcharinfo(3) == "fight_05" ) {
			announce "[Arena da Destruição]: "+strcharinfo(0)+" foi derrotado!",bc_all;
			$@qnton--;
			sleep2 2000;
			warp "kame_house",174,177;
		}
		
		if(.@mapa$ == "fight_05"){
			
			if($@qnton < 1){
				announce "Arena da Destruição: Ninguém ganhou a Arena de Combate!",bc_all;
				donpcevent strnpcinfo(0)+"::OnArenaEvntOff";
				end;
			}
				
			if($@qnton == 2){
				announce "[Arena da Destruição]: O grande momento chegou! Restam apenas 2 guerreiros na ARENA! Quem irá vencer?",bc_all;
				end;
			}

			if($@qnton == 1)
			{
				if (isloggedin(killerrid))
				{
					if (attachrid(killerrid))
					{
						doevent strnpcinfo(0)+"::OnArenaPremio";
						end;
					}
					else
					{
						donpcevent strnpcinfo(0)+"::OnArenaEvntOff";
						end;
					}
				}
				else
				{
					donpcevent strnpcinfo(0)+"::OnArenaEvntOff";
					end;
				}
			}
		}
	}
	
end;

OnArenaEvntOff:

	//fecha o evento
	set $arenaon,0;
	set $aberto,0;
	
	//desliga o pvp
	pvpoff "fight_05";

	announce "[Arena da Destruição] Arena finalizada!", 0;
	mapwarp "fight_05","kame_house",174,177;

end;

OnArenaPremio:
	
	announce "[Arena da Destruição]: ACABOU! O ganhador da Arena da Destruição foi " + strcharinfo(0) + "!",bc_all;
	sleep2 2000;
	mapannounce "fight_05", "Parabéns! Você é o grande vencedor!", 0;
	
	getitem $@award, 1;	//entrega o premio
	
	sleep2 1000;
	donpcevent strnpcinfo(0)+"::OnArenaEvntOff";	//closed event

end;



}






////////////////////////////////////////

fight_05	mapflag	nowarp
fight_05	mapflag	nowarpto
fight_05	mapflag	noteleport
fight_05	mapflag	nosave	SavePoint
fight_05	mapflag	nomemo
fight_05	mapflag	nobranch
fight_05	mapflag	nopenalty
fight_05	mapflag	nostorage
fight_05	mapflag	pvp_noparty
fight_05	mapflag	pvp_noguild

////////////////////////////////////////

 
I made a little mistake, now is tested and working:

//===== Arena de Combate ==========================================

kame_house,196,151,3 script [RR] Tenente 4_EP16_STOLZ,{

mes $npc$;
mes "Olá "+strcharinfo(0)+"!";
mes "Deseja entrar na Arena de Combate da Destruição?";
next;

switch(select("Entrar:Informações:Não, obrigado")){

case 1:
mes $npc$;
if($aberto == 1) goto entrar;
if($aberto == 0) mes "As porta para a Arena de Combate estão fechadas. Evento abre a cada 3 horas...";
close;
end;
case 2:
mes $npc$;
mes "Na Arena de Combate nós testaremos sua força.";
mes "Você ira para uma arena onde terá uma guerra, o ultimo(a) player sobrevivente será o vencedor.";
mes "Lembrando que, não é fácil. Por isso, prepare-se bem.";
mes "Não será permitido o uso de poções e iteus consumiveis que abram vantagens.";
mes "Caso você sejá o ultimo sobrevivente da Arena de Combate, você será recompensado!";
close;
case 3:
close;
end;

}


OnArenaEvnt: if($aberto == 0){ donpcevent strnpcinfo(0)+"::OnArenaEvnt2"; } else { dispbottom "Evento Cancelado!"; donpcevent strnpcinfo(0)+"::OnArenaEvntOff"; } end;


//======================================================= init config's
OnInit:

$npc$ = "[ ^FF0000Red Rebbon^000000 ] ^9400D3 Tenente^000000 "; //nome npc

bindatcmd "goarena",strnpcinfo(0)+"::OnArenaEvnt",99;

waitingroom "Arena da Destruição",0;

$@MaxMin = 1; // Minutos max pro jogador entrar na arena

$@award = 1002; //id award

end;
//======================================================= end init


entrar:
announce "O jogador ["+strcharinfo(0)+"] entrou na Arena da Destruição!",bc_all;
percentheal 100,100;
warp "fight_05",0,0;
end;


OnArenaEvnt2: // Abre-Inicia A ARENA

announce "[Arena de Combate] Arena da Destruição está ABERTA!",0;
set $aberto,1; //evento aberto para os player entrar
set $arenaon,1;
pvpoff "fight_05";

for(.@i = $@MaxMin; .@i > 0; .@i--)
{
announce "Arena da Desrtuição começará em " + .@i + " minutos!", 0;
sleep 60000;
}

announce "[Arena de Combate] Arena da Destruição COMEÇOU!",0;

//fecha o evento para não entrar mais ninguem
set $aberto,0;

//liga o pvp
pvpon "fight_05";


set $@qnton,getmapusers("fight_05"); //pega a quantidade de usuarios que tem no mapa

if($@qnton < 2){

announce "[Arena de Combate] Arena da Destruição foi encerrada por falta de lutadores!",bc_all;
donpcevent strnpcinfo(0)+"::OnArenaEvntOff";

}

end;


OnPCDieEvent:

getmapxy(.@mapa$,.@xi,.@yi,0);

if($arenaon){

if(strcharinfo(3) == "fight_05" ) {
announce "[Arena da Destruição]: "+strcharinfo(0)+" foi derrotado!",bc_all;
$@qnton--;
sleep2 2000;
warp "kame_house",174,177;
}

if(.@mapa$ == "fight_05"){

if($@qnton < 1){
announce "Arena da Destruição: Ninguém ganhou a Arena de Combate!",bc_all;
donpcevent strnpcinfo(0)+"::OnArenaEvntOff";
end;
}

if($@qnton == 2){
announce "[Arena da Destruição]: O grande momento chegou! Restam apenas 2 guerreiros na ARENA! Quem irá vencer?",bc_all;
end;
}

if($@qnton == 1)
{
if (isloggedin(killerrid))
{
if (attachrid(killerrid))
{
doevent strnpcinfo(0)+"::OnArenaPremio";
end;
}
else
{
donpcevent strnpcinfo(0)+"::OnArenaEvntOff";
end;
}
}
else
{
donpcevent strnpcinfo(0)+"::OnArenaEvntOff";
end;
}
}
}
}

end;

OnArenaEvntOff:

//fecha o evento
set $arenaon,0;
set $aberto,0;

//desliga o pvp
pvpoff "fight_05";

announce "[Arena da Destruição] Arena finalizada!", 0;
mapwarp "fight_05","kame_house",174,177;

end;

OnArenaPremio:

announce "[Arena da Destruição]: ACABOU! O ganhador da Arena da Destruição foi " + strcharinfo(0) + "!",bc_all;
sleep2 2000;
mapannounce "fight_05", "Parabéns! Você é o grande vencedor!", 0;

getitem $@award, 1; //entrega o premio

sleep2 1000;
donpcevent strnpcinfo(0)+"::OnArenaEvntOff"; //closed event

end;



}






////////////////////////////////////////

fight_05 mapflag nowarp
fight_05 mapflag nowarpto
fight_05 mapflag noteleport
fight_05 mapflag nosave SavePoint
fight_05 mapflag nomemo
fight_05 mapflag nobranch
fight_05 mapflag nopenalty
fight_05 mapflag nostorage
fight_05 mapflag pvp_noparty
fight_05 mapflag pvp_noguild

////////////////////////////////////////

//===== Arena de Combate ==========================================

kame_house,196,151,3 script [RR] Tenente 4_EP16_STOLZ,{

mes $npc$;
mes "Olá "+strcharinfo(0)+"!";
mes "Deseja entrar na Arena de Combate da Destruição?";
next;

switch(select("Entrar:Informações:Não, obrigado")){

case 1:
mes $npc$;
if($aberto == 1) goto entrar;
if($aberto == 0) mes "As porta para a Arena de Combate estão fechadas. Evento abre a cada 3 horas...";
close;
end;
case 2:
mes $npc$;
mes "Na Arena de Combate nós testaremos sua força.";
mes "Você ira para uma arena onde terá uma guerra, o ultimo(a) player sobrevivente será o vencedor.";
mes "Lembrando que, não é fácil. Por isso, prepare-se bem.";
mes "Não será permitido o uso de poções e iteus consumiveis que abram vantagens.";
mes "Caso você sejá o ultimo sobrevivente da Arena de Combate, você será recompensado!";
close;
case 3:
close;
end;

}


OnArenaEvnt: if($aberto == 0){ donpcevent strnpcinfo(0)+"::OnArenaEvnt2"; } else { dispbottom "Evento Cancelado!"; donpcevent strnpcinfo(0)+"::OnArenaEvntOff"; } end;


//======================================================= init config's
OnInit:

$npc$ = "[ ^FF0000Red Rebbon^000000 ] ^9400D3 Tenente^000000 "; //nome npc

bindatcmd "goarena",strnpcinfo(0)+"::OnArenaEvnt",99;

waitingroom "Arena da Destruição",0;

$@MaxMin = 1; // Minutos max pro jogador entrar na arena

$@award = 1002; //id award

end;
//======================================================= end init


entrar:
announce "O jogador ["+strcharinfo(0)+"] entrou na Arena da Destruição!",bc_all;
percentheal 100,100;
warp "fight_05",0,0;
end;


OnArenaEvnt2: // Abre-Inicia A ARENA

announce "[Arena de Combate] Arena da Destruição está ABERTA!",0;
set $aberto,1; //evento aberto para os player entrar
set $arenaon,1;
pvpoff "fight_05";

for(.@i = $@MaxMin; .@i > 0; .@i--)
{
announce "Arena da Desrtuição começará em " + .@i + " minutos!", 0;
sleep 60000;
}

announce "[Arena de Combate] Arena da Destruição COMEÇOU!",0;

//fecha o evento para não entrar mais ninguem
set $aberto,0;

//liga o pvp
pvpon "fight_05";


set $@qnton,getmapusers("fight_05"); //pega a quantidade de usuarios que tem no mapa

if($@qnton < 2){

announce "[Arena de Combate] Arena da Destruição foi encerrada por falta de lutadores!",bc_all;
donpcevent strnpcinfo(0)+"::OnArenaEvntOff";

}

end;


OnPCDieEvent:

getmapxy(.@mapa$,.@xi,.@yi,0);

if($arenaon){

if(strcharinfo(3) == "fight_05" ) {
announce "[Arena da Destruição]: "+strcharinfo(0)+" foi derrotado!",bc_all;
$@qnton--;
sleep2 2000;
warp "kame_house",174,177;
}

if(.@mapa$ == "fight_05"){

if($@qnton < 1){
announce "Arena da Destruição: Ninguém ganhou a Arena de Combate!",bc_all;
donpcevent strnpcinfo(0)+"::OnArenaEvntOff";
end;
}

if($@qnton == 2){
announce "[Arena da Destruição]: O grande momento chegou! Restam apenas 2 guerreiros na ARENA! Quem irá vencer?",bc_all;
end;
}

if($@qnton == 1)
{
if (isloggedin(killerrid))
{
if (attachrid(killerrid))
{
doevent strnpcinfo(0)+"::OnArenaPremio";
end;
}
else
{
donpcevent strnpcinfo(0)+"::OnArenaEvntOff";
end;
}
}
else
{
donpcevent strnpcinfo(0)+"::OnArenaEvntOff";
end;
}
}
}
}

end;

OnArenaEvntOff:

//fecha o evento
set $arenaon,0;
set $aberto,0;

//desliga o pvp
pvpoff "fight_05";

announce "[Arena da Destruição] Arena finalizada!", 0;
mapwarp "fight_05","kame_house",174,177;

end;

OnArenaPremio:

announce "[Arena da Destruição]: ACABOU! O ganhador da Arena da Destruição foi " + strcharinfo(0) + "!",bc_all;
sleep2 2000;
mapannounce "fight_05", "Parabéns! Você é o grande vencedor!", 0;

getitem $@award, 1; //entrega o premio

sleep2 1000;
donpcevent strnpcinfo(0)+"::OnArenaEvntOff"; //closed event

end;



}






////////////////////////////////////////

fight_05 mapflag nowarp
fight_05 mapflag nowarpto
fight_05 mapflag noteleport
fight_05 mapflag nosave SavePoint
fight_05 mapflag nomemo
fight_05 mapflag nobranch
fight_05 mapflag nopenalty
fight_05 mapflag nostorage
fight_05 mapflag pvp_noparty
fight_05 mapflag pvp_noguild

////////////////////////////////////////

yeah, now it's great. LOL
Thanks for your help.
do you think the logic used to decremented the variable when a player dies, is good?
Because I just thought about a future error ... if a player quits, the variable will not be decremented, and this can cause a failure.

I thought about using "getmapusers" but, maybe he can make a mistake in counting, if he also counts the dead player on the map.  o/

 
yeah, now it's great. LOL
Thanks for your help.
do you think the logic used to decremented the variable when a player dies, is good?
Because I just thought about a future error ... if a player quits, the variable will not be decremented, and this can cause a failure.

I thought about using "getmapusers" but, maybe he can make a mistake in counting, if he also counts the dead player on the map.  o/
'getmapusers' only will count a 'dead player' if he still in the map... but you already added this:

if(strcharinfo(3) == "fight_05" ) {
announce "[Arena da Destruição]: "+strcharinfo(0)+" foi derrotado!",bc_all;
$@qnton--;
sleep2 2000;
warp "kame_house",174,177;
}

When a player die, it send back to 'kame_house',

Now about the the quit players you can do this:

Add:

OnPCLogoutEvent:
if (strcharinfo(PC_MAP) == "fight_05" && @enter_arena == true)
{
announce "[Arena da Destruição]: "+strcharinfo(0)+" fugiu da batalha!",bc_all;

@enter_arena = false;
$@qnton--;

sleep2 2000;
warp "kame_house",174,177;
goto OnArenaEvntCheck;
}
end;



And change these:

OnPCDieEvent part:

OnPCDieEvent:

getmapxy(.@mapa$,.@xi,.@yi,0);

if($arenaon){

if(strcharinfo(3) == "fight_05" ) {
announce "[Arena da Destruição]: "+strcharinfo(0)+" foi derrotado!",bc_all;
$@qnton--;
sleep2 2000;
warp "kame_house",174,177;
}

if(.@mapa$ == "fight_05"){
OnArenaEvntCheck:
if($@qnton < 1){
announce "Arena da Destruição: Ninguém ganhou a Arena de Combate!",bc_all;
donpcevent strnpcinfo(0)+"::OnArenaEvntOff";
end;
}

if($@qnton == 2){
announce "[Arena da Destruição]: O grande momento chegou! Restam apenas 2 guerreiros na ARENA! Quem irá vencer?",bc_all;
end;
}

if($@qnton == 1)
{
if (isloggedin(killerrid))
{
if (attachrid(killerrid))
{
doevent strnpcinfo(0)+"::OnArenaPremio";
end;
}
else
{
donpcevent strnpcinfo(0)+"::OnArenaEvntOff";
end;
}
}
else
{
deletearray(.@units);
.@count = getunits(BL_PC, .@units, false, "fight_05");

if (.@count == 1)
{
if (attachrid(.@units[0]))
{
doevent strnpcinfo(0)+"::OnArenaPremio";
end;
}
else
{
donpcevent strnpcinfo(0)+"::OnArenaEvntOff";
end;
}
}
else
{
donpcevent strnpcinfo(0)+"::OnArenaEvntOff";
end;
}
}
}
}
}

end;



Enter arena part:

entrar:
announce "O jogador ["+strcharinfo(0)+"] entrou na Arena da Destruição!",bc_all;
percentheal 100,100;
@enter_arena = true;
warp "fight_05",0,0;
end;



I think is it, not tested.

 
Last edited by a moderator:
'getmapusers' only will count a 'dead player' if he still in the map... but you already added this:

if(strcharinfo(3) == "fight_05" ) {
announce "[Arena da Destruição]: "+strcharinfo(0)+" foi derrotado!",bc_all;
$@qnton--;
sleep2 2000;
warp "kame_house",174,177;
}

if(strcharinfo(3) == "fight_05" ) {
announce "[Arena da Destruição]: "+strcharinfo(0)+" foi derrotado!",bc_all;
$@qnton--;
sleep2 2000;
warp "kame_house",174,177;
}

When a player die, it send back to 'kame_house',

Now about the the quit players you can do this:

Add:

OnPCLogoutEvent:
if (strcharinfo(PC_MAP) == "fight_05" && @enter_arena == true)
{
announce "[Arena da Destruição]: "+strcharinfo(0)+" fugiu da batalha!",bc_all;

@enter_arena = false;
$@qnton--;

sleep2 2000;
warp "kame_house",174,177;
goto OnArenaEvntCheck;
}
end;

OnPCLogoutEvent:
if (strcharinfo(PC_MAP) == "fight_05" && @enter_arena == true)
{
announce "[Arena da Destruição]: "+strcharinfo(0)+" fugiu da batalha!",bc_all;

@enter_arena = false;
$@qnton--;

sleep2 2000;
warp "kame_house",174,177;
goto OnArenaEvntCheck;
}
end;



And change these:

OnPCDieEvent part:

OnPCDieEvent:

getmapxy(.@mapa$,.@xi,.@yi,0);

if($arenaon){

if(strcharinfo(3) == "fight_05" ) {
announce "[Arena da Destruição]: "+strcharinfo(0)+" foi derrotado!",bc_all;
$@qnton--;
sleep2 2000;
warp "kame_house",174,177;
}

if(.@mapa$ == "fight_05"){
OnArenaEvntCheck:
if($@qnton < 1){
announce "Arena da Destruição: Ninguém ganhou a Arena de Combate!",bc_all;
donpcevent strnpcinfo(0)+"::OnArenaEvntOff";
end;
}

if($@qnton == 2){
announce "[Arena da Destruição]: O grande momento chegou! Restam apenas 2 guerreiros na ARENA! Quem irá vencer?",bc_all;
end;
}

if($@qnton == 1)
{
if (isloggedin(killerrid))
{
if (attachrid(killerrid))
{
doevent strnpcinfo(0)+"::OnArenaPremio";
end;
}
else
{
donpcevent strnpcinfo(0)+"::OnArenaEvntOff";
end;
}
}
else
{
deletearray(.@units);
.@count = getunits(BL_PC, .@units, false, "fight_05");

if (.@count == 1)
{
if (attachrid(.@units[0]))
{
doevent strnpcinfo(0)+"::OnArenaPremio";
end;
}
else
{
donpcevent strnpcinfo(0)+"::OnArenaEvntOff";
end;
}
}
else
{
donpcevent strnpcinfo(0)+"::OnArenaEvntOff";
end;
}
}
}
}
}

end;

OnPCDieEvent:

getmapxy(.@mapa$,.@xi,.@yi,0);

if($arenaon){

if(strcharinfo(3) == "fight_05" ) {
announce "[Arena da Destruição]: "+strcharinfo(0)+" foi derrotado!",bc_all;
$@qnton--;
sleep2 2000;
warp "kame_house",174,177;
}

if(.@mapa$ == "fight_05"){
OnArenaEvntCheck:
if($@qnton < 1){
announce "Arena da Destruição: Ninguém ganhou a Arena de Combate!",bc_all;
donpcevent strnpcinfo(0)+"::OnArenaEvntOff";
end;
}

if($@qnton == 2){
announce "[Arena da Destruição]: O grande momento chegou! Restam apenas 2 guerreiros na ARENA! Quem irá vencer?",bc_all;
end;
}

if($@qnton == 1)
{
if (isloggedin(killerrid))
{
if (attachrid(killerrid))
{
doevent strnpcinfo(0)+"::OnArenaPremio";
end;
}
else
{
donpcevent strnpcinfo(0)+"::OnArenaEvntOff";
end;
}
}
else
{
deletearray(.@units);
.@count = getunits(BL_PC, .@units, false, "fight_05");

if (.@count == 1)
{
if (attachrid(.@units[0]))
{
doevent strnpcinfo(0)+"::OnArenaPremio";
end;
}
else
{
donpcevent strnpcinfo(0)+"::OnArenaEvntOff";
end;
}
}
else
{
donpcevent strnpcinfo(0)+"::OnArenaEvntOff";
end;
}
}
}
}
}

end;



Enter arena part:

entrar:
announce "O jogador ["+strcharinfo(0)+"] entrou na Arena da Destruição!",bc_all;
percentheal 100,100;
@enter_arena = true;
warp "fight_05",0,0;
end;

entrar:
announce "O jogador ["+strcharinfo(0)+"] entrou na Arena da Destruição!",bc_all;
percentheal 100,100;
@enter_arena = true;
warp "fight_05",0,0;
end;



I think is it, not tested.
oh nice... I tested it with OnPCLogoutEvent:
but... he warned that the player gave up, but did not trigger the label OnArenaEvntCheck; LOL
 

he stopped for here:

FeI0wNZ.png


 
oh nice... I tested it with OnPCLogoutEvent:
but... he warned that the player gave up, but did not trigger the label OnArenaEvntCheck; LOL
 

he stopped for here:

FeI0wNZ.png
I made some changes, now is working fine.

OnPCDieEvent part:

OnPCDieEvent:

getmapxy(.@mapa$,.@xi,.@yi,0);

if($arenaon){

if(strcharinfo(3) == "fight_05" ) {
announce "[Arena da Destruição]: "+strcharinfo(0)+" foi derrotado!",bc_all;
$@qnton--;
sleep2 2000;
warp "kame_house",174,177;
}

if(.@mapa$ == "fight_05"){
ARENA_CHECK:
if($@qnton < 1){
announce "Arena da Destruição: Ninguém ganhou a Arena de Combate!",bc_all;
donpcevent strnpcinfo(0)+"::OnArenaEvntOff";
end;
}

if($@qnton == 2){
announce "[Arena da Destruição]: O grande momento chegou! Restam apenas 2 guerreiros na ARENA! Quem irá vencer?",bc_all;
end;
}

if($@qnton == 1)
{
if (isloggedin(killerrid))
{
if (attachrid(killerrid))
{
doevent strnpcinfo(0)+"::OnArenaPremio";
end;
}
else
{
donpcevent strnpcinfo(0)+"::OnArenaEvntOff";
end;
}
}
else
{
deletearray(.@units);
.@count = getunits(BL_PC, .@units, false, "fight_05");

if (.@count == 1)
{
if (attachrid(.@units[0]))
{
doevent strnpcinfo(0)+"::OnArenaPremio";
end;
}
else
{
donpcevent strnpcinfo(0)+"::OnArenaEvntOff";
end;
}
}
else
{
donpcevent strnpcinfo(0)+"::OnArenaEvntOff";
end;
}
}
}
}
}

end;



OnPCLogoutEvent part:

Code:
OnPCLogoutEvent:
	if (strcharinfo(PC_MAP) == "fight_05" && @enter_arena == true)
	{
		@enter_arena = false;

		if ($arenaon && !$aberto)
		{
			announce "[Arena da Destruição]: "+strcharinfo(0)+" fugiu da batalha!",bc_all;

			$@qnton--;

			warp "kame_house",174,177;
			goto ARENA_CHECK;
		}
	}
end;

 
I made some changes, now is working fine.

OnPCDieEvent part:

OnPCDieEvent:

getmapxy(.@mapa$,.@xi,.@yi,0);

if($arenaon){

if(strcharinfo(3) == "fight_05" ) {
announce "[Arena da Destruição]: "+strcharinfo(0)+" foi derrotado!",bc_all;
$@qnton--;
sleep2 2000;
warp "kame_house",174,177;
}

if(.@mapa$ == "fight_05"){
ARENA_CHECK:
if($@qnton < 1){
announce "Arena da Destruição: Ninguém ganhou a Arena de Combate!",bc_all;
donpcevent strnpcinfo(0)+"::OnArenaEvntOff";
end;
}

if($@qnton == 2){
announce "[Arena da Destruição]: O grande momento chegou! Restam apenas 2 guerreiros na ARENA! Quem irá vencer?",bc_all;
end;
}

if($@qnton == 1)
{
if (isloggedin(killerrid))
{
if (attachrid(killerrid))
{
doevent strnpcinfo(0)+"::OnArenaPremio";
end;
}
else
{
donpcevent strnpcinfo(0)+"::OnArenaEvntOff";
end;
}
}
else
{
deletearray(.@units);
.@count = getunits(BL_PC, .@units, false, "fight_05");

if (.@count == 1)
{
if (attachrid(.@units[0]))
{
doevent strnpcinfo(0)+"::OnArenaPremio";
end;
}
else
{
donpcevent strnpcinfo(0)+"::OnArenaEvntOff";
end;
}
}
else
{
donpcevent strnpcinfo(0)+"::OnArenaEvntOff";
end;
}
}
}
}
}

end;

OnPCDieEvent:

getmapxy(.@mapa$,.@xi,.@yi,0);

if($arenaon){

if(strcharinfo(3) == "fight_05" ) {
announce "[Arena da Destruição]: "+strcharinfo(0)+" foi derrotado!",bc_all;
$@qnton--;
sleep2 2000;
warp "kame_house",174,177;
}

if(.@mapa$ == "fight_05"){
ARENA_CHECK:
if($@qnton < 1){
announce "Arena da Destruição: Ninguém ganhou a Arena de Combate!",bc_all;
donpcevent strnpcinfo(0)+"::OnArenaEvntOff";
end;
}

if($@qnton == 2){
announce "[Arena da Destruição]: O grande momento chegou! Restam apenas 2 guerreiros na ARENA! Quem irá vencer?",bc_all;
end;
}

if($@qnton == 1)
{
if (isloggedin(killerrid))
{
if (attachrid(killerrid))
{
doevent strnpcinfo(0)+"::OnArenaPremio";
end;
}
else
{
donpcevent strnpcinfo(0)+"::OnArenaEvntOff";
end;
}
}
else
{
deletearray(.@units);
.@count = getunits(BL_PC, .@units, false, "fight_05");

if (.@count == 1)
{
if (attachrid(.@units[0]))
{
doevent strnpcinfo(0)+"::OnArenaPremio";
end;
}
else
{
donpcevent strnpcinfo(0)+"::OnArenaEvntOff";
end;
}
}
else
{
donpcevent strnpcinfo(0)+"::OnArenaEvntOff";
end;
}
}
}
}
}

end;



OnPCLogoutEvent part:

OnPCLogoutEvent:
if (strcharinfo(PC_MAP) == "fight_05" && @enter_arena == true)
{
@enter_arena = false;

if ($arenaon && !$aberto)
{
announce "[Arena da Destruição]: "+strcharinfo(0)+" fugiu da batalha!",bc_all;

$@qnton--;

warp "kame_house",174,177;
goto ARENA_CHECK;
}
}
end;

OnPCLogoutEvent:
if (strcharinfo(PC_MAP) == "fight_05" && @enter_arena == true)
{
@enter_arena = false;

if ($arenaon && !$aberto)
{
announce "[Arena da Destruição]: "+strcharinfo(0)+" fugiu da batalha!",bc_all;

$@qnton--;

warp "kame_house",174,177;
goto ARENA_CHECK;
}
}
end;

thanks Cretino. it's perfect! thanks for your help.

 
Back
Top