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

UO.IsTrade

ClassicUO โ€ข Runtime API

์—ด๋ฆฐ ์•ˆ์ „ ๊ฑฐ๋ž˜ ์ฐฝ์ด ์žˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

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

UO.IsTrade() -> Integer

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

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

๋ฐ˜ํ™˜๊ฐ’

Integer: ์—ด๋ฆฐ ๊ฑฐ๋ž˜๊ฐ€ ์žˆ์œผ๋ฉด 1 = TRUE, ์—†์œผ๋ฉด 0 = FALSE.

๋…ผ๋ฆฌ ๊ฒฐ๊ณผ์ž…๋‹ˆ๋‹ค: 1 = TRUE, 0 = FALSE. VAR result = command(...)๋กœ ์ €์žฅํ•œ ๋’ค IF result = TRUE THEN ๋˜๋Š” IF result = 1 THEN์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๋ถ€์ • ๊ฒฐ๊ณผ๋Š” IF result = FALSE THEN ๋˜๋Š” IF result = 0 THEN์ž…๋‹ˆ๋‹ค. TRUE/FALSE์— ๋”ฐ์˜ดํ‘œ๋ฅผ ์“ฐ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ํ•œ ๋ฒˆ ํ˜ธ์ถœํ•˜๊ณ  ๊ฒฐ๊ณผ๋ฅผ ์ €์žฅํ•˜์„ธ์š”. ๋‹ค์‹œ ํ˜ธ์ถœํ•˜๋ฉด ๋™์ž‘์„ ๋ฐ˜๋ณตํ•˜๊ฑฐ๋‚˜ ๋ฐ”๋€ ์ƒํƒœ๋ฅผ ์ฝ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋™์ž‘

  • GetTradeContainer/GetTradeOpponent/GetTradeOpponentName/ConfirmTrade/CancelTrade๋Š” 1๋ถ€ํ„ฐ, TradeContainer/TradeOpponent/TradeName๊ณผ ๋ชจ๋“  TradeCheck ํ˜•์‹์€ 0๋ถ€ํ„ฐ์ž…๋‹ˆ๋‹ค. ์ด ํด๋ผ์ด์–ธํŠธ๋Š” ํ•ด๋‹น ๊ทœ์น™์„ ์œ ์ง€ํ•˜๋ฉฐ ๋‹ค๋ฅธ ์—”์ง„์˜ ์™ธ๋ถ€ ์„ค๋ช…์„œ๋Š” ์‹œ์ž‘์ ์ด ๋‹ค๋ฅผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๊ฒŒ์ž„ ์Šค๋ ˆ๋“œ์—์„œ ํ˜„์žฌ World์˜ ์—ด๋ฆฐ ์ฐฝ์„ ์ฝ์œผ๋ฉฐ ๋‹ซํžŒ ์ฐฝ์€ ์ œ์™ธํ•ฉ๋‹ˆ๋‹ค. ์ฝ๊ธฐ๋Š” ํŒจํ‚ท์„ ๋ณด๋‚ด๊ฑฐ๋‚˜ ์‘๋‹ต์„ ๊ธฐ๋‹ค๋ฆฌ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์—ด๊ธฐ, ๋‹ซ๊ธฐ, ์•ž์œผ๋กœ ๊ฐ€์ ธ์˜ค๊ธฐ๋กœ UI ์ˆœ์„œ๊ฐ€ ๋ฐ”๋€Œ๋ฏ€๋กœ ์ธ๋ฑ์Šค๋Š” ์˜๊ตฌ ID๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค.
  • ConfirmTrade์™€ ๋‚ด TradeCheck ์“ฐ๊ธฐ๋Š” ๋™์˜๊ฐ€ ๋ฐ”๋€” ๋•Œ๋งŒ ์ „์†กํ•ฉ๋‹ˆ๋‹ค. ์ƒ๋Œ€ ์ฒดํฌ๋Š” ์„œ๋ฒ„๊ฐ€ ์ œ์–ดํ•˜๋ฉฐ CancelTrade๋Š” ํ•œ ๋ฒˆ ์ „์†กํ•ฉ๋‹ˆ๋‹ค. 1/TRUE๋Š” ๋กœ์ปฌ ์ƒํƒœ/์ฒ˜๋ฆฌ์ด๋ฉฐ ์ด์ „ ์™„๋ฃŒ๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค. ์ด๋ฆ„๊ณผ ์–‘์ชฝ ์ฒดํฌ๋งŒ์œผ๋กœ ์•„์ดํ…œ์ด ๊ทธ๋Œ€๋กœ์ž„์„ ์ฆ๋ช…ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

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

