API Basic GameEvents es - LIHACHTETAN/ClassicUO-BadNewbie-BasicIDE GitHub Wiki

AddHandler UO.JournalEntry / client events

ClassicUO • Basic

AddHandler suscribe una Sub a nuevas entradas del diario, cambios de recursos y conexión. Estos nombres UO. son eventos, no funciones; no se pueden invocar mediante RaiseEvent.

Sintaxis exacta

AddHandler UO.JournalEntry, AddressOf OnJournal
Sub OnJournal(ByVal text As String, ByVal serial As Integer, ByVal name As String, ByVal hue As Integer)
AddHandler UO.HitPointsChanged, AddressOf OnHits
AddHandler UO.ManaChanged, AddressOf OnMana
AddHandler UO.StaminaChanged, AddressOf OnStamina
Sub OnHits(ByVal current As Integer, ByVal previous As Integer)
Sub OnMana(ByVal current As Integer, ByVal previous As Integer)
Sub OnStamina(ByVal current As Integer, ByVal previous As Integer)
AddHandler UO.ConnectionChanged, AddressOf OnConnection
Sub OnConnection(ByVal online As Boolean)
RemoveHandler UO.JournalEntry, AddressOf OnJournal

Parámetros

  • Handler / AddressOf — Use AddressOf una Sub del script cargado. Declare todos los parámetros explícitamente ByVal, con los tipos y el orden exactos de las firmas. No se admiten Function, Optional, ParamArray ni callbacks de otro script.
  • text / serial / name / hue — JournalEntry entrega text String, serial Integer (ID de origen; 0 si no existe), name String y hue Integer (índice de tono UO, no RGB). Serial no es el gráfico de un objeto. Texto y nombre pueden estar vacíos. Los valores se copian antes de reutilizar la entrada. Solo llegan entradas nuevas tras suscribirse, incluidos mensajes locales.
  • current / previous — HitPointsChanged/ManaChanged/StaminaChanged entregan current y previous Integer como puntos absolutos, no porcentajes ni Boolean. Se comparan estados por actualización; los cambios intermedios pueden agruparse. El estado inicial y otro personaje establecen una base sin notificar cambios de recursos.
  • online — ConnectionChanged entrega online Boolean: True/1 si el mundo del cliente tiene personaje y mapa, False/0 si no. No garantiza que el socket esté sano. No se reproduce el estado inicial.
  • RemoveHandler — RemoveHandler elimina la última coincidencia. Las suscripciones duplicadas se ejecutan varias veces en orden. El mensaje actual usa una lista fija; los cambios afectan a mensajes posteriores. Eliminar el último controlador libera la cola.

Devuelve

AddHandler/RemoveHandler y las Sub no devuelven valor (Unit). Guarde resultados en campos Module compartidos. Solo online y los predicados usan 1/0 = True/False; serial, hue, puntos y State.changes son IDs o cantidades.

Comportamiento

  • El cliente encola copias. Los controladores se ejecutan en el hilo del script, entre instrucciones y dentro de Wait, Sleep, UO.Wait y Wait Until. Comprobación como máximo cada 25 ms, hasta 16 mensajes por evento y pasada. Una llamada nativa larga retrasa la entrega.
  • Pausa acumula mensajes sin ejecutar controladores. Stop cancela y libera suscripciones; Catch no oculta la parada. Retorno o error de la entrada principal elimina las suscripciones del cliente. Una nueva ejecución empieza sin ellas. Cerrar IDE no detiene el script. La pausa automática por desconexión retrasa el evento hasta reanudar.
  • Cada cola admite 256 mensajes. Desbordarse produce un error capturable y desactiva esa suscripción. Un error del controlador también la desactiva y omite los demás controladores del mensaje. Se puede volver a suscribir tras Catch/Finally. Evite reenviar cada mensaje al mismo diario.
  • Solo estos cinco eventos están disponibles en Full con Basic IDE activa. No se añaden otros eventos, paquetes, Handles ni WithEvents. Los eventos declarados por el script están en Basic.Events.

Ejemplos

1. Detectar una entrada nueva

# OnJournal recibe cuatro parámetros. IsReadyMessage, mostrada completa, comprueba InStr > 0. El mensaje local actualiza State.message. Wait Until espera hasta 5000 ms y después genera timeout. Finally elimina la suscripción. Main devuelve "ready: ore".
Option Explicit On
Module State
    Public Dim matched As Boolean = False
    Public Dim message As String = ""
