; ====================================================================================================== ; '|| ||` '||` || /.\ '||` ; || || || || '' // \\ || '' ; || || || ''||'' || '||),,(|, '''|. //...\\ || || '''|. `||''|, '''/ '''|. ; || || || || || || || || .|''|| // \\ || || .|''|| || || // .|''|| ; `|...|' .||. `|..' .||. .|| ||. `|..||. .// \\. .||. .||. `|..||. .|| ||. /... `|..||. ; ====================================================================================================== ; ; Nombre Script: Magery & Medit ; .... ; .'' .''' ; . .' : ; \\ .: : ; \\ _: : ..----.._ ; \\ .:::.....:::.. .' ''. ; \\ .' #-. .-######' # '. ; \\ '.##'/ ' ################ : ; \\ ##################### : ; \\ ..##.-.#### .''''###'.._ : ; \\ :--:########: '. .' : ; \\..__...--.. :--:#######.' '. '. : ; : : : : '':'-:'':':: . '. .' ; '---'''..: : ': '..'''. '. :' ; \\ :: : : ' ''''''. '. .: ; \\ :: : : ' '. ' : ; \\:: : : ....' ..: ' '. ; \\:: : : .....####\\ .~~.:. : ; \\':.:.:.:'#########.===. ~ |.'-. . '''.. : ; \\ .' ########## \ \ _.' '. '-. '''. ; :\\ : ######## \ \ '. '-. : ; : \\' ' #### : \ \ :. '-. : ; : .'\\ :' : : \ \ : '-. : ; : .' .\\ ' : : :\ \ : '. : ; :: : \\' :. : : \ \ : '. : ; ::. : \\ : : : ; \ \ : '.: ; : ': '\\ : : : : \:\ : ..' ; : ' \\ : : ; \| : .''' ; '. ' \\: :.'' ; .:..... \\: : ..'' ; '._____|'.\\......'''''''.:..''' ; \\ ; Author: Sthil Lauda ; Version: 1.9 ; Client Tested with: 4.0.5b ; EUO Version tested with: V1.42 (Build 009B) ; Shard OSI / FS: (Ultima Alianza) ; Public Release: 14/08/2019 ; Revised On: 26/04/2020 ; Propósito: Entrenar la skill de Magia o Meditar. ; Configuración: Indicar el nivel de maná que hay que gastar disparando hechizos. ; Agradecimientos a: GIOX ^^ set %version 1.9 ; ________________________________ ; ; /////////////////////////////// ; ******** CONFIGURACIÓN ******** ; /////////////////////////////// ; ________________________________ ; set %managastado 3 ; Este número simboliza el maná que debes gastar antes de meditar. ; 1) Si quieres subir MAGIA pon un 3, y gastará toda la barra de maná. ; 2) Si quieres subir MEDITAR, haz la resta del total de maná que tienes menos 3 (que es el maná que consume disparar 1 hechizo), por ejemplo con 100 de maná, sería ( 100 - 3 ) = 97. set %numeroregs 100 ; Número de regs que cogerá del cofre cada vez que se gasten. set %tiempo_espera_casteo 10 ; El tiempo entre castear un hechizo y el siguiente. En incrementos de 1 (50 milisegundos): Ejemplo: 10 x 50 milisecs = 0.50 segundos. Ejemplo: 15 x 50 milisecs = 0.75 segundos, etc. set %tiempo_alimentacion 360 ; Cada cuántos segundos va a comprobar si tiene hambre. set %curar_objetivo #FALSE ; [ #TRUE (Activado) o #FALSE (Desactivado) ] -> Curar al objetivo al que estás tirando magias. set %num_curaciones 8 ; Número de hechizos "In Mani" al objetivo. ; _______________________________________________ ; ; ////////////////////////////////////////////// ; ************* FIN CONFIGURACIÓN ************* ; ////////////////////////////////////////////// ; _______________________________________________ ; set %comida RGG_NRD_QSD_ZBG_WLI +_QRD_END_FUD_YLI_WLI_HGI_JQE +_KGI_EGI_QLI_KLI_MLI_KRD_HQD +_AQD_MQE_VQE_TQE_IQE_PQD_QQD +_GQE_SPE_ZPE_OQE_BDF_KPE_RQE +_YSD_SQD_AXI set %tiempo_actual #SCNT set %proxima_vez_comer #SCNT set %trigger_curacion #FALSE 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. chooseskill mage real set %skillinimagia #skill chooseskill medi real set %skillinimedit #skill set #TARGCURS 0 set %peso_regs abs ( %numeroregs / 10 ) + 5 ; Le añadimos 5 para que tenga algo de margen. set %peso_maximo ( #MAXWEIGHT - %peso_regs ) set #SYSMSGCOL 88 event sysmessage ===================== set #SYSMSGCOL 53 event sysmessage Magia & Medit %version set #SYSMSGCOL 88 event sysmessage ===================== wait 20 display yesno ******************** [ SAVEs ] ******************** $$ + ¿Quieres intentar detectar los save's del server? $$ + NOTA: Si hay mucha gente macreando, puede fallar. $$ + ******************************************************* $$ if ( #dispres = yes ) { set %check_saves #TRUE } else { set %check_saves #FALSE } configurar: if %confp = 1 || %confp = N/A { set #sysmsgcol 1264 setuotitle Abre el contenedor donde estan los Regs. event sysmessage ================ event sysmessage Abre el contenedor de Regs event sysmessage Presiona la tecla ESC. event sysmessage ================ set %confp 2 goto TESC } if %confp = 2 { set #sysmsgcol 1264 setuotitle Selecciona tu objetivo event sysmessage ================ event sysmessage Selecciona tu objetivo event sysmessage ================ set #sysmsgcol 0000 set #TARGCURS 1 target goto CURSOR } CURSOR: if #TARGCURS = 1 { wait 1 goto CURSOR } if #TARGCURS = 0 { set %objetivo #LTARGETID gosub uotitle goto loop } goto CURSOR TESC: onHotKey ESC { set %idcaja #LOBJECTID set #SYSMSGCOL 73 event sysmessage OK Cofre: %idcaja goto configurar } goto TESC ; ;======================================================== ; ; ******************* LOOP PRINCIPAL ******************** ; ;======================================================== ; loop: if ( %check_saves ) { gosub CEOWorldSaveChecker Dentro_de_1_minuto grabacion_del_mundo bases_de_datos 45 120 } gosub checkHungry gosub checkSkill gosub dispararRegs gosub meditar goto loop ; ;======================================================== ; ; ***************** FIN LOOP PRINCIPAL ***************** ; ;======================================================== ; sub checkHungry set %tiempo_actual #SCNT if %proxima_vez_comer <= %tiempo_actual { gosub comprobar_comida } return sub checkSkill chooseskill Mage real if #SKILL >= 1000 { set #SYSMSGCOL 73 event sysmessage SOMOS GM MAGERY! :-) halt } return sub dispararRegs repeat { _CuraWisp: if ( %check_saves ) { gosub CEOWorldSaveChecker Dentro_de_1_minuto grabacion_del_mundo bases_de_datos 45 120 } if %curar_objetivo && %trigger_curacion { for %e 1 %num_curaciones { set %jstart #jindex event macro 15 3 ; Cast Spell Heal gosub wait_for MSG Necesitas_Seda_de_Aracnido Necesitas_Ginseng Necesitas_Ajo %tiempo_espera_casteo if ( #TRUE in #result ) { if Necesitas_Seda_de_Aracnido in #result { set %reg RZF gosub reponerRegs goto _CuraWisp } if Necesitas_Ginseng in #result { set %reg JZF gosub reponerRegs goto _CuraWisp } if Necesitas_Ajo in #result { set %reg KZF gosub reponerRegs goto _CuraWisp } } else { target set #LTARGETID %objetivo set #LTARGETKIND 1 event macro 22 wait 2s } } set %trigger_curacion #FALSE } set %jstart #jindex event macro 15 4 target set #LTARGETID %objetivo set #LTARGETKIND 1 event macro 22 gosub wait_for MSG Necesitas_Ceniza_Sulfurosa %tiempo_espera_casteo if ( #TRUE in #result ) { set %reg SZF gosub reponerRegs } } until #mana <= %managastado set %trigger_curacion #TRUE return sub uotitle chooseskill mage real set %skillmagiaahora #SKILL chooseskill medi real set %skillmeditahora #SKILL finditem %reg C_ , #BACKPACKID set %cuansulfurous #FINDSTACK setuotitle || Magia | Ini: %skillinimagia | Actual: %skillmagiaahora || Medit | Ini: %skillinimedit | Actual: %skillmeditahora || Regs | Sulfurous: %cuansulfurous || return sub meditar ; <==============================> _reMedit: if ( %check_saves ) { gosub CEOWorldSaveChecker Dentro_de_1_minuto grabacion_del_mundo bases_de_datos 45 120 } set %jstart #jindex event macro 13 46 gosub wait_for MSG pierdes trance en_paz 50 if ( #TRUE in #result ) { if pierdes in #result { goto _reMedit ; Meditamos hasta que no perdamos la concentración } if trance in #result { set %jstart #jindex gosub wait_for MSG pierdes en_paz 50 if ( #TRUE in #result ) { if pierdes in #RESULT { goto _reMedit } if en_paz in #RESULT { return } } else ; Meditamos hasta llenar la barra al máximo... { repeat { wait 20 if ( %check_saves ) { gosub CEOWorldSaveChecker Dentro_de_1_minuto grabacion_del_mundo bases_de_datos 45 120 } } until #MANA = #MAXMANA wait 2s } } if en_paz in #result ; OK, estamos bien de maná. { return } } else { goto _reMedit } 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 140s ; 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_comer %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 { comer: finditem %comida C_ , #backpackid if #findcnt > 0 { set #lobjectid #findid event macro 17 wait 20 goto hambriento } else ; No hay comida en la mochila... { finditem %comida C_ , %idcaja if #findcnt > 0 { exevent drag #findid 1 exevent dropc #BACKPACKID wait 30 goto comer } else ; Y tampoco en el cofre... { event exmsg #CHARID 3 48 COMPRA COMIDA!! :-( wait 40 set %proxima_vez_comer %tiempo_actual + %tiempo_alimentacion return } } } else ; Mensaje extraño, repetimos... { goto hambriento } } } return } ; FIN While } return sub reponerRegs gosub abrircaja gosub coger return sub abrircaja if #CONTID <> %idcaja ; ¿Está el cofre cerrado? { set #LOBJECTID %idcaja event macro 17 gosub wait_for GUMP %idcaja 40 wait 20 } return sub coger _rePon: finditem %reg C_ , #BACKPACKID if #FINDSTACK = 0 ; No quedan en la mochila... { if #WEIGHT >= %peso_maximo { set #SYSMSGCOL 38 display ESTÁS AL LIMITE DE PESO! :-( sound event sysmessage RIESGO DE TIRAR REGS AL SUELO! halt } finditem %reg C_ , %idcaja if #FINDCNT > 0 ; Hay regs en el cofre... { for #FINDINDEX 1 #FINDCNT { if #FINDSTACK > 0 { exevent drag #FINDID %numeroregs exevent dropc #BACKPACKID wait 30 goto _rePon } } } else { set #SYSMSGCOL 18 event sysmessage NO QUEDAN REGS! :-( halt } } return ;-@ ============================== @-; ;-@ ############################## @-; ;-@ SUBS públicos del Foro EasyUO @-; ;-@ ############################## @-; ;-@ ============================== @-; ; ;================================================================= 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 ;================================================================= ; Añadido #CONTID ^^ 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 #CONTSIZE = !_A2 || #CONTKIND = !_A2 || #CONTNAME = !_A2 || #CONTTYPE = !_A2 || #CONTID = !_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 ;----------------------------------------------------------- ; 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