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

AddHandler UO.JournalEntry / client events

ClassicUO โ€ข Basic

AddHandler๋กœ ์ƒˆ ์ €๋„ ํ•ญ๋ชฉ, ์บ๋ฆญํ„ฐ ์ž์› ๋ฐ ์—ฐ๊ฒฐ ์ƒํƒœ ๋ณ€ํ™”๋ฅผ ๊ตฌ๋…ํ•ฉ๋‹ˆ๋‹ค. ์ด UO. ์ด๋ฆ„์€ ํ•จ์ˆ˜๊ฐ€ ์•„๋‹Œ ์ด๋ฒคํŠธ์ด๋ฏ€๋กœ ๊ด„ํ˜ธ๋กœ ํ˜ธ์ถœํ•˜๊ฑฐ๋‚˜ RaiseEvent๋กœ ๋ฐœ์ƒ์‹œํ‚ฌ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

์ •ํ™•ํ•œ ๊ตฌ๋ฌธ

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

๋งค๊ฐœ๋ณ€์ˆ˜

  • Handler / AddressOf โ€” ํ˜„์žฌ ๋กœ๋“œํ•œ ์Šคํฌ๋ฆฝํŠธ์˜ Sub๋ฅผ AddressOf๋กœ ์ „๋‹ฌํ•˜์„ธ์š”. ๋ชจ๋“  ๋งค๊ฐœ๋ณ€์ˆ˜์— ByVal์„ ๋ช…์‹œํ•˜๊ณ  ์„œ๋ช…์˜ ํ˜•์‹๊ณผ ์ˆœ์„œ๋ฅผ ๋งž์ถฐ์•ผ ํ•ฉ๋‹ˆ๋‹ค. Function, Optional, ParamArray์™€ ๋‹ค๋ฅธ ์Šคํฌ๋ฆฝํŠธ์˜ ์ฝœ๋ฐฑ์€ ํ—ˆ์šฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • text / serial / name / hue โ€” JournalEntry๋Š” text String, serial Integer(์ถœ์ฒ˜ ID, ์—†์œผ๋ฉด 0), name String, hue Integer(UO ์ƒ‰์กฐ ์ธ๋ฑ์Šค, RGB ์•„๋‹˜)๋ฅผ ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค. Serial์€ ์•„์ดํ…œ ๊ทธ๋ž˜ํ”ฝ/type์ด ์•„๋‹™๋‹ˆ๋‹ค. ๋ฌธ์ž์—ด์€ ๋น„์–ด ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ €๋„ ํ•ญ๋ชฉ ์žฌ์‚ฌ์šฉ ์ „์— ๊ฐ’์„ ๋ณต์‚ฌํ•˜๋ฉฐ ๊ตฌ๋… ์ดํ›„ ์ƒˆ ํ•ญ๋ชฉ๋งŒ ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค. ๋กœ์ปฌ ๋ฉ”์‹œ์ง€๋„ ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.
  • current / previous โ€” HitPointsChanged/ManaChanged/StaminaChanged์˜ current์™€ previous๋Š” ํ˜„์žฌ์™€ ์ด์ „ ์ ˆ๋Œ€ ํฌ์ธํŠธ ์ˆ˜์ธ Integer์ž…๋‹ˆ๋‹ค. ๋ฐฑ๋ถ„์œจ์ด๋‚˜ Boolean์ด ์•„๋‹™๋‹ˆ๋‹ค. ํด๋ผ์ด์–ธํŠธ ๊ฐฑ์‹ ๋งˆ๋‹ค ๋น„๊ตํ•˜๋ฏ€๋กœ ์ค‘๊ฐ„ ๋ณ€ํ™”๊ฐ€ ํ•ฉ์ณ์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ดˆ๊ธฐ ์ƒํƒœ์™€ ์บ๋ฆญํ„ฐ ๋ณ€๊ฒฝ์€ ์ƒˆ ๊ธฐ์ค€์„ ๋งŒ๋“ค๋ฉฐ ์ž์› ์ด๋ฒคํŠธ๋ฅผ ๋ณด๋‚ด์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • online โ€” ConnectionChanged์˜ online์€ Boolean์ž…๋‹ˆ๋‹ค. True/1์€ ํด๋ผ์ด์–ธํŠธ ์„ธ๊ณ„์— ํ”Œ๋ ˆ์ด์–ด์™€ ์ง€๋„๊ฐ€ ์žˆ์Œ, False/0์€ ์—†์Œ์„ ๋œปํ•ฉ๋‹ˆ๋‹ค. ์›๊ฒฉ ์†Œ์ผ“ ์ •์ƒ ์—ฌ๋ถ€ ๊ฒ€์‚ฌ๊ฐ€ ์•„๋‹ˆ๋ฉฐ ์ดˆ๊ธฐ ์ด๋ฒคํŠธ๋„ ์žฌ์ƒํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • RemoveHandler โ€” RemoveHandler๋Š” ๋งˆ์ง€๋ง‰์œผ๋กœ ์ผ์น˜ํ•˜๋Š” ๊ตฌ๋…์„ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค. ์ค‘๋ณต์€ ๋“ฑ๋ก ์ˆœ์„œ๋Œ€๋กœ ์—ฌ๋Ÿฌ ๋ฒˆ ํ˜ธ์ถœ๋ฉ๋‹ˆ๋‹ค. ํ˜„์žฌ ๋ฉ”์‹œ์ง€๋Š” ๊ณ ์ •๋œ ์ฒ˜๋ฆฌ๊ธฐ ๋ชฉ๋ก์„ ์‚ฌ์šฉํ•˜๋ฉฐ ๋ณ€๊ฒฝ์€ ๋‹ค์Œ ๋ฉ”์‹œ์ง€์— ์ ์šฉ๋ฉ๋‹ˆ๋‹ค. ๋งˆ์ง€๋ง‰ ์ฒ˜๋ฆฌ๊ธฐ๋ฅผ ์ œ๊ฑฐํ•˜๋ฉด ํ๊ฐ€ ํ•ด์ œ๋ฉ๋‹ˆ๋‹ค.

