Jump to content

NPC "Auto Event" de Stolao, Versión 2.63


dacvaldivia1

Recommended Posts


  • Group:  Members
  • Topic Count:  2
  • Topics Per Day:  0.00
  • Content Count:  5
  • Reputation:   0
  • Joined:  10/15/13
  • Last Seen:  

Estimados, colegas muy buenas tardes recurro a ustedes para poder ajustar el siguiente NPC de "Auto Event" a un emulador Rathena Actualizado, con una versión de cliente 2018 PRE-Renewal, en la siguiente versión posteada e logrado corregir algunos errores como por ejemplo:

  1. Se realizo la traducción de alguno textos a español, según se realiza pruebas de los eventos (la codificación del archivo es ANSI)
  2. Cambie los Item de premio por x100 Poring Coin y 1M de zeny.
  3. Comente el "Evento Shops" ya no se justificaba en mi servidor.
  4. Algunas correcciones de mapas.
  5. Solucionar problema de la función "dispell"
  6. Se realiza correcciones de consultas query_sql en el evento "Devil Square"
  7. Se modifico el mod del evento "Zombie Survival" ya que al ser PRE-Renewal no existía al ID
  8. Se comentaron líneas de ítems que no existen en PRE-Renewal

Pero aun no logro corregir algunos errores y es por eso que recurro a ustedes, para que me puedan ayudar

  1. El evento de Emp Breaker manda un error después de agregar la instancia, anuncia al ganador pero no genera el precio
    • [Info]: [Instance] Created map '0282#000003' (921) from 'sword_1-1' (282).
    • [Error]: status_calc_mob: No castle set at map 0282#000003
//===== Comments: ============================================
//= [Stolao]
// Instance.yml
//  - Id: 44
//    Name: Emp Breaker
//    TimeLimit: 900
//    Enter:
//      Map: sword_1-1
//      X: 215
//      Y: 206

//==================================
OnEmpStart:	//-- Emperium Event
//==================================

	$@CurrentEvent = 1;
	waitingroom "Emperium Event",99;
	Func_Countdown;
	$@CurrentEvent = -1;
	$@BestTime = 2000000000;
	$@BestCid = 0;
	getwaitingroomusers strnpcinfo(3);
	if(.@waitingroom_usercount >= .MinPlayers[1]){
		freeloop(1);
		for(.@i = 0; .@i < .@waitingroom_usercount; .@i++){
			attachrid(.@waitingroom_users[.@i]);
			callfunc("dispell");
			if(instance_id(IM_CHAR))
				instance_destroy(IM_CHAR);
			instance_create("Emp Breaker",IM_CHAR);
			instance_enter("Emp Breaker",215,206,getcharid(0),instance_id(IM_CHAR));
		}
		freeloop(0);
		delwaitingroom;
		if(.TestMode)
			sleep 60000;
		else
			sleep 10000;
	} else {
		delwaitingroom;
		announce .EventName$[1]+" ¡Detenido! No hay suficientes jugadores que se unieron al "+.EventName$[1]+"!",bc_blue|bc_area|bc_npc;
	}
	if($@BestCid)
		Func_Prizes($@BestCid,.EventName$[1]);
	$@CurrentEvent = 0;
	end;
                                                   
//==================================
//-- Emperium Event Extras
//==================================

