API UO FindTypeEx ko - LIHACHTETAN/ClassicUO-BadNewbie-BasicIDE GitHub Wiki

UO.FindTypeEx

ClassicUO โ€ข Runtime API

์ปจํ…Œ์ด๋„ˆ ๋˜๋Š” ์ง€๋ฉด์—์„œ ์ง€์ •ํ•œ ๊ทธ๋ž˜ํ”ฝ๊ณผ ์ƒ‰์ƒ์„ ๊ฒ€์ƒ‰ํ•˜๊ณ  ์ผ์น˜ํ•˜๋Š” ID ํ•˜๋‚˜๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

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

UO.FindTypeEx(ObjType:Any, Color:Any, Container:Any, InSub:Any) -> Integer

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

  • ObjType โ€” Graphic/body์ด๋ฉฐ ๊ฐ์ฒด serial์ด ์•„๋‹™๋‹ˆ๋‹ค. 0..65534๋Š” ํŠน์ • ๊ทธ๋ž˜ํ”ฝ, -1 ๋˜๋Š” 0xFFFF๋Š” ๋ชจ๋“  ๊ทธ๋ž˜ํ”ฝ์ž…๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ์Œ์ˆ˜ Integer๋„ ํ•„ํ„ฐ๋ฅผ ํ•ด์ œํ•ฉ๋‹ˆ๋‹ค.
  • Color โ€” Hue์ด๋ฉฐ ์ˆ˜๋Ÿ‰์ด ์•„๋‹™๋‹ˆ๋‹ค. 0์€ ์—ผ์ƒ‰ ์—†์Œ, -1 ๋˜๋Š” 0xFFFF๋Š” ๋ชจ๋“  ์ƒ‰์ƒ์ž…๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ์Œ์ˆ˜ Integer๋„ ์ƒ‰์ƒ ํ•„ํ„ฐ๋ฅผ ํ•ด์ œํ•ฉ๋‹ˆ๋‹ค.
  • Container โ€” ์ง€๋ฉด: UO.Ground(), 0, -1, 0xFFFFFFFF ๋˜๋Š” ๋ฌธ์ž์—ด ground. ๋ฐฐ๋‚ญ: ๋ฌธ์ž์—ด backpack ๋˜๋Š” ๊ทธ serial. ์‹ญ์ง„์ˆ˜/hex serial๊ณผ AddObject ์ด๋ฆ„๋„ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. my๋Š” ์žฅ๋น„์™€ ์ค‘์ฒฉ ๊ฐ€๋ฐฉ์„ ํฌํ•จํ•œ ์ž์‹ ์˜ ์ „์ฒด ์†Œ์œ ํ’ˆ์ž…๋‹ˆ๋‹ค. ์•Œ ์ˆ˜ ์—†๋Š” ์ด๋ฆ„์€ ์Šคํฌ๋ฆฝํŠธ ์˜ค๋ฅ˜์ž…๋‹ˆ๋‹ค. ํ™•์ธํ•œ serial์„ ๊ฒ€์‚ฌํ•˜์„ธ์š”. ๋ช…์‹œ์ ์ธ 0์€ ์ง€๋ฉด์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค. API๋งˆ๋‹ค ์ˆซ์ž ์˜๋ฏธ๊ฐ€ ๋‹ฌ๋ผ ground/backpack ์ด๋ฆ„์ด ๋” ๋ช…ํ™•ํ•ฉ๋‹ˆ๋‹ค.
  • InSub โ€” ํ•„์ˆ˜ TRUE/FALSE(1/0). FALSE๋Š” ํŠน์ • ์ปจํ…Œ์ด๋„ˆ์˜ ์ง์ ‘ ๋‚ด์šฉ๋งŒ, TRUE๋Š” ๋กœ๋“œ๋œ ์ค‘์ฒฉ ๊ฐ€๋ฐฉ๋„ ๊ฒ€์ƒ‰ํ•ฉ๋‹ˆ๋‹ค. ์ง€๋ฉด์—๋Š” ์˜ํ–ฅ์ด ์—†์Šต๋‹ˆ๋‹ค. my๋Š” ์ด๋ฏธ ์ „์ฒด ์†Œ์œ ํ’ˆ์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.

๋ฐ˜ํ™˜๊ฐ’

