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

UO.Ground

ClassicUO โ€ข Runtime API

๊ฒ€์ƒ‰ ์ปจํ…Œ์ด๋„ˆ ๋˜๋Š” ์ด๋™ ๋ชฉ์ ์ง€์— ์ „๋‹ฌํ•  ์ง€๋ฉด ์„ ํƒ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

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

UO.Ground() -> Integer

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

๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

๋ฐ˜ํ™˜๊ฐ’

Integer์ด๋ฉฐ ํ•ญ์ƒ 0์ž…๋‹ˆ๋‹ค. ์ด 0์€ ์œ ํšจํ•œ ์ง€๋ฉด ์„ ํƒ ๊ฐ’์œผ๋กœ, FALSE, ๊ฒ€์ƒ‰ ์‹คํŒจ, ID, ๊ทธ๋ž˜ํ”ฝ, ์ง€๋„ ๋ฒˆํ˜ธ, ์ขŒํ‘œ๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค. Ground() ์ž์ฒด๋ฅผ ์„ฑ๊ณต ์—ฌ๋ถ€๋กœ ๊ฒ€์‚ฌํ•˜์ง€ ๋ง๊ณ  ์ด๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒ€์ƒ‰์ด๋‚˜ ์ด๋™์˜ ๊ฒฐ๊ณผ๋ฅผ ๊ฒ€์‚ฌํ•˜์„ธ์š”.

๋™์ž‘

  • ์ธ์ˆ˜๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. Ground()๋งŒ ํ˜ธ์ถœํ•˜๋ฉด ๊ฒ€์ƒ‰, ์ด๋™, ํƒ€๊นƒ ์—ด๊ธฐ, ํŒจํ‚ท ์ „์†ก์ด๋‚˜ ์ด์ „ ๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ ๋ณ€๊ฒฝ์ด ์—†์Šต๋‹ˆ๋‹ค. ๋กœ๊ทธ์ธ ์ „์—๋„ 0์ž…๋‹ˆ๋‹ค.
  • FindType, FindList, Count, FindTypeEx, FindTypesArrayEx, CountEx, MoveItem์˜ container/destination ์ž๋ฆฌ์— ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค. ๊ฒ€์ƒ‰์€ ๋กœ๋”ฉ๋œ ๊ฐ์ฒด๋ฅผ ๋ณด๋ฉฐ ๋จผ ์นธ์„ ๋กœ๋”ฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ง€๋ฉด X/Y/Z๋Š” ์ปจํ…Œ์ด๋„ˆ ํ™”๋ฉด ํ”ฝ์…€์ด ์•„๋‹Œ ์›”๋“œ ์ขŒํ‘œ์ž…๋‹ˆ๋‹ค.
  • FindType(type, color)๋Š” ์—ฌ์ „ํžˆ ์ธ๋ฒคํ† ๋ฆฌ๋ฅผ ๊ฒ€์ƒ‰ํ•ฉ๋‹ˆ๋‹ค. ๋‘ ๋ฒˆ์งธ ์ธ์ˆ˜๋Š” ์ƒ‰์ž…๋‹ˆ๋‹ค. ์ง€๋ฉด์€ FindType(type, color, UO.Ground())๋กœ ์ง€์ •ํ•˜์„ธ์š”. ๊ธฐ์กด ๊ฐ„๊ฒฐํ˜• FindType/MoveItem์˜ -1์€ ์ธ๋ฒคํ† ๋ฆฌ์ด๋ฉฐ, ํ˜ธํ™˜ํ˜• FindTypeEx/FindTypesArrayEx/CountEx๋Š” -1๋„ ์ง€๋ฉด์œผ๋กœ ๋ฐ›์Šต๋‹ˆ๋‹ค. ์„œ๋กœ ๋‹ค๋ฅธ ๋ช…๋ น ์‚ฌ์ด์— ์ˆซ์ž๋ฅผ ๋ณต์‚ฌํ•˜๊ธฐ๋ณด๋‹ค UO.Ground() ๋˜๋Š” ground ์ด๋ฆ„์„ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค.
  • ์ผ์ฐจ ์ž๋ฃŒ: Stealth Ground. ์œ„ ๊ทœ์น™๊ณผ ์˜ˆ์ œ๋Š” ์ด ํด๋ผ์ด์–ธํŠธ๋ฅผ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.

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

