API UO ConfirmTrade ko - LIHACHTETAN/ClassicUO-BadNewbie-BasicIDE GitHub Wiki
UO.ConfirmTrade
ClassicUO โข Runtime API
์ ํํ ๊ฑฐ๋์์ ๋ด ๋์๋ฅผ ์ค์ ํฉ๋๋ค.
์ ํํ ๊ตฌ๋ฌธ
UO.ConfirmTrade(TradeNum:Any) -> Any
๋งค๊ฐ๋ณ์
TradeNumโ ํ์ฌ ์ ์ ์ฐฝ ๋ฒํธ: 1..TradeCount(). 0๊ณผ ์์๋ ์๋ชป๋ ๊ฐ์ ๋๋ค. 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์ ๋ฐ์ดํ๋ฅผ ์ฐ์ง ์์ต๋๋ค. ํ ๋ฒ ํธ์ถํ๊ณ ๊ฒฐ๊ณผ๋ฅผ ์ ์ฅํ์ธ์. ๋ค์ ํธ์ถํ๋ฉด ๋์์ ๋ฐ๋ณตํ๊ฑฐ๋ ๋ฐ๋ ์ํ๋ฅผ ์ฝ์ ์ ์์ต๋๋ค.
๋์
- 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. ConfirmTrade
Invoke๋ ์คํฌ๋ฆฝํธ ์ทจ์๋ฅผ ๊ณ ๋ คํ์ฌ ์ฝ๊ธฐ/์ฐ๊ธฐ๋ฅผ ๊ฒ์ ์ค๋ ๋๋ก ์ฎ๊ธฐ๋ฉฐ ์ ํํ TradingGump์ ID1/ID2, LocalSerial, OpponentName ๋๋ ์ฒดํฌ๋ฅผ ์ฝ์ต๋๋ค.
์ ํํ ๊ฑฐ๋์์ ๋ด ๋์๋ฅผ ์ค์ ํฉ๋๋ค.
ํ๋ก์ ํธ ์์ค: src/ClassicUO.Client/Game/Managers/ClassicUOInjectionApiBridge.cs; ํจ์ ConfirmTrade.
3. FindNumberedTrade
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; ํจ์ FindNumberedTrade.
4. AcceptTrade
๋ด ์ฒดํฌ ๋ณ๊ฒฝ ์ GameActions.AcceptTrade๋ ์ฝ๋ 2, ID1, ์ํ๋ก Send_TradeResponse๋ฅผ ํธ์ถํฉ๋๋ค. ์ฝ๊ธฐ์ ๊ฐ์ ๊ฐ ์ค์ ์ ํจํท์ ๋ณด๋ด์ง ์์ต๋๋ค.
Integer: ์ฐฝ์ด ์๊ณ ๋ด ๋์๊ฐ ์ค์ ๋์๊ฑฐ๋ ์ด๋ฏธ ์ค์ ๋์ด ์์ผ๋ฉด 1 = TRUE, ์์ผ๋ฉด 0 = FALSE์ ๋๋ค. ์๋ฒ ์๋ฃ๋ฅผ ์ฆ๋ช ํ์ง ์์ต๋๋ค. ๋ฐ๋ณตํด๋ ๋์๋ฅผ ํด์ ํ์ง ์์ต๋๋ค.
ํ๋ก์ ํธ ์์ค: src/ClassicUO.Client/Game/GameActions.cs; ํจ์ AcceptTrade.
๋ณด์กฐ ํจ์๋ ๋ชจ๋ ์ ์๋์ด ์์ผ๋ฉฐ 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 result = UO.ConfirmTrade(1)
IF result = TRUE THEN
UO.Print("Local request processed")
END IF
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()
# ConfirmTrade์ ๋ด TradeCheck ์ฐ๊ธฐ๋ ๋์๊ฐ ๋ฐ๋ ๋๋ง ์ ์กํฉ๋๋ค. ์๋ ์ฒดํฌ๋ ์๋ฒ๊ฐ ์ ์ดํ๋ฉฐ CancelTrade๋ ํ ๋ฒ ์ ์กํฉ๋๋ค.
# 1/TRUE๋ ๋ก์ปฌ ์ํ/์ฒ๋ฆฌ์ด๋ฉฐ ์ด์ ์๋ฃ๊ฐ ์๋๋๋ค. ์ด๋ฆ๊ณผ ์์ชฝ ์ฒดํฌ๋ง์ผ๋ก ์์ดํ
์ด ๊ทธ๋๋ก์์ ์ฆ๋ช
ํ ์ ์์ต๋๋ค.
VAR tradeNumber = 2
IF UO.TradeCount() >= tradeNumber THEN
VAR result = UO.ConfirmTrade(tradeNumber)
UO.Print(CStr(result))
END IF
END SUB
๋งค๊ฐ๋ณ์ ๋ฐ ์คํ ์ค๋ช :
- ConfirmTrade์ ๋ด TradeCheck ์ฐ๊ธฐ๋ ๋์๊ฐ ๋ฐ๋ ๋๋ง ์ ์กํฉ๋๋ค. ์๋ ์ฒดํฌ๋ ์๋ฒ๊ฐ ์ ์ดํ๋ฉฐ CancelTrade๋ ํ ๋ฒ ์ ์กํฉ๋๋ค. 1/TRUE๋ ๋ก์ปฌ ์ํ/์ฒ๋ฆฌ์ด๋ฉฐ ์ด์ ์๋ฃ๊ฐ ์๋๋๋ค. ์ด๋ฆ๊ณผ ์์ชฝ ์ฒดํฌ๋ง์ผ๋ก ์์ดํ ์ด ๊ทธ๋๋ก์์ ์ฆ๋ช ํ ์ ์์ต๋๋ค.
์์ ํ ๋ณด์กฐ ํจ์
# ์์ ํ ๋ณด์กฐ ํจ์
#
# ์ ํํ ๊ฑฐ๋์์ ๋ด ๋์๋ฅผ ์ค์ ํฉ๋๋ค.
#
# 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 expectedPartner = UO.GetTradeOpponent(1)
VAR result = ApplyToPartner(1, expectedPartner)
UO.Print(CStr(result))
END SUB
FUNCTION ApplyToPartner(tradeNumber, expectedPartner)
IF expectedPartner = 0 THEN
RETURN FALSE
END IF
IF UO.GetTradeOpponent(tradeNumber) <> expectedPartner THEN
RETURN FALSE
END IF
RETURN UO.ConfirmTrade(tradeNumber)
END FUNCTION
๋งค๊ฐ๋ณ์ ๋ฐ ์คํ ์ค๋ช :
- ๋ณด์กฐ ํจ์๋ ๋ชจ๋ ์ ์๋์ด ์์ผ๋ฉฐ Main์์ ํธ์ถํฉ๋๋ค. ๋ฒ์/ID ๊ฒ์ฌ๋ ์ค์๋ฅผ ์ค์ด์ง๋ง ์ฌ๋ฌ ํธ์ถ์ ์์์ ์ด์ง ์์ ์ค๊ฐ์ ์ฐฝ์ด ๋ฐ๋ ์ ์์ต๋๋ค. expectedPartner๋ ์ ์ฅํ ์บ๋ฆญํฐ serial์ด๋ฉฐ ๊ฐ๊ฒฉ/๋ด์ฉ ๊ฒ์ฆ์ ์๋๋๋ค.