Integer: ๋กœ์ปฌ ์ˆœํšŒ์—์„œ ์ฒ˜์Œ ์ผ์น˜ํ•œ serial, ์—†์œผ๋ฉด 0. ๊ทธ๋ž˜ํ”ฝ, ์ˆ˜๋Ÿ‰, ๋ฐฐ์—ด, Boolean์ด ์•„๋‹™๋‹ˆ๋‹ค. result <> 0์„ ๊ฒ€์‚ฌํ•˜๊ณ  result = TRUE ๋˜๋Š” result = 1์€ ์‚ฌ์šฉํ•˜์ง€ ๋งˆ์„ธ์š”. ํ•œ ์Šคํƒ์€ ํ•œ ๊ฐ์ฒด, Mobile์€ ํ•œ ๊ฐ์ฒด์ด์ž ํ•œ ๋‹จ์œ„์ž…๋‹ˆ๋‹ค. ์ˆœ์„œ๋Š” ๊ฑฐ๋ฆฌ์ˆœ์ด ์•„๋‹ˆ๋ฉฐ ํ•ญ์ƒ ์ผ์ •ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋™์ž‘

  • ๋„ค ์œ„์น˜ ์ธ์ˆ˜๊ฐ€ ๋ชจ๋‘ ํ•„์ˆ˜์ด๋ฉฐ ์ƒ๋žตํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
  • ์ง€๋ฉด์€ ์ด ์Šคํฌ๋ฆฝํŠธ์˜ FindDistance/FindVertical์„ ์ ์šฉํ•˜๊ณ  self๋ฅผ ์ œ์™ธํ•˜๋ฉฐ ์ผ์น˜ํ•˜๋Š” Item๊ณผ Mobile์„ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค. ํŠน์ • ์ปจํ…Œ์ด๋„ˆ์—๋Š” ๊ฑฐ๋ฆฌ/๋†’์ด ์ œํ•œ์„ ์ ์šฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋‘ ๋ฒ”์œ„ ๋ชจ๋‘ Ignore์™€ ํŒŒ๊ดด๋œ ๊ฐ์ฒด๋ฅผ ์ œ์™ธํ•ฉ๋‹ˆ๋‹ค.
  • ์ˆœํšŒ ์ „์— FindItem, FindCount, FindFullQuantity, GetFoundItems๋ฅผ ๋น„์›๋‹ˆ๋‹ค. ๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ๊ฐ€ ์—†์œผ๋ฉด 0๊ณผ ๋นˆ ๋ฐฐ์—ด์ด ๋‚จ์Šต๋‹ˆ๋‹ค. FindFullQuantity๋Š” Item์˜ max(1, Amount)์™€ Mobile๋งˆ๋‹ค 1์„ ๋”ํ•ฉ๋‹ˆ๋‹ค. FindQuantity๋Š” FindItem์˜ ํ˜„์žฌ ์ˆ˜๋Ÿ‰์„ ์ฝ์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ ๊ฒ€์ƒ‰์ด ๊ฒฐ๊ณผ๋ฅผ ๋ฐ”๊พธ๊ธฐ ์ „์— ํ•„์š”ํ•œ GetFoundItems๋ฅผ ์ €์žฅํ•˜์„ธ์š”.
  • Bridge๋Š” ๋กœ๋“œ๋œ Item์„ ํ•œ ๋ฒˆ ์ˆœํšŒํ•˜๊ณ , ์ง€๋ฉด์ด๋ฉด Mobile๋„ ์ˆœํšŒํ•ฉ๋‹ˆ๋‹ค. ์ข…๋ฅ˜, ์ƒ‰์ƒ, ํ•˜๋‚˜ ์ด์ƒ์˜ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์ผ์น˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ฐ์ฒด๋งˆ๋‹ค ํ•œ ๋ฒˆ ๋“ฑ๋กํ•˜๋ฉฐ ์กฐํ•ฉ๋งˆ๋‹ค ์ „์ฒด ์„ธ๊ณ„๋ฅผ ๋‹ค์‹œ ๊ฒ€์ƒ‰ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • ์ด๋ฏธ ๋ฐ›์€ ๋ฐ์ดํ„ฐ๋งŒ ์ฝ์Šต๋‹ˆ๋‹ค. ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์—ด๊ฑฐ๋‚˜ ์…€์„ ๋กœ๋“œํ•˜๊ฑฐ๋‚˜ ๋ฌผ๊ฑด์„ ์˜ฎ๊ธฐ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ฒฐ๊ณผ๊ฐ€ ์—†๋‹ค๊ณ  ์„œ๋ฒ„์˜ ์ƒ์ž๊ฐ€ ๋น„์—ˆ๋‹ค๊ณ  ๋‹จ์ •ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์—ฐ๊ฒฐ์ด ํ•„์š”ํ•˜๋ฉด Connected๋ฅผ ๊ฒ€์‚ฌํ•˜์„ธ์š”. ๊ฒ€์ƒ‰ ์ž์ฒด๋Š” ๋กœ์ปฌ ์ƒํƒœ๋ฅผ ์ฝ์Šต๋‹ˆ๋‹ค.
  • Stealth FindTypeEx. ์ฐธ๊ณ  ๋ฌธ์„œ๋Š” ๋งˆ์ง€๋ง‰ ID์™€ ์ž˜๋ชป๋œ ์ปจํ…Œ์ด๋„ˆ์˜ ๋ฐฐ๋‚ญ ๋Œ€์ฒด๋ฅผ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ๋Š” ์ฒซ ๋กœ์ปฌ ๊ฒฐ๊ณผ๋ฅผ ์œ ์ง€ํ•˜๊ณ  ์•Œ ์ˆ˜ ์—†๋Š” ์ด๋ฆ„์„ ๋ฐฐ๋‚ญ์œผ๋กœ ๋ฐ”๊พธ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. Ground๋Š” 0๋„ ํ—ˆ์šฉํ•ฉ๋‹ˆ๋‹ค. ๋กœ์ปฌ FindDistance ๊ธฐ๋ณธ๊ฐ’์€ 18, ์ตœ๋Œ€๊ฐ’์€ 255์ž…๋‹ˆ๋‹ค.