์‹ค์ œ ๋‚ด๋ถ€ ์ฒ˜๋ฆฌ์ž…๋‹ˆ๋‹ค. FindGroundTypes๋Š” ์™„์ „ํ•œ ์‚ฌ์šฉ์ž ํ•จ์ˆ˜์ด๋ฉฐ ์ถ”๊ฐ€ ๋‚ด์žฅ ๋ช…๋ น์ด ์•„๋‹™๋‹ˆ๋‹ค.

1. ExecuteStealthCompatibility

์ธ์ˆ˜ ์—†๋Š” runtime ๋ถ„๊ธฐ๋Š” ๊ฒŒ์ž„ bridge ํ˜ธ์ถœ ์—†์ด Integer 0์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

Integer์ด๋ฉฐ ํ•ญ์ƒ 0์ž…๋‹ˆ๋‹ค. ์ด 0์€ ์œ ํšจํ•œ ์ง€๋ฉด ์„ ํƒ ๊ฐ’์œผ๋กœ, FALSE, ๊ฒ€์ƒ‰ ์‹คํŒจ, ID, ๊ทธ๋ž˜ํ”ฝ, ์ง€๋„ ๋ฒˆํ˜ธ, ์ขŒํ‘œ๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค. Ground() ์ž์ฒด๋ฅผ ์„ฑ๊ณต ์—ฌ๋ถ€๋กœ ๊ฒ€์‚ฌํ•˜์ง€ ๋ง๊ณ  ์ด๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒ€์ƒ‰์ด๋‚˜ ์ด๋™์˜ ๊ฒฐ๊ณผ๋ฅผ ๊ฒ€์‚ฌํ•˜์„ธ์š”.

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

2. ConvertContainer

๊ฐ„๊ฒฐํ˜• ๊ฒ€์ƒ‰์€ ๋ช…์‹œ์  0์„ ๋‚ด๋ถ€ ์ง€๋ฉด ๋ฒ”์œ„๋กœ ๋ฐ”๊พธ๋ฉฐ -1์€ ๊ธฐ๋ณธ ์ธ๋ฒคํ† ๋ฆฌ๋กœ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค. ํ˜ธํ™˜ ๊ฒ€์ƒ‰์€ 0๊ณผ ๊ธฐ์กด -1์„ ์ง€๋ฉด์œผ๋กœ ๋ฐ›์œผ๋ฉฐ ์ปจํ…Œ์ด๋„ˆ ์ด๋ฆ„์€ ๋”ฐ๋กœ ํ•ด์„ํ•ฉ๋‹ˆ๋‹ค.

FindType(type, color)๋Š” ์—ฌ์ „ํžˆ ์ธ๋ฒคํ† ๋ฆฌ๋ฅผ ๊ฒ€์ƒ‰ํ•ฉ๋‹ˆ๋‹ค. ๋‘ ๋ฒˆ์งธ ์ธ์ˆ˜๋Š” ์ƒ‰์ž…๋‹ˆ๋‹ค. ์ง€๋ฉด์€ FindType(type, color, UO.Ground())๋กœ ์ง€์ •ํ•˜์„ธ์š”. ๊ธฐ์กด ๊ฐ„๊ฒฐํ˜• FindType/MoveItem์˜ -1์€ ์ธ๋ฒคํ† ๋ฆฌ์ด๋ฉฐ, ํ˜ธํ™˜ํ˜• FindTypeEx/FindTypesArrayEx/CountEx๋Š” -1๋„ ์ง€๋ฉด์œผ๋กœ ๋ฐ›์Šต๋‹ˆ๋‹ค. ์„œ๋กœ ๋‹ค๋ฅธ ๋ช…๋ น ์‚ฌ์ด์— ์ˆซ์ž๋ฅผ ๋ณต์‚ฌํ•˜๊ธฐ๋ณด๋‹ค UO.Ground() ๋˜๋Š” ground ์ด๋ฆ„์„ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค.

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

3. ConvertStealthSearchContainer

