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

UO.FindTypesArrayEx

ClassicUO โ€ข Runtime API

์—ฌ๋Ÿฌ ๊ทธ๋ž˜ํ”ฝ, ์ƒ‰์ƒ, ์ปจํ…Œ์ด๋„ˆ๋ฅผ ํ•œ ๋ฒˆ ์ˆœํšŒํ•˜์—ฌ ID ํ•˜๋‚˜๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ์ „์ฒด ๋ชฉ๋ก์€ GetFoundItems๋กœ ์ฝ์Šต๋‹ˆ๋‹ค.

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

UO.FindTypesArrayEx(ObjTypes:Any, Colors:Any, Containers:Any, InSub:Any) -> Integer

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

  • ObjTypes โ€” Graphic/body์ด๋ฉฐ ๊ฐ์ฒด serial์ด ์•„๋‹™๋‹ˆ๋‹ค. 0..65534๋Š” ํŠน์ • ๊ทธ๋ž˜ํ”ฝ, -1 ๋˜๋Š” 0xFFFF๋Š” ๋ชจ๋“  ๊ทธ๋ž˜ํ”ฝ์ž…๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ์Œ์ˆ˜ Integer๋„ ํ•„ํ„ฐ๋ฅผ ํ•ด์ œํ•ฉ๋‹ˆ๋‹ค.
  • Colors โ€” Hue์ด๋ฉฐ ์ˆ˜๋Ÿ‰์ด ์•„๋‹™๋‹ˆ๋‹ค. 0์€ ์—ผ์ƒ‰ ์—†์Œ, -1 ๋˜๋Š” 0xFFFF๋Š” ๋ชจ๋“  ์ƒ‰์ƒ์ž…๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ์Œ์ˆ˜ Integer๋„ ์ƒ‰์ƒ ํ•„ํ„ฐ๋ฅผ ํ•ด์ œํ•ฉ๋‹ˆ๋‹ค.
  • Containers โ€” ์ง€๋ฉด: 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์€ ํ•œ ๊ฐ์ฒด์ด์ž ํ•œ ๋‹จ์œ„์ž…๋‹ˆ๋‹ค. ์ˆœ์„œ๋Š” ๊ฑฐ๋ฆฌ์ˆœ์ด ์•„๋‹ˆ๋ฉฐ ํ•ญ์ƒ ์ผ์ •ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋™์ž‘

  • Array๋ฅผ ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค. ๋‹จ์ผ ๊ฐ’๋„ ํ•œ ์š”์†Œ๋กœ ํ—ˆ์šฉํ•ฉ๋‹ˆ๋‹ค. DIM values[1]์€ ์ธ๋ฑ์Šค 0๊ณผ 1์„ ๋งŒ๋“œ๋ฏ€๋กœ ๋ชจ๋‘ ๋Œ€์ž…ํ•˜์„ธ์š”. ์ข…๋ฅ˜์™€ ์ƒ‰์ƒ์€ ๋…๋ฆฝ์ ์ธ ์„ ํƒ์ง€์ด๋ฉฐ ๊ฐ™์€ ์ธ๋ฑ์Šค๋ผ๋ฆฌ ์ง์ง“์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์–ด๋А ์œ„์น˜๋“  ์™€์ผ๋“œ์นด๋“œ๊ฐ€ ์žˆ๊ฑฐ๋‚˜ ์ข…๋ฅ˜/์ƒ‰์ƒ ๋ฐฐ์—ด์ด ๋น„๋ฉด ํ•ด๋‹น ํ•„ํ„ฐ๊ฐ€ ์‚ฌ๋ผ์ง‘๋‹ˆ๋‹ค. ๋นˆ ์ปจํ…Œ์ด๋„ˆ ๋ฐฐ์—ด์€ ์ž์‹ ์˜ ์†Œ์œ ํ’ˆ์ž…๋‹ˆ๋‹ค. ๋ฐ˜๋ณต๋˜๊ฑฐ๋‚˜ ๊ฒน์น˜๋Š” ์ปจํ…Œ์ด๋„ˆ๋„ ID๋ฅผ ์ค‘๋ณต ์ƒ์„ฑํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • ๋„ค ์œ„์น˜ ์ธ์ˆ˜๊ฐ€ ๋ชจ๋‘ ํ•„์ˆ˜์ด๋ฉฐ ์ƒ๋žตํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
  • ์ง€๋ฉด์€ ์ด ์Šคํฌ๋ฆฝํŠธ์˜ 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 FindTypesArrayEx. ์ฐธ๊ณ  ๋ฌธ์„œ๋Š” ๋งˆ์ง€๋ง‰ 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. BuildFindIdentityMask

