API UO FindDistance ko - LIHACHTETAN/ClassicUO-BadNewbie-BasicIDE GitHub Wiki
UO.FindDistance
ClassicUO โข Runtime API
๊ธฐ๋ณธ ์ํ ๊ฒ์ ๋ฐ๊ฒฝ์ ์ฝ๊ฑฐ๋ ๋ณ๊ฒฝํฉ๋๋ค.
์ ํํ ๊ตฌ๋ฌธ
UO.FindDistance() -> Integer
UO.FindDistance(value:Any) -> Unit
๋งค๊ฐ๋ณ์
valueโ ์ ํ์ Integer์ ๋๋ค. ์ธ์๊ฐ ์์ผ๋ฉด ์ฝ๊ณ , value๊ฐ ์์ผ๋ฉด ์ค์ ํฉ๋๋ค. 0..255 ๋ฒ์๋ก ์ ํํ๋ฉฐ ์์๋ ๋ฌด์ ํ์ด ์๋ 0์ ๋๋ค. ์ runtime ๊ธฐ๋ณธ๊ฐ์ 18์ด๊ณ ๋ณต์ํ ์ํ๋ ๋ค๋ฅผ ์ ์์ต๋๋ค. ์์๋ 0 ๋ฐฉํฅ์ผ๋ก ์๋ผ ๋ด๋ฉฐ decimal/0x ์ซ์ ๋ฌธ์์ด๋ ํ์ฉํฉ๋๋ค. ์์์ ๋ณํ์ ํผํ๋ ค๋ฉด Integer๋ฅผ ์ฌ์ฉํ์ธ์.
๋ฐํ๊ฐ
์ธ์ ์์: Integer, ํ์ฌ ์ ํ(ํ์ผ ๋จ์ ๊ฑฐ๋ฆฌ)์ด๋ฉฐ ID, ๊ฐ์, Boolean์ด ์๋๋๋ค. 0์ ์คํจ๊ฐ ์๋๋ผ ๋ฒ์ 0์ ๋๋ค. value ์์: Unit, ๋ฐํ๊ฐ์ด ์์ผ๋ฉฐ TRUE/FALSE๋ ์ด์ ๊ฐ๋ ์๋๋๋ค. ์ค์ ํ FindDistance()์ผ๋ก ์ ์ฅ๊ฐ์ ์ฝ์ผ์ธ์.
๋์
- ๊ฑฐ๋ฆฌ๋ ํด๋ผ์ด์ธํธ์ ํ์ฌ ๊ฑฐ๋ฆฌ ๊ธฐ์ค์ ์์ max(abs(dx), abs(dy))๋ก ๊ณ์ฐํฉ๋๋ค. ๋๊ฐ์ ๋ ํ ํ์ผ์ด๋ฉฐ ๊ฒฝ๊ณ๋ฅผ ํฌํจํฉ๋๋ค. 0์ ๊ฐ์ X/Y๋ง ํ์ฉํฉ๋๋ค. ์ด๋ ์ค์ธ Mobile์ ๊ฑธ์ ๋๊ธฐ์ด์ ์ต์ข ์์น๋ฅผ ์ฌ์ฉํฉ๋๋ค.
- ํ์ฌ ์คํฌ๋ฆฝํธ runtime์ ์ ์ฅํ๋ฉฐ ๊ทธ ํ๋ก์์ ๋ค์ด ๊ณต์ ํฉ๋๋ค. ๋ ๋ฆฝ runtime์ ์ค์ ์ ๋ณ๊ฐ์ ๋๋ค. ์ฝ๊ธฐ/์ฐ๊ธฐ๋ ๊ฒ์, FindItem/FindCount/GetFoundItems ์ด๊ธฐํ, ํจํท ์ ์ก, ์บ๋ฆญํฐ ์ด๋, ๋จผ ๊ฐ์ฒด ๋ก๋ฉ์ ํ์ง ์์ต๋๋ค.
- FindTypeEx์ FindTypesArrayEx๋ ์ง๋ฉด ๊ฒ์์๋ง ์ด ์ ํ์ ์ฌ์ฉํ๊ณ ์ปจํ ์ด๋ ๋ด์ฉ์๋ ์ ์ฉํ์ง ์์ต๋๋ค. type, hue, Ignore, ๋ก๋ฉ๋ ๊ฐ์ฒด ์กฐ๊ฑด์ ์ ์ง๋ฉ๋๋ค. FindAtCoord๋ ๋ ์ ํ์ ๋ฌด์ํฉ๋๋ค. ํ์ฅ ๋ช ๋ น์ ๋ช ์์ distance/maxZ๋ ๊ธฐ๋ณธ๊ฐ์ ๋์ฒดํ ์ ์์ต๋๋ค. ํด๋น ์ธ์์ -1์ ๊ธฐ๋ณธ๊ฐ ์ฌ์ฉ์ด๋ฉฐ ์ด ์ค์ ์ -1๋ก ์ฐ๋ ๊ฒ๊ณผ ๋ค๋ฆ ๋๋ค. FindList๋ ์ปจํ ์ด๋์์๋ Z๋ฅผ ๊ฒ์ฌํ๋ฏ๋ก ์ ์์ธ๊ฐ ์ ์ฉ๋์ง ์์ต๋๋ค.
- ์์ ๊ฒ์ ์ ์ ์ ์ฅํ๊ณ Finally์์ ๋ณต์ํ์ธ์. ์๋ ๋ณต๊ตฌ๋ ์์ต๋๋ค. Finally๋ ์ ์ ์ข ๋ฃ์ ํฌ์ฐฉ ๊ฐ๋ฅํ ์คํฌ๋ฆฝํธ ์ค๋ฅ์ ์ ์ฉ๋๋ฉฐ ๋น์ ์ค์ง๋ ์ ๋ฆฌ ์๋จ์ผ๋ก ์ฌ์ฉํ๋ฉด ์ ๋ฉ๋๋ค.
- ์ฐธ๊ณ : Stealth FindDistance. ์ด ํด๋ผ์ด์ธํธ์ ๊ณ ์ ๊ธฐ๋ณธ๊ฐ/๋ฒ์๋ FindDistance 18 / 0..255, FindVertical 2 / 0..120์ ๋๋ค. ์ Basic ๋ฌธ๋ฒ๊ณผ ํ์ฅ ํํฐ๋ ์ด ํ๋ก์ ํธ๋ฅผ ์ค๋ช ํฉ๋๋ค.
๋ด๋ถ ํจ์: ํธ์ถ๋ถํฐ ๊ฒฐ๊ณผ๊น์ง
์ค์ ๋ด๋ถ ๋จ๊ณ์ ๋๋ค. CountGroundInRange๋ ์์ ํ ์ฌ์ฉ์ ํจ์์ด๋ฉฐ ์จ๊ฒจ์ง ๋ด์ฅ ๋ช ๋ น์ด ์๋๋๋ค.
1. ExecuteStealthCompatibility
์ธ์ 0๊ฐ๋ ์ฝ๊ธฐ๋ฅผ, 1๊ฐ๋ value ๋ณํ ํ ์ฐ๊ธฐ๋ฅผ ์ ํํฉ๋๋ค. ๋ฉํ๋ฐ์ดํฐ๋ Integer์ Unit์ ๊ตฌ๋ถํฉ๋๋ค.
์ธ์ ์์: Integer, ํ์ฌ ์ ํ(ํ์ผ ๋จ์ ๊ฑฐ๋ฆฌ)์ด๋ฉฐ ID, ๊ฐ์, Boolean์ด ์๋๋๋ค. 0์ ์คํจ๊ฐ ์๋๋ผ ๋ฒ์ 0์ ๋๋ค. value ์์: Unit, ๋ฐํ๊ฐ์ด ์์ผ๋ฉฐ TRUE/FALSE๋ ์ด์ ๊ฐ๋ ์๋๋๋ค. ์ค์ ํ FindDistance()์ผ๋ก ์ ์ฅ๊ฐ์ ์ฝ์ผ์ธ์.
ํ๋ก์ ํธ ์์ค: external/InjectionScript/src/InjectionScript/Runtime/InjectionApiUO.cs; ํจ์ ExecuteStealthCompatibility.
2. GetFindDistance
Bridge๋ runtime ์ค์ ์ ์ฝ๊ฑฐ๋ ์ ์๋ฅผ ์ ํํ์ฌ ์ ์ฅํฉ๋๋ค. ์๋๋ฅผ ์ํํ์ง ์์ต๋๋ค.
์ธ์ ์์: Integer, ํ์ฌ ์ ํ(ํ์ผ ๋จ์ ๊ฑฐ๋ฆฌ)์ด๋ฉฐ ID, ๊ฐ์, Boolean์ด ์๋๋๋ค. 0์ ์คํจ๊ฐ ์๋๋ผ ๋ฒ์ 0์ ๋๋ค. value ์์: Unit, ๋ฐํ๊ฐ์ด ์์ผ๋ฉฐ TRUE/FALSE๋ ์ด์ ๊ฐ๋ ์๋๋๋ค. ์ค์ ํ FindDistance()์ผ๋ก ์ ์ฅ๊ฐ์ ์ฝ์ผ์ธ์.
ํ๋ก์ ํธ ์์ค: src/ClassicUO.Client/Game/Managers/ClassicUOInjectionApiBridge.cs; ํจ์ GetFindDistance.
3. SetFindDistance
Bridge๋ runtime ์ค์ ์ ์ฝ๊ฑฐ๋ ์ ์๋ฅผ ์ ํํ์ฌ ์ ์ฅํฉ๋๋ค. ์๋๋ฅผ ์ํํ์ง ์์ต๋๋ค.
์ ํ์ Integer์ ๋๋ค. ์ธ์๊ฐ ์์ผ๋ฉด ์ฝ๊ณ , value๊ฐ ์์ผ๋ฉด ์ค์ ํฉ๋๋ค. 0..255 ๋ฒ์๋ก ์ ํํ๋ฉฐ ์์๋ ๋ฌด์ ํ์ด ์๋ 0์ ๋๋ค. ์ runtime ๊ธฐ๋ณธ๊ฐ์ 18์ด๊ณ ๋ณต์ํ ์ํ๋ ๋ค๋ฅผ ์ ์์ต๋๋ค. ์์๋ 0 ๋ฐฉํฅ์ผ๋ก ์๋ผ ๋ด๋ฉฐ decimal/0x ์ซ์ ๋ฌธ์์ด๋ ํ์ฉํฉ๋๋ค. ์์์ ๋ณํ์ ํผํ๋ ค๋ฉด Integer๋ฅผ ์ฌ์ฉํ์ธ์.
ํ๋ก์ ํธ ์์ค: src/ClassicUO.Client/Game/Managers/ClassicUOInjectionApiBridge.cs; ํจ์ SetFindDistance.
4. FindType
ํ์ ๊ฒ์์ ๋ช ์์ ๋์ฒด ๊ฐ์ด ์์ ๋ ์ค์ ์ ์ฝ์ต๋๋ค. ์ง๋ฉด Item๊ณผ Mobile์ ํด๋น ๊ฑฐ๋ฆฌ ๋ฐ ๋์ด ํํฐ๊ฐ ์ ์ฉ๋ฉ๋๋ค.
FindTypeEx์ FindTypesArrayEx๋ ์ง๋ฉด ๊ฒ์์๋ง ์ด ์ ํ์ ์ฌ์ฉํ๊ณ ์ปจํ ์ด๋ ๋ด์ฉ์๋ ์ ์ฉํ์ง ์์ต๋๋ค. type, hue, Ignore, ๋ก๋ฉ๋ ๊ฐ์ฒด ์กฐ๊ฑด์ ์ ์ง๋ฉ๋๋ค. FindAtCoord๋ ๋ ์ ํ์ ๋ฌด์ํฉ๋๋ค. ํ์ฅ ๋ช ๋ น์ ๋ช ์์ distance/maxZ๋ ๊ธฐ๋ณธ๊ฐ์ ๋์ฒดํ ์ ์์ต๋๋ค. ํด๋น ์ธ์์ -1์ ๊ธฐ๋ณธ๊ฐ ์ฌ์ฉ์ด๋ฉฐ ์ด ์ค์ ์ -1๋ก ์ฐ๋ ๊ฒ๊ณผ ๋ค๋ฆ ๋๋ค. FindList๋ ์ปจํ ์ด๋์์๋ Z๋ฅผ ๊ฒ์ฌํ๋ฏ๋ก ์ ์์ธ๊ฐ ์ ์ฉ๋์ง ์์ต๋๋ค.
ํ๋ก์ ํธ ์์ค: src/ClassicUO.Client/Game/Managers/ClassicUOInjectionApiBridge.cs; ํจ์ FindType.
5. FindList
ํ์ ๊ฒ์์ ๋ช ์์ ๋์ฒด ๊ฐ์ด ์์ ๋ ์ค์ ์ ์ฝ์ต๋๋ค. ์ง๋ฉด Item๊ณผ Mobile์ ํด๋น ๊ฑฐ๋ฆฌ ๋ฐ ๋์ด ํํฐ๊ฐ ์ ์ฉ๋ฉ๋๋ค.
FindTypeEx์ FindTypesArrayEx๋ ์ง๋ฉด ๊ฒ์์๋ง ์ด ์ ํ์ ์ฌ์ฉํ๊ณ ์ปจํ ์ด๋ ๋ด์ฉ์๋ ์ ์ฉํ์ง ์์ต๋๋ค. type, hue, Ignore, ๋ก๋ฉ๋ ๊ฐ์ฒด ์กฐ๊ฑด์ ์ ์ง๋ฉ๋๋ค. FindAtCoord๋ ๋ ์ ํ์ ๋ฌด์ํฉ๋๋ค. ํ์ฅ ๋ช ๋ น์ ๋ช ์์ distance/maxZ๋ ๊ธฐ๋ณธ๊ฐ์ ๋์ฒดํ ์ ์์ต๋๋ค. ํด๋น ์ธ์์ -1์ ๊ธฐ๋ณธ๊ฐ ์ฌ์ฉ์ด๋ฉฐ ์ด ์ค์ ์ -1๋ก ์ฐ๋ ๊ฒ๊ณผ ๋ค๋ฆ ๋๋ค. FindList๋ ์ปจํ ์ด๋์์๋ Z๋ฅผ ๊ฒ์ฌํ๋ฏ๋ก ์ ์์ธ๊ฐ ์ ์ฉ๋์ง ์์ต๋๋ค.
ํ๋ก์ ํธ ์์ค: src/ClassicUO.Client/Game/Managers/ClassicUOInjectionApiBridge.cs; ํจ์ FindList.
ํ์ฌ ์คํฌ๋ฆฝํธ runtime์ ์ ์ฅํ๋ฉฐ ๊ทธ ํ๋ก์์ ๋ค์ด ๊ณต์ ํฉ๋๋ค. ๋ ๋ฆฝ runtime์ ์ค์ ์ ๋ณ๊ฐ์ ๋๋ค. ์ฝ๊ธฐ/์ฐ๊ธฐ๋ ๊ฒ์, FindItem/FindCount/GetFoundItems ์ด๊ธฐํ, ํจํท ์ ์ก, ์บ๋ฆญํฐ ์ด๋, ๋จผ ๊ฐ์ฒด ๋ก๋ฉ์ ํ์ง ์์ต๋๋ค.
์์
์ฝ๊ธฐ, ์ค์ ๋ฐ ๋ฒ์ ์ ํ ํ์ธ
# ์ฝ๊ธฐ, ์ค์ ๋ฐ ๋ฒ์ ์ ํ ํ์ธ
#
# ๊ธฐ๋ณธ ์ํ ๊ฒ์ ๋ฐ๊ฒฝ์ ์ฝ๊ฑฐ๋ ๋ณ๊ฒฝํฉ๋๋ค.
#
# ์ธ์ ์์: Integer, ํ์ฌ ์ ํ(ํ์ผ ๋จ์ ๊ฑฐ๋ฆฌ)์ด๋ฉฐ ID, ๊ฐ์, Boolean์ด ์๋๋๋ค. 0์ ์คํจ๊ฐ ์๋๋ผ ๋ฒ์ 0์
๋๋ค. value ์์: Unit,
# ๋ฐํ๊ฐ์ด ์์ผ๋ฉฐ TRUE/FALSE๋ ์ด์ ๊ฐ๋ ์๋๋๋ค. ์ค์ ํ FindDistance()์ผ๋ก ์ ์ฅ๊ฐ์ ์ฝ์ผ์ธ์.
SUB Main()
# previous๋ ์ค์ ์ค์ ์ ์ ์ฅํฉ๋๋ค. value:=5์ ์ผ๋ฐ ์ ํ์ด๋ฉฐ 1000์ 255์ผ๋ก ์ ํ๋ฉ๋๋ค. Print๋ ๋ณ๋ ์ฝ๊ธฐ๋ก ๊ฒฐ๊ณผ๋ฅผ ์ถ๋ ฅํฉ๋๋ค. Finally๋
# previous๋ฅผ ๋ณต์ํฉ๋๋ค.
VAR previous = UO.FindDistance()
TRY
UO.FindDistance(value:=5)
UO.Print(CStr(UO.FindDistance()))
UO.FindDistance(1000)
UO.Print(CStr(UO.FindDistance()))
FINALLY
UO.FindDistance(previous)
END TRY
END SUB
๋งค๊ฐ๋ณ์ ๋ฐ ์คํ ์ค๋ช :
- previous๋ ์ค์ ์ค์ ์ ์ ์ฅํฉ๋๋ค. value:=5์ ์ผ๋ฐ ์ ํ์ด๋ฉฐ 1000์ 255์ผ๋ก ์ ํ๋ฉ๋๋ค. Print๋ ๋ณ๋ ์ฝ๊ธฐ๋ก ๊ฒฐ๊ณผ๋ฅผ ์ถ๋ ฅํฉ๋๋ค. Finally๋ previous๋ฅผ ๋ณต์ํฉ๋๋ค.
์์ ์ง๋ฉด ๊ฒ์
# ์์ ์ง๋ฉด ๊ฒ์
#
# ๊ธฐ๋ณธ ์ํ ๊ฒ์ ๋ฐ๊ฒฝ์ ์ฝ๊ฑฐ๋ ๋ณ๊ฒฝํฉ๋๋ค.
#
# ์ธ์ ์์: Integer, ํ์ฌ ์ ํ(ํ์ผ ๋จ์ ๊ฑฐ๋ฆฌ)์ด๋ฉฐ ID, ๊ฐ์, Boolean์ด ์๋๋๋ค. 0์ ์คํจ๊ฐ ์๋๋ผ ๋ฒ์ 0์
๋๋ค. value ์์: Unit,
# ๋ฐํ๊ฐ์ด ์์ผ๋ฉฐ TRUE/FALSE๋ ์ด์ ๊ฐ๋ ์๋๋๋ค. ์ค์ ํ FindDistance()์ผ๋ก ์ ์ฅ๊ฐ์ ์ฝ์ผ์ธ์.
SUB Main()
# previous๋ ํธ์ถ์์ ์ค์ ์
๋๋ค. 5์ FindDistance๋ง ๋ณ๊ฒฝํ๊ณ ๋ค๋ฅธ ์ ํ์ ์ ์งํฉ๋๋ค. 0x0EED๋ ๊ธ ๊ทธ๋ํฝ, -1์ ๋ชจ๋ ์,
# Container=-1์ ์๋, FALSE๋ ์ปจํ
์ด๋ ์ฌ๊ท ์์์
๋๋ค. id๋ serial์ด๋ฉฐ <> 0์ ์กด์ฌ ์ฌ๋ถ ๊ฒ์ฌ์
๋๋ค. FindCount๋ ๊ฐ์ฒด/์คํ
# ๊ฐ์์
๋๋ค. Finally๋ ์ค์ ๋ง ๋ณต์ํ๊ณ ๊ฒ์ ๋ชฉ๋ก์ ๋ณต์ํ์ง ์์ต๋๋ค.
VAR previous = UO.FindDistance()
TRY
UO.FindDistance(5)
VAR id = UO.FindTypeEx(0x0EED, -1, -1, FALSE)
IF id <> 0 THEN
UO.Print(HEX(id) + ':' + CStr(UO.FindCount()))
ELSE
UO.Print('0')
END IF
FINALLY
UO.FindDistance(previous)
END TRY
END SUB
๋งค๊ฐ๋ณ์ ๋ฐ ์คํ ์ค๋ช :
- previous๋ ํธ์ถ์์ ์ค์ ์ ๋๋ค. 5์ FindDistance๋ง ๋ณ๊ฒฝํ๊ณ ๋ค๋ฅธ ์ ํ์ ์ ์งํฉ๋๋ค. 0x0EED๋ ๊ธ ๊ทธ๋ํฝ, -1์ ๋ชจ๋ ์, Container=-1์ ์๋, FALSE๋ ์ปจํ ์ด๋ ์ฌ๊ท ์์์ ๋๋ค. id๋ serial์ด๋ฉฐ <> 0์ ์กด์ฌ ์ฌ๋ถ ๊ฒ์ฌ์ ๋๋ค. FindCount๋ ๊ฐ์ฒด/์คํ ๊ฐ์์ ๋๋ค. Finally๋ ์ค์ ๋ง ๋ณต์ํ๊ณ ๊ฒ์ ๋ชฉ๋ก์ ๋ณต์ํ์ง ์์ต๋๋ค.
์์ ํ CountGroundInRange ํจ์
# ์์ ํ CountGroundInRange ํจ์
#
# ๊ธฐ๋ณธ ์ํ ๊ฒ์ ๋ฐ๊ฒฝ์ ์ฝ๊ฑฐ๋ ๋ณ๊ฒฝํฉ๋๋ค.
#
# ์ธ์ ์์: Integer, ํ์ฌ ์ ํ(ํ์ผ ๋จ์ ๊ฑฐ๋ฆฌ)์ด๋ฉฐ ID, ๊ฐ์, Boolean์ด ์๋๋๋ค. 0์ ์คํจ๊ฐ ์๋๋ผ ๋ฒ์ 0์
๋๋ค. value ์์: Unit,
# ๋ฐํ๊ฐ์ด ์์ผ๋ฉฐ TRUE/FALSE๋ ์ด์ ๊ฐ๋ ์๋๋๋ค. ์ค์ ํ FindDistance()์ผ๋ก ์ ์ฅ๊ฐ์ ์ฝ์ผ์ธ์.
SUB Main()
# CountGroundInRange(graphic, radius, height)๋ ๋ ์ ํ์ ์ ์ฅํ๊ณ radius=5, height=10์ผ๋ก graphic=0x0EED๋ฅผ
# ๊ฒ์ํ์ฌ FindCount()๋ฅผ ๋ฐํํฉ๋๋ค. ํ ์คํ์ ๊ฐ์ฒด ํ๋์
๋๋ค. ์์ ํ ํจ์๋ Main ์๋์ ์์ต๋๋ค. Return์ผ๋ก ๋๊ฐ๋ Finally๊ฐ ๋ ์ ํ์
# ๋ณต์ํ๋ฉฐ ๊ฒ์ ๊ฒฐ๊ณผ๋ ์ ์ง๋ฉ๋๋ค.
VAR count = CountGroundInRange(0x0EED, 5, 10)
UO.Print(CStr(count))
END SUB
FUNCTION CountGroundInRange(graphic, radius, height)
VAR oldDistance = UO.FindDistance()
VAR oldVertical = UO.FindVertical()
TRY
UO.FindDistance(radius)
UO.FindVertical(height)
UO.FindTypeEx(graphic, -1, -1, FALSE)
RETURN UO.FindCount()
FINALLY
UO.FindDistance(oldDistance)
UO.FindVertical(oldVertical)
END TRY
END FUNCTION
๋งค๊ฐ๋ณ์ ๋ฐ ์คํ ์ค๋ช :
- CountGroundInRange(graphic, radius, height)๋ ๋ ์ ํ์ ์ ์ฅํ๊ณ radius=5, height=10์ผ๋ก graphic=0x0EED๋ฅผ ๊ฒ์ํ์ฌ FindCount()๋ฅผ ๋ฐํํฉ๋๋ค. ํ ์คํ์ ๊ฐ์ฒด ํ๋์ ๋๋ค. ์์ ํ ํจ์๋ Main ์๋์ ์์ต๋๋ค. Return์ผ๋ก ๋๊ฐ๋ Finally๊ฐ ๋ ์ ํ์ ๋ณต์ํ๋ฉฐ ๊ฒ์ ๊ฒฐ๊ณผ๋ ์ ์ง๋ฉ๋๋ค.