๊ฐ„๊ฒฐํ˜• ๊ฒ€์ƒ‰์€ ๋ช…์‹œ์  0์„ ๋‚ด๋ถ€ ์ง€๋ฉด ๋ฒ”์œ„๋กœ ๋ฐ”๊พธ๋ฉฐ -1์€ ๊ธฐ๋ณธ ์ธ๋ฒคํ† ๋ฆฌ๋กœ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค. ํ˜ธํ™˜ ๊ฒ€์ƒ‰์€ 0๊ณผ ๊ธฐ์กด -1์„ ์ง€๋ฉด์œผ๋กœ ๋ฐ›์œผ๋ฉฐ ์ปจํ…Œ์ด๋„ˆ ์ด๋ฆ„์€ ๋”ฐ๋กœ ํ•ด์„ํ•ฉ๋‹ˆ๋‹ค.

FindType(type, color)๋Š” ์—ฌ์ „ํžˆ ์ธ๋ฒคํ† ๋ฆฌ๋ฅผ ๊ฒ€์ƒ‰ํ•ฉ๋‹ˆ๋‹ค. ๋‘ ๋ฒˆ์งธ ์ธ์ˆ˜๋Š” ์ƒ‰์ž…๋‹ˆ๋‹ค. ์ง€๋ฉด์€ FindType(type, color, UO.Ground())๋กœ ์ง€์ •ํ•˜์„ธ์š”. ๊ธฐ์กด ๊ฐ„๊ฒฐํ˜• FindType/MoveItem์˜ -1์€ ์ธ๋ฒคํ† ๋ฆฌ์ด๋ฉฐ, ํ˜ธํ™˜ํ˜• FindTypeEx/FindTypesArrayEx/CountEx๋Š” -1๋„ ์ง€๋ฉด์œผ๋กœ ๋ฐ›์Šต๋‹ˆ๋‹ค. ์„œ๋กœ ๋‹ค๋ฅธ ๋ช…๋ น ์‚ฌ์ด์— ์ˆซ์ž๋ฅผ ๋ณต์‚ฌํ•˜๊ธฐ๋ณด๋‹ค UO.Ground() ๋˜๋Š” ground ์ด๋ฆ„์„ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค.

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

4. ResolveTransferDestination

์ด๋™ ๋ชฉ์ ์ง€ ํ•ด์„๊ธฐ๋Š” ์ง€๋ฉด์„ 0์œผ๋กœ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค. bridge๋Š” ์›”๋“œ ์ขŒํ‘œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉฐ ๋‚ด๋ ค๋†“๊ธฐ ํŒจํ‚ท์˜ ์ปจํ…Œ์ด๋„ˆ ํ•„๋“œ๋Š” 0xFFFFFFFF์ž…๋‹ˆ๋‹ค. API ๊ฐ’๊ณผ ํŒจํ‚ท ํ•„๋“œ๋Š” ํ‘œํ˜„์ด ๋‹ค๋ฆ…๋‹ˆ๋‹ค.

0x40001001์„ ์ ‘๊ทผ ๊ฐ€๋Šฅํ•œ ์•„์ดํ…œ serial๋กœ ๋ฐ”๊พธ์„ธ์š”. IsObjectExists๊ฐ€ ๋กœ๋”ฉ๋œ ๊ฐ์ฒด๋ฅผ ๊ฒ€์‚ฌํ•ฉ๋‹ˆ๋‹ค. MoveItem(item, amount, destination, X, Y, Z): amount=0์€ ์ „์ฒด ์Šคํƒ, Ground()๋Š” ์ง€๋ฉด, GetX/GetY/GetZ๋Š” ํ”Œ๋ ˆ์ด์–ด ์›”๋“œ ์œ„์น˜์ž…๋‹ˆ๋‹ค. result=1์€ ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ ์ˆ˜๋ฝ, ์•„๋‹ˆ๋ฉด 0์ž…๋‹ˆ๋‹ค. Ground()์˜ ๊ฒฐ๊ณผ๋‚˜ ์„œ๋ฒ„์˜ ๋ฐฐ์†ก ํ™•์ธ์ด ์•„๋‹™๋‹ˆ๋‹ค.

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

5. MoveItem

์ด๋™ ๋ชฉ์ ์ง€ ํ•ด์„๊ธฐ๋Š” ์ง€๋ฉด์„ 0์œผ๋กœ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค. bridge๋Š” ์›”๋“œ ์ขŒํ‘œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉฐ ๋‚ด๋ ค๋†“๊ธฐ ํŒจํ‚ท์˜ ์ปจํ…Œ์ด๋„ˆ ํ•„๋“œ๋Š” 0xFFFFFFFF์ž…๋‹ˆ๋‹ค. API ๊ฐ’๊ณผ ํŒจํ‚ท ํ•„๋“œ๋Š” ํ‘œํ˜„์ด ๋‹ค๋ฆ…๋‹ˆ๋‹ค.