sword_1-1,216,208,4	script	Emp_Break	-1,{
OnBreak:
	stopnpctimer;
	.@Time = getnpctimer(0);
	.@m = .@Time / 60000;
	.@s = (.@Time - .@m * 60000) / 1000;
	.@ms = .@Time % 1000;
	if(.@Time < BestTime || !BestTime)
		BestTime = .@Time;
	if(.@Time < $@BestTime){
		$@BestTime = .@Time;
		$@BestCid = getcharid(0);
		announce "[Emperium Event]: "+strcharinfo(0)+" now holds the top time of "+((.@m)?callfunc("F_InsertPlural",.@i,"minute")+" ":"")+""+((.@s)?.@s+""+((.@ms)?"."+.@ms:"")+" seconds":"")+".",bc_all|bc_blue;
	}
	mapannounce 'Map$,"You have a "+((.@Time == BestTime)?"new personal best ":"")+"time of "+((.@m)?callfunc("F_InsertPlural",.@i,"minute")+" ":"")+""+((.@s)?.@s+""+((.@ms)?"."+.@ms:"")+" seconds":"")+".",bc_area|bc_blue;
	sleep2 2500;
	instance_destroy;
	end;

OnInstanceInit:
	initnpctimer;
	stopnpctimer;
	setnpctimer 0,strnpcinfo(3);
	'Map$ = strnpcinfo(4);
	monster 'Map$,223,206,"Emperium",1288,1,strnpcinfo(3)+"::OnBreak";
	'GID = $@mobid;
	setunitdata 'GID,UMOB_DMGIMMUNE,1;
	sleep 2000;
	mapannounce 'Map$,"[Emperium Event]: Goal is simple, kill the Emperium as fast as you can~",bc_map|bc_blue;
	sleep 1000;
	mapannounce 'Map$,"[Emperium Event]: Once Countdown is done have at it.",bc_map|bc_blue;
	sleep 2000;
	mapannounce 'Map$,"5",bc_map|bc_blue;
	sleep 1000;
	mapannounce 'Map$,"4",bc_map|bc_blue;
	sleep 1000;
	mapannounce 'Map$,"3",bc_map|bc_blue;
	sleep 1000;
	mapannounce 'Map$,"2",bc_map|bc_blue;
	sleep 1000;
	mapannounce 'Map$,"1",bc_map|bc_blue;
	sleep 1000;
	mapannounce 'Map$,"Go~",bc_map|bc_blue;
	startnpctimer strnpcinfo(3);
	setunitdata 'GID,UMOB_DMGIMMUNE,0;
	end;
}                                                 

 

  1. El Evento "Poring Event" no warpea al jugador a prontera, después de matar al poring correcto, pero si termina el evento de forma correcta al matar al segundo poring.
  • [Error]: buildin_warp: fatal error ! player not attached!
  • [Debug]: Function: warp (3 parameters):
  • [Debug]: Data: string value="prontera"
  • [Debug]: Data: number value=155
  • [Debug]: Data: number value=172
//==================================
OnPoringStart:	//-- Poring Event
//==================================

	killmonsterall .EnterMap$[6];
	mapwarp .EnterMap$[6],"prontera",155,172;
	$@CurrentEvent = 6;
	pvpoff .EnterMap$[6];
	for ( .@i = 0; .@i < getarraysize( .bombflag ); .@i++ )
		setmapflag .EnterMap$[6], .bombflag[.@i];
	Func_Countdown;
	$@CurrentEvent = -6;
	if(getmapusers(.EnterMap$[6]) < .MinPlayers[6]){
		mapannounce .EnterMap$[6],"¡Evento detenido! No hay suficientes jugadores que se unieron a "+.EventName$[6]+"!",bc_blue;
	} else {
		killmonsterall .EnterMap$[6];
		mapannounce .EnterMap$[6],"Las reglas son simples",bc_blue;
		sleep 3000;
		mapannounce .EnterMap$[6],"Mata al 'Poring' con el nombre correcto y regresaras a Prontera con tu premio.",bc_blue;
		sleep 4000;
		mapannounce .EnterMap$[6],"Mata al equivocado y vete a Prontera sin nada.",bc_blue;
		sleep 4000;
		mapannounce .EnterMap$[6],"Hay 2 'Poring' correctos y un temporizador de 30 minutos.",bc_blue;
		sleep 4000;
		mapannounce .EnterMap$[6],"El evento comienza ahora~",bc_blue;
		for(.@i = 0; .@i < getarraysize(.Poring$); .@i++)
			monster .EnterMap$[6],0,0,.Poring$[.@i],1725,5,strnpcinfo(3)+"::OnKillWrong";
		monster .EnterMap$[6],0,0,"--ja--",1725,.PoringSpawn,strnpcinfo(3)+"::OnKillRight";
		.PoringSpawn = 2;
 		for(.@poring = 30; .@poring > 0; .@poring--){
			if(getmapusers(.EnterMap$[6]) < 1)
				.@poring = 0;
			mapannounce .EnterMap$[6],callfunc("F_InsertPlural",.@poring,"Minuto")+" Restantes.",bc_blue;
			sleep 60000;
		}
	}
	mapannounce .EnterMap$[6],"El tiempo ha terminado",bc_blue;
	killmonsterall .EnterMap$[6];
	for ( .@i = 6; .@i < getarraysize( .bombflag ); .@i++ )
		removemapflag .EnterMap$[6], .bombflag[.@i];
	$@CurrentEvent = 0;
	sleep 5000;
	mapwarp .EnterMap$[6],"prontera",155,172;
	end;

OnKillWrong:
	monster .EnterMap$[6],0,0,.Poring$[rand(1,getarraysize($@Mobs))],1725,1,strnpcinfo(3)+"::OnKillWrong";
	warp "prontera",155,172;
	end;