๋ฐ˜ํ™˜๊ฐ’

AddHandler, RemoveHandler์™€ Sub๋Š” ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค(Unit). ๊ฒฐ๊ณผ๋Š” ๊ณต์œ  Module ํ•„๋“œ์— ์ €์žฅํ•˜์„ธ์š”. online๊ณผ ๋…ผ๋ฆฌ ์กฐ๊ฑด๋งŒ 1/0 = True/False์ž…๋‹ˆ๋‹ค. serial, hue, ์ž์› ํฌ์ธํŠธ ๋ฐ State.changes๋Š” ID ๋˜๋Š” ์ˆ˜๋Ÿ‰์ž…๋‹ˆ๋‹ค.

๋™์ž‘

  • ํด๋ผ์ด์–ธํŠธ๋Š” ๋ณต์‚ฌํ•œ ๋ฐ์ดํ„ฐ๋งŒ ํ์— ๋„ฃ์Šต๋‹ˆ๋‹ค. ์ฒ˜๋ฆฌ๊ธฐ๋Š” ์Šคํฌ๋ฆฝํŠธ์˜ ์Šค๋ ˆ๋“œ์—์„œ ๋ฌธ์žฅ ์‚ฌ์ด ๋ฐ Wait, Sleep, UO.Wait, Wait Until ์ค‘์— ์‹คํ–‰๋˜๋ฉฐ ๋™์‹œ์— ๊ฒน์น˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ฒ€์‚ฌ ๊ฐ„๊ฒฉ์€ ์ตœ์†Œ 25 ms, ํšŒ๋‹น ์ด๋ฒคํŠธ๋ณ„ ์ตœ๋Œ€ 16๊ฐœ ๋ฉ”์‹œ์ง€์ž…๋‹ˆ๋‹ค. ๊ธด ๋„ค์ดํ‹ฐ๋ธŒ ํ˜ธ์ถœ์€ ์ „๋‹ฌ์„ ์ง€์—ฐํ•ฉ๋‹ˆ๋‹ค.
  • ์ผ์‹œ ์ •์ง€ ์ค‘์—๋Š” ์‹คํ–‰ํ•˜์ง€ ์•Š๊ณ  ๋ฉ”์‹œ์ง€๋ฅผ ์Œ“์Šต๋‹ˆ๋‹ค. Stop์€ ์ทจ์†Œํ•˜๊ณ  ๊ตฌ๋…์„ ํ•ด์ œํ•˜๋ฉฐ Catch๋กœ ๊ธด๊ธ‰ ์ค‘์ง€๋ฅผ ์‚ผํ‚ฌ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์ตœ์ƒ์œ„ ํ”„๋กœ์‹œ์ € ๋ฐ˜ํ™˜์ด๋‚˜ ์˜ค๋ฅ˜ ์‹œ ํด๋ผ์ด์–ธํŠธ ๊ตฌ๋…์„ ์‚ญ์ œํ•˜๊ณ  ์ƒˆ ์‹คํ–‰์— ๋‚จ๊ธฐ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. IDE๋ฅผ ๋‹ซ์•„๋„ ์‹คํ–‰ ์ค‘์ธ ์Šคํฌ๋ฆฝํŠธ๋Š” ๊ณ„์†๋ฉ๋‹ˆ๋‹ค. ์—ฐ๊ฒฐ ํ•ด์ œ ์ž๋™ ์ผ์‹œ ์ •์ง€๋Š” ์žฌ๊ฐœ๊นŒ์ง€ ์ด๋ฒคํŠธ๋ฅผ ์ง€์—ฐํ•ฉ๋‹ˆ๋‹ค.
  • ์ด๋ฒคํŠธ๋ณ„ ํ ํ•œ๋„๋Š” 256๊ฐœ์ž…๋‹ˆ๋‹ค. ์ดˆ๊ณผํ•˜๋ฉด ์žก์„ ์ˆ˜ ์žˆ๋Š” ์˜ค๋ฅ˜๋ฅผ ๋ฐœ์ƒ์‹œํ‚ค๊ณ  ํ•ด๋‹น ๊ตฌ๋…์„ ๋น„ํ™œ์„ฑํ™”ํ•ฉ๋‹ˆ๋‹ค. ์ฒ˜๋ฆฌ๊ธฐ ์˜ค๋ฅ˜๋„ ๊ตฌ๋…์„ ๋„๊ณ  ๊ฐ™์€ ๋ฉ”์‹œ์ง€์˜ ๋‚˜๋จธ์ง€ ์ฒ˜๋ฆฌ๊ธฐ๋ฅผ ๊ฑด๋„ˆ๋œ๋‹ˆ๋‹ค. Catch/Finally ํ›„ ๋‹ค์‹œ ๊ตฌ๋…ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ชจ๋“  ์ €๋„ ๋ฉ”์‹œ์ง€๋ฅผ ๊ฐ™์€ ์ €๋„์— ๋‹ค์‹œ ์ถœ๋ ฅํ•˜์ง€ ๋งˆ์„ธ์š”.
  • ์ด ๋‹ค์„ฏ ์ด๋ฒคํŠธ๋Š” Basic IDE๊ฐ€ ์ผœ์ง„ Full์—์„œ ์ง€์›๋ฉ๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ์ด๋ฒคํŠธ, ํŒจํ‚ท ๊ตฌ๋…, Handles ๋ฐ WithEvents๋Š” ํฌํ•จํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์Šคํฌ๋ฆฝํŠธ ์„ ์–ธ ์ด๋ฒคํŠธ๋Š” Basic.Events๋ฅผ ์ฐธ๊ณ ํ•˜์„ธ์š”.