0x40001001์„ ์ ‘๊ทผ ๊ฐ€๋Šฅํ•œ ์•„์ดํ…œ serial๋กœ ๋ฐ”๊พธ์„ธ์š”. IsObjectExists๊ฐ€ ๋กœ๋”ฉ๋œ ๊ฐ์ฒด๋ฅผ ๊ฒ€์‚ฌํ•ฉ๋‹ˆ๋‹ค. MoveItem(item, amount, destination, X, Y, Z): amount=0์€ ์ „์ฒด ์Šคํƒ, Ground()๋Š” ์ง€๋ฉด, GetX/GetY/GetZ๋Š” ํ”Œ๋ ˆ์ด์–ด ์›”๋“œ ์œ„์น˜์ž…๋‹ˆ๋‹ค. result=1์€ ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ ์ˆ˜๋ฝ, ์•„๋‹ˆ๋ฉด 0์ž…๋‹ˆ๋‹ค. Ground()์˜ ๊ฒฐ๊ณผ๋‚˜ ์„œ๋ฒ„์˜ ๋ฐฐ์†ก ํ™•์ธ์ด ์•„๋‹™๋‹ˆ๋‹ค.

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

์ธ์ˆ˜๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. Ground()๋งŒ ํ˜ธ์ถœํ•˜๋ฉด ๊ฒ€์ƒ‰, ์ด๋™, ํƒ€๊นƒ ์—ด๊ธฐ, ํŒจํ‚ท ์ „์†ก์ด๋‚˜ ์ด์ „ ๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ ๋ณ€๊ฒฝ์ด ์—†์Šต๋‹ˆ๋‹ค. ๋กœ๊ทธ์ธ ์ „์—๋„ 0์ž…๋‹ˆ๋‹ค.

์˜ˆ์ œ

์„ ํƒ ๊ฐ’ ์ฝ๊ธฐ

# ์„ ํƒ ๊ฐ’ ์ฝ๊ธฐ
#
# ๊ฒ€์ƒ‰ ์ปจํ…Œ์ด๋„ˆ ๋˜๋Š” ์ด๋™ ๋ชฉ์ ์ง€์— ์ „๋‹ฌํ•  ์ง€๋ฉด ์„ ํƒ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
#
# Integer์ด๋ฉฐ ํ•ญ์ƒ 0์ž…๋‹ˆ๋‹ค. ์ด 0์€ ์œ ํšจํ•œ ์ง€๋ฉด ์„ ํƒ ๊ฐ’์œผ๋กœ, FALSE, ๊ฒ€์ƒ‰ ์‹คํŒจ, ID, ๊ทธ๋ž˜ํ”ฝ, ์ง€๋„ ๋ฒˆํ˜ธ, ์ขŒํ‘œ๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค. Ground() ์ž์ฒด๋ฅผ ์„ฑ๊ณต
# ์—ฌ๋ถ€๋กœ ๊ฒ€์‚ฌํ•˜์ง€ ๋ง๊ณ  ์ด๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒ€์ƒ‰์ด๋‚˜ ์ด๋™์˜ ๊ฒฐ๊ณผ๋ฅผ ๊ฒ€์‚ฌํ•˜์„ธ์š”.

SUB Main()
    # destination์€ Integer 0์„ ๋ฐ›๊ณ  Print๊ฐ€ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค. ๋ฌผ๊ฑด์„ ๋‚ด๋ ค๋†“๋Š” ๋™์ž‘์€ ์—†์Šต๋‹ˆ๋‹ค.

    VAR destination = UO.Ground()
    UO.Print(CStr(destination))
END SUB

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

  • destination์€ Integer 0์„ ๋ฐ›๊ณ  Print๊ฐ€ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค. ๋ฌผ๊ฑด์„ ๋‚ด๋ ค๋†“๋Š” ๋™์ž‘์€ ์—†์Šต๋‹ˆ๋‹ค.

์ง€๋ฉด์˜ ๊ธˆ ์Šคํƒ ๊ฒ€์ƒ‰