End Module

Function IsReadyMessage(ByVal text As String) As Boolean
    Return InStr(text, "ready: ore") > 0
End Function

Sub OnJournal(ByVal text As String, ByVal serial As Integer, ByVal name As String, ByVal hue As Integer)
    If IsReadyMessage(text) Then
        State.message = text
        State.matched = True
    End If
End Sub

Sub Main()
    AddHandler UO.JournalEntry, AddressOf OnJournal
    Try
        UO.AddToJournal("ready: ore")
        Wait Until State.matched Timeout 5000
    Finally
        RemoveHandler UO.JournalEntry, AddressOf OnJournal
    End Try
    Return State.message
End Sub

Explicación de los parámetros y la ejecución:

OnJournal recibe cuatro parámetros. IsReadyMessage, mostrada completa, comprueba InStr > 0. El mensaje local actualiza State.message. Wait Until espera hasta 5000 ms y después genera timeout. Finally elimina la suscripción. Main devuelve "ready: ore".

2. Observar recursos

# Tres controladores pasan current/previous a Remember, incluida completa. State.changes cuenta avisos y State.last guarda el último, por ejemplo SP:58:60. Tras Wait(250), Wait Until espera hasta 5000 ms; sin cambios hay timeout. Finally elimina las tres suscripciones. Devuelve String, no Boolean.
Option Explicit On
Module State
    Public Dim changes As Integer = 0
    Public Dim last As String = ""
End Module

Sub Remember(ByVal label As String, ByVal current As Integer, ByVal previous As Integer)
    State.changes += 1
    State.last = label & ":" & CStr(current) & ":" & CStr(previous)
End Sub

Sub OnHits(ByVal current As Integer, ByVal previous As Integer)
    Remember("HP", current, previous)
End Sub

Sub OnMana(ByVal current As Integer, ByVal previous As Integer)
    Remember("MP", current, previous)
End Sub

Sub OnStamina(ByVal current As Integer, ByVal previous As Integer)
    Remember("SP", current, previous)
End Sub

Sub Main()
    AddHandler UO.HitPointsChanged, AddressOf OnHits
    AddHandler UO.ManaChanged, AddressOf OnMana
    AddHandler UO.StaminaChanged, AddressOf OnStamina
    Try
        Wait(250)
        Wait Until State.changes > 0 Timeout 5000
    Finally
        RemoveHandler UO.HitPointsChanged, AddressOf OnHits
        RemoveHandler UO.ManaChanged, AddressOf OnMana
        RemoveHandler UO.StaminaChanged, AddressOf OnStamina
    End Try
    Return State.last
End Sub

Explicación de los parámetros y la ejecución:

Tres controladores pasan current/previous a Remember, incluida completa. State.changes cuenta avisos y State.last guarda el último, por ejemplo SP:58:60. Tras Wait(250), Wait Until espera hasta 5000 ms; sin cambios hay timeout. Finally elimina las tres suscripciones. Devuelve String, no Boolean.

3. Observar la conexión

# OnConnection recibe Boolean online y cuenta transiciones durante Wait(1000). Finally elimina la suscripción. Main devuelve la cantidad: 0 sin cambios, 1 para una transición; aquí 1 no es True. State.online contiene el último estado recibido.
Option Explicit On
Module State
    Public Dim changes As Integer = 0
    Public Dim online As Boolean = False
End Module

Sub OnConnection(ByVal online As Boolean)
    State.online = online
    State.changes += 1
End Sub

Sub Main()
    AddHandler UO.ConnectionChanged, AddressOf OnConnection
    Try
        Wait(1000)
    Finally
        RemoveHandler UO.ConnectionChanged, AddressOf OnConnection
    End Try
    Return State.changes
End Sub

Explicación de los parámetros y la ejecución:

OnConnection recibe Boolean online y cuenta transiciones durante Wait(1000). Finally elimina la suscripción. Main devuelve la cantidad: 0 sin cambios, 1 para una transición; aquí 1 no es True. State.online contiene el último estado recibido.


en · ru · uk · fr · de · it · es · zh-tw · ja · ko

Basic