์˜ˆ์ œ

1. ์ƒˆ ์ €๋„ ๋ฉ”์‹œ์ง€ ์ฐพ๊ธฐ

# OnJournal์€ ๋„ค ์ธ์ž๋ฅผ ๋ฐ›์Šต๋‹ˆ๋‹ค. ์ „์ฒด IsReadyMessage ํ•จ์ˆ˜๋Š” InStr > 0์œผ๋กœ ๋ฌธ๊ตฌ ์กด์žฌ ์—ฌ๋ถ€๋ฅผ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. ๋กœ์ปฌ ๋ฉ”์‹œ์ง€๊ฐ€ State.message๋ฅผ ์„ค์ •ํ•˜๋ฉฐ Wait Until์€ ์ตœ๋Œ€ 5000 ms ํ›„ ํƒ€์ž„์•„์›ƒ ์˜ค๋ฅ˜๋ฅผ ๋ƒ…๋‹ˆ๋‹ค. Finally์—์„œ ํ•ด์ œํ•ฉ๋‹ˆ๋‹ค. Main์€ "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

๋งค๊ฐœ๋ณ€์ˆ˜ ๋ฐ ์‹คํ–‰ ์„ค๋ช…:

OnJournal์€ ๋„ค ์ธ์ž๋ฅผ ๋ฐ›์Šต๋‹ˆ๋‹ค. ์ „์ฒด IsReadyMessage ํ•จ์ˆ˜๋Š” InStr > 0์œผ๋กœ ๋ฌธ๊ตฌ ์กด์žฌ ์—ฌ๋ถ€๋ฅผ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. ๋กœ์ปฌ ๋ฉ”์‹œ์ง€๊ฐ€ State.message๋ฅผ ์„ค์ •ํ•˜๋ฉฐ Wait Until์€ ์ตœ๋Œ€ 5000 ms ํ›„ ํƒ€์ž„์•„์›ƒ ์˜ค๋ฅ˜๋ฅผ ๋ƒ…๋‹ˆ๋‹ค. Finally์—์„œ ํ•ด์ œํ•ฉ๋‹ˆ๋‹ค. Main์€ "ready: ore"๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

