; | / \ | . ; _ -O- . ) (( )) ( -O- ; (@) | + /|\ ))_(( /|\ | . ; |-| / | \ (/\|/\) / | \ (@) ; | | --------------------------/--|-voV---\`|'/--Vov-|--\---------------------------|-| . ; |-| '^` (o o) '^` | | ; | | `\Y/' |-| ; |-| _______ __ __ __ _______ __ __ | | ; | | | | | | |_|__|.--------.---.-.| _ | |__|.---.-.-----.-----.---.-. |-| . o ; |-| | | | | _| || | _ || | | || _ | |-- __| _ | | | ; | | |_______|__|____|__||__|__|__|___._||___|___|__|__||___._|__|__|_____|___._| |-| ; |_|________________________________________________________________________________| | ; (@) l /\ / ( ( \ /\ l `\|-| . ; o l / V \ \ V \ l + (@) ; l/ _) )_ \I + ; + `\ /' ; ; Script Name: Entrenar Lockpicking ; ; .-""-. ; / .--. \ ; / / \ \ ; | | | | ; | |.-""-.| ; ///`.::::.`\ ; ||| ::/ \:: ; ; ||; ::\__/:: ; ; \\\ '::::' / ; jgs `=':-..-'` ; ; Author: Sthil Lauda ; Version: 1.6 ; Client Tested with: 2.0.3 ; EUO version tested with: EasyUO 1.5 Version 243 ; Shard: Ultima Alianza ¡Hasta la muerte! ; Revision Date: 25/01/2019 ; Public Release: 08/02/2019 ; Propósito: Entrenar skill de lockpicking desde 40-50 hasta 75, parando la macro cada 5 puntos para seguir subiendo con ; nuevas cajas fabricadas con un mayor nivel (+5 puntos) de skill de Artesanía/Tinker. ; Instrucciones: Colocar dos cofres grandes; el primero de ellos con todas las cajas dentro para forzar (40 cajas o más) y un montón de ganzúas, y el segundo cofre grande debe estar vacío. ; ;________________________________ ; ; /////////////////////////////// ; ******** CONFIGURACIÓN ******** ; /////////////////////////////// set %nivel_skill 550 ; Parar la macro al llegar a este nivel de skill lockpicking *** Ejem: 550 (55 puntos de skill) ***. set %cofreo XXXXXXX ; Cofre con cajas y ganzúas. set %cofred XXXXXXX ; Cofre vacío. set %tiempo_alimentacion 360 ; Cada cuántos segundos va a comprobar si tiene hambre (5 minutos). ; ////////////////////////////////////////////// ; ************* FIN CONFIGURACIÓN ************* ; ////////////////////////////////////////////// ;________________________________________________ ; set %llave EFG set %ganzua NWH set %caja CUD set %tiempo_actual #SCNT ; Reloj set %proxima_vez %tiempo_actual ; Trigger 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 Inicio: { _vaciar: finditem %caja c_ , #BACKPACKID if #FINDCNT > 0 { Exevent Drag #FINDID Exevent Dropc %cofreo wait 30 goto _vaciar } gosub bloquearSkill ; Comprobar la skill y parar. set %tiempo_actual #SCNT if %proxima_vez <= %tiempo_actual { gosub comprobar_comida ; Macro para comer } _comienzoLockpicking: ; Termina macro para comer y comienza lockpick. finditem %caja c_ , %cofred if #FINDCNT > 0 { ; Abre la caja con cerradura para sacar la llave a la mochila. set %jstart #jindex ; Marcamos el journal antes de ejecutar la acción. set %cajaid #FINDID set #LOBJECTID %cajaid event macro 17 gosub wait_for GUMP %cajaid 2 if #TRUE in #RESULT ; Si se abre, es que ya está estrenada... { goto _preLlave } gosub wait_for MSG esta_cerrada_con_llave la_llave_ha_sido_depositada Dentro_de_1_minuto 10 if #TRUE in #RESULT { if Dentro_de_1_minuto in #RESULT { wait 140s goto _comienzoLockpicking } if esta_cerrada_con_llave in #RESULT { goto Forzar } if la_llave_ha_sido_depositada in #RESULT { ; Coge la llave y la deja en la mochila _test_caja: set #LOBJECTID %cajaid event macro 17 gosub wait_for GUMP %cajaid 5 _preLlave: finditem %llave C_ , #backpackid if #FINDCNT = 0 ; No hay llave en la mochila { finditem %llave C_ , %cajaid ; Miramos a ver si la caja está abierta con la llave if #FINDCNT = 0 ; No hay llave en la caja, y tampoco en la mochila... mal asunto. { ignoreitem %cajaid ; Pasamos de esta caja... XDDDD goto Inicio } else ; La caja está abierta y con la llave dentro... { gosub cogerLlave goto Cerrar } } } } } else { gosub traeCaja goto _comienzoLockpicking } } ; Usa la llave para cerrar la caja y seguidamente poder forzarla Cerrar: { _repiteCerrar: finditem %llave c_ , #backpackid if #FINDCNT > 0 { set #LOBJECTID #FINDID event macro 17 target 3s set #LTARGETID %cajaid set #LTARGETKIND 1 set %jstart #jindex ; Marcamos el journal antes de ejecutar la acción event macro 22 gosub wait_for MSG abierta cerrada no_puedes_usar_la_llave Dentro_de_1_minuto 10 if #TRUE in #RESULT { if Dentro_de_1_minuto in #RESULT { wait 140s goto _repiteCerrar } if abierta in #RESULT { goto _repiteCerrar } if cerrada in #RESULT { goto Forzar } if no_puedes_usar_la_llave in #RESULT { ignoreitem %cajaid ; Pasamos de esta caja... XDDDD goto Inicio } } } else ; No hay llave { gosub cogerLlave goto _repiteCerrar } } ; Busca las ganzuas y trata de forzar la cerradura Forzar: { finditem %cajaid C_ , %cofred if #FINDCNT > 0 { set #LOBJECTID %cajaid _repiteForzar: findItem %ganzua c_ , #backpackid if #FINDCNT > 0 { set #LOBJECTID #FINDID event macro 17 target 3s set #LTARGETKIND 1 set %jstart #jindex ; Marcamos el journal antes de ejecutar la acción event macro 22 gosub wait_for MSG no_logra_forzar Rompes_la_cerradura La_cerradura_cede no_parece_estar_cerrada Dentro_de_1_minuto 15 if #TRUE in #RESULT { if Dentro_de_1_minuto in #RESULT { wait 140s goto Forzar } if Rompes_la_cerradura in #RESULT { gosub traeCaja goto Inicio } if no_logra_forzar in #RESULT { goto Forzar } if La_cerradura_cede in #RESULT || no_parece_estar_cerrada in #RESULT { goto Cerrar } } else ; Por alguna razón extraña no hemos pillado el mensaje en el diario ¿? ¡REPETIMOS! { goto Forzar } } else ; No hay ganzuas ¿? { gosub reponerGanzuas goto _repiteForzar } } else ; Si ya no está la caja que habíamos seleccionado { goto Inicio } } ; ; ***** SUBS ***** ; ;===================================================== ; 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 3 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 %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 sub reponerGanzuas finditem %ganzua C_ , %cofreo if #FINDCNT > 0 { Exevent Drag #FINDID 50 Exevent Dropc #BACKPACKID wait 30 } else { event macro 3 0 NO HAY MAS GANZUAS! halt ; No quedan ganzuas... } return sub traeCaja finditem %caja C_ , %cofreo if #FINDCNT > 0 { Exevent Drag #FINDID Exevent Dropc %cofred wait 30 } else { event macro 3 0 NO QUEDAN CAJAS EN EL COFRE! halt ; No quedan cajas... } return sub cogerLlave finditem %llave C_ , %cajaid if #FINDCNT > 0 { Exevent Drag #FINDID Exevent Dropc #backpackid wait 30 } return sub bloquearSkill chooseskill Lock real if ( #SKILL >= %nivel_skill ) { event macro 3 0 Lockpicking = %nivel_skill , SKILL BLOQUEADA halt ; Paramos la macro... } return ;================================================================= sub wait_for ;================================================================= ; This "wait_for" sub package was created by Locke. If you use these subs please keep this header intact. ; // end header ; 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. ; Thanks to ~BookWibble~ for helping with all the debugging and spotting a bug or three. ; "wait_for core dispatcher" version 1.3 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 ignoreitem reset LLWAITFOR 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 ( #scnt + !_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 =< #scnt 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 #scnt + !_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 =< #scnt && !_A4 = N/A return #false if !_A4 <> N/A && !_timeout =< #scnt { 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 #scnt + !_A3 } else return #false } wait 1 goto _lets_wait_for_a_gump ;====================================================================== sub wait_for_ITEM ; Version 0.1 ~Locke ;================================================================= ; %A2 = #findid ; %A3 = C_ , %mod || G_ , %mod ; %A4 = wait_time in seconds if !_A0 < 4 { display ok You haven't specified enough vars.$ +The basic format is: gosub wait_for ITEM # , findid C_ , % , mod % , timeout +Script is halting ;halt } set !_timeout !_A4 + #scnt repeat { finditem !_A2 !_A3 if #findkind <> -1 return #true wait 1 } until #scnt => !_timeout return #false