API UO TradeCheck ko - LIHACHTETAN/ClassicUO-BadNewbie-BasicIDE GitHub Wiki
UO.TradeCheck
ClassicUO โข Runtime API
๋์ ์ฒดํฌ๋ฅผ ์ฝ์ผ๋ฉฐ ์ธ์ 3๊ฐ ํ์์ ๋ด ์ฒดํฌ๋ ๋ณ๊ฒฝํฉ๋๋ค.
์ ํํ ๊ตฌ๋ฌธ
UO.TradeCheck(TradeNum:Any, Num:Any) -> Any
UO.TradeCheck(windowIndex:Any) -> Integer
UO.TradeCheck(windowIndex:Any, checkbox:Any, stateValue:Any) -> Integer
๋งค๊ฐ๋ณ์
windowIndexโ ํ์ฌ ์ ์ ์ฐฝ ์ธ๋ฑ์ค: 0..TradeCount()-1. ์์/์กด์ฌํ์ง ์๋ ์ธ๋ฑ์ค๋ ๋น ๊ฒฐ๊ณผ์ ๋๋ค. serial์ด ์๋๋๋ค.TradeNumโ ํ์ฌ ์ ์ ์ฐฝ ์ธ๋ฑ์ค: 0..TradeCount()-1. ์์/์กด์ฌํ์ง ์๋ ์ธ๋ฑ์ค๋ ๋น ๊ฒฐ๊ณผ์ ๋๋ค. serial์ด ์๋๋๋ค.Numโ ์ธ์ 2๊ฐ ํ์๋ง: 1์ ๋ด ์ฒดํฌ, 2๋ ์๋ ์ฒดํฌ์ด๋ฉฐ ๊ทธ ์ธ์๋ 0์ ๋๋ค. ์ฌ๊ธฐ์ TradeNum์ 0๋ถํฐ์ ๋๋ค.checkboxโ ์ธ์ 3๊ฐ ํ์๋ง: 0์ ๋ด ์ฒดํฌ, 1์ ์ฝ๊ธฐ ์ ์ฉ ์๋ ์ฒดํฌ์ด๋ฉฐ ๋ค๋ฅธ ๊ฐ์ 0์ ๋ฐํํฉ๋๋ค.stateValueโ checkbox=0์ผ ๋๋ง 0/FALSE๋ ํด์ , 0์ด ์๋ ์/TRUE๋ ๋์ ์ค์ ์ ๋๋ค. checkbox=1์ด๋ฉด ๋ฌด์ํฉ๋๋ค.
๋ฐํ๊ฐ
Integer: ์ ํํ ์ฒดํฌ๊ฐ ์ผ์ ธ ์์ผ๋ฉด 1 = TRUE, ๊บผ์ง/์ฐฝ ์์/์๋ชป๋ ์ธก์ด๋ฉด 0 = FALSE์ ๋๋ค. ์ฐ๊ธฐ๋ ๊ฑฐ๋ ์ฑ๊ณต์ด ์๋ ์ํ๋ฅผ ๋ฐํํ๋ฏ๋ก ํด์ ํ๋ฉด 0์ ๋๋ค.
๋ ผ๋ฆฌ ๊ฒฐ๊ณผ์ ๋๋ค: 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. TradeCheck
๋ฑ๋ก์ ์ธ์ ์๋ก ํ์์ ์ ํํ๊ณ NumberConversions๋ ์ซ์๋ฅผ ๋ณํํฉ๋๋ค. ์ธ์ 2๊ฐ TradeCheck๋ ์ธก 1/2๋ฅผ ๊ฒ์ฌํ์ฌ bridge์ 0/1๋ก ๋งคํํฉ๋๋ค. ๊ธฐ์กด serial์ ToHex๋ก ํ์ํํฉ๋๋ค.
Integer: ์ ํํ ์ฒดํฌ๊ฐ ์ผ์ ธ ์์ผ๋ฉด 1 = TRUE, ๊บผ์ง/์ฐฝ ์์/์๋ชป๋ ์ธก์ด๋ฉด 0 = FALSE์ ๋๋ค. ์ฐ๊ธฐ๋ ๊ฑฐ๋ ์ฑ๊ณต์ด ์๋ ์ํ๋ฅผ ๋ฐํํ๋ฏ๋ก ํด์ ํ๋ฉด 0์ ๋๋ค.
ํ๋ก์ ํธ ์์ค: external/InjectionScript/src/InjectionScript/Runtime/InjectionApiUO.cs; ํจ์ TradeCheck.
2. TradeCheck
Invoke๋ ์คํฌ๋ฆฝํธ ์ทจ์๋ฅผ ๊ณ ๋ คํ์ฌ ์ฝ๊ธฐ/์ฐ๊ธฐ๋ฅผ ๊ฒ์ ์ค๋ ๋๋ก ์ฎ๊ธฐ๋ฉฐ ์ ํํ TradingGump์ ID1/ID2, LocalSerial, OpponentName ๋๋ ์ฒดํฌ๋ฅผ ์ฝ์ต๋๋ค.
๋์ ์ฒดํฌ๋ฅผ ์ฝ์ผ๋ฉฐ ์ธ์ 3๊ฐ ํ์์ ๋ด ์ฒดํฌ๋ ๋ณ๊ฒฝํฉ๋๋ค.
ํ๋ก์ ํธ ์์ค: src/ClassicUO.Client/Game/Managers/ClassicUOInjectionApiBridge.cs; ํจ์ TradeCheck.
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.
4. AcceptTrade
๋ด ์ฒดํฌ ๋ณ๊ฒฝ ์ GameActions.AcceptTrade๋ ์ฝ๋ 2, ID1, ์ํ๋ก Send_TradeResponse๋ฅผ ํธ์ถํฉ๋๋ค. ์ฝ๊ธฐ์ ๊ฐ์ ๊ฐ ์ค์ ์ ํจํท์ ๋ณด๋ด์ง ์์ต๋๋ค.
Integer: ์ ํํ ์ฒดํฌ๊ฐ ์ผ์ ธ ์์ผ๋ฉด 1 = TRUE, ๊บผ์ง/์ฐฝ ์์/์๋ชป๋ ์ธก์ด๋ฉด 0 = FALSE์ ๋๋ค. ์ฐ๊ธฐ๋ ๊ฑฐ๋ ์ฑ๊ณต์ด ์๋ ์ํ๋ฅผ ๋ฐํํ๋ฏ๋ก ํด์ ํ๋ฉด 0์ ๋๋ค.
ํ๋ก์ ํธ ์์ค: src/ClassicUO.Client/Game/GameActions.cs; ํจ์ AcceptTrade.
๋ณด์กฐ ํจ์๋ ๋ชจ๋ ์ ์๋์ด ์์ผ๋ฉฐ Main์์ ํธ์ถํฉ๋๋ค. ๋ฒ์/ID ๊ฒ์ฌ๋ ์ค์๋ฅผ ์ค์ด์ง๋ง ์ฌ๋ฌ ํธ์ถ์ ์์์ ์ด์ง ์์ ์ค๊ฐ์ ์ฐฝ์ด ๋ฐ๋ ์ ์์ต๋๋ค. expectedPartner๋ ์ ์ฅํ ์บ๋ฆญํฐ serial์ด๋ฉฐ ๊ฐ๊ฒฉ/๋ด์ฉ ๊ฒ์ฆ์ ์๋๋๋ค.
์์
์ง์ ์ฝ๊ธฐ ๋๋ ๋์
# ์ง์ ์ฝ๊ธฐ ๋๋ ๋์
#
# ๋์ ์ฒดํฌ๋ฅผ ์ฝ์ผ๋ฉฐ ์ธ์ 3๊ฐ ํ์์ ๋ด ์ฒดํฌ๋ ๋ณ๊ฒฝํฉ๋๋ค.
#
# Integer: ์ ํํ ์ฒดํฌ๊ฐ ์ผ์ ธ ์์ผ๋ฉด 1 = TRUE, ๊บผ์ง/์ฐฝ ์์/์๋ชป๋ ์ธก์ด๋ฉด 0 = FALSE์
๋๋ค. ์ฐ๊ธฐ๋ ๊ฑฐ๋ ์ฑ๊ณต์ด ์๋ ์ํ๋ฅผ ๋ฐํํ๋ฏ๋ก ํด์ ํ๋ฉด
# 0์
๋๋ค.
#
# ๋
ผ๋ฆฌ ๊ฒฐ๊ณผ์
๋๋ค: 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()
# TradeCheck(0)๊ณผ TradeCheck(0,1)์ ์ฒซ ์ฐฝ์ ๋ด ์ฒดํฌ, TradeCheck(0,2)๋ ์๋ ์ฒดํฌ๋ฅผ ์ฝ์ต๋๋ค. ์ฐ๊ธฐ๋ ์๋ ๋์๋ ์์ต๋๋ค.
VAR own = UO.TradeCheck(0)
VAR sameOwn = UO.TradeCheck(0, 1)
VAR other = UO.TradeCheck(0, 2)
UO.Print(CStr(own) + "/" + CStr(sameOwn) + "/" + CStr(other))
END SUB
๋งค๊ฐ๋ณ์ ๋ฐ ์คํ ์ค๋ช :
- TradeCheck(0)๊ณผ TradeCheck(0,1)์ ์ฒซ ์ฐฝ์ ๋ด ์ฒดํฌ, TradeCheck(0,2)๋ ์๋ ์ฒดํฌ๋ฅผ ์ฝ์ต๋๋ค. ์ฐ๊ธฐ๋ ์๋ ๋์๋ ์์ต๋๋ค.
๋ค๋ฅธ ์ํฉ๊ณผ ๋งค๊ฐ๋ณ์
# ๋ค๋ฅธ ์ํฉ๊ณผ ๋งค๊ฐ๋ณ์
#
# ๋์ ์ฒดํฌ๋ฅผ ์ฝ์ผ๋ฉฐ ์ธ์ 3๊ฐ ํ์์ ๋ด ์ฒดํฌ๋ ๋ณ๊ฒฝํฉ๋๋ค.
#
# Integer: ์ ํํ ์ฒดํฌ๊ฐ ์ผ์ ธ ์์ผ๋ฉด 1 = TRUE, ๊บผ์ง/์ฐฝ ์์/์๋ชป๋ ์ธก์ด๋ฉด 0 = FALSE์
๋๋ค. ์ฐ๊ธฐ๋ ๊ฑฐ๋ ์ฑ๊ณต์ด ์๋ ์ํ๋ฅผ ๋ฐํํ๋ฏ๋ก ํด์ ํ๋ฉด
# 0์
๋๋ค.
#
# ๋
ผ๋ฆฌ ๊ฒฐ๊ณผ์
๋๋ค: 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()
# TradeCheck(0,0,FALSE)๋ ๋ด ๋์๋ฅผ ํด์ ํฉ๋๋ค. TradeCheck(0,1,FALSE)๋ ์๋๋ฅผ ์ฝ๊ธฐ๋ง ํ๋ฉฐ FALSE๋ก ์๋ ๋์๋ฅผ ๋ณ๊ฒฝํ ์
# ์์ต๋๋ค. ํด์ ํ 0์ ์ ์์
๋๋ค.
VAR cleared = UO.TradeCheck(0, 0, FALSE)
VAR other = UO.TradeCheck(0, 1, FALSE)
UO.Print(CStr(cleared) + "/" + CStr(other))
END SUB
๋งค๊ฐ๋ณ์ ๋ฐ ์คํ ์ค๋ช :
- TradeCheck(0,0,FALSE)๋ ๋ด ๋์๋ฅผ ํด์ ํฉ๋๋ค. TradeCheck(0,1,FALSE)๋ ์๋๋ฅผ ์ฝ๊ธฐ๋ง ํ๋ฉฐ FALSE๋ก ์๋ ๋์๋ฅผ ๋ณ๊ฒฝํ ์ ์์ต๋๋ค. ํด์ ํ 0์ ์ ์์ ๋๋ค.
์์ ํ ๋ณด์กฐ ํจ์
# ์์ ํ ๋ณด์กฐ ํจ์
#
# ๋์ ์ฒดํฌ๋ฅผ ์ฝ์ผ๋ฉฐ ์ธ์ 3๊ฐ ํ์์ ๋ด ์ฒดํฌ๋ ๋ณ๊ฒฝํฉ๋๋ค.
#
# Integer: ์ ํํ ์ฒดํฌ๊ฐ ์ผ์ ธ ์์ผ๋ฉด 1 = TRUE, ๊บผ์ง/์ฐฝ ์์/์๋ชป๋ ์ธก์ด๋ฉด 0 = FALSE์
๋๋ค. ์ฐ๊ธฐ๋ ๊ฑฐ๋ ์ฑ๊ณต์ด ์๋ ์ํ๋ฅผ ๋ฐํํ๋ฏ๋ก ํด์ ํ๋ฉด
# 0์
๋๋ค.
#
# ๋
ผ๋ฆฌ ๊ฒฐ๊ณผ์
๋๋ค: 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 accepted = BothAccepted(0)
IF accepted = TRUE THEN
UO.Print("Both boxes are checked; server completion is not known")
END IF
END SUB
FUNCTION BothAccepted(index)
IF index < 0 OR index >= UO.TradeCount() THEN
RETURN FALSE
END IF
VAR own = UO.TradeCheck(index, 1)
VAR other = UO.TradeCheck(index, 2)
RETURN own = TRUE AND other = TRUE
END FUNCTION
๋งค๊ฐ๋ณ์ ๋ฐ ์คํ ์ค๋ช :
- ๋ณด์กฐ ํจ์๋ ๋ชจ๋ ์ ์๋์ด ์์ผ๋ฉฐ Main์์ ํธ์ถํฉ๋๋ค. ๋ฒ์/ID ๊ฒ์ฌ๋ ์ค์๋ฅผ ์ค์ด์ง๋ง ์ฌ๋ฌ ํธ์ถ์ ์์์ ์ด์ง ์์ ์ค๊ฐ์ ์ฐฝ์ด ๋ฐ๋ ์ ์์ต๋๋ค. expectedPartner๋ ์ ์ฅํ ์บ๋ฆญํฐ serial์ด๋ฉฐ ๊ฐ๊ฒฉ/๋ด์ฉ ๊ฒ์ฆ์ ์๋๋๋ค.