# ์ง€๋ฉด์˜ ๊ธˆ ์Šคํƒ ๊ฒ€์ƒ‰
#
# ๊ฒ€์ƒ‰ ์ปจํ…Œ์ด๋„ˆ ๋˜๋Š” ์ด๋™ ๋ชฉ์ ์ง€์— ์ „๋‹ฌํ•  ์ง€๋ฉด ์„ ํƒ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
#
# Integer์ด๋ฉฐ ํ•ญ์ƒ 0์ž…๋‹ˆ๋‹ค. ์ด 0์€ ์œ ํšจํ•œ ์ง€๋ฉด ์„ ํƒ ๊ฐ’์œผ๋กœ, FALSE, ๊ฒ€์ƒ‰ ์‹คํŒจ, ID, ๊ทธ๋ž˜ํ”ฝ, ์ง€๋„ ๋ฒˆํ˜ธ, ์ขŒํ‘œ๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค. Ground() ์ž์ฒด๋ฅผ ์„ฑ๊ณต
# ์—ฌ๋ถ€๋กœ ๊ฒ€์‚ฌํ•˜์ง€ ๋ง๊ณ  ์ด๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒ€์ƒ‰์ด๋‚˜ ์ด๋™์˜ ๊ฒฐ๊ณผ๋ฅผ ๊ฒ€์‚ฌํ•˜์„ธ์š”.

SUB Main()
    # 0x0EED๋Š” ๊ธˆ ๊ทธ๋ž˜ํ”ฝ, ๋‘ ๋ฒˆ์งธ -1์€ ๋ชจ๋“  ์ƒ‰์ž…๋‹ˆ๋‹ค. Ground()๋Š” ์›”๋“œ, FALSE๋Š” ์ปจํ…Œ์ด๋„ˆ ์žฌ๊ท€ ๋น„ํ™œ์„ฑํ™”์ž…๋‹ˆ๋‹ค. FindTypeEx๋Š” serial ๋˜๋Š”
    # 0์„ ๋ฐ˜ํ™˜ํ•˜๊ณ  <> 0์€ ๊ทธ serial์„ ๊ฒ€์‚ฌํ•ฉ๋‹ˆ๋‹ค. FindDistance/FindVertical๊ณผ Ignore๊ฐ€ ์ ์šฉ๋ฉ๋‹ˆ๋‹ค.

    VAR id = UO.FindTypeEx(0x0EED, -1, UO.Ground(), FALSE)
    IF id <> 0 THEN
        UO.Print(HEX(id))
    ELSE
        UO.Print('0')
    END IF
END SUB

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

  • 0x0EED๋Š” ๊ธˆ ๊ทธ๋ž˜ํ”ฝ, ๋‘ ๋ฒˆ์งธ -1์€ ๋ชจ๋“  ์ƒ‰์ž…๋‹ˆ๋‹ค. Ground()๋Š” ์›”๋“œ, FALSE๋Š” ์ปจํ…Œ์ด๋„ˆ ์žฌ๊ท€ ๋น„ํ™œ์„ฑํ™”์ž…๋‹ˆ๋‹ค. FindTypeEx๋Š” serial ๋˜๋Š” 0์„ ๋ฐ˜ํ™˜ํ•˜๊ณ  <> 0์€ ๊ทธ serial์„ ๊ฒ€์‚ฌํ•ฉ๋‹ˆ๋‹ค. FindDistance/FindVertical๊ณผ Ignore๊ฐ€ ์ ์šฉ๋ฉ๋‹ˆ๋‹ค.

๋‘ ๊ทธ๋ž˜ํ”ฝ์„ ๊ฒ€์ƒ‰ํ•˜๋Š” ์™„์ „ํ•œ ํ•จ์ˆ˜