Array๋ฅผ ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค. ๋‹จ์ผ ๊ฐ’๋„ ํ•œ ์š”์†Œ๋กœ ํ—ˆ์šฉํ•ฉ๋‹ˆ๋‹ค. DIM values[1]์€ ์ธ๋ฑ์Šค 0๊ณผ 1์„ ๋งŒ๋“œ๋ฏ€๋กœ ๋ชจ๋‘ ๋Œ€์ž…ํ•˜์„ธ์š”. ์ข…๋ฅ˜์™€ ์ƒ‰์ƒ์€ ๋…๋ฆฝ์ ์ธ ์„ ํƒ์ง€์ด๋ฉฐ ๊ฐ™์€ ์ธ๋ฑ์Šค๋ผ๋ฆฌ ์ง์ง“์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์–ด๋А ์œ„์น˜๋“  ์™€์ผ๋“œ์นด๋“œ๊ฐ€ ์žˆ๊ฑฐ๋‚˜ ์ข…๋ฅ˜/์ƒ‰์ƒ ๋ฐฐ์—ด์ด ๋น„๋ฉด ํ•ด๋‹น ํ•„ํ„ฐ๊ฐ€ ์‚ฌ๋ผ์ง‘๋‹ˆ๋‹ค. ๋นˆ ์ปจํ…Œ์ด๋„ˆ ๋ฐฐ์—ด์€ ์ž์‹ ์˜ ์†Œ์œ ํ’ˆ์ž…๋‹ˆ๋‹ค. ๋ฐ˜๋ณต๋˜๊ฑฐ๋‚˜ ๊ฒน์น˜๋Š” ์ปจํ…Œ์ด๋„ˆ๋„ ID๋ฅผ ์ค‘๋ณต ์ƒ์„ฑํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

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

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

5. FindTypes

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

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

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

6. 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.

7. MatchesFindContainer

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

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

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

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

SUB Main()
    # types๋Š” ๊ธˆํ™” 0x0EED์™€ ํ‘์ง„์ฃผ 0x0F7A, color=-1์€ ๋ชจ๋“  ์ƒ‰์ƒ, Ground๋Š” ์„ธ๊ณ„์ž…๋‹ˆ๋‹ค. FALSE๋Š” ์ง€๋ฉด์— ์˜ํ–ฅ์ด ์—†์Šต๋‹ˆ๋‹ค. ํ˜„์žฌ ๊ฒ€์ƒ‰ ์ œํ•œ์„
    # ์ ์šฉํ•˜๋ฉฐ ID, ๊ฐ์ฒด ์ˆ˜, ๋‹จ์œ„๋ฅผ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค.

    DIM types[1]
    types[0] = 0x0EED
    types[1] = 0x0F7A
    DIM colors[0]
    colors[0] = -1
    DIM containers[0]
    containers[0] = UO.Ground()
    VAR first = UO.FindTypesArrayEx(types, colors, containers, FALSE)
    UO.Print(Hex(first))
    UO.Print(STR(UO.FindCount()))
    UO.Print(STR(UO.FindFullQuantity()))
END SUB

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

  • types๋Š” ๊ธˆํ™” 0x0EED์™€ ํ‘์ง„์ฃผ 0x0F7A, color=-1์€ ๋ชจ๋“  ์ƒ‰์ƒ, Ground๋Š” ์„ธ๊ณ„์ž…๋‹ˆ๋‹ค. FALSE๋Š” ์ง€๋ฉด์— ์˜ํ–ฅ์ด ์—†์Šต๋‹ˆ๋‹ค. ํ˜„์žฌ ๊ฒ€์ƒ‰ ์ œํ•œ์„ ์ ์šฉํ•˜๋ฉฐ ID, ๊ฐ์ฒด ์ˆ˜, ๋‹จ์œ„๋ฅผ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค.

๋ฐฐ๋‚ญ๊ณผ ์ง€๋ฉด์˜ ๊ธˆํ™”

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

