; ====================================================================================================== ; '|| ||` '||` || /.\ '||` ; || || || || '' // \\ || '' ; || || || ''||'' || '||),,(|, '''|. //...\\ || || '''|. `||''|, '''/ '''|. ; || || || || || || || || .|''|| // \\ || || .|''|| || || // .|''|| ; `|...|' .||. `|..' .||. .|| ||. `|..||. .// \\. .||. .||. `|..||. .|| ||. /... `|..||. ; ====================================================================================================== ; ; Script Name: Sastreria (Nujel'm) ; ____ ; / __ \ ; ( (__) |___ ___ ; \________,' """""----....____ ; _______< () dd ____----' ; / __ __`.___-----"""" ; ( (__) | ; \____/ ; ; 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: 10/08/2019 ; Public Release: 20/04/2020 ; Purpose: Subir la skill de Sastrería fabricando bandanas y vendiéndolas en Nujel'm :-) ; set %version 1.6 ; ; LUGAR DE MACREO: Sastrería de Nujel'm [ Tiene 2 vendors ^^ ] ; ;________________________________ ; ; /////////////////////////////// ; ******** CONFIGURACIÓN ******** ; /////////////////////////////// ;________________________________ ; set %tiempo_alimentacion 360 ; Cada cuántos segundos va a comprobar si el pj tiene hambre. set %ignora_vendor_x 3773 ; La posición X de un NPC que es comerciante, pero no vende telas, y que por tanto hay que ignorar. set %ignora_vendor_y 1260 ; La posición Y de un NPC que es comerciante, pero no vende telas, y que por tanto hay que ignorar. ; Modo "Friki" (Saluda al vendor y da las gracias XD) set %friki_mode #TRUE set %tecla_saludo_1 b ; Bow set %tecla_saludo_2 ctrl set %tecla_macreo_3 s ; Salute set %tecla_macreo_4 ctrl ;________________________________________________ ; ; ////////////////////////////////////////////// ; ************* FIN CONFIGURACIÓN ************* ; ////////////////////////////////////////////// ;________________________________________________ ; set %comida RGG_NRD_QSD_ZBG_WLI_QRD_END_FUD_YLI_WLI_HGI +_KGI_EGI_QLI_KLI_MLI_KRD_AQD_MQE_VQE_TQE_JQE_IQE +_GQE_SPE_ZPE_OQE_BDF_KPE_RQE_YSD_SQD_YWI_AXI_PQD_QQD +_HND_YRD set %rollo_tela ZZF set %tela RTI set %kit_costura HAG set %bandana TDI set %sombreros_x 70 set %sombreros_y 230 set %bandana_x 270 set %bandana_y 110 set %bandanas_vender 50 set %fabricar_ultimo_x 326 set %fabricar_ultimo_y 495 set %start_macro 0 set %start_vendor 0 set %tiempo_actual #SCNT set %proxima_vez #SCNT set #SYSMSGCOL 1187 event sysmessage ====================== wait 20 set #SYSMSGCOL 1165 event sysmessage Sastreria Nujel'm %version wait 20 set #SYSMSGCOL 1187 event sysmessage ====================== wait 20 ignoreitem reset ignoreitem #CHARID ; Quitamos nuestro PJ de la lista de NPC's... set #sysmsgcol 16 gosub limpiar_ventanas set #sysmsgcol 53 event sysmessage Buscando vendor... wait 10 gosub busca_vendor ; Buscamos un vendor en un radio de 15 tiles set #sysmsgcol 73 event sysmessage Limpiando zona de macreo... wait 10 gosub recoger ; Limpiamos el suelo de telas por si las moscas... XD set #sysmsgcol 23 event sysmessage Comprobando hambre... wait 10 gosub comprobar_comida ; Alimentación del PJ... ; Comprobar la suerte (Influye un poco en el crafteo...) if ( #LUCK < 75 ) ; 75 es una armadura de oro, se le puede añadir un escudo o ballesta de oro ^^ { set #SYSMSGCOL 1264 event sysmessage =============================== event sysmessage Llevas poca suerte encima :-( event sysmessage =============================== wait 2s } ;======================================================== ; ; ******************* LOOP PRINCIPAL ******************** ; ;======================================================== inicio: chooseskill Tail real if #SKILL >= 1000 { display ¡Somos GM Tailor! :-) ; Somos GM Tailor gosub limpiar_ventanas halt } finditem %vendor_id G_3 ; Monitorizamos el vendor con el que macreamos... if #FINDCNT = 0 ; Si no encontramos un vendor { set #SYSMSGCOL 38 event sysmessage NO VEO AL VENDOR! :( wait 1s gosub busca_vendor ; Buscamos sin parar en un radio de 15 tiles } gosub material ; Reponer telas y kit's de costura gosub coser ; Craftear bandanas goto inicio ;======================================================== ; ; ***************** FIN LOOP PRINCIPAL ***************** ; ;======================================================== sub material ;<=========================> finditem %tela C_ , #BACKPACKID if #FINDSTACK < 4 { if ( %friki_mode ) { key %tecla_macreo_3 %tecla_macreo_4 } event macro 1 0 %nombre_vendor buy gosub wait_for GUMP 800_590 20 click 397 258 ; Rollo de tela gosub wait_for GUMP 800_590 20 click 601 537 ; Comprar gosub wait_for GUMP 800_590 20 event macro 1 0 Gracias, mi lord if ( %friki_mode ) { key %tecla_saludo_1 %tecla_saludo_2 } gosub cortar ; Cortamos los rollos de tela. gosub recoger ; Buscamos en el suelo por si se han caido... XD } finditem %kit_costura C_ , #BACKPACKID if #FINDCNT < 2 { if ( %friki_mode ) { key %tecla_macreo_3 %tecla_macreo_4 } event macro 1 0 %nombre_vendor buy gosub wait_for GUMP 800_590 20 click 398 138 ; Kit de costura gosub wait_for GUMP 800_590 20 click 398 138 ; Kit de costura gosub wait_for GUMP 800_590 20 click 398 138 ; Kit de costura gosub wait_for GUMP 800_590 20 click 398 138 ; Kit de costura gosub wait_for GUMP 800_590 20 click 398 138 ; Kit de costura gosub wait_for GUMP 800_590 20 click 398 138 ; Kit de costura gosub wait_for GUMP 800_590 20 click 398 138 ; Kit de costura gosub wait_for GUMP 800_590 20 click 398 138 ; Kit de costura gosub wait_for GUMP 800_590 20 click 398 138 ; Kit de costura gosub wait_for GUMP 800_590 20 click 398 138 ; Kit de costura gosub wait_for GUMP 800_590 20 click 601 537 ; Comprar gosub wait_for GUMP 800_590 20 event macro 1 0 Gracias, mi lord if ( %friki_mode ) { key %tecla_saludo_1 %tecla_saludo_2 } } return sub coser ;<=========================> if %start_macro = 0 { Costura: finditem %kit_costura C_ , #BACKPACKID if #FINDCNT > 0 { set #LOBJECTID #FINDID event macro 17 target 3s finditem %tela C_ , #BACKPACKID if #FINDKIND = -1 { return } set #LTARGETID #FINDID set #LTARGETKIND 1 event macro 22 gosub wait_for GUMP 530_480 20 click %sombreros_x %sombreros_y gosub wait_for GUMP 530_480 20 click %bandana_x %bandana_y gosub wait_for GUMP 530_480 100 set %start_macro 1 } } else { if ( #CONTNAME <> generic_gump ) && ( #CONTSIZE <> 530_480 ) ; Menú de crafteo cerrado { goto Costura } click %fabricar_ultimo_x %fabricar_ultimo_y gosub wait_for GUMP 530_480 100 finditem %bandana C_ , #BACKPACKID if ( #FINDCNT >= %bandanas_vender ) { finditem %vendor_id G_3 ; Monitorizamos el vendor con el que macreamos... if #FINDCNT > 0 ; Si encontramos un vendor... { gosub vender ; Vendemos las bandanas crafteadas si llegamos al límite... } else { gosub busca_vendor ; Comprobamos que hay un vendor } } } return sub vender ;<=========================> set %tiempo_actual #SCNT if %proxima_vez <= %tiempo_actual { gosub comprobar_comida } finditem %bandana C_ , #BACKPACKID if ( #FINDCNT >= %bandanas_vender ) { if ( %friki_mode ) { key %tecla_macreo_3 %tecla_macreo_4 } event macro 1 0 %nombre_vendor sell gosub wait_for GUMP 800_590 20 click 329 580 gosub wait_for GUMP 800_590 20 click 376 151 gosub wait_for GUMP 800_590 20 click 601 537 gosub wait_for GUMP 800_590 20 event macro 1 0 Gracias, mi lord if ( %friki_mode ) { key %tecla_saludo_1 %tecla_saludo_2 } } return sub recoger _recoge: finditem %tela G_2 if #FINDKIND <> -1 { exevent drag #FINDID #FINDSTACK exevent dropc #backpackid wait 30 set #sysmsgcol 73 event sysmessage Recogiendo telas... goto _recoge } return ; Convertir un Rollo de Tela en un stack de Telas... sub cortar set #sysmsgcol 73 event sysmessage Cortando rollos... _corta: finditem %rollo_tela C_ , #BACKPACKID if #FINDKIND <> -1 { set #LOBJECTID #FINDID event macro 17 0 wait 20 goto _corta } return sub busca_vendor _busca_vendor: finditem HS_IS G_15 if #FINDCNT > 0 { if ( #FINDREP = 1 ) { gosub waitforprop #FINDID set %pos_vendor_x #FINDX ; Coordenadas X del vendor set %pos_vendor_y #FINDY ; Coordenadas Y del vendor ; Ignoramos todo lo que no sea un vendor, o el que hay en la sastrería de Nujel'm y que no vende telas... if ( Comerciante Notin #PROPERTY ) || ( %pos_vendor_x = %ignora_vendor_x && %pos_vendor_y = %ignora_vendor_y ) { ignoreitem #FINDID ; Repetimos... goto _busca_vendor } else { gosub GetName #FINDID nombre_vendor set %jstart #jindex event macro 1 0 %nombre_vendor Profesion gosub wait_for MSG Soy_tejedor Mi_telar Tejo_y_coloreo hago_vestidos 5 if ( #TRUE in #RESULT ) { ; Hemos localizado un vendor... set %vendor_id #FINDID set %pos_vendor_x %pos_vendor_x - 1 set %pos_vendor_y %pos_vendor_y - 1 _acercarse: if #FINDDIST > 1 { set %start_vendor 0 ; Parece un nuevo vendor... event pathfind %pos_vendor_x %pos_vendor_y set #sysmsgcol 73 event sysmessage andando hasta el vendor... wait 3s goto _acercarse } if %start_vendor = 0 ; Mostramos el nombre del vendor... { set #sysmsgcol 88 event sysmessage OK Vendor: %nombre_vendor wait 2s set %start_vendor 1 } } else ; No parece ser un vendor... { ignoreitem #FINDID ; Repetimos... goto _busca_vendor } } } else ; No parece ser un vendor... { ignoreitem #FINDID ; Repetimos... goto _busca_vendor } } else ; No hay vendor cerca... { wait 2s set #sysmsgcol 53 event sysmessage Buscando un vendor... goto _busca_vendor } return sub limpiar_ventanas event sysmessage Limpiando ventanas... gosub wait_for GUMP 800_590 10 ; Cerrar el menú del vendor if #true { click 601 537 gosub wait_for GUMP 800_590 CLOSE } gosub wait_for GUMP 530_480 CLOSE ; Cerrar el menú de craftear gosub wait_for GUMP 800_590 10 ; Cerrar el menú del vendor if #true { click 601 537 gosub wait_for GUMP 800_590 CLOSE } gosub wait_for GUMP 530_480 CLOSE ; Cerrar el menú de craftear 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 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 ;* @name GetName ;* @author Roadkill ;* @ver 1.0 24Jan04 ;* @purpose get the name of a creature/vendor ;* @params %1= the id of the thing whose name you want, required ;* @%2= variable name to return the ID in, required ;* @returns @%2 and #result ;* @changes #property, #strres, @%2, !strlength ;* @example call rksubs.txt GetName %beetle beetlename ;* @status: tested sub GetName set %id_property %1 gosub waitforprop %id_property str pos #property $ set !strlength #strres - 1 str left #property !strlength set % . %2 #strres return % . %2 sub waitforprop ; <==============================> event property #charid wait 1 set %oldprop #property event property %1 _testforprop: if #property = %oldprop { goto _testforprop } return ;-@ ============================== @-; ;-@ ############################## @-; ;-@ SUBS públicos del Foro EasyUO @-; ;-@ ############################## @-; ;-@ ============================== @-; ; ;** ;* Splits a string by a divider into an array and ;* copies the result into the desired namespace ;* @param %1 The string to split ;* @param %2 Divider ;* @param %3 Array name ;* @param %4 {optional} Result namespace. If no ;* namespace is given it will create the ;* array using the %-notation ;* @sideEffects Creates a number of variables ;* with name as given in %3 followed by ;* a digit ;* @returns The length of the array sub split namespace Push namespace Local split , #systime set !lpc #lpc if #lpc < 500 set #lpc 500 set !string %1 set !divider %2 set !arrayName %3 if %0 > 3 set !namespace %4 else set !namespace #false set !length 0 repeat { set !length !length + 1 str Pos !string !divider 1 if #strRes = 0 { set !done #true set ! . !arrayName , !length !string } else { set !pos #strRes set !len !pos - 1 str Left !string !len set ! . !arrayName , !length #strRes str Del !string 1 !pos set !string #strRes } } until ( !done = #true ) set #result !length if !namespace <> #false { namespace Copy !arrayName , * To Local !namespace } else { for !i 1 #result { set !value !arrayName , !i set % . !arrayName , !i ! . !value } } set #lpc !lpc namespace Clear namespace Pop return #result 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 ;================================================================= 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 ( #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 ;================================================================= ; Añadido #CONTID para "sub abrir_cofre" 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