์•„๋ž˜์—์„œ C# ํ˜ธ์ถœ ๊ฒฝ๋กœ๋ฅผ ์„ค๋ช…ํ•œ ๋’ค ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ Basic ์˜ˆ์ œ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ๋„คํŠธ์›Œํฌ ํ”„๋กœํ† ์ฝœ์„ ๋‹ค์‹œ ๊ตฌํ˜„ํ•˜์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค.

1. ExecuteStealthCompatibility

๋“ฑ๋ก์€ ์ธ์ˆ˜ ์ˆ˜๋กœ ํ˜•์‹์„ ์„ ํƒํ•˜๊ณ  NumberConversions๋Š” ์ˆซ์ž๋ฅผ ๋ณ€ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ์ธ์ˆ˜ 2๊ฐœ TradeCheck๋Š” ์ธก 1/2๋ฅผ ๊ฒ€์‚ฌํ•˜์—ฌ bridge์˜ 0/1๋กœ ๋งคํ•‘ํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ์กด serial์€ ToHex๋กœ ํ˜•์‹ํ™”ํ•ฉ๋‹ˆ๋‹ค.

Integer: ์—ด๋ฆฐ ๊ฑฐ๋ž˜๊ฐ€ ์žˆ์œผ๋ฉด 1 = TRUE, ์—†์œผ๋ฉด 0 = FALSE.

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

2. IsTrade

Invoke๋Š” ์Šคํฌ๋ฆฝํŠธ ์ทจ์†Œ๋ฅผ ๊ณ ๋ คํ•˜์—ฌ ์ฝ๊ธฐ/์“ฐ๊ธฐ๋ฅผ ๊ฒŒ์ž„ ์Šค๋ ˆ๋“œ๋กœ ์˜ฎ๊ธฐ๋ฉฐ ์„ ํƒํ•œ TradingGump์˜ ID1/ID2, LocalSerial, OpponentName ๋˜๋Š” ์ฒดํฌ๋ฅผ ์ฝ์Šต๋‹ˆ๋‹ค.

์—ด๋ฆฐ ์•ˆ์ „ ๊ฑฐ๋ž˜ ์ฐฝ์ด ์žˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

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

3. FindTrade

FindNumberedTrade๋Š” 1์„ ๋นผ๊ธฐ ์ „์— number>0์„ ๊ฒ€์‚ฌํ•˜๋ฉฐ FindTrade๋Š” ์Œ์ˆ˜ ์ธ๋ฑ์Šค๋ฅผ ๊ฑฐ๋ถ€ํ•˜๊ณ  ํ˜„์žฌ World์˜ ์—ด๋ฆฐ TradingGump๋งŒ ์—ด๊ฑฐํ•ฉ๋‹ˆ๋‹ค.

GetTradeContainer/GetTradeOpponent/GetTradeOpponentName/ConfirmTrade/CancelTrade๋Š” 1๋ถ€ํ„ฐ, TradeContainer/TradeOpponent/TradeName๊ณผ ๋ชจ๋“  TradeCheck ํ˜•์‹์€ 0๋ถ€ํ„ฐ์ž…๋‹ˆ๋‹ค. ์ด ํด๋ผ์ด์–ธํŠธ๋Š” ํ•ด๋‹น ๊ทœ์น™์„ ์œ ์ง€ํ•˜๋ฉฐ ๋‹ค๋ฅธ ์—”์ง„์˜ ์™ธ๋ถ€ ์„ค๋ช…์„œ๋Š” ์‹œ์ž‘์ ์ด ๋‹ค๋ฅผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

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

๋ณด์กฐ ํ•จ์ˆ˜๋Š” ๋ชจ๋‘ ์ •์˜๋˜์–ด ์žˆ์œผ๋ฉฐ Main์—์„œ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค. ๋ฒ”์œ„/ID ๊ฒ€์‚ฌ๋Š” ์‹ค์ˆ˜๋ฅผ ์ค„์ด์ง€๋งŒ ์—ฌ๋Ÿฌ ํ˜ธ์ถœ์€ ์›์ž์ ์ด์ง€ ์•Š์•„ ์ค‘๊ฐ„์— ์ฐฝ์ด ๋ฐ”๋€” ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. expectedPartner๋Š” ์ €์žฅํ•œ ์บ๋ฆญํ„ฐ serial์ด๋ฉฐ ๊ฐ€๊ฒฉ/๋‚ด์šฉ ๊ฒ€์ฆ์€ ์•„๋‹™๋‹ˆ๋‹ค.

์˜ˆ์ œ

์ง์ ‘ ์ฝ๊ธฐ ๋˜๋Š” ๋™์ž‘

