dacvaldivia1 Posted August 16, 2022 Group: Members Topic Count: 2 Topics Per Day: 0.00 Content Count: 5 Reputation: 0 Joined: 10/15/13 Last Seen: August 29, 2022 Share Posted August 16, 2022 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: 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) Cambie los Item de premio por x100 Poring Coin y 1M de zeny. Comente el "Evento Shops" ya no se justificaba en mi servidor. Algunas correcciones de mapas. Solucionar problema de la función "dispell" Se realiza correcciones de consultas query_sql en el evento "Devil Square" Se modifico el mod del evento "Zombie Survival" ya que al ser PRE-Renewal no existía al ID 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 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; } 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; 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 Quote Link to comment Share on other sites More sharing options...
Mael Posted August 18, 2022 Group: Forum Moderator Topic Count: 25 Topics Per Day: 0.01 Content Count: 837 Reputation: 321 Joined: 02/11/19 Last Seen: Sunday at 01:54 PM Share Posted August 18, 2022 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: 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) Cambie los Item de premio por x100 Poring Coin y 1M de zeny. Comente el "Evento Shops" ya no se justificaba en mi servidor. Algunas correcciones de mapas. Solucionar problema de la función "dispell" Se realiza correcciones de consultas query_sql en el evento "Devil Square" Se modifico el mod del evento "Zombie Survival" ya que al ser PRE-Renewal no existía al ID 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 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; } 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; 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. Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.