๋‚ด๋ถ€ ํ•จ์ˆ˜: ํ˜ธ์ถœ๋ถ€ํ„ฐ ๊ฒฐ๊ณผ๊นŒ์ง€

์‹ค์ œ ๊ตฌํ˜„ ๋‹จ๊ณ„์ด๋ฉฐ ์ถ”๊ฐ€ ๊ณต๊ฐœ ๋ช…๋ น์ด ์•„๋‹™๋‹ˆ๋‹ค. ์•„๋ž˜ FindGoldNearSelf์™€ SearchTypesIn์€ ์ „์ฒด ์ •์˜๊ฐ€ ์ œ๊ณต๋˜๋Š” ์Šคํฌ๋ฆฝํŠธ ํ•จ์ˆ˜์ž…๋‹ˆ๋‹ค.

1. ExecuteStealthCompatibility

Runtime์€ ์ˆซ์ž ํ•„ํ„ฐ๋ฅผ ๋ณ€ํ™˜ํ•˜๊ณ  ์ปจํ…Œ์ด๋„ˆ ์ด๋ฆ„์„ ๋ณ„๋„๋กœ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. ์ง€๋ฉด ์„ ํƒ์ž๋Š” bridge ๋‚ด๋ถ€์˜ ์„ธ๊ณ„ ๋ฒ”์œ„๋กœ ๋ณ€ํ™˜๋ฉ๋‹ˆ๋‹ค.

๋„ค ์œ„์น˜ ์ธ์ˆ˜๊ฐ€ ๋ชจ๋‘ ํ•„์ˆ˜์ด๋ฉฐ ์ƒ๋žตํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

ํ”„๋กœ์ ํŠธ ์†Œ์Šค: external/InjectionScript/src/InjectionScript/Runtime/InjectionApiUO.cs; ํ•จ์ˆ˜ ExecuteStealthCompatibility.

2. ConvertStealthSearchContainer

์ง€๋ฉด: UO.Ground(), 0, -1, 0xFFFFFFFF ๋˜๋Š” ๋ฌธ์ž์—ด ground. ๋ฐฐ๋‚ญ: ๋ฌธ์ž์—ด backpack ๋˜๋Š” ๊ทธ serial. ์‹ญ์ง„์ˆ˜/hex serial๊ณผ AddObject ์ด๋ฆ„๋„ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. my๋Š” ์žฅ๋น„์™€ ์ค‘์ฒฉ ๊ฐ€๋ฐฉ์„ ํฌํ•จํ•œ ์ž์‹ ์˜ ์ „์ฒด ์†Œ์œ ํ’ˆ์ž…๋‹ˆ๋‹ค. ์•Œ ์ˆ˜ ์—†๋Š” ์ด๋ฆ„์€ ์Šคํฌ๋ฆฝํŠธ ์˜ค๋ฅ˜์ž…๋‹ˆ๋‹ค. ํ™•์ธํ•œ serial์„ ๊ฒ€์‚ฌํ•˜์„ธ์š”. ๋ช…์‹œ์ ์ธ 0์€ ์ง€๋ฉด์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค. API๋งˆ๋‹ค ์ˆซ์ž ์˜๋ฏธ๊ฐ€ ๋‹ฌ๋ผ ground/backpack ์ด๋ฆ„์ด ๋” ๋ช…ํ™•ํ•ฉ๋‹ˆ๋‹ค.

Runtime์€ ์ˆซ์ž ํ•„ํ„ฐ๋ฅผ ๋ณ€ํ™˜ํ•˜๊ณ  ์ปจํ…Œ์ด๋„ˆ ์ด๋ฆ„์„ ๋ณ„๋„๋กœ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. ์ง€๋ฉด ์„ ํƒ์ž๋Š” bridge ๋‚ด๋ถ€์˜ ์„ธ๊ณ„ ๋ฒ”์œ„๋กœ ๋ณ€ํ™˜๋ฉ๋‹ˆ๋‹ค.

