; ====================================================================================================== ; '|| ||` '||` || /.\ '||` ; || || || || '' // \\ || '' ; || || || ''||'' || '||),,(|, '''|. //...\\ || || '''|. `||''|, '''/ '''|. ; || || || || || || || || .|''|| // \\ || || .|''|| || || // .|''|| ; `|...|' .||. `|..' .||. .|| ||. `|..||. .// \\. .||. .||. `|..||. .|| ||. /... `|..||. ; ====================================================================================================== ; ; Author: Sthil Lauda ; Version: 1.1 ; Client Tested with: 2.0.3 ; EUO version tested with: EasyUO 1.5 Version 243 ; Shard: Ultima Alianza ¡Hasta la muerte! ; Public Release: 20/01/2019 ; Revised On: 27/07/2019 ; Propósito: Funde menas de 1 en 1 para subir la habilidad de Minar desde casa o en el banco (Haven). ; Instrucciones: Necesitas una forja cerca de donde estés, comida en la mochila y un pico de minero. ;________________________________ ; ; /////////////////////////////// ; ******** CONFIGURACIÓN ******** ; /////////////////////////////// ;________________________________ ; set %tiempo_alimentacion 360 ; Cada cuántos segundos va a comprobar si tiene hambre (6 minutos). ;________________________________________________ ; ; ////////////////////////////////////////////// ; ************* FIN CONFIGURACIÓN ************* ; ////////////////////////////////////////////// ;________________________________________________ ; set %maxweight #MAXWEIGHT - 10 ; Peso máximo antes de vaciar los lingotes. set %tiempo_actual #SCNT ; Reloj. set %proxima_vez %#SCNT ; Trigger. set %refunde #FALSE ; Loop para fundir. set %stack_mineral N/A ; ID del montón de mineral seleccionado. set %stack_gastado #TRUE set %comida RGG_NRD_QSD_ZBG_WLI_QRD_END_FUD_YLI_WLI_HGI +_KGI_EGI_QLI_KLI_MLI_KRD_HQD_AQD_MQE_VQE_TQE_JQE_IQE +_GQE_SPE_ZPE_OQE_BDF_KPE_RQE_YSD_SQD_YWI_AXI_PQD_QQD set %_worldsavejournalindex #jindex ; Journal para escanear en busca de save's del server. set *CEOWorldSaving #FALSE ; Indica si hay un save del server en marcha. gosub setupForja gosub setupCofre gosub setupBolsa gosub setupBackpack gosub comprobar_comida loop: gosub CEOWorldSaveChecker Dentro_de_1_minuto grabacion_del_mundo bases_de_datos 45 120 set %tiempo_actual #SCNT ; Reloj. if ( %proxima_vez <= %tiempo_actual ) { gosub comprobar_comida } finditem DWJ_EWJ_GWJ_TVJ C_ , %CofreMenas ; Todo tipo de minerales, no sólo hierro. if ( #FINDCNT > 0 ) { gosub comprobarMena if ( %stack_gastado ) { gosub seleccionarMena } set %peso #Weight exevent Drag %stack_mineral 1 gosub waitForSysVar Weight <> %peso 60 ; Esperamos a que cambie el peso exevent DropC #backpackid 80 80 ; Drops the mushroom @80,80... yeah, cool as a cucumber! wait 5 gosub fundirFast if ( #weight >= %maxweight ) { wait 5 ; Esperamos 1 vez a que la mochile se actualice. gosub fundirFast ; Fundir olvidados, si los hay... XD gosub moverLingotes ; Vaciamos la mochila de lingotes. } } else { gosub moverLingotes ; Limpiar set #sysmsgcol 88 event sysmessage FIN halt } goto loop sub comprobarMena finditem DWJ_EWJ_GWJ_TVJ C_ , %CofreMenas if #FINDCNT > 0 { for #FINDINDEX 1 #FINDCNT { if ( #FINDSTACK > 0 ) && ( #FINDCOL = %stack_color ) { set %stack_mineral #FINDID return } } set %stack_gastado #TRUE } return sub seleccionarMena finditem DWJ_EWJ_GWJ_TVJ C_ , %CofreMenas if #FINDCNT > 0 { for #FINDINDEX 1 #FINDCNT { if #FINDSTACK >= 1 { set %stack_color #FINDCOL set %stack_mineral #FINDID set %stack_gastado #FALSE return } } } return sub abrirContenedor set %contenedor %1 finditem %contenedor if #FINDCNT > 0 { set #LOBJECTID %contenedor event macro 17 gosub wait_for GUMP %contenedor 20 } else { set #sysmsgcol 38 event sysmessage NO VEO EL CONTENEDOR %contenedor ! halt } return sub fundirFast _reFunde: finditem DWJ_EWJ_GWJ_TVJ C_ , #BACKPACKID if ( #FINDCNT > 0 ) { set %jstart #jindex set #lobjectid #findid event macro 17 gosub wait_for MSG Pones_el_lingote no_sacas_nada_util 5 if ( #TRUE in #result ) { goto _reFunde } } return sub moverLingotes event macro 9 7 ; Close Backpack wait 20 event macro 8 7 ; Open Backpack gosub wait_for GUMP #BACKPACKID 20 contpos %backpack_X %backpack_Y _mover: finditem RMK_XMK_TMK_NMK C_ , #BACKPACKID if #FINDCNT > 0 { exevent drag #findid #FINDSTACK exevent dropc %BolsaLingotes wait 20 goto _mover } return sub setupCofre display yesno ************** ¿BANK? **************$$ + ¿Quieres trabajar desde el bank? $$ + *************************************$ if #dispres = yes ; PVP { event macro 1 0 Bank gosub wait_for GUMP 180_240 40 set %contenedor #CONTID set #SYSMSGCOL 73 event sysmessage Bank: %contenedor wait 40 goto _bolsa } else { _bolsa: set #SYSMSGCOL 88 event sysmessage CLICK EN LA BOLSA DE MENAS wait 20 set #TARGCURS 1 target while #TARGCURS = 1 { wait 1 } set %CofreMenas #LTARGETID gosub abrirContenedor %CofreMenas } return sub setupBolsa set #SYSMSGCOL 53 event sysmessage CLICK EN LA BOLSA DE LINGOTES wait 20 set #TARGCURS 1 target while #TARGCURS = 1 { wait 1 } set %BolsaLingotes #LTARGETID gosub abrirContenedor %BolsaLingotes return sub setupBackpack set #SYSMSGCOL 18 event sysmessage TOCA TU MOCHILA wait 20 repeat { wait 1 } until #CONTID = #BACKPACKID set %backpack_X #CONTPOSX set %backpack_Y #CONTPOSY set #SYSMSGCOL 73 event sysmessage Posicion: %backpack_X %backpack_Y wait 20 return sub setupForja _reForja: finditem JBG_KUJ_OUJ_SOJ_HVJ_CVJ_WUJ if #FINDCNT > 0 { set %forge #findid if #FINDDIST >= 2 ; Tan lejos de esta forja no podemos fundir. { repeat { set %jstart #jindex event pathfind #FINDX #FINDY #FINDZ ; Nos intentamos acercar... gosub wait_for MSG GET_THERE 20 ; No llegamos a esta forja en concreto. if ( #TRUE in #RESULT ) { ignoreitem %forge goto _reForja } finditem JBG_KUJ_OUJ_SOJ_HVJ_CVJ_WUJ } until #FINDDIST <= 1 ; Hemos encontrado una forja cerca. } } else { set #sysmsgcol 38 event sysmessage NO HAY FORJA! halt } return ;===================================================== ; Rutina para, en caso de hambre, comer hasta saciarse ;===================================================== ; v2.2 sub comprobar_comida { hambriento: set %jrnl #jindex ; Marcamos un índice de las líneas del diario. event macro 4 0 .hungry wait 20 while #true { if #jindex > %jrnl ; Si aparece una nueva línea. { set %jrnl %jrnl + 1 ; Seleccionamos ese numero de línea. scanjournal %jrnl ; La leemos... if Dentro_de_1_minuto in #journal { wait 120s ; Save del server... } if Estas_no_le_afecta_el_hambre in #journal || Estas_tan_lleno_que_no_puedes in #journal || Estas_totalmente_saciado in #journal { set %proxima_vez %tiempo_actual + %tiempo_alimentacion return } else { if Estas_lleno in #journal || Estas_contento in #journal || Estas_en_inanicion in #journal || Estas_hambriento in #journal || Sientes_mucho in #journal || Estas_con_hambre in #journal || Estas_parcialmente in #journal || Estas_bien_lleno in #journal || Te_sientes_casi_lleno in #journal { finditem %comida C_ , #backpackid if #findcnt > 0 { set #lobjectid #findid event macro 17 wait 20 goto hambriento } else { event exmsg #charid 3 48 COMPRA COMIDA!! wait 40 set %proxima_vez %tiempo_actual + %tiempo_alimentacion } } else ; Mensaje extraño, repetimos... { goto hambriento } } } return } ; FIN While } return ;-@ ============================== @-; ;-@ ############################## @-; ;-@ SUBS públicos del Foro EasyUO @-; ;-@ ############################## @-; ;-@ ============================== @-; ; ;----------------------------------------------------------- ; Script Name: CEOWorldSaveChecker ; Author: CEO ; Version: 1.0 ; Client Tested with: 4.0.10b ; EUO version tested with: 1.42.00A5 ; Shard OSI / FS: OSI ; Revision Date: 060105 ; Public Release: 060105 ; Global Variables Used: *CEOWorldSaving ; Purpose: Used to catch the world save message for freeshards and temporarily pause mainscript during save. ;------------------------------------------------------------- sub CEOWorldSaveChecker ; sub to pause a script during a RunUO world save. set %_text1 %1 set %_text2 %2 set %_text3 %3 if %_worldsaveupcoming { if %_worldsavetimer < #scnt { set %_worldsavetimer #scnt + %5 gosub popupworldsave 25 15 blue goto _WSC_WAIT1 } return } _WSC1: if %_worldsavejournalindex > #jindex return scanjournal %_worldsavejournalindex if %_text1 in #JOURNAL { set %_worldsaveupcoming #true set %_worldsavetimer #scnt + %4 set %_worldsavejournalindex %_worldsavejournalindex + 1 return } set %_worldsavejournalindex %_worldsavejournalindex + 1 goto _WSC1 _WSC_WAIT1: if %_worldsavetimer < #scnt goto _WSC_Complete wait 5 set *CEOWorldSaving #true if %_worldsavejournalindex > #jindex goto _WSC_WAIT1 scanjournal %_worldsavejournalindex if %_text2 in #journal { gosub popupworldsave 25 15 yellow set %_worldsavejournalindex %_worldsavejournalindex + 1 goto _WSC_WAIT2 } set %_worldsavejournalindex %_worldsavejournalindex + 1 goto _WSC_WAIT1 _WSC_WAIT2: if %_worldsavetimer < #scnt goto _WSC_Complete wait 5 if %_worldsavejournalindex > #jindex goto _WSC_WAIT2 scanjournal %_worldsavejournalindex if %_text3 notin #journal { set %_worldsavejournalindex %_worldsavejournalindex + 1 goto _WSC_WAIT2 } _WSC_Complete: set %_worldsavejournalindex #jindex set %_worldsaveupcoming #false set *CEOWorldSaving #false menu delete worldsave return sub popupworldsave set %x %1 set %y %2 set %worldcolor %3 menu Clear menu Window Title World Save Monitor menu Window Color Black menu Window Size 160 160 menu shape worldsave 20 15 125 125 1 7 2 olive 7 %worldcolor menu font bgcolor %worldcolor menu font color lime menu font type b menu font size 15 set %x %x + 30 set %y %y + 30 menu text worldsave %x %y World set %x %x + 15 set %y %y + 20 menu text worldsave %x %y Save set %x %x + 15 set %y %y + 20 menu text worldsave %x %y Wait menu font size 9 menu font bgcolor black menu font color lime menu font type n menu Show 920 770 return ;================================================================= sub wait_for ;================================================================= ; This "wait_for" sub package was created by Locke. If you use these subs please keep this header intact. ; Documentation: the sub package grew to large with all the comments. To load them call the sub like this: ; gosub wait_for docs | or you can use doc, documention, what, or my personal favorite, kickass. ; "wait_for core dispatcher" version 1.2 by Locke if %1 = doc || if %1 = docs || if %1 = documentation || if %1 = what || if %1 = kickass { Display ok Please click ok and wait for your browser to start. execute http://www.easyuo.com/forum/viewtopic.php?t=24716 halt } nameSpace Push namespace local LLNS set #result N/A ; if #result isn't set by one of my wait_for subs it'll throw an error. set !LPC #lpc set #lpc 200 for %i 0 %0 set !_A . %i % . %i gosub wait_for_ , !_A1 set #lpc !lpc namespace clear LLNS namespace pop if #result <> N/A return #result else display ok You specified an unknown wait_for command. Script returned #result and is halting. halt ;================================================================= sub wait_for_MSG ; version 1.4 ~Locke ;================================================================= if !_A0 < 3 { display ok You haven't specified enough vars.$ +The basic format is: gosub wait_for MSG %message time_out_in_seconds$ +Script is halting halt } set !_timeout ( #scnt2 + !_A . !_A0 ) _lets_wait_for_a_message: for %i %jstart #jindex { scanjournal %i for %ii 2 !_A0 { if !_A . %ii in #journal && %jstart <> %i set #result #true , #spc , !_A . %ii } } if #true notin #result { set #result #false if !_timeout =< #scnt2 return #result wait 1 goto _lets_wait_for_a_message } else return #result wait 1 goto _lets_wait_for_a_message ;====================================================================== sub wait_for_GUMP ; version 1.4 ~Locke ;================================================================= if !_A0 < 3 { display ok You haven't specified enough vars.$ +The basic format is: gosub wait_for GUMP XXX_YYY % , time_out_in_seconds$ +Script is halting halt } if !_A3 <> CLOSE set !_timeout #scnt2 + !_A3 else set !_timeout 0 ; no gump wait if %3 = CLOSE since we already believe it to be open. _lets_wait_for_a_gump: if #CONTID = !_A2 || #CONTSIZE = !_A2 || #CONTKIND = !_A2 || #CONTNAME = !_A2 || #CONTTYPE = !_A2 { if !_A5 <> N/A && !_A6 <> N/A { set !clickx !_A5 + #contposx set !clicky !_A6 + #contposy click !clickx !clicky } if !_A3 = CLOSE || if !_A4 = CLOSE || !_A5 = CLOSE || !_A6 = CLOSE { set !string #contsize str pos !string _ set !pos #strres str del !string #strres #strres set !clickX #contposx + ( #strres / 2 ) str del !string 1 !pos set !clickY #contposy + ( #strres / 2 ) click !clickx !clicky R } return #true } if !_timeout =< #scnt2 && !_A4 = N/A return #false if !_A4 <> N/A && !_timeout =< #scnt2 { finditem !_A4 if #findkind <> -1 { for #findindex 1 #findcnt { if #finddist > 2 ignoreitem #findid LLWAITFOR else break } set #lobjectid #findid event macro 17 0 set !_timeout #scnt2 + !_A3 } else return #false } wait 1 goto _lets_wait_for_a_gump sub waitForItem { namespace push namespace local wfi set %time #SCNT2 + %4 ; Décimas de segundo dropwait: finditem %1 %2 , %3 if ( #FINDKIND = -1 ) ; Not Found { wait 1 if ( #SCNT2 >= %time ) { return #false } goto dropwait } namespace clear namespace pop return } sub waitForSysVar if %0 < 4 || %4 = N/A set %4 %_defaultWaitForTimeout if %0 < 5 set %5 return set %4 #sCnt2 + %4 _waitForSysVar: set % . %5 # . %1 %2 %3 if ! % . %5 && #sCnt2 < %4 { Wait 1 goto _waitForSysVar } return