OnKillRight:
	Func_Prizes(getcharid(0),.EventName$[6]);
	.PoringSpawn -= 1;
	if(.PoringSpawn < 1){
		mapannounce .EnterMap$[6],"El tiempo ha terminado",bc_blue;
		killmonsterall .EnterMap$[6];
		for ( .@i = 6; .@i < getarraysize( .bombflag ); .@i++ )
			removemapflag .EnterMap$[6], .bombflag[.@i];
		$@CurrentEvent = 0;
		sleep 5000;
		mapwarp .EnterMap$[6],"prontera",155,172;
		end;
	}
	warp "prontera",155,172;
	end;

 

  1. El emulador buega el símbolo "¡" al tratar de crear el mail de premio, trate de modificar la codificación de la base de datos, pero la solución fue omitir el símbolo
    • [SQL]: DB error - Incorrect string value: '\xA1Felic...' for column `rohispano_main`.`mail`.`message` at row 1
//==================================
//-- Reward Function
//==================================

function	script	Func_Prizes	{
	announce "Felicidades a "+strcharinfo(0,getarg(0))+", ganador del evento "+getarg(1)+", revisa tu correo para ver tu recompensa.",bc_all|bc_blue;
	if(!getattachedrid())
		attachrid(getcharid(3,strcharinfo(0,getarg(0))),1);
	
	WonEvents++;
	MWonEvents++;
	if($@Mail){
		mail getarg(0), "no-reply", getarg(1), "Felicitaciones!% Has ganado el evento "+getarg(1)+" % % % [ Se adjunta tu recompensa. ]", $@RewardZeny, $@RewardID, $@RewardQNT;
		sleep 2000;
		query_sql("UPDATE `mail` SET message = REPLACE(`message`,'%',CHAR(13)) WHERE send_name = 'no-reply'");
	} else {
		getitem $@RewardID,$@RewardQNT;
		zeny += $@RewardZeny;
	}
	return;
}

desde ya cualquier ayuda es bienvenida, también adjunto el avance del script por si lo quieren utilizar

Auto_Event_2022.txt

Link to comment
Share on other sites


  • Group:  Forum Moderator
  • Topic Count:  25
  • Topics Per Day:  0.01
  • Content Count:  832
  • Reputation:   317
  • Joined:  02/11/19
  • Last Seen:  

On 8/16/2022 at 9:25 AM, dacvaldivia1 said:

Estimados, colegas muy buenas tardes recurro a ustedes para poder ajustar el siguiente NPC de "Auto Event" a un emulador Rathena Actualizado, con una versión de cliente 2018 PRE-Renewal, en la siguiente versión posteada e logrado corregir algunos errores como por ejemplo:

  1. Se realizo la traducción de alguno textos a español, según se realiza pruebas de los eventos (la codificación del archivo es ANSI)
  2. Cambie los Item de premio por x100 Poring Coin y 1M de zeny.
  3. Comente el "Evento Shops" ya no se justificaba en mi servidor.
  4. Algunas correcciones de mapas.
  5. Solucionar problema de la función "dispell"
  6. Se realiza correcciones de consultas query_sql en el evento "Devil Square"
  7. Se modifico el mod del evento "Zombie Survival" ya que al ser PRE-Renewal no existía al ID
  8. Se comentaron líneas de ítems que no existen en PRE-Renewal

Pero aun no logro corregir algunos errores y es por eso que recurro a ustedes, para que me puedan ayudar

  1. El evento de Emp Breaker manda un error después de agregar la instancia, anuncia al ganador pero no genera el precio
    • [Info]: [Instance] Created map '0282#000003' (921) from 'sword_1-1' (282).
    • [Error]: status_calc_mob: No castle set at map 0282#000003
//===== Comments: ============================================
//= [Stolao]
// Instance.yml
//  - Id: 44
//    Name: Emp Breaker
//    TimeLimit: 900
//    Enter:
//      Map: sword_1-1
//      X: 215
//      Y: 206