ํ”„๋กœ์ ํŠธ ์†Œ์Šค: external/InjectionScript/src/InjectionScript/Runtime/InjectionApiUO.cs; ํ•จ์ˆ˜ ConvertStealthSearchContainer.

3. ResetFindResults

์ˆœํšŒ ์ „์— FindItem, FindCount, FindFullQuantity, GetFoundItems๋ฅผ ๋น„์›๋‹ˆ๋‹ค. ๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ๊ฐ€ ์—†์œผ๋ฉด 0๊ณผ ๋นˆ ๋ฐฐ์—ด์ด ๋‚จ์Šต๋‹ˆ๋‹ค. FindFullQuantity๋Š” Item์˜ max(1, Amount)์™€ Mobile๋งˆ๋‹ค 1์„ ๋”ํ•ฉ๋‹ˆ๋‹ค. FindQuantity๋Š” FindItem์˜ ํ˜„์žฌ ์ˆ˜๋Ÿ‰์„ ์ฝ์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ ๊ฒ€์ƒ‰์ด ๊ฒฐ๊ณผ๋ฅผ ๋ฐ”๊พธ๊ธฐ ์ „์— ํ•„์š”ํ•œ GetFoundItems๋ฅผ ์ €์žฅํ•˜์„ธ์š”.

Integer: ๋กœ์ปฌ ์ˆœํšŒ์—์„œ ์ฒ˜์Œ ์ผ์น˜ํ•œ serial, ์—†์œผ๋ฉด 0. ๊ทธ๋ž˜ํ”ฝ, ์ˆ˜๋Ÿ‰, ๋ฐฐ์—ด, Boolean์ด ์•„๋‹™๋‹ˆ๋‹ค. result <> 0์„ ๊ฒ€์‚ฌํ•˜๊ณ  result = TRUE ๋˜๋Š” result = 1์€ ์‚ฌ์šฉํ•˜์ง€ ๋งˆ์„ธ์š”. ํ•œ ์Šคํƒ์€ ํ•œ ๊ฐ์ฒด, Mobile์€ ํ•œ ๊ฐ์ฒด์ด์ž ํ•œ ๋‹จ์œ„์ž…๋‹ˆ๋‹ค. ์ˆœ์„œ๋Š” ๊ฑฐ๋ฆฌ์ˆœ์ด ์•„๋‹ˆ๋ฉฐ ํ•ญ์ƒ ์ผ์ •ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

ํ”„๋กœ์ ํŠธ ์†Œ์Šค: src/ClassicUO.Client/Game/Managers/ClassicUOInjectionApiBridge.cs; ํ•จ์ˆ˜ ResetFindResults.

4. FindType

Bridge๋Š” ๋กœ๋“œ๋œ Item์„ ํ•œ ๋ฒˆ ์ˆœํšŒํ•˜๊ณ , ์ง€๋ฉด์ด๋ฉด Mobile๋„ ์ˆœํšŒํ•ฉ๋‹ˆ๋‹ค. ์ข…๋ฅ˜, ์ƒ‰์ƒ, ํ•˜๋‚˜ ์ด์ƒ์˜ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์ผ์น˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ฐ์ฒด๋งˆ๋‹ค ํ•œ ๋ฒˆ ๋“ฑ๋กํ•˜๋ฉฐ ์กฐํ•ฉ๋งˆ๋‹ค ์ „์ฒด ์„ธ๊ณ„๋ฅผ ๋‹ค์‹œ ๊ฒ€์ƒ‰ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ง€๋ฉด์€ ์ด ์Šคํฌ๋ฆฝํŠธ์˜ FindDistance/FindVertical์„ ์ ์šฉํ•˜๊ณ  self๋ฅผ ์ œ์™ธํ•˜๋ฉฐ ์ผ์น˜ํ•˜๋Š” Item๊ณผ Mobile์„ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค. ํŠน์ • ์ปจํ…Œ์ด๋„ˆ์—๋Š” ๊ฑฐ๋ฆฌ/๋†’์ด ์ œํ•œ์„ ์ ์šฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋‘ ๋ฒ”์œ„ ๋ชจ๋‘ Ignore์™€ ํŒŒ๊ดด๋œ ๊ฐ์ฒด๋ฅผ ์ œ์™ธํ•ฉ๋‹ˆ๋‹ค.

ํ”„๋กœ์ ํŠธ ์†Œ์Šค: src/ClassicUO.Client/Game/Managers/ClassicUOInjectionApiBridge.cs; ํ•จ์ˆ˜ FindType.

5. MatchesFindIdentity