# ์ง์ ‘ ์ฝ๊ธฐ ๋˜๋Š” ๋™์ž‘
#
# ์—ด๋ฆฐ ์•ˆ์ „ ๊ฑฐ๋ž˜ ์ฐฝ์ด ์žˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
#
# Integer: ์—ด๋ฆฐ ๊ฑฐ๋ž˜๊ฐ€ ์žˆ์œผ๋ฉด 1 = TRUE, ์—†์œผ๋ฉด 0 = FALSE.
#
# ๋…ผ๋ฆฌ ๊ฒฐ๊ณผ์ž…๋‹ˆ๋‹ค: 1 = TRUE, 0 = FALSE. VAR result = command(...)๋กœ ์ €์žฅํ•œ ๋’ค IF result = TRUE THEN ๋˜๋Š” IF
# result = 1 THEN์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๋ถ€์ • ๊ฒฐ๊ณผ๋Š” IF result = FALSE THEN ๋˜๋Š” IF result = 0 THEN์ž…๋‹ˆ๋‹ค. TRUE/FALSE์—
# ๋”ฐ์˜ดํ‘œ๋ฅผ ์“ฐ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ํ•œ ๋ฒˆ ํ˜ธ์ถœํ•˜๊ณ  ๊ฒฐ๊ณผ๋ฅผ ์ €์žฅํ•˜์„ธ์š”. ๋‹ค์‹œ ํ˜ธ์ถœํ•˜๋ฉด ๋™์ž‘์„ ๋ฐ˜๋ณตํ•˜๊ฑฐ๋‚˜ ๋ฐ”๋€ ์ƒํƒœ๋ฅผ ์ฝ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

SUB Main()
    # ํ•œ ๋ฒˆ ํ˜ธ์ถœํ•˜์—ฌ value/result์— ์ €์žฅํ•ฉ๋‹ˆ๋‹ค. ์ฒซ ์ธ๋ฑ์Šค๋Š” 0, ์ฒซ ๋ฒˆํ˜ธ๋Š” 1์ž…๋‹ˆ๋‹ค(๊ตฌ๋ฌธ ์ฐธ๊ณ ). HEX๋Š” ์ˆซ์ž serial, CStr์€ ์ˆ˜๋‚˜ ํ…์ŠคํŠธ๋ฅผ
    # ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค.

    VAR value = UO.IsTrade()
    UO.Print(CStr(value))
END SUB

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

  • ํ•œ ๋ฒˆ ํ˜ธ์ถœํ•˜์—ฌ value/result์— ์ €์žฅํ•ฉ๋‹ˆ๋‹ค. ์ฒซ ์ธ๋ฑ์Šค๋Š” 0, ์ฒซ ๋ฒˆํ˜ธ๋Š” 1์ž…๋‹ˆ๋‹ค(๊ตฌ๋ฌธ ์ฐธ๊ณ ). HEX๋Š” ์ˆซ์ž serial, CStr์€ ์ˆ˜๋‚˜ ํ…์ŠคํŠธ๋ฅผ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค.

๋‹ค๋ฅธ ์ƒํ™ฉ๊ณผ ๋งค๊ฐœ๋ณ€์ˆ˜

# ๋‹ค๋ฅธ ์ƒํ™ฉ๊ณผ ๋งค๊ฐœ๋ณ€์ˆ˜
#
# ์—ด๋ฆฐ ์•ˆ์ „ ๊ฑฐ๋ž˜ ์ฐฝ์ด ์žˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
#
# Integer: ์—ด๋ฆฐ ๊ฑฐ๋ž˜๊ฐ€ ์žˆ์œผ๋ฉด 1 = TRUE, ์—†์œผ๋ฉด 0 = FALSE.
#
# ๋…ผ๋ฆฌ ๊ฒฐ๊ณผ์ž…๋‹ˆ๋‹ค: 1 = TRUE, 0 = FALSE. VAR result = command(...)๋กœ ์ €์žฅํ•œ ๋’ค IF result = TRUE THEN ๋˜๋Š” IF
# result = 1 THEN์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๋ถ€์ • ๊ฒฐ๊ณผ๋Š” IF result = FALSE THEN ๋˜๋Š” IF result = 0 THEN์ž…๋‹ˆ๋‹ค. TRUE/FALSE์—
# ๋”ฐ์˜ดํ‘œ๋ฅผ ์“ฐ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ํ•œ ๋ฒˆ ํ˜ธ์ถœํ•˜๊ณ  ๊ฒฐ๊ณผ๋ฅผ ์ €์žฅํ•˜์„ธ์š”. ๋‹ค์‹œ ํ˜ธ์ถœํ•˜๋ฉด ๋™์ž‘์„ ๋ฐ˜๋ณตํ•˜๊ฑฐ๋‚˜ ๋ฐ”๋€ ์ƒํƒœ๋ฅผ ์ฝ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