2. ์ž์› ๊ด€์ฐฐ

# ์„ธ ์ฒ˜๋ฆฌ๊ธฐ๊ฐ€ current/previous๋ฅผ ์ „์ฒด Remember ํ”„๋กœ์‹œ์ €์— ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค. State.changes๋Š” ์•Œ๋ฆผ ์ˆ˜, State.last๋Š” SP:58:60 ๊ฐ™์€ ๋งˆ์ง€๋ง‰ ๋ฌธ์ž์—ด์ž…๋‹ˆ๋‹ค. Wait(250) ํ›„ ์ตœ๋Œ€ 5000 ms ๋ณ€ํ™”๋ฅผ ๊ธฐ๋‹ค๋ฆฌ๋ฉฐ ์—†์œผ๋ฉด ํƒ€์ž„์•„์›ƒ์ž…๋‹ˆ๋‹ค. Finally๊ฐ€ ์„ธ ๊ตฌ๋…์„ ํ•ด์ œํ•ฉ๋‹ˆ๋‹ค. ๊ฒฐ๊ณผ๋Š” Boolean ์•„๋‹Œ String์ž…๋‹ˆ๋‹ค.
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

๋งค๊ฐœ๋ณ€์ˆ˜ ๋ฐ ์‹คํ–‰ ์„ค๋ช…:

์„ธ ์ฒ˜๋ฆฌ๊ธฐ๊ฐ€ current/previous๋ฅผ ์ „์ฒด Remember ํ”„๋กœ์‹œ์ €์— ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค. State.changes๋Š” ์•Œ๋ฆผ ์ˆ˜, State.last๋Š” SP:58:60 ๊ฐ™์€ ๋งˆ์ง€๋ง‰ ๋ฌธ์ž์—ด์ž…๋‹ˆ๋‹ค. Wait(250) ํ›„ ์ตœ๋Œ€ 5000 ms ๋ณ€ํ™”๋ฅผ ๊ธฐ๋‹ค๋ฆฌ๋ฉฐ ์—†์œผ๋ฉด ํƒ€์ž„์•„์›ƒ์ž…๋‹ˆ๋‹ค. Finally๊ฐ€ ์„ธ ๊ตฌ๋…์„ ํ•ด์ œํ•ฉ๋‹ˆ๋‹ค. ๊ฒฐ๊ณผ๋Š” Boolean ์•„๋‹Œ String์ž…๋‹ˆ๋‹ค.

3. ์—ฐ๊ฒฐ ๊ด€์ฐฐ

# OnConnection์€ Boolean online์„ ๋ฐ›์•„ Wait(1000) ๋™์•ˆ ์ „ํ™˜ ์ˆ˜๋ฅผ ์…‰๋‹ˆ๋‹ค. Finally์—์„œ ํ•ด์ œํ•˜๊ณ  Main์€ ํšŸ์ˆ˜๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. 0์€ ๋ณ€ํ™” ์—†์Œ, 1์€ ํ•œ ๋ฒˆ์ด์ง€ True๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค. State.online์€ ๋งˆ์ง€๋ง‰์œผ๋กœ ๋ฐ›์€ ์ƒํƒœ์ด๋ฉฐ ์ดˆ๊ธฐ ์กฐํšŒ๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค.
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

๋งค๊ฐœ๋ณ€์ˆ˜ ๋ฐ ์‹คํ–‰ ์„ค๋ช…:

OnConnection์€ Boolean online์„ ๋ฐ›์•„ Wait(1000) ๋™์•ˆ ์ „ํ™˜ ์ˆ˜๋ฅผ ์…‰๋‹ˆ๋‹ค. Finally์—์„œ ํ•ด์ œํ•˜๊ณ  Main์€ ํšŸ์ˆ˜๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. 0์€ ๋ณ€ํ™” ์—†์Œ, 1์€ ํ•œ ๋ฒˆ์ด์ง€ True๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค. State.online์€ ๋งˆ์ง€๋ง‰์œผ๋กœ ๋ฐ›์€ ์ƒํƒœ์ด๋ฉฐ ์ดˆ๊ธฐ ์กฐํšŒ๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค.


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

Basic