Graphic/body์ด๋ฉฐ ๊ฐ์ฒด serial์ด ์•„๋‹™๋‹ˆ๋‹ค. 0..65534๋Š” ํŠน์ • ๊ทธ๋ž˜ํ”ฝ, -1 ๋˜๋Š” 0xFFFF๋Š” ๋ชจ๋“  ๊ทธ๋ž˜ํ”ฝ์ž…๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ์Œ์ˆ˜ Integer๋„ ํ•„ํ„ฐ๋ฅผ ํ•ด์ œํ•ฉ๋‹ˆ๋‹ค. Hue์ด๋ฉฐ ์ˆ˜๋Ÿ‰์ด ์•„๋‹™๋‹ˆ๋‹ค. 0์€ ์—ผ์ƒ‰ ์—†์Œ, -1 ๋˜๋Š” 0xFFFF๋Š” ๋ชจ๋“  ์ƒ‰์ƒ์ž…๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ์Œ์ˆ˜ Integer๋„ ์ƒ‰์ƒ ํ•„ํ„ฐ๋ฅผ ํ•ด์ œํ•ฉ๋‹ˆ๋‹ค.

Bridge๋Š” ๋กœ๋“œ๋œ Item์„ ํ•œ ๋ฒˆ ์ˆœํšŒํ•˜๊ณ , ์ง€๋ฉด์ด๋ฉด Mobile๋„ ์ˆœํšŒํ•ฉ๋‹ˆ๋‹ค. ์ข…๋ฅ˜, ์ƒ‰์ƒ, ํ•˜๋‚˜ ์ด์ƒ์˜ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์ผ์น˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ฐ์ฒด๋งˆ๋‹ค ํ•œ ๋ฒˆ ๋“ฑ๋กํ•˜๋ฉฐ ์กฐํ•ฉ๋งˆ๋‹ค ์ „์ฒด ์„ธ๊ณ„๋ฅผ ๋‹ค์‹œ ๊ฒ€์ƒ‰ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

ํ”„๋กœ์ ํŠธ ์†Œ์Šค: src/ClassicUO.Client/Game/Managers/ClassicUOInjectionApiBridge.cs; ํ•จ์ˆ˜ MatchesFindIdentity.

6. MatchesFindContainer

ํ•„์ˆ˜ TRUE/FALSE(1/0). FALSE๋Š” ํŠน์ • ์ปจํ…Œ์ด๋„ˆ์˜ ์ง์ ‘ ๋‚ด์šฉ๋งŒ, TRUE๋Š” ๋กœ๋“œ๋œ ์ค‘์ฒฉ ๊ฐ€๋ฐฉ๋„ ๊ฒ€์ƒ‰ํ•ฉ๋‹ˆ๋‹ค. ์ง€๋ฉด์—๋Š” ์˜ํ–ฅ์ด ์—†์Šต๋‹ˆ๋‹ค. my๋Š” ์ด๋ฏธ ์ „์ฒด ์†Œ์œ ํ’ˆ์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.

์ง€๋ฉด์€ ์ด ์Šคํฌ๋ฆฝํŠธ์˜ FindDistance/FindVertical์„ ์ ์šฉํ•˜๊ณ  self๋ฅผ ์ œ์™ธํ•˜๋ฉฐ ์ผ์น˜ํ•˜๋Š” Item๊ณผ Mobile์„ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค. ํŠน์ • ์ปจํ…Œ์ด๋„ˆ์—๋Š” ๊ฑฐ๋ฆฌ/๋†’์ด ์ œํ•œ์„ ์ ์šฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋‘ ๋ฒ”์œ„ ๋ชจ๋‘ Ignore์™€ ํŒŒ๊ดด๋œ ๊ฐ์ฒด๋ฅผ ์ œ์™ธํ•ฉ๋‹ˆ๋‹ค.

ํ”„๋กœ์ ํŠธ ์†Œ์Šค: src/ClassicUO.Client/Game/Managers/ClassicUOInjectionApiBridge.cs; ํ•จ์ˆ˜ MatchesFindContainer.

7. RegisterFound

์ˆœํšŒ ์ „์— FindItem, FindCount, FindFullQuantity, GetFoundItems๋ฅผ ๋น„์›๋‹ˆ๋‹ค. ๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ๊ฐ€ ์—†์œผ๋ฉด 0๊ณผ ๋นˆ ๋ฐฐ์—ด์ด ๋‚จ์Šต๋‹ˆ๋‹ค. FindFullQuantity๋Š” Item์˜ max(1, Amount)์™€ Mobile๋งˆ๋‹ค 1์„ ๋”ํ•ฉ๋‹ˆ๋‹ค. FindQuantity๋Š” FindItem์˜ ํ˜„์žฌ ์ˆ˜๋Ÿ‰์„ ์ฝ์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ ๊ฒ€์ƒ‰์ด ๊ฒฐ๊ณผ๋ฅผ ๋ฐ”๊พธ๊ธฐ ์ „์— ํ•„์š”ํ•œ GetFoundItems๋ฅผ ์ €์žฅํ•˜์„ธ์š”.

