API UO FindAtCoord ko - LIHACHTETAN/ClassicUO-BadNewbie-BasicIDE GitHub Wiki
UO.FindAtCoord
ClassicUO โข Runtime API
ํ์ฌ ์ง๋์์ ์ ํํ X/Y ์นธ์ ๋ก๋๋ ์๋ ๊ฐ์ฒด๋ฅผ ์ฐพ์ต๋๋ค.
์ ํํ ๊ตฌ๋ฌธ
UO.FindAtCoord(X:Any, Y:Any) -> Integer
๋งค๊ฐ๋ณ์
Xโ ์๋ ๊ฐ๋ก ์ขํ, Integer 0..65535. ํ์์ด๋ฉฐ ์ปจํ ์ด๋ ์ฐฝ์ ํฝ์ ์ขํ๊ฐ ์๋๋๋ค.Yโ ์๋ ์ธ๋ก ์ขํ, Integer 0..65535. ํ์์ ๋๋ค. Z, ์ง๋, ํ์ , ๋ฐ๊ฒฝ์ ๋ํ ์ถ๊ฐ ์ธ์๋ ์์ต๋๋ค.
๋ฐํ๊ฐ
Integer: ์ด ํด๋ผ์ด์ธํธ ๊ฒฐ๊ณผ ๋ชฉ๋ก์์ ์ฒ์ ์ผ์นํ ๊ฐ์ฒด์ serial. ๊ฒฐ๊ณผ๊ฐ ์๊ฑฐ๋, ํ๋ ์ด์ด๊ฐ ์๊ฑฐ๋ ์ ๊ฑฐ๋์๊ฑฐ๋, ์ขํ๊ฐ 0..65535 ๋ฒ์ ๋ฐ์ด๋ฉด 0์ ๋๋ค. ํ์ , ์๋, Boolean์ด ์๋ ๊ฐ์ฒด ID์ ๋๋ค. 32๋นํธ๋ฅผ ๋ชจ๋ ๋ณด์กดํ๋ฏ๋ก = TRUE ๋๋ > 0 ๋์ <> 0์ผ๋ก ํ์ธํฉ๋๋ค. ๊ฐ์ ID๊ฐ FindItem()์ด ๋ฉ๋๋ค.
๋์
- ์ ๊ฑฐ๋์ง ์์ ์ง๋ฉด Item๊ณผ Mobile์ ๊ฒ์ฌํ๋ฉฐ ํด๋น ์นธ์ ํ๋ ์ด์ด๋ ํฌํจํฉ๋๋ค. ์ปจํ ์ด๋ ๋ด์ฉ๋ฌผ๊ณผ ์ฅ์ฐฉ ์์ดํ ์ ์ ์ธํฉ๋๋ค. ์ด๋ค์ X/Y๋ ์๋ ์ขํ๊ฐ ์๋๋๋ค. Ignore ๋ชฉ๋ก์ serial๋ ์ ์ธํฉ๋๋ค.
- ์ ํํ X/Y์ ์๋ ๋ชจ๋ Z ๋์ด๊ฐ ๋์์ ๋๋ค. FindDistance์ FindVertical์ ์ด ๊ฒ์์ ์ ํํ์ง ์์ต๋๋ค. ํ์ฌ ์๋์ ๋ก๋๋ ๊ฐ์ฒด๋ง ๋ณด๋ฉฐ ์งํ, ์ ์ ํ์ผ, ๋ค๋ฅธ ์ง๋๋ ๋ก๋ํ์ง ์์ต๋๋ค. ํจํท ์ ์ก, ํ๊น ์ปค์ ์ด๊ธฐ, ์์ดํ ์ด๋์ ํ์ง ์์ต๋๋ค.
- ํธ์ถํ ๋๋ง๋ค ์ด์ ๊ฒ์์ ๋จผ์ ์ง์๋๋ค. FindCount()๋ ๊ฐ์ฒด ์, FindFullQuantity()๋ ์คํ ๋จ์ ํฉ๊ณ(Mobile์ ํ๋), GetFoundItems()๋ serial ๋ชฉ๋ก์ ๋๋ค. Item ๋ค์ Mobile์ ๊ฐ ์ปฌ๋ ์ ์ ํ์ฌ ์ด๊ฑฐ ์์๋ก ๊ฒ์ฌํฉ๋๋ค. ๋ค์ ๊ฒ์์ด ๊ฒฐ๊ณผ๋ฅผ ๋ฐ๊พธ๊ธฐ ์ ์ ๋ชฉ๋ก์ ์ ์ฅํ์ธ์.
- ์ฐธ๊ณ : Stealth FindAtCoord. ์ ์์์ ํํฐ๋ ์ด ํด๋ผ์ด์ธํธ์ ๊ตฌํ์ ์ค๋ช ํฉ๋๋ค.
๋ด๋ถ ํจ์: ํธ์ถ๋ถํฐ ๊ฒฐ๊ณผ๊น์ง
์ค์ ๋ด๋ถ ์ฒ๋ฆฌ ๋จ๊ณ์ ๋๋ค. CountGraphicAt๋ ์์ ํ ์ ์๋ ์คํฌ๋ฆฝํธ ๋ณด์กฐ ํจ์์ด๋ฉฐ ์ถ๊ฐ ๋ด์ฅ ๋ช ๋ น์ด ์๋๋๋ค.
1. ExecuteStealthCompatibility
๋ฑ๋ก๋ ์คํ ๊ฒฝ๋ก๊ฐ ๋ ์์น ์ธ์ ๋๋ ์ด๋ฆ ์๋ X/Y ์ธ์๋ฅผ ๋ณํํ๋ฉฐ ๋ธ๋ฆฌ์ง์ Integer๊ฐ ๋ฐํ๊ฐ์ด ๋ฉ๋๋ค.
Integer: ์ด ํด๋ผ์ด์ธํธ ๊ฒฐ๊ณผ ๋ชฉ๋ก์์ ์ฒ์ ์ผ์นํ ๊ฐ์ฒด์ serial. ๊ฒฐ๊ณผ๊ฐ ์๊ฑฐ๋, ํ๋ ์ด์ด๊ฐ ์๊ฑฐ๋ ์ ๊ฑฐ๋์๊ฑฐ๋, ์ขํ๊ฐ 0..65535 ๋ฒ์ ๋ฐ์ด๋ฉด 0์ ๋๋ค. ํ์ , ์๋, Boolean์ด ์๋ ๊ฐ์ฒด ID์ ๋๋ค. 32๋นํธ๋ฅผ ๋ชจ๋ ๋ณด์กดํ๋ฏ๋ก = TRUE ๋๋ > 0 ๋์ <> 0์ผ๋ก ํ์ธํฉ๋๋ค. ๊ฐ์ ID๊ฐ FindItem()์ด ๋ฉ๋๋ค.
ํ๋ก์ ํธ ์์ค: external/InjectionScript/src/InjectionScript/Runtime/InjectionApiUO.cs; ํจ์ ExecuteStealthCompatibility.
2. FindAtCoord
๊ฒ์ ์ค๋ ๋์์ ์ด์ ๊ฒฐ๊ณผ๋ฅผ ์ง์ฐ๊ณ ํ๋ ์ด์ด์ ์ขํ ๋ฒ์๋ฅผ ๊ฒ์ฌํ ํ ์ผ์นํ๋ ์ง๋ฉด Item๊ณผ Mobile๋ง ์ํํฉ๋๋ค. ์ปจํ ์ด๋ ๋ด์ฉ๋ฌผ์ ์ ์ธํฉ๋๋ค.
์ ๊ฑฐ๋์ง ์์ ์ง๋ฉด Item๊ณผ Mobile์ ๊ฒ์ฌํ๋ฉฐ ํด๋น ์นธ์ ํ๋ ์ด์ด๋ ํฌํจํฉ๋๋ค. ์ปจํ ์ด๋ ๋ด์ฉ๋ฌผ๊ณผ ์ฅ์ฐฉ ์์ดํ ์ ์ ์ธํฉ๋๋ค. ์ด๋ค์ X/Y๋ ์๋ ์ขํ๊ฐ ์๋๋๋ค. Ignore ๋ชฉ๋ก์ serial๋ ์ ์ธํฉ๋๋ค.
ํ๋ก์ ํธ ์์ค: src/ClassicUO.Client/Game/Managers/ClassicUOInjectionApiBridge.cs; ํจ์ FindAtCoord.
3. RegisterFound
์ผ์นํ ๊ฐ์ฒด๋ง๋ค ๊ฐ์๋ฅผ ์ฆ๊ฐ์ํค๊ณ serial์ ์ถ๊ฐํฉ๋๋ค. ์ฒซ serial์ FindItem์ผ๋ก ๋จ์ผ๋ฉฐ Item.Amount๋ ์ต์ ํ ๋จ์, Mobile์ ํ ๋จ์๋ฅผ ๋ํฉ๋๋ค.
ํธ์ถํ ๋๋ง๋ค ์ด์ ๊ฒ์์ ๋จผ์ ์ง์๋๋ค. FindCount()๋ ๊ฐ์ฒด ์, FindFullQuantity()๋ ์คํ ๋จ์ ํฉ๊ณ(Mobile์ ํ๋), GetFoundItems()๋ serial ๋ชฉ๋ก์ ๋๋ค. Item ๋ค์ Mobile์ ๊ฐ ์ปฌ๋ ์ ์ ํ์ฌ ์ด๊ฑฐ ์์๋ก ๊ฒ์ฌํฉ๋๋ค. ๋ค์ ๊ฒ์์ด ๊ฒฐ๊ณผ๋ฅผ ๋ฐ๊พธ๊ธฐ ์ ์ ๋ชฉ๋ก์ ์ ์ฅํ์ธ์.
ํ๋ก์ ํธ ์์ค: src/ClassicUO.Client/Game/Managers/ClassicUOInjectionApiBridge.cs; ํจ์ RegisterFound.
์ ํํ X/Y์ ์๋ ๋ชจ๋ Z ๋์ด๊ฐ ๋์์ ๋๋ค. FindDistance์ FindVertical์ ์ด ๊ฒ์์ ์ ํํ์ง ์์ต๋๋ค. ํ์ฌ ์๋์ ๋ก๋๋ ๊ฐ์ฒด๋ง ๋ณด๋ฉฐ ์งํ, ์ ์ ํ์ผ, ๋ค๋ฅธ ์ง๋๋ ๋ก๋ํ์ง ์์ต๋๋ค. ํจํท ์ ์ก, ํ๊น ์ปค์ ์ด๊ธฐ, ์์ดํ ์ด๋์ ํ์ง ์์ต๋๋ค.
์์
๊ฐ์ฒด ID ํ๋ ์ฝ๊ธฐ
# ๊ฐ์ฒด ID ํ๋ ์ฝ๊ธฐ
#
# ํ์ฌ ์ง๋์์ ์ ํํ X/Y ์นธ์ ๋ก๋๋ ์๋ ๊ฐ์ฒด๋ฅผ ์ฐพ์ต๋๋ค.
#
# Integer: ์ด ํด๋ผ์ด์ธํธ ๊ฒฐ๊ณผ ๋ชฉ๋ก์์ ์ฒ์ ์ผ์นํ ๊ฐ์ฒด์ serial. ๊ฒฐ๊ณผ๊ฐ ์๊ฑฐ๋, ํ๋ ์ด์ด๊ฐ ์๊ฑฐ๋ ์ ๊ฑฐ๋์๊ฑฐ๋, ์ขํ๊ฐ 0..65535 ๋ฒ์ ๋ฐ์ด๋ฉด
# 0์
๋๋ค. ํ์
, ์๋, Boolean์ด ์๋ ๊ฐ์ฒด ID์
๋๋ค. 32๋นํธ๋ฅผ ๋ชจ๋ ๋ณด์กดํ๋ฏ๋ก = TRUE ๋๋ > 0 ๋์ <> 0์ผ๋ก ํ์ธํฉ๋๋ค. ๊ฐ์ ID๊ฐ
# FindItem()์ด ๋ฉ๋๋ค.
SUB Main()
# 1445์ 1690์ ์๋ X/Y ์์์ด๋ฏ๋ก ์ํ๋ ์นธ์ผ๋ก ๋ฐ๊พธ์ธ์. id๋ serial์ ์ ์ฅํ๊ณ HEX๋ ํ์์ ๋ฐ๊ฟ๋๋ค. <> 0์ ๊ฒฐ๊ณผ ์กด์ฌ ์ฌ๋ถ์ด๋ฉฐ ์๋์ด
# ์๋๋๋ค.
VAR id = UO.FindAtCoord(1445, 1690)
IF id <> 0 THEN
UO.Print(HEX(id))
ELSE
UO.Print('No loaded object')
END IF
END SUB
๋งค๊ฐ๋ณ์ ๋ฐ ์คํ ์ค๋ช :
- 1445์ 1690์ ์๋ X/Y ์์์ด๋ฏ๋ก ์ํ๋ ์นธ์ผ๋ก ๋ฐ๊พธ์ธ์. id๋ serial์ ์ ์ฅํ๊ณ HEX๋ ํ์์ ๋ฐ๊ฟ๋๋ค. <> 0์ ๊ฒฐ๊ณผ ์กด์ฌ ์ฌ๋ถ์ด๋ฉฐ ์๋์ด ์๋๋๋ค.
ํ๋ ์ด์ด ์นธ์ ๋ชจ๋ ๊ฐ์ฒด ํ์ธ
# ํ๋ ์ด์ด ์นธ์ ๋ชจ๋ ๊ฐ์ฒด ํ์ธ
#
# ํ์ฌ ์ง๋์์ ์ ํํ X/Y ์นธ์ ๋ก๋๋ ์๋ ๊ฐ์ฒด๋ฅผ ์ฐพ์ต๋๋ค.
#
# Integer: ์ด ํด๋ผ์ด์ธํธ ๊ฒฐ๊ณผ ๋ชฉ๋ก์์ ์ฒ์ ์ผ์นํ ๊ฐ์ฒด์ serial. ๊ฒฐ๊ณผ๊ฐ ์๊ฑฐ๋, ํ๋ ์ด์ด๊ฐ ์๊ฑฐ๋ ์ ๊ฑฐ๋์๊ฑฐ๋, ์ขํ๊ฐ 0..65535 ๋ฒ์ ๋ฐ์ด๋ฉด
# 0์
๋๋ค. ํ์
, ์๋, Boolean์ด ์๋ ๊ฐ์ฒด ID์
๋๋ค. 32๋นํธ๋ฅผ ๋ชจ๋ ๋ณด์กดํ๋ฏ๋ก = TRUE ๋๋ > 0 ๋์ <> 0์ผ๋ก ํ์ธํฉ๋๋ค. ๊ฐ์ ID๊ฐ
# FindItem()์ด ๋ฉ๋๋ค.
SUB Main()
# x/y๋ ํ๋ ์ด์ด์์ ์ฝ๊ณ ids๋ ๋ชฉ๋ก์ ์ ์ฅํฉ๋๋ค. ๊ฐ ID๋ ์คํ ์ ์ฒด๋ฅผ ํฌํจํ์ฌ ๊ฐ์ฒด ํ๋๋ฅผ ๋ํ๋
๋๋ค. GetType(id)๋ graphic/body๋ฅผ
# ์ฝ์ต๋๋ค. ์์ดํ
์ ์ ํํ๊ฑฐ๋ ์ฌ์ฉํ์ง ์์ต๋๋ค.
VAR x = UO.GetX('self')
VAR y = UO.GetY('self')
UO.FindAtCoord(x, y)
VAR ids = UO.GetFoundItems()
FOR EACH id IN ids
UO.Print(HEX(id) + ' type=' + HEX(UO.GetType(id)))
NEXT
END SUB
๋งค๊ฐ๋ณ์ ๋ฐ ์คํ ์ค๋ช :
- x/y๋ ํ๋ ์ด์ด์์ ์ฝ๊ณ ids๋ ๋ชฉ๋ก์ ์ ์ฅํฉ๋๋ค. ๊ฐ ID๋ ์คํ ์ ์ฒด๋ฅผ ํฌํจํ์ฌ ๊ฐ์ฒด ํ๋๋ฅผ ๋ํ๋ ๋๋ค. GetType(id)๋ graphic/body๋ฅผ ์ฝ์ต๋๋ค. ์์ดํ ์ ์ ํํ๊ฑฐ๋ ์ฌ์ฉํ์ง ์์ต๋๋ค.
์์ ํ CountGraphicAt ๋ณด์กฐ ํจ์
# ์์ ํ CountGraphicAt ๋ณด์กฐ ํจ์
#
# ํ์ฌ ์ง๋์์ ์ ํํ X/Y ์นธ์ ๋ก๋๋ ์๋ ๊ฐ์ฒด๋ฅผ ์ฐพ์ต๋๋ค.
#
# Integer: ์ด ํด๋ผ์ด์ธํธ ๊ฒฐ๊ณผ ๋ชฉ๋ก์์ ์ฒ์ ์ผ์นํ ๊ฐ์ฒด์ serial. ๊ฒฐ๊ณผ๊ฐ ์๊ฑฐ๋, ํ๋ ์ด์ด๊ฐ ์๊ฑฐ๋ ์ ๊ฑฐ๋์๊ฑฐ๋, ์ขํ๊ฐ 0..65535 ๋ฒ์ ๋ฐ์ด๋ฉด
# 0์
๋๋ค. ํ์
, ์๋, Boolean์ด ์๋ ๊ฐ์ฒด ID์
๋๋ค. 32๋นํธ๋ฅผ ๋ชจ๋ ๋ณด์กดํ๋ฏ๋ก = TRUE ๋๋ > 0 ๋์ <> 0์ผ๋ก ํ์ธํฉ๋๋ค. ๊ฐ์ ID๊ฐ
# FindItem()์ด ๋ฉ๋๋ค.
SUB Main()
# CountGraphicAt(x, y, graphic)๋ ํ ๋ฒ ๊ฒ์ํ ๋ค ์ ์ฅํ ID๋ฅผ ์ํํ์ฌ ํด๋น ๊ทธ๋ํฝ์ ๊ฐ์ฒด๋ฅผ ์
๋๋ค. graphic=0x0EED๋ ๊ธํ์
๋๋ค.
# ๋ฐํ๊ฐ์ ๊ฐ์ฒด/์คํ ์์ด๋ฉฐ ๋จ์ ์ดํฉ์ด๋ true/false๊ฐ ์๋๋๋ค. ์คํ ํ๋๋ ํ๋๋ก ์
๋๋ค. Main ์๋์ ์ ์ฒด ์ ์๊ฐ ์์ต๋๋ค.
VAR count = CountGraphicAt(1445, 1690, 0x0EED)
UO.Print('Objects/stacks: ' + CStr(count))
END SUB
FUNCTION CountGraphicAt(x, y, graphic)
UO.FindAtCoord(x, y)
VAR ids = UO.GetFoundItems()
VAR count = 0
FOR EACH id IN ids
IF UO.GetType(id) = graphic THEN
count += 1
END IF
NEXT
RETURN count
END FUNCTION
๋งค๊ฐ๋ณ์ ๋ฐ ์คํ ์ค๋ช :
- CountGraphicAt(x, y, graphic)๋ ํ ๋ฒ ๊ฒ์ํ ๋ค ์ ์ฅํ ID๋ฅผ ์ํํ์ฌ ํด๋น ๊ทธ๋ํฝ์ ๊ฐ์ฒด๋ฅผ ์ ๋๋ค. graphic=0x0EED๋ ๊ธํ์ ๋๋ค. ๋ฐํ๊ฐ์ ๊ฐ์ฒด/์คํ ์์ด๋ฉฐ ๋จ์ ์ดํฉ์ด๋ true/false๊ฐ ์๋๋๋ค. ์คํ ํ๋๋ ํ๋๋ก ์ ๋๋ค. Main ์๋์ ์ ์ฒด ์ ์๊ฐ ์์ต๋๋ค.