SUB Main()
    # types๋Š” ๊ธˆํ™”๋งŒ, colors๋Š” ๋ชจ๋“  hue์ž…๋‹ˆ๋‹ค. Containers๋Š” backpack๊ณผ ์ง€๋ฉด์ด๊ณ  TRUE๋Š” ์ค‘์ฒฉ ๊ฐ€๋ฐฉ์„ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค. ์–‘์ชฝ ๋ฒ”์œ„์˜ ๊ฐ์ฒด/์Šคํƒ๊ณผ
    # ๋‹จ์œ„๋ฅผ ์ค‘๋ณต ์—†์ด ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค.

    DIM types[0]
    types[0] = 0x0EED
    DIM colors[0]
    colors[0] = -1
    DIM containers[1]
    containers[0] = 'backpack'
    containers[1] = UO.Ground()
    UO.FindTypesArrayEx(types, colors, containers, TRUE)
    UO.Print(STR(UO.FindCount()))
    UO.Print(STR(UO.FindFullQuantity()))
END SUB

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

  • types๋Š” ๊ธˆํ™”๋งŒ, colors๋Š” ๋ชจ๋“  hue์ž…๋‹ˆ๋‹ค. Containers๋Š” backpack๊ณผ ์ง€๋ฉด์ด๊ณ  TRUE๋Š” ์ค‘์ฒฉ ๊ฐ€๋ฐฉ์„ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค. ์–‘์ชฝ ๋ฒ”์œ„์˜ ๊ฐ์ฒด/์Šคํƒ๊ณผ ๋‹จ์œ„๋ฅผ ์ค‘๋ณต ์—†์ด ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค.

์ €์žฅํ•œ ๋ชฉ๋ก์„ ๋ฐ˜ํ™˜ํ•˜๋Š” ์™„์ „ํ•œ ํ•จ์ˆ˜

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

SUB Main()
    # SearchTypesIn(container,firstType,secondType)์€ Array<Integer>๋ฅผ ๋ฐ˜ํ™˜ํ•˜์ง€๋งŒ ๋‚ด์žฅ ๋ช…๋ น์€ ๋‹จ์ผ Integer ID๋ฅผ
    # ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ์ „์ฒด ํ•จ์ˆ˜๊ฐ€ ๋ฐฐ์—ด์„ ์ฑ„์šฐ๊ณ  ์žฌ๊ท€ ๊ฒ€์ƒ‰ ํ›„ ์ฆ‰์‹œ GetFoundItems๋ฅผ ๋ณต์‚ฌํ•ฉ๋‹ˆ๋‹ค. Main์€ ์ €์žฅํ•œ ID๋ฅผ ๊ฒ€์‚ฌํ•˜๊ณ  ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค.

    VAR items = SearchTypesIn('backpack', 0x0EED, 0x0F7A)
    FOR EACH item IN items
        IF UO.IsObjectExists(item) THEN
            UO.Print(Hex(item))
        END IF
    NEXT
END SUB

FUNCTION SearchTypesIn(container, firstType, secondType)
    DIM types[1]
    types[0] = firstType
    types[1] = secondType
    DIM colors[0]
    colors[0] = -1
    DIM containers[0]
    containers[0] = container
    UO.FindTypesArrayEx(types, colors, containers, TRUE)
    RETURN UO.GetFoundItems()
END FUNCTION

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

  • SearchTypesIn(container,firstType,secondType)์€ Array๋ฅผ ๋ฐ˜ํ™˜ํ•˜์ง€๋งŒ ๋‚ด์žฅ ๋ช…๋ น์€ ๋‹จ์ผ Integer ID๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ์ „์ฒด ํ•จ์ˆ˜๊ฐ€ ๋ฐฐ์—ด์„ ์ฑ„์šฐ๊ณ  ์žฌ๊ท€ ๊ฒ€์ƒ‰ ํ›„ ์ฆ‰์‹œ GetFoundItems๋ฅผ ๋ณต์‚ฌํ•ฉ๋‹ˆ๋‹ค. Main์€ ์ €์žฅํ•œ ID๋ฅผ ๊ฒ€์‚ฌํ•˜๊ณ  ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค.

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

Basic

โš ๏ธ **GitHub.com Fallback** โš ๏ธ