Integer: ๋กœ์ปฌ ์ˆœํšŒ์—์„œ ์ฒ˜์Œ ์ผ์น˜ํ•œ serial, ์—†์œผ๋ฉด 0. ๊ทธ๋ž˜ํ”ฝ, ์ˆ˜๋Ÿ‰, ๋ฐฐ์—ด, Boolean์ด ์•„๋‹™๋‹ˆ๋‹ค. result <> 0์„ ๊ฒ€์‚ฌํ•˜๊ณ  result = TRUE ๋˜๋Š” result = 1์€ ์‚ฌ์šฉํ•˜์ง€ ๋งˆ์„ธ์š”. ํ•œ ์Šคํƒ์€ ํ•œ ๊ฐ์ฒด, Mobile์€ ํ•œ ๊ฐ์ฒด์ด์ž ํ•œ ๋‹จ์œ„์ž…๋‹ˆ๋‹ค. ์ˆœ์„œ๋Š” ๊ฑฐ๋ฆฌ์ˆœ์ด ์•„๋‹ˆ๋ฉฐ ํ•ญ์ƒ ์ผ์ •ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

ํ”„๋กœ์ ํŠธ ์†Œ์Šค: src/ClassicUO.Client/Game/Managers/ClassicUOInjectionApiBridge.cs; ํ•จ์ˆ˜ RegisterFound.

์ด๋ฏธ ๋ฐ›์€ ๋ฐ์ดํ„ฐ๋งŒ ์ฝ์Šต๋‹ˆ๋‹ค. ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์—ด๊ฑฐ๋‚˜ ์…€์„ ๋กœ๋“œํ•˜๊ฑฐ๋‚˜ ๋ฌผ๊ฑด์„ ์˜ฎ๊ธฐ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ฒฐ๊ณผ๊ฐ€ ์—†๋‹ค๊ณ  ์„œ๋ฒ„์˜ ์ƒ์ž๊ฐ€ ๋น„์—ˆ๋‹ค๊ณ  ๋‹จ์ •ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์—ฐ๊ฒฐ์ด ํ•„์š”ํ•˜๋ฉด Connected๋ฅผ ๊ฒ€์‚ฌํ•˜์„ธ์š”. ๊ฒ€์ƒ‰ ์ž์ฒด๋Š” ๋กœ์ปฌ ์ƒํƒœ๋ฅผ ์ฝ์Šต๋‹ˆ๋‹ค.

์˜ˆ์ œ

๋ฐฐ๋‚ญ์˜ ์ง์ ‘ ๋‚ด์šฉ

# ๋ฐฐ๋‚ญ์˜ ์ง์ ‘ ๋‚ด์šฉ
#
# ์ปจํ…Œ์ด๋„ˆ ๋˜๋Š” ์ง€๋ฉด์—์„œ ์ง€์ •ํ•œ ๊ทธ๋ž˜ํ”ฝ๊ณผ ์ƒ‰์ƒ์„ ๊ฒ€์ƒ‰ํ•˜๊ณ  ์ผ์น˜ํ•˜๋Š” ID ํ•˜๋‚˜๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
#
# Integer: ๋กœ์ปฌ ์ˆœํšŒ์—์„œ ์ฒ˜์Œ ์ผ์น˜ํ•œ serial, ์—†์œผ๋ฉด 0. ๊ทธ๋ž˜ํ”ฝ, ์ˆ˜๋Ÿ‰, ๋ฐฐ์—ด, Boolean์ด ์•„๋‹™๋‹ˆ๋‹ค. result <> 0์„ ๊ฒ€์‚ฌํ•˜๊ณ  result =
# TRUE ๋˜๋Š” result = 1์€ ์‚ฌ์šฉํ•˜์ง€ ๋งˆ์„ธ์š”. ํ•œ ์Šคํƒ์€ ํ•œ ๊ฐ์ฒด, Mobile์€ ํ•œ ๊ฐ์ฒด์ด์ž ํ•œ ๋‹จ์œ„์ž…๋‹ˆ๋‹ค. ์ˆœ์„œ๋Š” ๊ฑฐ๋ฆฌ์ˆœ์ด ์•„๋‹ˆ๋ฉฐ ํ•ญ์ƒ ์ผ์ •ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

