A petición de un malvado jugador, añado una macro para entrenar ocultarse y andar oculto...
Se puede macrear solamente la skill de ocultarse o bien ocultarse y andar oculto al mismo tiempo...
Es sencilla de configurar; sólo responder a las preguntas y leer los dos avisos que salen en la pantalla/diario para establecer las coordenadas que se van a emplear en caso de entrenar andar oculto.
Código:
; | / \ | .
; _ -O- . ) (( )) ( -O-
; (@) | + /|\ ))_(( /|\ | .
; |-| / | \ (/\|/\) / | \ (@)
; | | --------------------------/--|-voV---\`|'/--Vov-|--\---------------------------|-| .
; |-| '^` (o o) '^` | |
; | | `\Y/' |-|
; |-| _______ __ __ __ _______ __ __ | |
; | | | | | | |_|__|.--------.---.-.| _ | |__|.---.-.-----.-----.---.-. |-| . o
; |-| | | | | _| || | _ || | | || _ | |-- __| _ | | |
; | | |_______|__|____|__||__|__|__|___._||___|___|__|__||___._|__|__|_____|___._| |-|
; |_|________________________________________________________________________________| |
; (@) l /\ / ( ( \ /\ l `\|-| .
; o l / V \ \ V \ l + (@)
; l/ _) )_ \I +
; + `\ /'
;
; Script Name: Hiding & Stealth Trainer
; Author: Sthil Lauda
; Version: 1.0
; Client Tested with: 2.0.3
; EUO version tested with: 1.5 Version 142
; Shard: Ultima Alianza (¡Hasta la muerte!)
; Public Release: 26/07/2019
; Purpose: Entrena hiding y andar oculto hasta ser GM.
;==================================================================================
; INSTRUCCIONES:
;
; 1- Responder a la pregunta (Sólo Hiding o bien Hiding + Stealth).
; 2- Desactivar "Always Run" -> "event macro 32 0" o bien desde UO -> Opciones Macro -> Acciones -> AlwaysRun
; 3- Pulsar el play :)
;
;==============================================================
; ESQUEMA:
;
; Punto A ----camina--desde--A--hacia--B--> Punto B
; Punto B <----camina--desde--B--hacia--A-- Punto A
;
;==============================================================
; Ciclo para comer.
set %tiempo_alimentacion 360 ; Cada cuántos segundos va a comprobar si tiene hambre (6 minutos).
set %version 1.0
; _______________________________________________
;
; //////////////////////////////////////////////
; ************************* 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 ; Reloj
set %proxima_vez %tiempo_actual ; Trigger
initevents
chooseskill Hidi real
set %skillinihiding #SKILL
chooseskill Stlt real
set %skillinistlt #SKILL
set #SYSMSGCOL 88
event sysmessage =====================
set #SYSMSGCOL 53
event sysmessage Hiding & Stealth %version
set #SYSMSGCOL 88
event sysmessage =====================
wait 40
; Selecciona el tipo de entrenamiento ^^
display yesno ******************************************** [ HIDING ] ********************************************$$
+ ¿Quieres entrenar solamente la skill de Hiding? $$
+ NOTA: Si eliges "NO", entonces entrenará caminar oculto. $$
+ ****************************************************************************************************************** $$
if ( #dispres = yes )
{
set %trainHiding #TRUE
goto hidingLoop ; Hiding
}
else
{
set %trainHiding #FALSE
gosub setupCoordenadas
goto stealthLoop ; Hiding + Stealth
}
;============================================================
;
; ************************************* LOOPS PRINCIPALES **************************************
;
;============================================================
; ****** Stealth ******
stealthLoop:
gosub checkHungry ; Alimentación.
gosub checkSkill ; Comprobar GM.
; Ocultarse y Moverse...
if #CHARPOSX = %X_2 && #CHARPOSY = %Y_2 || #CHARPOSX <> %X_2 || #CHARPOSY <> %Y_2
{
gosub hiding
move %X_1 %Y_1 0 10s ; (Timeout)
}
if #CHARPOSX = %X_1 && #CHARPOSY = %Y_1 || #CHARPOSX <> %X_1 || #CHARPOSY <> %Y_1
{
gosub hiding
move %X_2 %Y_2 0 10s ; (Timeout)
}
goto stealthLoop
; ****** Hiding ******
hidingLoop:
gosub checkHungry ; Alimentación.
gosub checkSkill ; Comprobar GM.
gosub hiding ; Ocultarse
goto hidingLoop
;============================================================
;
; ******************************** FIN LOOPS PRINCIPALES ************************************
;
;============================================================
sub setupCoordenadas ; <=============================>
if %confp = 1 || %confp = N/A
{
set #SYSMSGCOL 43
event sysmessage Mueve tu PJ hasta la posicon (A)
event sysmessage Y presiona la tecla ESC.
setuotitle Mueve el personaje al punto (A) y presiona ESC.
set %conf 1
set %confp 2
gosub TESC
}
if %confp = 2
{
set #SYSMSGCOL 53
event sysmessage Mueve tu PJ hasta la posicon (B)
event sysmessage Y presiona la tecla ESC.
setuotitle Mueve el personaje al punto (B) y presiona ESC.
set %conf 2
gosub TESC
}
return
sub TESC ; <=============================>
_TESCLOOP:
onHotKey ESC
{
if %conf = 1
{
; --------------------------
; Las cordenadas del punto A
; --------------------------
set %X_1 #CHARPOSX ; La puedes ver en el EasyUO -> Character Info -> #CHARPOSX
set %Y_1 #CHARPOSY ; La puedes ver en el EasyUO -> Character Info -> #CHARPOSY
return
}
if %conf = 2
{
; --------------------------
; Las cordenadas del punto B
; --------------------------
set %X_2 #CHARPOSX ; La puedes ver en el EasyUO -> Character Info -> #CHARPOSX
set %Y_2 #CHARPOSY ; La puedes ver en el EasyUO -> Character Info -> #CHARPOSY
return ; Todo listo :-)
}
}
wait 1
goto _TESCLOOP
sub hiding ; <=============================>
_reHid:
if ( H notin #CHARSTATUS || %trainHiding )
{
set %jstart #jindex
event macro 13 21 ; Use Skill Hiding
gosub wait_for MSG No_consigues Consigues_ocultarte 50
if ( #TRUE in #RESULT )
{
if No_consigues in #RESULT
{
goto _reHid
}
if Consigues_ocultarte in #RESULT
{
return
}
}
}
return
sub checkSkill ; <=============================>
chooseskill Hidi real
set %skillhidingAhora #SKILL
chooseskill Stlt real
set %skillstltAhora #SKILL
; Título con skills.
setuotitle || Skill Hiding | Ini: %skillinihiding | Actual: %skillhidingAhora || Skill Stealth | Ini: %skillinistlt | Actual: %skillstltAhora
if ( ! %trainHiding && %skillstltAhora >= 1000 ) ; 645 para Haven
{
set #SYSMSGCOL 23
event sysmessage Somos GM Stealth :-)
halt ; Paramos
}
else
{
if ( %trainHiding && %skillhidingAhora >= 1000 ) ; 645 para Haven
{
set #SYSMSGCOL 23
event sysmessage Somos GM Hiding :-)
halt ; Paramos
}
}
return
sub checkHungry ; <=============================>
set %tiempo_actual #SCNT
if ( %proxima_vez <= %tiempo_actual )
{
gosub comprobar_comida
}
return
;=====================================================
; Rutina para, en caso de hambre, comer hasta saciarse
;=====================================================
; v2.4
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 no_te_puedes_comer_eso in #JOURNAL
{
event exmsg #CHARID 3 48 ESTO NO ES COMIDA!!
wait 40
ignoreitem #FINDID ComidaID ; Lo guardamos en una lista de ID's que no se pueden comer [ ignoreitem reset ComidaID ].
goto hambriento
}
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
goto hambriento ; Seguimos comiendo...
}
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 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
¡Saludos!