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์ด๋ฉฐ ๊ฐ๊ฒฉ/๋ด์ฉ ๊ฒ์ฆ์ ์๋๋๋ค.