SUB Main()
    # 0x0EED๋Š” ๊ธˆํ™”, -1์€ ๋ชจ๋“  hue์ž…๋‹ˆ๋‹ค. backpack/FALSE๋Š” ์ค‘์ฒฉ ๊ฐ€๋ฐฉ์„ ์ œ์™ธํ•ฉ๋‹ˆ๋‹ค. ์ฒซ hex ID(0x ์—†์Œ), ๊ฐ์ฒด ์ˆ˜, ์ด ๋‹จ์œ„๋ฅผ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค.
    # 20๊ณผ 50์˜ ๋‘ ์Šคํƒ์€ ๊ฐ์ฒด 2๊ฐœ, ๋‹จ์œ„ 70๊ฐœ์ž…๋‹ˆ๋‹ค.

    VAR item = UO.FindTypeEx(0x0EED, -1, 'backpack', FALSE)
    UO.Print(Hex(item))
    UO.Print(STR(UO.FindCount()))
    UO.Print(STR(UO.FindFullQuantity()))
END SUB

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

  • 0x0EED๋Š” ๊ธˆํ™”, -1์€ ๋ชจ๋“  hue์ž…๋‹ˆ๋‹ค. backpack/FALSE๋Š” ์ค‘์ฒฉ ๊ฐ€๋ฐฉ์„ ์ œ์™ธํ•ฉ๋‹ˆ๋‹ค. ์ฒซ hex ID(0x ์—†์Œ), ๊ฐ์ฒด ์ˆ˜, ์ด ๋‹จ์œ„๋ฅผ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค. 20๊ณผ 50์˜ ๋‘ ์Šคํƒ์€ ๊ฐ์ฒด 2๊ฐœ, ๋‹จ์œ„ 70๊ฐœ์ž…๋‹ˆ๋‹ค.

์™„์ „ํ•œ ์ž„์‹œ ์ง€๋ฉด ๊ฒ€์ƒ‰ ํ•จ์ˆ˜

# ์™„์ „ํ•œ ์ž„์‹œ ์ง€๋ฉด ๊ฒ€์ƒ‰ ํ•จ์ˆ˜
#
# ์ปจํ…Œ์ด๋„ˆ ๋˜๋Š” ์ง€๋ฉด์—์„œ ์ง€์ •ํ•œ ๊ทธ๋ž˜ํ”ฝ๊ณผ ์ƒ‰์ƒ์„ ๊ฒ€์ƒ‰ํ•˜๊ณ  ์ผ์น˜ํ•˜๋Š” ID ํ•˜๋‚˜๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
#
# Integer: ๋กœ์ปฌ ์ˆœํšŒ์—์„œ ์ฒ˜์Œ ์ผ์น˜ํ•œ serial, ์—†์œผ๋ฉด 0. ๊ทธ๋ž˜ํ”ฝ, ์ˆ˜๋Ÿ‰, ๋ฐฐ์—ด, Boolean์ด ์•„๋‹™๋‹ˆ๋‹ค. result <> 0์„ ๊ฒ€์‚ฌํ•˜๊ณ  result =
# TRUE ๋˜๋Š” result = 1์€ ์‚ฌ์šฉํ•˜์ง€ ๋งˆ์„ธ์š”. ํ•œ ์Šคํƒ์€ ํ•œ ๊ฐ์ฒด, Mobile์€ ํ•œ ๊ฐ์ฒด์ด์ž ํ•œ ๋‹จ์œ„์ž…๋‹ˆ๋‹ค. ์ˆœ์„œ๋Š” ๊ฑฐ๋ฆฌ์ˆœ์ด ์•„๋‹ˆ๋ฉฐ ํ•ญ์ƒ ์ผ์ •ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

SUB Main()
    # radius=5, height=10์€ FindGoldNearSelf ์•ˆ์—์„œ๋งŒ ์ ์šฉํ•ฉ๋‹ˆ๋‹ค. Finally๋Š” Return์ด๋‚˜ ์˜ค๋ฅ˜์—๋„ ๋‘ ์ œํ•œ์„ ๋ณต์›ํ•ฉ๋‹ˆ๋‹ค. ๊ธˆํ™”
    # serial ๋˜๋Š” 0์„ ๋ฐ˜ํ™˜ํ•˜๊ณ  Main์€ <> 0์œผ๋กœ ๊ฒ€์‚ฌํ•ฉ๋‹ˆ๋‹ค.

    VAR item = FindGoldNearSelf(5, 10)
    IF item <> 0 THEN
        UO.Print(Hex(item))
    ELSE
        UO.Print('Empty')
    END IF
END SUB

FUNCTION FindGoldNearSelf(radius, height)
    VAR oldDistance = UO.FindDistance()
    VAR oldVertical = UO.FindVertical()
    TRY
        UO.FindDistance(radius)
        UO.FindVertical(height)
        RETURN UO.FindTypeEx(0x0EED, -1, UO.Ground(), FALSE)
    FINALLY
        UO.FindDistance(oldDistance)
        UO.FindVertical(oldVertical)
    END TRY