# ๋‘ ๊ทธ๋ž˜ํ”ฝ์„ ๊ฒ€์ƒ‰ํ•˜๋Š” ์™„์ „ํ•œ ํ•จ์ˆ˜
#
# ๊ฒ€์ƒ‰ ์ปจํ…Œ์ด๋„ˆ ๋˜๋Š” ์ด๋™ ๋ชฉ์ ์ง€์— ์ „๋‹ฌํ•  ์ง€๋ฉด ์„ ํƒ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
#
# Integer์ด๋ฉฐ ํ•ญ์ƒ 0์ž…๋‹ˆ๋‹ค. ์ด 0์€ ์œ ํšจํ•œ ์ง€๋ฉด ์„ ํƒ ๊ฐ’์œผ๋กœ, FALSE, ๊ฒ€์ƒ‰ ์‹คํŒจ, ID, ๊ทธ๋ž˜ํ”ฝ, ์ง€๋„ ๋ฒˆํ˜ธ, ์ขŒํ‘œ๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค. Ground() ์ž์ฒด๋ฅผ ์„ฑ๊ณต
# ์—ฌ๋ถ€๋กœ ๊ฒ€์‚ฌํ•˜์ง€ ๋ง๊ณ  ์ด๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒ€์ƒ‰์ด๋‚˜ ์ด๋™์˜ ๊ฒฐ๊ณผ๋ฅผ ๊ฒ€์‚ฌํ•˜์„ธ์š”.

SUB Main()
    # FindGroundTypes(firstType, secondType, radius, height)๋Š” ๊ธˆ 0x0EED์™€ ํ‘์ง„์ฃผ 0x0F7A๋ฅผ radius=5,
    # height=10์œผ๋กœ ๊ฒ€์ƒ‰ํ•ฉ๋‹ˆ๋‹ค. DIM types[1]์€ ๋‘ ์นธ, colors[0]๊ณผ containers[0]์€ ๊ฐ๊ฐ ํ•œ ์นธ์ž…๋‹ˆ๋‹ค. ์Šคํƒ ํ•˜๋‚˜๊ฐ€ ๊ฐ์ฒด ํ•˜๋‚˜์ด๋ฉฐ
    # ์ข…๋ฅ˜/์ƒ‰์€ ๋Œ€์•ˆ์ด๊ณ  ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ๊ฒน์ณ๋„ ID๋Š” ์ค‘๋ณต๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ €์žฅ๋œ serial ๋ฐฐ์—ด์„ ๋ฐ˜ํ™˜ํ•˜๋ฉฐ Finally๋Š” ๋‘ ์„ค์ •์„ ๋ณต์›ํ•˜๊ณ  Main์€ ๊ฐ ID๋ฅผ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค.
    # ํ•จ์ˆ˜ ์ „์ฒด๊ฐ€ ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค.

    VAR ids = FindGroundTypes(0x0EED, 0x0F7A, 5, 10)
    FOR EACH id IN ids
        UO.Print(HEX(id))
    NEXT
END SUB

FUNCTION FindGroundTypes(firstType, secondType, radius, height)
    VAR oldDistance = UO.FindDistance()
    VAR oldVertical = UO.FindVertical()
    DIM types[1]
    types[0] = firstType
    types[1] = secondType
    DIM colors[0]
    colors[0] = -1
    DIM containers[0]
    containers[0] = UO.Ground()
    TRY
        UO.FindDistance(radius)
        UO.FindVertical(height)
        UO.FindTypesArrayEx(types, colors, containers, FALSE)
        RETURN UO.GetFoundItems()
    FINALLY
        UO.FindDistance(oldDistance)
        UO.FindVertical(oldVertical)
    END TRY
END FUNCTION

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

  • FindGroundTypes(firstType, secondType, radius, height)๋Š” ๊ธˆ 0x0EED์™€ ํ‘์ง„์ฃผ 0x0F7A๋ฅผ radius=5, height=10์œผ๋กœ ๊ฒ€์ƒ‰ํ•ฉ๋‹ˆ๋‹ค. DIM types[1]์€ ๋‘ ์นธ, colors[0]๊ณผ containers[0]์€ ๊ฐ๊ฐ ํ•œ ์นธ์ž…๋‹ˆ๋‹ค. ์Šคํƒ ํ•˜๋‚˜๊ฐ€ ๊ฐ์ฒด ํ•˜๋‚˜์ด๋ฉฐ ์ข…๋ฅ˜/์ƒ‰์€ ๋Œ€์•ˆ์ด๊ณ  ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ๊ฒน์ณ๋„ ID๋Š” ์ค‘๋ณต๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ €์žฅ๋œ serial ๋ฐฐ์—ด์„ ๋ฐ˜ํ™˜ํ•˜๋ฉฐ Finally๋Š” ๋‘ ์„ค์ •์„ ๋ณต์›ํ•˜๊ณ  Main์€ ๊ฐ ID๋ฅผ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค. ํ•จ์ˆ˜ ์ „์ฒด๊ฐ€ ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค.