SUB Main()
    # before/after๋Š” 500๋ฐ€๋ฆฌ์ดˆ ๊ฐ„๊ฒฉ์˜ ๋ณ„๋„ ์Šค๋ƒ…์ƒท์ž…๋‹ˆ๋‹ค. ํŠน์ • ๊ฑฐ๋ž˜๋ฅผ ๊ธฐ๋‹ค๋ฆฌ์ง€ ์•Š์œผ๋ฉฐ ์ค‘๊ฐ„ ๋ณ€๊ฒฝ์„ ๋†“์น  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

    VAR before = UO.IsTrade()
    WAIT(500)
    VAR after = UO.IsTrade()
    UO.Print(CStr(before) + " -> " + CStr(after))
END SUB

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

  • before/after๋Š” 500๋ฐ€๋ฆฌ์ดˆ ๊ฐ„๊ฒฉ์˜ ๋ณ„๋„ ์Šค๋ƒ…์ƒท์ž…๋‹ˆ๋‹ค. ํŠน์ • ๊ฑฐ๋ž˜๋ฅผ ๊ธฐ๋‹ค๋ฆฌ์ง€ ์•Š์œผ๋ฉฐ ์ค‘๊ฐ„ ๋ณ€๊ฒฝ์„ ๋†“์น  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์™„์ „ํ•œ ๋ณด์กฐ ํ•จ์ˆ˜

# ์™„์ „ํ•œ ๋ณด์กฐ ํ•จ์ˆ˜
#
# ์—ด๋ฆฐ ์•ˆ์ „ ๊ฑฐ๋ž˜ ์ฐฝ์ด ์žˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
#
# Integer: ์—ด๋ฆฐ ๊ฑฐ๋ž˜๊ฐ€ ์žˆ์œผ๋ฉด 1 = TRUE, ์—†์œผ๋ฉด 0 = FALSE.
#
# ๋…ผ๋ฆฌ ๊ฒฐ๊ณผ์ž…๋‹ˆ๋‹ค: 1 = TRUE, 0 = FALSE. VAR result = command(...)๋กœ ์ €์žฅํ•œ ๋’ค IF result = TRUE THEN ๋˜๋Š” IF
# result = 1 THEN์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๋ถ€์ • ๊ฒฐ๊ณผ๋Š” IF result = FALSE THEN ๋˜๋Š” IF result = 0 THEN์ž…๋‹ˆ๋‹ค. TRUE/FALSE์—
# ๋”ฐ์˜ดํ‘œ๋ฅผ ์“ฐ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ํ•œ ๋ฒˆ ํ˜ธ์ถœํ•˜๊ณ  ๊ฒฐ๊ณผ๋ฅผ ์ €์žฅํ•˜์„ธ์š”. ๋‹ค์‹œ ํ˜ธ์ถœํ•˜๋ฉด ๋™์ž‘์„ ๋ฐ˜๋ณตํ•˜๊ฑฐ๋‚˜ ๋ฐ”๋€ ์ƒํƒœ๋ฅผ ์ฝ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

SUB Main()
    # ๋ณด์กฐ ํ•จ์ˆ˜๋Š” ๋ชจ๋‘ ์ •์˜๋˜์–ด ์žˆ์œผ๋ฉฐ Main์—์„œ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค. ๋ฒ”์œ„/ID ๊ฒ€์‚ฌ๋Š” ์‹ค์ˆ˜๋ฅผ ์ค„์ด์ง€๋งŒ ์—ฌ๋Ÿฌ ํ˜ธ์ถœ์€ ์›์ž์ ์ด์ง€ ์•Š์•„ ์ค‘๊ฐ„์— ์ฐฝ์ด ๋ฐ”๋€” ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    # expectedPartner๋Š” ์ €์žฅํ•œ ์บ๋ฆญํ„ฐ serial์ด๋ฉฐ ๊ฐ€๊ฒฉ/๋‚ด์šฉ ๊ฒ€์ฆ์€ ์•„๋‹™๋‹ˆ๋‹ค.

    VAR value = ReadTradeState()
    UO.Print(CStr(value))
END SUB

FUNCTION ReadTradeState()
    RETURN UO.IsTrade()
END FUNCTION

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

  • ๋ณด์กฐ ํ•จ์ˆ˜๋Š” ๋ชจ๋‘ ์ •์˜๋˜์–ด ์žˆ์œผ๋ฉฐ Main์—์„œ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค. ๋ฒ”์œ„/ID ๊ฒ€์‚ฌ๋Š” ์‹ค์ˆ˜๋ฅผ ์ค„์ด์ง€๋งŒ ์—ฌ๋Ÿฌ ํ˜ธ์ถœ์€ ์›์ž์ ์ด์ง€ ์•Š์•„ ์ค‘๊ฐ„์— ์ฐฝ์ด ๋ฐ”๋€” ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. expectedPartner๋Š” ์ €์žฅํ•œ ์บ๋ฆญํ„ฐ serial์ด๋ฉฐ ๊ฐ€๊ฒฉ/๋‚ด์šฉ ๊ฒ€์ฆ์€ ์•„๋‹™๋‹ˆ๋‹ค.

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

Basic