END FUNCTION

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

  • radius=5, height=10์€ FindGoldNearSelf ์•ˆ์—์„œ๋งŒ ์ ์šฉํ•ฉ๋‹ˆ๋‹ค. Finally๋Š” Return์ด๋‚˜ ์˜ค๋ฅ˜์—๋„ ๋‘ ์ œํ•œ์„ ๋ณต์›ํ•ฉ๋‹ˆ๋‹ค. ๊ธˆํ™” serial ๋˜๋Š” 0์„ ๋ฐ˜ํ™˜ํ•˜๊ณ  Main์€ <> 0์œผ๋กœ ๊ฒ€์‚ฌํ•ฉ๋‹ˆ๋‹ค.

์ด๋ฆ„ ์žˆ๋Š” ์ปจํ…Œ์ด๋„ˆ์™€ ์ค‘์ฒฉ ๊ฐ€๋ฐฉ

# ์ด๋ฆ„ ์žˆ๋Š” ์ปจํ…Œ์ด๋„ˆ์™€ ์ค‘์ฒฉ ๊ฐ€๋ฐฉ
#
# ์ปจํ…Œ์ด๋„ˆ ๋˜๋Š” ์ง€๋ฉด์—์„œ ์ง€์ •ํ•œ ๊ทธ๋ž˜ํ”ฝ๊ณผ ์ƒ‰์ƒ์„ ๊ฒ€์ƒ‰ํ•˜๊ณ  ์ผ์น˜ํ•˜๋Š” ID ํ•˜๋‚˜๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
#
# Integer: ๋กœ์ปฌ ์ˆœํšŒ์—์„œ ์ฒ˜์Œ ์ผ์น˜ํ•œ serial, ์—†์œผ๋ฉด 0. ๊ทธ๋ž˜ํ”ฝ, ์ˆ˜๋Ÿ‰, ๋ฐฐ์—ด, Boolean์ด ์•„๋‹™๋‹ˆ๋‹ค. result <> 0์„ ๊ฒ€์‚ฌํ•˜๊ณ  result =
# TRUE ๋˜๋Š” result = 1์€ ์‚ฌ์šฉํ•˜์ง€ ๋งˆ์„ธ์š”. ํ•œ ์Šคํƒ์€ ํ•œ ๊ฐ์ฒด, Mobile์€ ํ•œ ๊ฐ์ฒด์ด์ž ํ•œ ๋‹จ์œ„์ž…๋‹ˆ๋‹ค. ์ˆœ์„œ๋Š” ๊ฑฐ๋ฆฌ์ˆœ์ด ์•„๋‹ˆ๋ฉฐ ํ•ญ์ƒ ์ผ์ •ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

SUB Main()
    # GetSerial๋กœ backpack์„ ํ™•์ธํ•˜๊ณ  0 ๊ฒ€์‚ฌ๋กœ ์ง€๋ฉด ์˜ค์„ ํƒ์„ ๋ฐฉ์ง€ํ•ฉ๋‹ˆ๋‹ค. AddObject๋Š” search_bag๋ฅผ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค. TRUE๋Š” ์ค‘์ฒฉ ๊ฐ€๋ฐฉ์„ ํฌํ•จํ•˜๊ณ 
    # GetFoundItems๋Š” ๋ชฉ๋ก์„ ๋ณต์‚ฌํ•˜๋ฉฐ IsObjectExists๋Š” ID๋ฅผ ๋‹ค์‹œ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

    VAR bag = UO.GetSerial('backpack')
    IF bag <> 0 THEN
        UO.AddObject('search_bag', bag)
        UO.FindTypeEx(0x0EED, -1, 'search_bag', TRUE)
        VAR items = UO.GetFoundItems()
        FOR EACH item IN items
            IF UO.IsObjectExists(item) THEN
                UO.Print(Hex(item))
            END IF
        NEXT
    END IF
END SUB

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

  • GetSerial๋กœ backpack์„ ํ™•์ธํ•˜๊ณ  0 ๊ฒ€์‚ฌ๋กœ ์ง€๋ฉด ์˜ค์„ ํƒ์„ ๋ฐฉ์ง€ํ•ฉ๋‹ˆ๋‹ค. AddObject๋Š” search_bag๋ฅผ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค. TRUE๋Š” ์ค‘์ฒฉ ๊ฐ€๋ฐฉ์„ ํฌํ•จํ•˜๊ณ  GetFoundItems๋Š” ๋ชฉ๋ก์„ ๋ณต์‚ฌํ•˜๋ฉฐ IsObjectExists๋Š” ID๋ฅผ ๋‹ค์‹œ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

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

Basic