//==================================
OnEmpStart:	//-- Emperium Event
//==================================

	$@CurrentEvent = 1;
	waitingroom "Emperium Event",99;
	Func_Countdown;
	$@CurrentEvent = -1;
	$@BestTime = 2000000000;
	$@BestCid = 0;
	getwaitingroomusers strnpcinfo(3);
	if(.@waitingroom_usercount >= .MinPlayers[1]){
		freeloop(1);
		for(.@i = 0; .@i < .@waitingroom_usercount; .@i++){
			attachrid(.@waitingroom_users[.@i]);
			callfunc("dispell");
			if(instance_id(IM_CHAR))
				instance_destroy(IM_CHAR);
			instance_create("Emp Breaker",IM_CHAR);
			instance_enter("Emp Breaker",215,206,getcharid(0),instance_id(IM_CHAR));
		}
		freeloop(0);
		delwaitingroom;
		if(.TestMode)
			sleep 60000;
		else
			sleep 10000;
	} else {
		delwaitingroom;
		announce .EventName$[1]+" ¡Detenido! No hay suficientes jugadores que se unieron al "+.EventName$[1]+"!",bc_blue|bc_area|bc_npc;
	}
	if($@BestCid)
		Func_Prizes($@BestCid,.EventName$[1]);
	$@CurrentEvent = 0;
	end;
                                                   
//==================================
//-- Emperium Event Extras
//==================================

sword_1-1,216,208,4	script	Emp_Break	-1,{
OnBreak:
	stopnpctimer;
	.@Time = getnpctimer(0);
	.@m = .@Time / 60000;
	.@s = (.@Time - .@m * 60000) / 1000;
	.@ms = .@Time % 1000;
	if(.@Time < BestTime || !BestTime)
		BestTime = .@Time;
	if(.@Time < $@BestTime){
		$@BestTime = .@Time;
		$@BestCid = getcharid(0);
		announce "[Emperium Event]: "+strcharinfo(0)+" now holds the top time of "+((.@m)?callfunc("F_InsertPlural",.@i,"minute")+" ":"")+""+((.@s)?.@s+""+((.@ms)?"."+.@ms:"")+" seconds":"")+".",bc_all|bc_blue;
	}
	mapannounce 'Map$,"You have a "+((.@Time == BestTime)?"new personal best ":"")+"time of "+((.@m)?callfunc("F_InsertPlural",.@i,"minute")+" ":"")+""+((.@s)?.@s+""+((.@ms)?"."+.@ms:"")+" seconds":"")+".",bc_area|bc_blue;
	sleep2 2500;
	instance_destroy;
	end;

OnInstanceInit:
	initnpctimer;
	stopnpctimer;
	setnpctimer 0,strnpcinfo(3);
	'Map$ = strnpcinfo(4);
	monster 'Map$,223,206,"Emperium",1288,1,strnpcinfo(3)+"::OnBreak";
	'GID = $@mobid;
	setunitdata 'GID,UMOB_DMGIMMUNE,1;
	sleep 2000;
	mapannounce 'Map$,"[Emperium Event]: Goal is simple, kill the Emperium as fast as you can~",bc_map|bc_blue;
	sleep 1000;
	mapannounce 'Map$,"[Emperium Event]: Once Countdown is done have at it.",bc_map|bc_blue;
	sleep 2000;
	mapannounce 'Map$,"5",bc_map|bc_blue;
	sleep 1000;
	mapannounce 'Map$,"4",bc_map|bc_blue;
	sleep 1000;
	mapannounce 'Map$,"3",bc_map|bc_blue;
	sleep 1000;
	mapannounce 'Map$,"2",bc_map|bc_blue;
	sleep 1000;
	mapannounce 'Map$,"1",bc_map|bc_blue;
	sleep 1000;
	mapannounce 'Map$,"Go~",bc_map|bc_blue;
	startnpctimer strnpcinfo(3);
	setunitdata 'GID,UMOB_DMGIMMUNE,0;
	end;
}                                                 

 

  1. El Evento "Poring Event" no warpea al jugador a prontera, después de matar al poring correcto, pero si termina el evento de forma correcta al matar al segundo poring.
  • [Error]: buildin_warp: fatal error ! player not attached!
  • [Debug]: Function: warp (3 parameters):
  • [Debug]: Data: string value="prontera"
  • [Debug]: Data: number value=155
  • [Debug]: Data: number value=172