์•Œ๋ ค์ง„ ๋ฌผ๊ฑด์„ ํ”Œ๋ ˆ์ด์–ด ์นธ์— ๋†“๊ธฐ

# ์•Œ๋ ค์ง„ ๋ฌผ๊ฑด์„ ํ”Œ๋ ˆ์ด์–ด ์นธ์— ๋†“๊ธฐ
#
# ๊ฒ€์ƒ‰ ์ปจํ…Œ์ด๋„ˆ ๋˜๋Š” ์ด๋™ ๋ชฉ์ ์ง€์— ์ „๋‹ฌํ•  ์ง€๋ฉด ์„ ํƒ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
#
# Integer์ด๋ฉฐ ํ•ญ์ƒ 0์ž…๋‹ˆ๋‹ค. ์ด 0์€ ์œ ํšจํ•œ ์ง€๋ฉด ์„ ํƒ ๊ฐ’์œผ๋กœ, FALSE, ๊ฒ€์ƒ‰ ์‹คํŒจ, ID, ๊ทธ๋ž˜ํ”ฝ, ์ง€๋„ ๋ฒˆํ˜ธ, ์ขŒํ‘œ๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค. Ground() ์ž์ฒด๋ฅผ ์„ฑ๊ณต
# ์—ฌ๋ถ€๋กœ ๊ฒ€์‚ฌํ•˜์ง€ ๋ง๊ณ  ์ด๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒ€์ƒ‰์ด๋‚˜ ์ด๋™์˜ ๊ฒฐ๊ณผ๋ฅผ ๊ฒ€์‚ฌํ•˜์„ธ์š”.

SUB Main()
    # 0x40001001์„ ์ ‘๊ทผ ๊ฐ€๋Šฅํ•œ ์•„์ดํ…œ serial๋กœ ๋ฐ”๊พธ์„ธ์š”. IsObjectExists๊ฐ€ ๋กœ๋”ฉ๋œ ๊ฐ์ฒด๋ฅผ ๊ฒ€์‚ฌํ•ฉ๋‹ˆ๋‹ค. MoveItem(item, amount,
    # destination, X, Y, Z): amount=0์€ ์ „์ฒด ์Šคํƒ, Ground()๋Š” ์ง€๋ฉด, GetX/GetY/GetZ๋Š” ํ”Œ๋ ˆ์ด์–ด ์›”๋“œ ์œ„์น˜์ž…๋‹ˆ๋‹ค. result=1์€
    # ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ ์ˆ˜๋ฝ, ์•„๋‹ˆ๋ฉด 0์ž…๋‹ˆ๋‹ค. Ground()์˜ ๊ฒฐ๊ณผ๋‚˜ ์„œ๋ฒ„์˜ ๋ฐฐ์†ก ํ™•์ธ์ด ์•„๋‹™๋‹ˆ๋‹ค.

    VAR item = 0x40001001
    IF UO.IsObjectExists(item) THEN
        VAR result = UO.MoveItem(item, 0, UO.Ground(), UO.GetX('self'), UO.GetY('self'), UO.GetZ('self'))
    END IF
END SUB

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

  • 0x40001001์„ ์ ‘๊ทผ ๊ฐ€๋Šฅํ•œ ์•„์ดํ…œ serial๋กœ ๋ฐ”๊พธ์„ธ์š”. IsObjectExists๊ฐ€ ๋กœ๋”ฉ๋œ ๊ฐ์ฒด๋ฅผ ๊ฒ€์‚ฌํ•ฉ๋‹ˆ๋‹ค. MoveItem(item, amount, destination, X, Y, Z): amount=0์€ ์ „์ฒด ์Šคํƒ, Ground()๋Š” ์ง€๋ฉด, GetX/GetY/GetZ๋Š” ํ”Œ๋ ˆ์ด์–ด ์›”๋“œ ์œ„์น˜์ž…๋‹ˆ๋‹ค. result=1์€ ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ ์ˆ˜๋ฝ, ์•„๋‹ˆ๋ฉด 0์ž…๋‹ˆ๋‹ค. Ground()์˜ ๊ฒฐ๊ณผ๋‚˜ ์„œ๋ฒ„์˜ ๋ฐฐ์†ก ํ™•์ธ์ด ์•„๋‹™๋‹ˆ๋‹ค.

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

Basic