//==================================
OnPoringStart:	//-- Poring Event
//==================================

	killmonsterall .EnterMap$[6];
	mapwarp .EnterMap$[6],"prontera",155,172;
	$@CurrentEvent = 6;
	pvpoff .EnterMap$[6];
	for ( .@i = 0; .@i < getarraysize( .bombflag ); .@i++ )
		setmapflag .EnterMap$[6], .bombflag[.@i];
	Func_Countdown;
	$@CurrentEvent = -6;
	if(getmapusers(.EnterMap$[6]) < .MinPlayers[6]){
		mapannounce .EnterMap$[6],"¡Evento detenido! No hay suficientes jugadores que se unieron a "+.EventName$[6]+"!",bc_blue;
	} else {
		killmonsterall .EnterMap$[6];
		mapannounce .EnterMap$[6],"Las reglas son simples",bc_blue;
		sleep 3000;
		mapannounce .EnterMap$[6],"Mata al 'Poring' con el nombre correcto y regresaras a Prontera con tu premio.",bc_blue;
		sleep 4000;
		mapannounce .EnterMap$[6],"Mata al equivocado y vete a Prontera sin nada.",bc_blue;
		sleep 4000;
		mapannounce .EnterMap$[6],"Hay 2 'Poring' correctos y un temporizador de 30 minutos.",bc_blue;
		sleep 4000;
		mapannounce .EnterMap$[6],"El evento comienza ahora~",bc_blue;
		for(.@i = 0; .@i < getarraysize(.Poring$); .@i++)
			monster .EnterMap$[6],0,0,.Poring$[.@i],1725,5,strnpcinfo(3)+"::OnKillWrong";
		monster .EnterMap$[6],0,0,"--ja--",1725,.PoringSpawn,strnpcinfo(3)+"::OnKillRight";
		.PoringSpawn = 2;
 		for(.@poring = 30; .@poring > 0; .@poring--){
			if(getmapusers(.EnterMap$[6]) < 1)
				.@poring = 0;
			mapannounce .EnterMap$[6],callfunc("F_InsertPlural",.@poring,"Minuto")+" Restantes.",bc_blue;
			sleep 60000;
		}
	}
	mapannounce .EnterMap$[6],"El tiempo ha terminado",bc_blue;
	killmonsterall .EnterMap$[6];
	for ( .@i = 6; .@i < getarraysize( .bombflag ); .@i++ )
		removemapflag .EnterMap$[6], .bombflag[.@i];
	$@CurrentEvent = 0;
	sleep 5000;
	mapwarp .EnterMap$[6],"prontera",155,172;
	end;

OnKillWrong:
	monster .EnterMap$[6],0,0,.Poring$[rand(1,getarraysize($@Mobs))],1725,1,strnpcinfo(3)+"::OnKillWrong";
	warp "prontera",155,172;
	end;

OnKillRight:
	Func_Prizes(getcharid(0),.EventName$[6]);
	.PoringSpawn -= 1;
	if(.PoringSpawn < 1){
		mapannounce .EnterMap$[6],"El tiempo ha terminado",bc_blue;
		killmonsterall .EnterMap$[6];
		for ( .@i = 6; .@i < getarraysize( .bombflag ); .@i++ )
			removemapflag .EnterMap$[6], .bombflag[.@i];
		$@CurrentEvent = 0;
		sleep 5000;
		mapwarp .EnterMap$[6],"prontera",155,172;
		end;
	}
	warp "prontera",155,172;
	end;

 

  1. El emulador buega el símbolo "¡" al tratar de crear el mail de premio, trate de modificar la codificación de la base de datos, pero la solución fue omitir el símbolo
    • [SQL]: DB error - Incorrect string value: '\xA1Felic...' for column `rohispano_main`.`mail`.`message` at row 1
//==================================
//-- Reward Function
//==================================

function	script	Func_Prizes	{
	announce "Felicidades a "+strcharinfo(0,getarg(0))+", ganador del evento "+getarg(1)+", revisa tu correo para ver tu recompensa.",bc_all|bc_blue;
	if(!getattachedrid())
		attachrid(getcharid(3,strcharinfo(0,getarg(0))),1);
	
	WonEvents++;
	MWonEvents++;
	if($@Mail){
		mail getarg(0), "no-reply", getarg(1), "Felicitaciones!% Has ganado el evento "+getarg(1)+" % % % [ Se adjunta tu recompensa. ]", $@RewardZeny, $@RewardID, $@RewardQNT;
		sleep 2000;
		query_sql("UPDATE `mail` SET message = REPLACE(`message`,'%',CHAR(13)) WHERE send_name = 'no-reply'");
	} else {
		getitem $@RewardID,$@RewardQNT;
		zeny += $@RewardZeny;
	}
	return;
}

desde ya cualquier ayuda es bienvenida, también adjunto el avance del script por si lo quieren utilizar

Auto_Event_2022.txt 80.4 kB · 0 downloads

En el emp breaker, debes agregar ese mapa a tu db de castillos.

En el poring catcher, prueba cambiando la línea del warp por una de warp "SavePoint",0,0;

En el error del símbolo es porque has traducido algo que no debías al español.

Link to comment
Share on other sites

Join the conversation

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

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  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.

×
×
  • Create New...