KO UO Topic shops vendors - LIHACHTETAN/ClassicUO-Bad-Newbie-CSharp-Scripts-IDE GitHub Wiki

ะฃะบั€ะฐั—ะฝััŒะบะฐ ยท ะ ัƒััะบะธะน ยท English ยท Deutsch ยท Franรงais ยท Italiano ยท Espaรฑol ยท ็น้ซ”ไธญๆ–‡ ยท ๆ—ฅๆœฌ่ชž ยท ํ•œ๊ตญ์–ด

์ƒ์  ๋ฐ ์ƒ์ธ

ํ™ˆ ยท C# ยท IDE ยท UO API ยท Aโ€“Z ยท ์˜ˆ ยท ์–ธ์–ด

๊ตฌ๋งค, ํŒ๋งค, ์ƒ์  ๋ชฉ๋ก, ์ง€์—ฐ ๋ฐ ๊ฐœ์ธ ํŒ๋งค์ž ๊ฐ€๊ฒฉ. AllPrice ๋ฐ MassPriceMove๋Š” ์˜ต์…˜์— ์ง€์ •๋œ ํ•ญ๋ชฉ์˜ type๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

๊ตฌ๋งค ๋ฐ ํŒ๋งค: ์ ˆ์ฐจ

์ „์ฒด ์นดํƒˆ๋กœ๊ทธ ๋ฐ ์˜ˆ์‹œ ์—ด๊ธฐ

์„น์…˜

์ฃผ์ œ ๋ช…๋ น ๋ฐ ์„ค๋ช…
Buy UO.Buy
Sell UO.Sell
AutoBuy UO.AutoBuy
AutoSell UO.AutoSell
Shop List UO.GetShopList ยท UO.ClearShopList ยท UO.Shop
Prices UO.GetPrice ยท UO.AllPrice ยท UO.MassPriceMove
VendorMenu UO.VendorMenu
SendShopReply UO.SendShopReply

๋ชจ๋“  ํ…Œ๋งˆ ๋ช…๋ น

๊ตฌ๋งค / ํŒ๋งค

UO.Buy ยท UO.Sell ยท UO.AutoBuy ยท UO.AutoBuyEx ยท UO.AutoSell ยท UO.Shop ยท UO.GetShopList ยท UO.ClearShopList ยท UO.VendorMenu ยท UO.SendShopReply

๋ฌผ๊ฐ€

UO.GetPrice ยท UO.AllPrice ยท UO.MassPriceMove

์ง€์—ฐ

UO.GetAutoBuyDelay ยท UO.GetAutoSellDelay ยท UO.SetAutoBuyDelay ยท UO.SetAutoSellDelay

์ฃผ์ œ์— ๋Œ€ํ•œ ์˜ˆ

๊ฐ ๋ช…๋ น ์นด๋“œ์—๋Š” ์ง์ ‘ ์ฝ”๋“œ, ํ•จ์ˆ˜ ๋ฐ ํด๋ž˜์Šค ๋“ฑ ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ๋…๋ฆฝ์ ์ธ ์‹œ๋‚˜๋ฆฌ์˜ค๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ์€ ์„ ํƒ๋œ ์งง์€ ์‹œ๋‚˜๋ฆฌ์˜ค์ž…๋‹ˆ๋‹ค. ์ œํ•œ์‚ฌํ•ญ๊ณผ ์ „์ฒด ๋ถ„์„์ด ์นด๋“œ์— ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

UO.AllPrice

๋งค๊ฐœ๋ณ€์ˆ˜, ๊ฒฐ๊ณผ ๋ฐ ๋ชจ๋“  ์‹œ๋‚˜๋ฆฌ์˜ค

UO.AllPrice(125);
UO.Print("Drop goods into your vendor inventory");

UO.MassPriceMove

๋งค๊ฐœ๋ณ€์ˆ˜, ๊ฒฐ๊ณผ ๋ฐ ๋ชจ๋“  ์‹œ๋‚˜๋ฆฌ์˜ค

UO.MassPriceMove(350, 50, 0, 125);
UO.Print("Drag one complete stack into your vendor bag");

์ „์ฒด ๋ช…๋ น ์ฐธ์กฐ


UO.AllPrice

ะฃะบั€ะฐั—ะฝััŒะบะฐ ยท ะ ัƒััะบะธะน ยท English ยท Deutsch ยท Franรงais ยท Italiano ยท Espaรฑol ยท ็น้ซ”ไธญๆ–‡ ยท ๆ—ฅๆœฌ่ชž ยท ํ•œ๊ตญ์–ด

C# ์‹œ๊ทธ๋‹ˆ์ฒ˜

void UO.AllPrice();
void UO.AllPrice(object? price);
void UO.AllPrice(object? price, object? @type);

๊ณต๊ธ‰์—…์ฒด์˜ ์ธ๋ฒคํ† ๋ฆฌ์— ํ’ˆ๋ชฉ์„ ๋ฐฐ์น˜ํ•œ ํ›„ ์ž๋™ ๊ฐ€๊ฒฉ ์ž…๋ ฅ์„ ํ™œ์„ฑํ™”ํ•ฉ๋‹ˆ๋‹ค. ํŒ€์€ ์•„์ดํ…œ ์ž์ฒด๋ฅผ ๊ฐ€์ง€๊ณ  ๋‹ค๋‹ˆ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋จผ์ € ๋ชจ๋“œ๋ฅผ ์ผ  ๋‹ค์Œ ํ•ญ๋ชฉ์„ ๋“œ๋ž˜๊ทธํ•˜์„ธ์š”. ๊ฐ€๊ฒฉ์€ ํ•ด๋‹น ์„œ๋ฒ„ ์š”์ฒญ ํ›„์—๋งŒ ์ „์†ก๋ฉ๋‹ˆ๋‹ค. ๋‘ ๋ฒˆ์งธ ๋งค๊ฐœ๋ณ€์ˆ˜๋Š” ํ•ญ๋ชฉ์˜ TYPE๋ฅผ ํ•„ํ„ฐ๋งํ•ฉ๋‹ˆ๋‹ค.

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

  • price โ€” ์ฒซ ๋ฒˆ์งธ ๋งค๊ฐœ๋ณ€์ˆ˜๋Š” 0๋ถ€ํ„ฐ 2147483647๊นŒ์ง€ ๋…ธ์ถœ๋œ ์ „์ฒด ์•„์ดํ…œ/์Šคํƒ์˜ ์ „์ฒด ๊ฐ€๊ฒฉ์ž…๋‹ˆ๋‹ค. 125๋Š” ๊ฐ€๊ฒฉ 125๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. 0 - ํ™•์‹คํžˆ ๊ฐ€๊ฒฉ์ด 0์ž…๋‹ˆ๋‹ค(์„œ๋ฒ„์—์„œ ํ—ˆ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ๋ฌด๋ฃŒ). ์ข…๋ฃŒ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์Œ์ˆ˜ ๊ฐ’์€ ๋ชจ๋“œ๋ฅผ ๋•๋‹ˆ๋‹ค. ์ธ์ˆ˜๊ฐ€ ์—†๋Š” UO.AllPrice()์„ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค.
  • type โ€” ๋‘ ๋ฒˆ์งธ ์„ ํƒ ๋งค๊ฐœ๋ณ€์ˆ˜๋Š” TYPE/Graphic(0๋ถ€ํ„ฐ 65535๊นŒ์ง€), ์ˆซ์ž ๋˜๋Š” 16์ง„์ˆ˜ ๋ฌธ์ž์—ด(์˜ˆ: 0x0EED)์ž…๋‹ˆ๋‹ค. 0 ๋˜๋Š” ๋ถ€์žฌ - ๋ชจ๋“  ์œ ํ˜•. ํ’ˆ๋ชฉ ์ผ๋ จ๋ฒˆํ˜ธ ๋ฐ ๊ฐœ์ฒด ์ด๋ฆ„์ด ์ ์ ˆํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ƒ‰์ƒ์ด ํ•„ํ„ฐ๋ง๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋ฐ˜ํ™˜๊ฐ’

void: ๊ฐ’์ด ์—†์Šต๋‹ˆ๋‹ค. ํ™œ์„ฑํ™” AllPrice๋Š” ํ™œ์„ฑํ™”๋ฅผ ๋ณด๊ณ ํ•ฉ๋‹ˆ๋‹ค. ์ „์†ก๋œ ๊ฐ€๊ฒฉ ๋ผ์ธ์€ ์„œ๋ฒ„์—์„œ ํ™•์ธํ•œ ๊ฐ€๊ฒฉ์„ ์ˆ˜๋ฝํ•œ ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ์‘๋‹ต์ด ์ „์†ก๋˜์—ˆ์Œ์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.

๋™์ž‘

  • ๋ชจ๋“œ๋Š” ๊บผ์งˆ ๋•Œ๊นŒ์ง€ ํ›„์† ์ „์†ก์— ์ ์šฉ๋ฉ๋‹ˆ๋‹ค. ํฌํ•จ/์ด์ „ ์ „์— ์ด๋ฏธ ๋ณด๋ฅ˜ ์ค‘์ธ ๊ฐ€๊ฒฉ ์š”์ฒญ์€ ์ž๋™์œผ๋กœ ์ฑ„์›Œ์ง€์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ณต๊ธ‰์—…์ฒด/๋งค์žฅ ์ด๋ฆ„ ๋ณ€๊ฒฝ ์š”์ฒญ์— ์‘๋‹ตํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ํด๋ผ์ด์–ธํŠธ์— ์•Œ๋ ค์ง„ ๋‹ค๋ฅธ ๋ฌธ์ž/NPC์— ์†ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ํŒ๋งค์ž ๊ด€๋ฆฌ ๊ถŒํ•œ๊ณผ ๊ฐ€๊ฒฉ ์ˆ˜์šฉ ์—ฌ๋ถ€๋Š” ์„œ๋ฒ„์—์„œ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. ์บ๋ฆญํ„ฐ์˜ ์ผ๋ฐ˜ ๋ฐฐ๋‚ญ, ์ง€์ƒ์˜ ์ƒ์ž, ๋Œ€์ง€๋Š” ์ž๋™ ๊ฐ€๊ฒฉ์„ ๋ฐ›์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • ํ‘œ์ค€ ๊ณต๊ธ‰์—…์ฒด์˜ ๊ฒฝ์šฐ cliloc 1043303 ๊ฐ€๊ฒฉ ์š”์ฒญ์€ ๊ณ ๊ฐ์˜ ์–ธ์–ด์— ๊ด€๊ณ„์—†์ด ์ธ์‹๋ฉ๋‹ˆ๋‹ค. ๊ฐ€๊ฒฉ ์ž…๋ ฅ, ๊ฐ€๊ฒฉ ์ž…๋ ฅ, ๊ฐ€๊ฒฉ ์ž…๋ ฅ, ๊ฐ€๊ฒฉ ์ž…๋ ฅ ๋˜๋Š” ๊ฐ€๊ฒฉ ์ž…๋ ฅ์œผ๋กœ ์‹œ์ž‘ํ•˜๋Š” ์‹œ์Šคํ…œ ํ…์ŠคํŠธ ํ”„๋กฌํ”„ํŠธ๋„ ์ง€์›๋ฉ๋‹ˆ๋‹ค. ์ˆ˜๋™ ์‘๋‹ต์„ ์œ„ํ•ด ์•Œ ์ˆ˜ ์—†๋Š” ์ดˆ๋Œ€๊ฐ€ ๋‚จ์•„ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ASCII ๋ฐ ์œ ๋‹ˆ์ฝ”๋“œ ์„œ๋ฒ„ ์ฟผ๋ฆฌ๊ฐ€ ์ง€์›๋ฉ๋‹ˆ๋‹ค. 10์ดˆ ์ด๋‚ด์— ์ดˆ๋Œ€์žฅ์ด ๋„์ฐฉํ•˜์ง€ ์•Š์œผ๋ฉด ์ง€์—ฐ๋œ ๋‹ต๋ณ€์ด ์ทจ์†Œ๋ฉ๋‹ˆ๋‹ค. ๋Œ€๋Ÿ‰ ์ „์†ก ์ค‘์—๋Š” ๋Œ€๊ธฐ์—ด๋„ ์ค‘์ง€๋ฉ๋‹ˆ๋‹ค. ์ด๋ฏธ ๋ณด๋‚ธ ๋‹ต์žฅ์€ ํšŒ์ˆ˜๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • ๋‹ค๋ฅธ TYPE ํ’ˆ๋ชฉ์€ ๊ฐ€๊ฒฉ์„ ๋ฐ›์ง€ ์•Š์Šต๋‹ˆ๋‹ค. MassMove์ด ํ™œ์„ฑํ™”๋œ ๊ฒฝ์šฐ ๋‹ค์Œ ์ œ์ถœ์€ ๊ฐ€๊ฒฉ ์š”์ฒญ์ด ์ฒ˜๋ฆฌ๋  ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆฝ๋‹ˆ๋‹ค. ์•Œ ์ˆ˜ ์—†๊ฑฐ๋‚˜ ๋ถ€์ ์ ˆํ•œ ์š”์ฒญ์€ ํ•ญ๋ชฉ์ด ์„ž์ด๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ๋Œ€๊ธฐ์—ด์„ ์ค‘์ง€ํ•ฉ๋‹ˆ๋‹ค.
  • AllPrice()๋Š” ๋ณด๋ฅ˜ ๊ฐ€๊ฒฉ์„ ์ง€์šฐ๊ณ  ๋ชจ๋“œ๋ฅผ ๋•๋‹ˆ๋‹ค. TerminateAll(), ์ข…๋ฃŒ, ์‚ฌ๋ง, ์นด๋“œ ๋ณ€๊ฒฝ ์‹œ์—๋„ ์ž๋™ ๊ฐ€๊ฒฉ์ด ์žฌ์„ค์ •๋ฉ๋‹ˆ๋‹ค. ์ด ๋ช…๋ น์€ ์ด๋ฏธ ๋‚˜์—ด๋œ ์ œํ’ˆ์˜ ๊ฐ€๊ฒฉ์„ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋…๋ฆฝ ์‹คํ–‰ C# ์Šคํฌ๋ฆฝํŠธ

๊ฐ ์˜ˆ์ œ๋Š” ๋ณ„๋„์˜ ํŒŒ์ผ .csx๋กœ ์ €์žฅํ•˜๊ณ  IDE์—์„œ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. UO ๊ฐœ์ฒด์™€ ๋Œ€๊ธฐ ๊ธฐ๋Šฅ์€ ํ˜„์žฌ ๊ฒŒ์ž„ ์„ธ์…˜์˜ ํ˜ธ์ŠคํŠธ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ๋ฐ๋ชจ serial ์ด๋ฆ„, ์ขŒํ‘œ, ์ฃผ์†Œ๋ฅผ ์ž์‹ ์˜ ๊ฒƒ์œผ๋กœ ๋ฐ”๊พธ์„ธ์š”.

๊ฐ„๋‹จํ•œ ์˜ˆ์ œ

์ด ์ฝ”๋“œ๋ฅผ ๋ณ„๋„์˜ .csx ํŒŒ์ผ๋กœ ์‹คํ–‰ํ•˜์„ธ์š”. ์ธ์ˆ˜๋Š” ํ˜ธ์ถœ์— ์ง์ ‘ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. ์˜ˆ์ œ์˜ ์ด๋ฆ„, serial, ์ฃผ์†Œ๋ฅผ ์ž์‹ ์˜ ๊ฐ’์œผ๋กœ ๋ฐ”๊พธ์„ธ์š”.

๋ช…๋ น์€ ๋…๋ฆฝ๋œ ๋ฌธ์ž…๋‹ˆ๋‹ค. ์•ž์˜ ๋ฉ”์‹œ์ง€๋Š” ํ˜ธ์ถœ ์‹œ์ž‘์„ ๋‚˜ํƒ€๋‚ด๋ฉฐ ์„œ๋ฒ„ ๋™์ž‘์˜ ์™„๋ฃŒ๋ฅผ ํ™•์ธํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

UO.Print("Calling UO.AllPrice");
UO.AllPrice();

1. ๋ชจ๋“  ์œ ํ˜•์˜ ํ›„์† ํ•ญ๋ชฉ์— ๋Œ€ํ•œ ๋‹จ์ผ ๊ฐ€๊ฒฉ - ์ง์ ‘ ์Šคํฌ๋ฆฝํŠธ

๋งค๊ฐœ๋ณ€์ˆ˜์™€ ์‹คํ–‰ ํ๋ฆ„:

  • ๊ฐ€๊ฒฉ=125 โ€” ๊ฐ ํ’ˆ๋ชฉ์˜ ์ „์ฒด ๊ฐ€๊ฒฉ. type ์—†์Œ: ๋ชจ๋“  ์œ ํ˜•์ด ์ ํ•ฉํ•ฉ๋‹ˆ๋‹ค.
  • ์ถœ์‹œ ํ›„ ๊ณต๊ธ‰์—…์ฒด์˜ ์ธ๋ฒคํ† ๋ฆฌ์— ํ•ญ๋ชฉ์„ ์ˆ˜๋™์œผ๋กœ ์ถ”๊ฐ€ํ•˜์„ธ์š”. ๊ณ ๊ฐ์€ ๊ฐ€๊ฒฉ ์š”์ฒญ์— 125๋กœ ์‘๋‹ตํ•ฉ๋‹ˆ๋‹ค. ๊ฐ ํ›„์† ํ’ˆ๋ชฉ์€ ๊บผ์งˆ ๋•Œ๊นŒ์ง€ ๋™์ผํ•œ ๊ฐ€๊ฒฉ์„ ๋ฐ›์Šต๋‹ˆ๋‹ค.
  • Print ๋™์ž‘๋งŒ ๊ธฐ์–ตํ•ฉ๋‹ˆ๋‹ค. ์ด ์ ˆ์ฐจ ์ž์ฒด๋Š” ์•„๋ฌด๊ฒƒ๋„ ์ „์†กํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
UO.AllPrice(125);
UO.Print("Drop goods into your vendor inventory");

2. ํŠน์ • ์œ ํ˜•์— ๋Œ€ํ•ด์„œ๋งŒ ์ž๋™ ๊ฐ€๊ฒฉ - ์Šคํฌ๋ฆฝํŠธ ๊ธฐ๋Šฅ

๋งค๊ฐœ๋ณ€์ˆ˜์™€ ์‹คํ–‰ ํ๋ฆ„:

  • salePrice๋Š” ๊ฐ€๊ฒฉ=250๋กœ ์ „์†ก๋ฉ๋‹ˆ๋‹ค. itemType์€ ๋ณ„๋„์˜ ์ƒํ’ˆ์˜ serial๊ฐ€ ์•„๋‹Œ type=0x0F7A๋กœ ์ „์†ก๋ฉ๋‹ˆ๋‹ค.
  • ๊ฐ€๊ฒฉ 250์€ ํ‘œ์‹œ๋˜๋Š” ์ „์ฒด ์Šคํƒ์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. ์ด ๋ช…๋ น์€ ๊ฐ€๊ฒฉ์— ๊ทธ ์•ˆ์— ํฌํ•จ๋œ ๋‹จ์œ„ ์ˆ˜๋ฅผ ๊ณฑํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • ๋‹ค๋ฅธ ์œ ํ˜•์€ ์ž๋™ ์‘๋‹ต ์—†์ด ์œ ์ง€๋ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๊ฒฝ์šฐ ๊ฐ€๊ฒฉ์„ ์ˆ˜๋™์œผ๋กœ ์ž…๋ ฅํ•˜๊ฑฐ๋‚˜ ๋‹ค๋ฅธ ํ•„ํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ AllPrice๋ฅผ ํฌํ•จํ•˜์„ธ์š”.
return  RunScenario();
 object? RunScenario()
{
    var itemType = "0x0F7A";
    var salePrice = 250;
    UO.AllPrice(salePrice, itemType);
    return null;
}

3. ๋ฌด๋ฃŒ๋กœ ํ•ญ๋ชฉ์„ ๋ช…์‹œ์ ์œผ๋กœ ๋…ธ์ถœ - ์Šคํฌ๋ฆฝํŠธ ํด๋ž˜์Šค

๋งค๊ฐœ๋ณ€์ˆ˜์™€ ์‹คํ–‰ ํ๋ฆ„:

  • ๊ฐ€๊ฒฉ=0 โ€” 0 ๋ฌธ์ž์—ด์„ ์„œ๋ฒ„์— ๊ฐ€๊ฒฉ์œผ๋กœ ๋ณด๋ƒ…๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ๋Œ€ํ™”๋ฅผ ์ทจ์†Œํ•˜๊ฑฐ๋‚˜ ์ข…๋ฃŒํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹™๋‹ˆ๋‹ค.
  • type=0x0F7A๋Š” ๋ฌด๋ฃŒ ๊ฐ€๊ฒฉ์„ ์ด ์œ ํ˜•์œผ๋กœ ์ œํ•œํ•ฉ๋‹ˆ๋‹ค. ๋ฌด๋ฃŒ ํŒ๋งค์˜ ๋™์ž‘์€ ์„œ๋ฒ„ ๊ทœ์น™์— ๋”ฐ๋ผ ๋‹ค๋ฆ…๋‹ˆ๋‹ค.
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        UO.AllPrice(0, "0x0F7A");
        return null;
    }
}

4. ์ž๋™ ๊ฐ€๊ฒฉ ์ฑ…์ • ๋น„ํ™œ์„ฑํ™” - ์ง์ ‘ ์Šคํฌ๋ฆฝํŠธ

๋งค๊ฐœ๋ณ€์ˆ˜์™€ ์‹คํ–‰ ํ๋ฆ„:

  • ์ธ์ˆ˜ ์—†์Œ: ๋ชจ๋“œ๊ฐ€ ๊บผ์ง€๊ณ  ๋ณด๋ฅ˜ ์ค‘์ธ ์‘๋‹ต์ด ์‚ญ์ œ๋ฉ๋‹ˆ๋‹ค.
  • ์„œ๋ฒ„๊ฐ€ ์ด๋ฏธ ์„ค์ •ํ•œ ๊ฐ€๊ฒฉ์€ ๋ณ€๊ฒฝ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž๋Š” ๋‹ค์Œ ๊ฐ€๊ฒฉ ์š”์ฒญ์„ ์ง์ ‘ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค.

Shop ๋ชฉ๋ก / ๊ตฌ๋งค ๋ฐ ํŒ๋งค ๋ชฉ๋ก

Shop ๋ชฉ๋ก / ๋งค์ˆ˜ ๋ฐ ๋งค๋„ ๋ชฉ๋ก

UO.AllPrice();

๋ช…๋ น ๊ตฌํ˜„

C#์€ ๋Œ€์†Œ๋ฌธ์ž๋ฅผ ๊ตฌ๋ถ„ํ•ฉ๋‹ˆ๋‹ค. ์ •ํ™•ํ•œ UO ์ด๋ฆ„์„ ์‚ฌ์šฉํ•˜์„ธ์š”. ์ˆซ์ž ํ”Œ๋ž˜๊ทธ๋Š” 0๊ณผ ๋น„๊ตํ•˜๊ณ  ๋ฐ˜ํ™˜ ํ˜•์‹์ด bool์ผ ๋•Œ๋งŒ bool์„ ์‚ฌ์šฉํ•˜์„ธ์š”.

UO.AllPrice() โ€” UO.AllPrice()

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

๊ฒฐ๊ณผ: void / Unit.

ํ˜ธ์ถœ ์‹œ:

๋‚ด๋ถ€ ๊ตฌํ˜„ ์ฝ”๋“œ์ด๋ฉฐ ๋…๋ฆฝ ์Šคํฌ๋ฆฝํŠธ๋กœ ์‹คํ–‰ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

case "allprice":

                    bridge.AllPrice(arguments.Length > 0 ? NumberConversions.ToInt(arguments[0]) : -1,

                        arguments.Length > 1 ? ResolveType(arguments[1]) : 0);

                    break;

UO.AllPrice(price) โ€” UO.AllPrice(Any)

๋งค๊ฐœ๋ณ€์ˆ˜: price (Any)

๊ฒฐ๊ณผ: void / Unit.

ํ˜ธ์ถœ ์‹œ:

๋‚ด๋ถ€ ๊ตฌํ˜„ ์ฝ”๋“œ์ด๋ฉฐ ๋…๋ฆฝ ์Šคํฌ๋ฆฝํŠธ๋กœ ์‹คํ–‰ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

case "allprice":

                    bridge.AllPrice(arguments.Length > 0 ? NumberConversions.ToInt(arguments[0]) : -1,

                        arguments.Length > 1 ? ResolveType(arguments[1]) : 0);

                    break;

UO.AllPrice(price, type) โ€” UO.AllPrice(Any,Any)

๋งค๊ฐœ๋ณ€์ˆ˜: price (Any), type (Any)

๊ฒฐ๊ณผ: void / Unit.

ํ˜ธ์ถœ ์‹œ:

๋‚ด๋ถ€ ๊ตฌํ˜„ ์ฝ”๋“œ์ด๋ฉฐ ๋…๋ฆฝ ์Šคํฌ๋ฆฝํŠธ๋กœ ์‹คํ–‰ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

case "allprice":

                    bridge.AllPrice(arguments.Length > 0 ? NumberConversions.ToInt(arguments[0]) : -1,

                        arguments.Length > 1 ? ResolveType(arguments[1]) : 0);

                    break;

UO.AutoBuy

ะฃะบั€ะฐั—ะฝััŒะบะฐ ยท ะ ัƒััะบะธะน ยท English ยท Deutsch ยท Franรงais ยท Italiano ยท Espaรฑol ยท ็น้ซ”ไธญๆ–‡ ยท ๆ—ฅๆœฌ่ชž ยท ํ•œ๊ตญ์–ด

C# ์‹œ๊ทธ๋‹ˆ์ฒ˜

void UO.AutoBuy(object? itemType, object? itemColor, object? quantity);

ํ˜„์žฌ Bad Newbie ํ”„๋กœํ•„์˜ ๊ธฐ๋ณธ ๊ธฐ๋ณธ ๋ชฉ๋ก์—์„œ ์ž๋™ ๊ตฌ๋งค ๊ทœ์น™์„ ์ƒ์„ฑ, ์—…๋ฐ์ดํŠธ ๋˜๋Š” ์‚ญ์ œํ•ฉ๋‹ˆ๋‹ค. ์ด ๋ช…๋ น์€ NPC ํŒ๋งค์ž ์ œ์•ˆ์˜ ํ–ฅํ›„ ์ฒ˜๋ฆฌ๋ฅผ ๊ตฌ์„ฑํ•ฉ๋‹ˆ๋‹ค. ๊ตฌ๋งค/ํŒ๋งค๋ฅผ ๋งํ•˜์ง€ ์•Š์œผ๋ฉฐ, ๋งค์žฅ์„ ์—ด์ง€๋„ ์•Š๊ณ , ๊ฑฐ๋ž˜๋ฅผ ํ™•์ธํ•˜์ง€๋„ ์•Š์Šต๋‹ˆ๋‹ค. ์ „์ฒด ์ ˆ์ฐจ: ์Šคํ† ์–ด ๋ชฉ๋ก.

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

  • itemType - ๊ทธ๋ž˜ํ”ฝ ์ œํ’ˆ 0..65535: ์˜ˆ: 0x0F7A - Black Pearl, 0x0F51 - ๋‹จ๊ฒ€. ํŒ๋งค์ž/์•„์ดํ…œ์˜ serial๋„ ์•„๋‹ˆ๊ณ  ์บ๋ฆญํ„ฐ์˜ body๋„ ์•„๋‹™๋‹ˆ๋‹ค. ์Œ์ˆ˜ ๋˜๋Š” 65535๋ณด๋‹ค ํฐ ์ˆซ์ž๋Š” ๊ฑฐ๋ถ€๋ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ 0xFFFF๋Š” ํŠน์ • graphic์ด๋ฉฐ, ๋ชจ๋“  ์ƒํ’ˆ์˜ ๋งˆ์Šคํฌ๋Š” ์•„๋‹™๋‹ˆ๋‹ค.
  • itemColor โ€” ์ œํ’ˆ ์ƒ‰์ƒ: ์Œ์ˆ˜ ๋˜๋Š” 0xFFFF โ€” ๋ชจ๋‘; 0 - ๋„์ƒ‰๋˜์ง€ ์•Š์€ ํ•ญ๋ชฉ๋งŒ ํ•ด๋‹น๋ฉ๋‹ˆ๋‹ค. ์ •ํ™•ํ•œ hue์„ ์œ„ํ•ด์„œ๋Š” 0..65534๋ฅผ ์‚ฌ์šฉํ•˜์„ธ์š”. ์ด ๋ฒ”์œ„๋ฅผ ๋ฒ—์–ด๋‚˜๋Š” ์ƒ‰์ƒ์„ ์‚ฌ์šฉํ•˜์ง€ ๋งˆ์‹ญ์‹œ์˜ค. ์–‘์ˆ˜ ๊ฐ’์€ ushort๋กœ ๋ณ€ํ™˜๋ฉ๋‹ˆ๋‹ค. ํ•„์ˆ˜์˜.
  • quantity โ€” ์Šคํƒ ์ˆ˜๋‚˜ ๋ฐฐ๋‚ญ์—์„œ ์›ํ•˜๋Š” ์ž”์•ก์ด ์•„๋‹ˆ๋ผ ์ˆ˜์‹ ๋œ ํ•œ ๋งค์žฅ ์ œ์•ˆ๋‹น ์ƒํ’ˆ UNITS ์ˆ˜์ž…๋‹ˆ๋‹ค. ์–‘์„ฑ์€ 65535๋กœ ์ œํ•œ๋ฉ๋‹ˆ๋‹ค. 0/negative๋Š” ๊ธฐ๋ณธ๊ฐ’์—์„œ ์ผ์น˜ ๊ทœ์น™ type+color๋ฅผ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์€ โ€œ์ „์ฒด ์ˆ˜๋Ÿ‰โ€์ด ์•„๋‹™๋‹ˆ๋‹ค. ํ•„์ˆ˜์˜.

๋ฐ˜ํ™˜๊ฐ’

void - ๊ฐ’์ด ์—†์Šต๋‹ˆ๋‹ค. var ๊ฒฐ๊ณผ = ๋ฐ if ์—†์ด ๋ณ„๋„์˜ ํšŒ์„ ์œผ๋กœ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค. ํ†ตํ™” ์ข…๋ฃŒ๋Š” ์„ฑ๊ณต์ ์ธ ๊ฑฐ๋ž˜๊ฐ€ ์•„๋‹Œ ์„ค์ • ์ข…๋ฃŒ๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ํ”„๋กœํ•„์ด ์—†๊ฑฐ๋‚˜ ์ž˜๋ชป๋œ graphic ๊ฒฝ์šฐ ๊ทœ์น™์ด ์ƒ์„ฑ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์˜ค๋ฅ˜์— ๋Œ€ํ•œ ์ˆ˜์น˜ ๊ฒฐ๊ณผ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ๋ฐฐ๋‚ญ ๋‚ด์šฉ, ๊ณจ๋“œ, ์„œ๋ฒ„ ์‘๋‹ต์„ ํ†ตํ•ด ์‹ค์ œ ๊ฑฐ๋ž˜๋ฅผ ํ™•์ธํ•˜์„ธ์š”.

๋™์ž‘

  • ๋ชจ๋“  3 ์ธ์ˆ˜๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ๋Œ€๊ธฐ ๊ธฐ๋Šฅ์ด ์•„๋‹Œ ๊ทœ์น™ ์„ค์ •์ž…๋‹ˆ๋‹ค.
  • ๊ทœ์น™ ํ‚ค๋Š” graphic์ด๊ณ  ๊ธฐ๋ณธ๊ฐ’์˜ ๋งˆ์Šคํฌ๋Š” hue์ž…๋‹ˆ๋‹ค. ๋ฐ˜๋ณต ํ˜ธ์ถœ์€ ์ด ๊ทœ์น™์˜ ์ˆ˜๋Ÿ‰ ๋ฐ ๊ธฐํƒ€ ํ•„๋“œ๋ฅผ ๋Œ€์ฒดํ•ฉ๋‹ˆ๋‹ค. ์ด์ „ ์ œํ•œ ์œ„์— ๋‹ค๋ฅธ ์ œํ•œ์„ ์ถ”๊ฐ€ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ฐ€๊ฒฉ/์ด๋ฆ„์ด ์—†์œผ๋ฉด ์ด ํ•„๋“œ์— ๋Œ€ํ•œ ์ด์ „ ์ œํ•œ ์‚ฌํ•ญ์ด ์ œ๊ฑฐ๋ฉ๋‹ˆ๋‹ค.
  • ์‹ ๊ทœ/์—…๋ฐ์ดํŠธ๋จ ํ™œ์„ฑํ™”=true ๊ทœ์น™. ์ผ๋ฐ˜ ๋งค์ˆ˜/๋งค๋„ ์Šค์œ„์น˜๋Š” ๊ทœ์น™ ์œ ๋ฌด์— ๋”ฐ๋ผ ์„ค์ •๋˜๋ฉฐ ํ”„๋กœํ•„์ด ์ €์žฅ๋ฉ๋‹ˆ๋‹ค. ๋น„ํ™œ์„ฑํ™”๋œ ๊ธฐ๋ณธ ๋ชฉ๋ก ์ž์ฒด๋Š” ์ž๋™์œผ๋กœ ํ™œ์„ฑํ™”๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ผ๋ฐ˜ ๋ชจ๋“œ์™€ ๋ชฉ๋ก ๋ชจ๋‘ ์„ค์ •์—์„œ ํ™œ์„ฑํ™”๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ๋ช…๋ช…๋œ ๋ชฉ๋ก์€ ๋ณ€๊ฒฝ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • ์ƒํ’ˆ ๋ชฉ๋ก์ด ๋„์ฐฉํ•˜๋ฉด ์ฒ˜๋ฆฌ๊ฐ€ ์‹œ์ž‘๋ฉ๋‹ˆ๋‹ค. ํ•œ๋„๋Š” ํ•˜๋‚˜์˜ ๊ทœ์น™๊ณผ ์ผ์น˜ํ•˜๋Š” ํ–‰ ์ „์ฒด์— ๊ฑธ์ณ ์ง€์ถœ๋ฉ๋‹ˆ๋‹ค. ๊ฐ ์œ„์น˜์— ๋Œ€ํ•ด ์ฒซ ๋ฒˆ์งธ๋กœ ์ผ์น˜ํ•˜๋Š” ํ™œ์„ฑํ™”๋œ ๊ทœ์น™์ด ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ์ƒ์ ์„ ๋‹ค์‹œ ์—ด๋ฉด ๊ทœ์น™์ด ํ™œ์„ฑํ™”๋œ ๋™์•ˆ ์ƒˆ๋กœ์šด ์ œ์•ˆ๊ณผ ์ƒˆ๋กœ์šด ํ•œ๋„๊ฐ€ ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค.
  • Bad Newbie์™€ ์™„๋ฒฝํ•˜๊ฒŒ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ํด๋ž˜์‹์—์„œ๋Š” ์ด ์ž๋™ํ™”๊ฐ€ ๋น„ํ™œ์„ฑํ™”๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋งค๊ฐœ๋ณ€์ˆ˜์— ์ด๋ฆ„ NPC ๋˜๋Š” ์ €์žฅ๋œ ๋ชฉ๋ก์˜ ์ด๋ฆ„์„ ๋Œ€์ฒดํ•˜์ง€ ๋งˆ์‹ญ์‹œ์˜ค. AutoBuyEx๋Š” ๊ตฌ๋งค ์‹œ ๊ฐ€๊ฒฉ/์ด๋ฆ„ ํ•„ํ„ฐ๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. ClearShopList๋Š” ๋‘ ์ž๋™ํ™”๋ฅผ ์™„์ „ํžˆ ์žฌ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

๋…๋ฆฝ ์‹คํ–‰ C# ์Šคํฌ๋ฆฝํŠธ

๊ฐ ์˜ˆ์ œ๋Š” ๋ณ„๋„์˜ ํŒŒ์ผ .csx๋กœ ์ €์žฅํ•˜๊ณ  IDE์—์„œ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. UO ๊ฐœ์ฒด์™€ ๋Œ€๊ธฐ ๊ธฐ๋Šฅ์€ ํ˜„์žฌ ๊ฒŒ์ž„ ์„ธ์…˜์˜ ํ˜ธ์ŠคํŠธ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ๋ฐ๋ชจ serial ์ด๋ฆ„, ์ขŒํ‘œ, ์ฃผ์†Œ๋ฅผ ์ž์‹ ์˜ ๊ฒƒ์œผ๋กœ ๋ฐ”๊พธ์„ธ์š”.

๊ฐ„๋‹จํ•œ ์˜ˆ์ œ

์ด ์ฝ”๋“œ๋ฅผ ๋ณ„๋„์˜ .csx ํŒŒ์ผ๋กœ ์‹คํ–‰ํ•˜์„ธ์š”. ์ธ์ˆ˜๋Š” ํ˜ธ์ถœ์— ์ง์ ‘ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. ์˜ˆ์ œ์˜ ์ด๋ฆ„, serial, ์ฃผ์†Œ๋ฅผ ์ž์‹ ์˜ ๊ฐ’์œผ๋กœ ๋ฐ”๊พธ์„ธ์š”.

๋ช…๋ น์€ ๋…๋ฆฝ๋œ ๋ฌธ์ž…๋‹ˆ๋‹ค. ์•ž์˜ ๋ฉ”์‹œ์ง€๋Š” ํ˜ธ์ถœ ์‹œ์ž‘์„ ๋‚˜ํƒ€๋‚ด๋ฉฐ ์„œ๋ฒ„ ๋™์ž‘์˜ ์™„๋ฃŒ๋ฅผ ํ™•์ธํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

UO.Print("Calling UO.AutoBuy");
UO.AutoBuy(0x0F7A, -1, 1);

1. ์‹œ์•ฝ 1๊ฐœ ๊ตฌ๋งค ์ค€๋น„ - ์ง์ ‘ ์Šคํฌ๋ฆฝํŠธ

๋งค๊ฐœ๋ณ€์ˆ˜์™€ ์‹คํ–‰ ํ๋ฆ„:

  • 0x0F7A - graphic ์‹œ์•ฝ, ID NPC ์•„๋‹˜. ์ˆ˜๋Ÿ‰ - 1; ์ƒ‰์ƒ - ๋ฌด์—‡์ด๋“ . ์ด ์–‘์‹์—๋Š” ๊ฐ€๊ฒฉ ์ƒํ•œ์„ ์ด ๋ช…์‹œ๋˜์–ด ์žˆ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์Šคํฌ๋ฆฝํŠธ ์ž์ฒด๋Š” ์•„๋ฌด ๋ง๋„ ํ•˜์ง€ ์•Š๊ณ  ์Šคํ† ์–ด๋ฅผ ์—ด์ง€๋„ ์•Š์Šต๋‹ˆ๋‹ค. ์ด ๊ทœ์น™์€ ๋ณ€๊ฒฝ/๋น„ํ™œ์„ฑํ™”ํ•  ๋•Œ๊นŒ์ง€ ํ›„์† ๋ฌธ์žฅ์— ๊ณ„์† ์ ์šฉ๋ฉ๋‹ˆ๋‹ค.
UO.AutoBuy(0x0F7A, -1, 1);

2. ๋‹จ์ผ ๋งค์žฅ ์ œ์•ˆ์— ๋Œ€ํ•œ ์‹œ์•ฝ ๊ณต๊ธ‰ ์„ค์ • - ์Šคํฌ๋ฆฝํŠธ ๊ธฐ๋Šฅ

๋งค๊ฐœ๋ณ€์ˆ˜์™€ ์‹คํ–‰ ํ๋ฆ„:

  • 20 - ์ตœ๋Œ€ 1๊ฐœ ๋งค์žฅ ์‘๋‹ต์œผ๋กœ, โ€œ20๊นŒ์ง€ ์ˆ˜๋Ÿ‰์„ ๊ฐ€์ ธ์˜ค์„ธ์š”โ€๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค. AutoBuy์—๋Š” ๊ฐ€๊ฒฉ ๋ฐ ์ด๋ฆ„ ์ธ์ˆ˜๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ํ•„์š”ํ•œ ๊ฒฝ์šฐ AutoBuyEx๋ฅผ ์‚ฌ์šฉํ•˜์„ธ์š”. ์ „์ฒด ์˜ˆ์ œ๋Š” ์•„๋ž˜ ๋งํฌ์—์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ƒํ’ˆ ๋ถ€์กฑ, ๋ˆ ๋ฐ ์„œ๋ฒ„ ๊ทœ์น™์— ๋”ฐ๋ผ ๊ฒฐ๊ณผ๊ฐ€ ๊ฒฐ์ •๋ฉ๋‹ˆ๋‹ค.
return  RunScenario();
 object? RunScenario()
{
    UO.AutoBuy(0x0F7A, 0, 20);
    return null;
}

3. ๋‹ค๋ฅธ ๋ชฉ๋ก์„ ์žฌ์„ค์ •ํ•˜์ง€ ์•Š๊ณ  ์„ ํƒํ•œ ๊ทœ์น™ ์ œ๊ฑฐ - ์Šคํฌ๋ฆฝํŠธ ํด๋ž˜์Šค

๋งค๊ฐœ๋ณ€์ˆ˜์™€ ์‹คํ–‰ ํ๋ฆ„:

  • ์–ด์‹œ์Šคํ„ดํŠธ๋Š” graphic์„ ์ˆ˜๋ฝํ•ฉ๋‹ˆ๋‹ค. AnyHue๊ฐ€ ํฌํ•จ๋œ ๊ธฐ๋ณธ ๊ทœ์น™๋งŒ ์‚ญ์ œ๋ฉ๋‹ˆ๋‹ค. ๊ฐœ๋ณ„ ๊ทœ์น™ hue=0์€ ์œ ์ง€๋ฉ๋‹ˆ๋‹ค. ์ด๋ฏธ ์„œ๋ฒ„๋กœ ์ „์†ก๋œ ๊ฑฐ๋ž˜๋Š” ์ทจ์†Œ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ •ํ™•ํ•œ ์ƒ‰์ƒ์„ ์ œ๊ฑฐํ•˜๋ ค๋ฉด ๊ทœ์น™์„ ์ƒ์„ฑํ•œ ๊ฒƒ๊ณผ ๋™์ผํ•œ hue๋ฅผ ์ „๋‹ฌํ•˜์„ธ์š”.

Shop ๋ชฉ๋ก / ๊ตฌ๋งค ๋ฐ ํŒ๋งค ๋ชฉ๋ก

Shop ๋ชฉ๋ก / ๋งค์ˆ˜ ๋ฐ ๋งค๋„ ๋ชฉ๋ก

return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        DisableReagentRule(0x0F7A);
        DisableReagentRule(0x0F84);
        return null;
    }

    void DisableReagentRule(dynamic itemType)
    {
        UO.AutoBuy(itemType, -1, 0);
    }
}

๋ช…๋ น ๊ตฌํ˜„

C#์€ ๋Œ€์†Œ๋ฌธ์ž๋ฅผ ๊ตฌ๋ถ„ํ•ฉ๋‹ˆ๋‹ค. ์ •ํ™•ํ•œ UO ์ด๋ฆ„์„ ์‚ฌ์šฉํ•˜์„ธ์š”. ์ˆซ์ž ํ”Œ๋ž˜๊ทธ๋Š” 0๊ณผ ๋น„๊ตํ•˜๊ณ  ๋ฐ˜ํ™˜ ํ˜•์‹์ด bool์ผ ๋•Œ๋งŒ bool์„ ์‚ฌ์šฉํ•˜์„ธ์š”.

UO.AutoBuy(itemType, itemColor, quantity) โ€” UO.AutoBuy(Any,Any,Any)

๋งค๊ฐœ๋ณ€์ˆ˜: itemType (Any), itemColor (Any), quantity (Any)

๊ฒฐ๊ณผ: void / Unit.

ํ˜ธ์ถœ ์‹œ:

๋‚ด๋ถ€ ๊ตฌํ˜„ ์ฝ”๋“œ์ด๋ฉฐ ๋…๋ฆฝ ์Šคํฌ๋ฆฝํŠธ๋กœ ์‹คํ–‰ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

case "autobuy":

                    bridge.SetAutoBuyRule(Arg(0), Arg(1), Arg(2), 0, string.Empty); return InjectionValue.Unit;

UO.AutoBuyEx

ะฃะบั€ะฐั—ะฝััŒะบะฐ ยท ะ ัƒััะบะธะน ยท English ยท Deutsch ยท Franรงais ยท Italiano ยท Espaรฑol ยท ็น้ซ”ไธญๆ–‡ ยท ๆ—ฅๆœฌ่ชž ยท ํ•œ๊ตญ์–ด

C# ์‹œ๊ทธ๋‹ˆ์ฒ˜

void UO.AutoBuyEx(object? itemType, object? itemColor, object? quantity, object? price, object? name);

ํ˜„์žฌ Bad Newbie ํ”„๋กœํ•„์˜ ๊ธฐ๋ณธ ๊ธฐ๋ณธ ๋ชฉ๋ก์—์„œ ์ž๋™ ๊ตฌ๋งค ๊ทœ์น™์„ ์ƒ์„ฑ, ์—…๋ฐ์ดํŠธ ๋˜๋Š” ์‚ญ์ œํ•ฉ๋‹ˆ๋‹ค. ์ด ๋ช…๋ น์€ NPC ํŒ๋งค์ž ์ œ์•ˆ์˜ ํ–ฅํ›„ ์ฒ˜๋ฆฌ๋ฅผ ๊ตฌ์„ฑํ•ฉ๋‹ˆ๋‹ค. ๊ตฌ๋งค/ํŒ๋งค๋ฅผ ๋งํ•˜์ง€ ์•Š์œผ๋ฉฐ, ๋งค์žฅ์„ ์—ด์ง€๋„ ์•Š๊ณ , ๊ฑฐ๋ž˜๋ฅผ ํ™•์ธํ•˜์ง€๋„ ์•Š์Šต๋‹ˆ๋‹ค. ์ „์ฒด ์ ˆ์ฐจ: ์Šคํ† ์–ด ๋ชฉ๋ก.

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

  • itemType - ๊ทธ๋ž˜ํ”ฝ ์ œํ’ˆ 0..65535: ์˜ˆ: 0x0F7A - Black Pearl, 0x0F51 - ๋‹จ๊ฒ€. ํŒ๋งค์ž/์•„์ดํ…œ์˜ serial๋„ ์•„๋‹ˆ๊ณ  ์บ๋ฆญํ„ฐ์˜ body๋„ ์•„๋‹™๋‹ˆ๋‹ค. ์Œ์ˆ˜ ๋˜๋Š” 65535๋ณด๋‹ค ํฐ ์ˆซ์ž๋Š” ๊ฑฐ๋ถ€๋ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ 0xFFFF๋Š” ํŠน์ • graphic์ด๋ฉฐ, ๋ชจ๋“  ์ƒํ’ˆ์˜ ๋งˆ์Šคํฌ๋Š” ์•„๋‹™๋‹ˆ๋‹ค.
  • itemColor โ€” ์ œํ’ˆ ์ƒ‰์ƒ: ์Œ์ˆ˜ ๋˜๋Š” 0xFFFF โ€” ๋ชจ๋‘; 0 - ๋„์ƒ‰๋˜์ง€ ์•Š์€ ํ•ญ๋ชฉ๋งŒ ํ•ด๋‹น๋ฉ๋‹ˆ๋‹ค. ์ •ํ™•ํ•œ hue์„ ์œ„ํ•ด์„œ๋Š” 0..65534๋ฅผ ์‚ฌ์šฉํ•˜์„ธ์š”. ์ด ๋ฒ”์œ„๋ฅผ ๋ฒ—์–ด๋‚˜๋Š” ์ƒ‰์ƒ์„ ์‚ฌ์šฉํ•˜์ง€ ๋งˆ์‹ญ์‹œ์˜ค. ์–‘์ˆ˜ ๊ฐ’์€ ushort๋กœ ๋ณ€ํ™˜๋ฉ๋‹ˆ๋‹ค. ํ•„์ˆ˜์˜.
  • quantity โ€” ์Šคํƒ ์ˆ˜๋‚˜ ๋ฐฐ๋‚ญ์—์„œ ์›ํ•˜๋Š” ์ž”์•ก์ด ์•„๋‹ˆ๋ผ ์ˆ˜์‹ ๋œ ํ•œ ๋งค์žฅ ์ œ์•ˆ๋‹น ์ƒํ’ˆ UNITS ์ˆ˜์ž…๋‹ˆ๋‹ค. ์–‘์„ฑ์€ 65535๋กœ ์ œํ•œ๋ฉ๋‹ˆ๋‹ค. 0/negative๋Š” ๊ธฐ๋ณธ๊ฐ’์—์„œ ์ผ์น˜ ๊ทœ์น™ type+color๋ฅผ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์€ โ€œ์ „์ฒด ์ˆ˜๋Ÿ‰โ€์ด ์•„๋‹™๋‹ˆ๋‹ค. ํ•„์ˆ˜์˜.
  • price โ€” ์ „์ฒด ๊ฑฐ๋ž˜๊ฐ€ ์•„๋‹Œ ํ•œ ๋‹จ์œ„์˜ ์ตœ๋Œ€ ๊ฐ€๊ฒฉ์ž…๋‹ˆ๋‹ค. 0/์Œ์ˆ˜ โ€“ ๊ฐ€๊ฒฉ ์ƒํ•œ์„ ์ด ์—†์Šต๋‹ˆ๋‹ค. ํ”Œ๋Ÿฌ์Šค ํ•œ๋„๋ณด๋‹ค ๋น„์‹ผ ์ œํ’ˆ์€ ํ†ต๊ณผ๊ฐ€ ํ—ˆ์šฉ๋ฉ๋‹ˆ๋‹ค. ๊ฐ€๊ฒฉ์€ ์„œ๋ฒ„์—์„œ ๊ฑฐ๋ž˜๋˜๊ฑฐ๋‚˜ ๋ณ€๊ฒฝ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ํ•„์ˆ˜์˜.
  • name โ€” PRODUCT ์ด๋ฆ„์˜ ํ•˜์œ„ ๋ฌธ์ž์—ด์ด๋ฉฐ ๋Œ€์†Œ๋ฌธ์ž๋ฅผ ๊ตฌ๋ถ„ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ฐ€์žฅ์ž๋ฆฌ ๊ณต๋ฐฑ์ด ์ œ๊ฑฐ๋˜๊ณ  ๋นˆ ์ค„ - ํ•„ํ„ฐ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ์ด๋Š” ํŒ๋งค์ž์˜ ์ด๋ฆ„์ด๋‚˜ ๋ชฉ๋ก์˜ ์ด๋ฆ„์ด ์•„๋‹™๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, "Black Pearl"์€ ์„œ๋ฒ„๊ฐ€ ์ •ํ™•ํžˆ ๊ทธ๋Ÿฌํ•œ ์ด๋ฆ„์„ ๋ณด๋‚ธ ๊ฒฝ์šฐ ๋งค์žฅ ์œ„์น˜์˜ ํ…์ŠคํŠธ๋ฅผ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. ํ•„์ˆ˜์˜.

๋ฐ˜ํ™˜๊ฐ’

void - ๊ฐ’์ด ์—†์Šต๋‹ˆ๋‹ค. var ๊ฒฐ๊ณผ = ๋ฐ if ์—†์ด ๋ณ„๋„์˜ ํšŒ์„ ์œผ๋กœ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค. ํ†ตํ™” ์ข…๋ฃŒ๋Š” ์„ฑ๊ณต์ ์ธ ๊ฑฐ๋ž˜๊ฐ€ ์•„๋‹Œ ์„ค์ • ์ข…๋ฃŒ๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ํ”„๋กœํ•„์ด ์—†๊ฑฐ๋‚˜ ์ž˜๋ชป๋œ graphic ๊ฒฝ์šฐ ๊ทœ์น™์ด ์ƒ์„ฑ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์˜ค๋ฅ˜์— ๋Œ€ํ•œ ์ˆ˜์น˜ ๊ฒฐ๊ณผ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ๋ฐฐ๋‚ญ ๋‚ด์šฉ, ๊ณจ๋“œ, ์„œ๋ฒ„ ์‘๋‹ต์„ ํ†ตํ•ด ์‹ค์ œ ๊ฑฐ๋ž˜๋ฅผ ํ™•์ธํ•˜์„ธ์š”.

๋™์ž‘

  • ๋ชจ๋“  5 ์ธ์ˆ˜๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ๋Œ€๊ธฐ ๊ธฐ๋Šฅ์ด ์•„๋‹Œ ๊ทœ์น™ ์„ค์ •์ž…๋‹ˆ๋‹ค.
  • ๊ทœ์น™ ํ‚ค๋Š” graphic์ด๊ณ  ๊ธฐ๋ณธ๊ฐ’์˜ ๋งˆ์Šคํฌ๋Š” hue์ž…๋‹ˆ๋‹ค. ๋ฐ˜๋ณต ํ˜ธ์ถœ์€ ์ด ๊ทœ์น™์˜ ์ˆ˜๋Ÿ‰ ๋ฐ ๊ธฐํƒ€ ํ•„๋“œ๋ฅผ ๋Œ€์ฒดํ•ฉ๋‹ˆ๋‹ค. ์ด์ „ ์ œํ•œ ์œ„์— ๋‹ค๋ฅธ ์ œํ•œ์„ ์ถ”๊ฐ€ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ฐ€๊ฒฉ/์ด๋ฆ„์ด ์—†์œผ๋ฉด ์ด ํ•„๋“œ์— ๋Œ€ํ•œ ์ด์ „ ์ œํ•œ ์‚ฌํ•ญ์ด ์ œ๊ฑฐ๋ฉ๋‹ˆ๋‹ค.
  • ์‹ ๊ทœ/์—…๋ฐ์ดํŠธ๋จ ํ™œ์„ฑํ™”=true ๊ทœ์น™. ์ผ๋ฐ˜ ๋งค์ˆ˜/๋งค๋„ ์Šค์œ„์น˜๋Š” ๊ทœ์น™ ์œ ๋ฌด์— ๋”ฐ๋ผ ์„ค์ •๋˜๋ฉฐ ํ”„๋กœํ•„์ด ์ €์žฅ๋ฉ๋‹ˆ๋‹ค. ๋น„ํ™œ์„ฑํ™”๋œ ๊ธฐ๋ณธ ๋ชฉ๋ก ์ž์ฒด๋Š” ์ž๋™์œผ๋กœ ํ™œ์„ฑํ™”๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ผ๋ฐ˜ ๋ชจ๋“œ์™€ ๋ชฉ๋ก ๋ชจ๋‘ ์„ค์ •์—์„œ ํ™œ์„ฑํ™”๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ๋ช…๋ช…๋œ ๋ชฉ๋ก์€ ๋ณ€๊ฒฝ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • ์ƒํ’ˆ ๋ชฉ๋ก์ด ๋„์ฐฉํ•˜๋ฉด ์ฒ˜๋ฆฌ๊ฐ€ ์‹œ์ž‘๋ฉ๋‹ˆ๋‹ค. ํ•œ๋„๋Š” ํ•˜๋‚˜์˜ ๊ทœ์น™๊ณผ ์ผ์น˜ํ•˜๋Š” ํ–‰ ์ „์ฒด์— ๊ฑธ์ณ ์ง€์ถœ๋ฉ๋‹ˆ๋‹ค. ๊ฐ ์œ„์น˜์— ๋Œ€ํ•ด ์ฒซ ๋ฒˆ์งธ๋กœ ์ผ์น˜ํ•˜๋Š” ํ™œ์„ฑํ™”๋œ ๊ทœ์น™์ด ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ์ƒ์ ์„ ๋‹ค์‹œ ์—ด๋ฉด ๊ทœ์น™์ด ํ™œ์„ฑํ™”๋œ ๋™์•ˆ ์ƒˆ๋กœ์šด ์ œ์•ˆ๊ณผ ์ƒˆ๋กœ์šด ํ•œ๋„๊ฐ€ ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค.
  • Bad Newbie์™€ ์™„๋ฒฝํ•˜๊ฒŒ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ํด๋ž˜์‹์—์„œ๋Š” ์ด ์ž๋™ํ™”๊ฐ€ ๋น„ํ™œ์„ฑํ™”๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋งค๊ฐœ๋ณ€์ˆ˜์— ์ด๋ฆ„ NPC ๋˜๋Š” ์ €์žฅ๋œ ๋ชฉ๋ก์˜ ์ด๋ฆ„์„ ๋Œ€์ฒดํ•˜์ง€ ๋งˆ์‹ญ์‹œ์˜ค. AutoBuyEx๋Š” ๊ตฌ๋งค ์‹œ ๊ฐ€๊ฒฉ/์ด๋ฆ„ ํ•„ํ„ฐ๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. ClearShopList๋Š” ๋‘ ์ž๋™ํ™”๋ฅผ ์™„์ „ํžˆ ์žฌ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

๋…๋ฆฝ ์‹คํ–‰ C# ์Šคํฌ๋ฆฝํŠธ

๊ฐ ์˜ˆ์ œ๋Š” ๋ณ„๋„์˜ ํŒŒ์ผ .csx๋กœ ์ €์žฅํ•˜๊ณ  IDE์—์„œ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. UO ๊ฐœ์ฒด์™€ ๋Œ€๊ธฐ ๊ธฐ๋Šฅ์€ ํ˜„์žฌ ๊ฒŒ์ž„ ์„ธ์…˜์˜ ํ˜ธ์ŠคํŠธ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ๋ฐ๋ชจ serial ์ด๋ฆ„, ์ขŒํ‘œ, ์ฃผ์†Œ๋ฅผ ์ž์‹ ์˜ ๊ฒƒ์œผ๋กœ ๋ฐ”๊พธ์„ธ์š”.

๊ฐ„๋‹จํ•œ ์˜ˆ์ œ

์ด ์ฝ”๋“œ๋ฅผ ๋ณ„๋„์˜ .csx ํŒŒ์ผ๋กœ ์‹คํ–‰ํ•˜์„ธ์š”. ์ธ์ˆ˜๋Š” ํ˜ธ์ถœ์— ์ง์ ‘ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. ์˜ˆ์ œ์˜ ์ด๋ฆ„, serial, ์ฃผ์†Œ๋ฅผ ์ž์‹ ์˜ ๊ฐ’์œผ๋กœ ๋ฐ”๊พธ์„ธ์š”.

๋ช…๋ น์€ ๋…๋ฆฝ๋œ ๋ฌธ์ž…๋‹ˆ๋‹ค. ์•ž์˜ ๋ฉ”์‹œ์ง€๋Š” ํ˜ธ์ถœ ์‹œ์ž‘์„ ๋‚˜ํƒ€๋‚ด๋ฉฐ ์„œ๋ฒ„ ๋™์ž‘์˜ ์™„๋ฃŒ๋ฅผ ํ™•์ธํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

UO.Print("Calling UO.AutoBuyEx");
UO.AutoBuyEx(0x0F7A, -1, 1, 5, "");

1. ์‹œ์•ฝ 1๊ฐœ ๊ตฌ๋งค ์ค€๋น„ - ์ง์ ‘ ์Šคํฌ๋ฆฝํŠธ

๋งค๊ฐœ๋ณ€์ˆ˜์™€ ์‹คํ–‰ ํ๋ฆ„:

  • 0x0F7A - graphic ์‹œ์•ฝ, ID NPC ์•„๋‹˜. ์ˆ˜๋Ÿ‰ - 1; ์ƒ‰์ƒ - ๋ฌด์—‡์ด๋“ . ๋‹จ์œ„๋‹น ๊ฐ€๊ฒฉ ์ƒํ•œ์„  5. ์Šคํฌ๋ฆฝํŠธ ์ž์ฒด๋Š” ์•„๋ฌด ๋ง๋„ ํ•˜์ง€ ์•Š๊ณ  ์Šคํ† ์–ด๋ฅผ ์—ด์ง€๋„ ์•Š์Šต๋‹ˆ๋‹ค. ์ด ๊ทœ์น™์€ ๋ณ€๊ฒฝ/๋น„ํ™œ์„ฑํ™”ํ•  ๋•Œ๊นŒ์ง€ ํ›„์† ๋ฌธ์žฅ์— ๊ณ„์† ์ ์šฉ๋ฉ๋‹ˆ๋‹ค.
UO.AutoBuyEx(0x0F7A, -1, 1, 5, "");

2. ๋‹จ์ผ ๋งค์žฅ ์ œ์•ˆ์— ๋Œ€ํ•œ ์‹œ์•ฝ ๊ณต๊ธ‰ ์„ค์ • - ์Šคํฌ๋ฆฝํŠธ ๊ธฐ๋Šฅ

๋งค๊ฐœ๋ณ€์ˆ˜์™€ ์‹คํ–‰ ํ๋ฆ„:

  • 20 - ํ•œ ๋งค์žฅ ์‘๋‹ต์—์„œ ์ตœ๋Œ€๊ฐ’์ด๋ฉฐ, "์ˆ˜๋Ÿ‰์„ 20๋กœ ๊ฐ€์ ธ์˜ค์„ธ์š”"๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค. 5 โ€” ๋‹จ์œ„๋‹น ๊ฐ€๊ฒฉ, "Black Pearl" โ€” ์ œํ’ˆ ์ด๋ฆ„์˜ ํ•˜์œ„ ๋ฌธ์ž์—ด์ž…๋‹ˆ๋‹ค. ์„œ๋ฒ„๊ฐ€ ์‹œ์•ฝ์„ ๋‹ค๋ฅด๊ฒŒ ํ˜ธ์ถœํ•˜๋Š” ๊ฒฝ์šฐ ํ•„ํ„ฐ๋ฅผ ๋ณ€๊ฒฝํ•˜๊ฑฐ๋‚˜ ""๋ฅผ ์ „๋‹ฌํ•˜์‹ญ์‹œ์˜ค. ์ƒํ’ˆ ๋ถ€์กฑ, ๋ˆ ๋ฐ ์„œ๋ฒ„ ๊ทœ์น™์— ๋”ฐ๋ผ ๊ฒฐ๊ณผ๊ฐ€ ๊ฒฐ์ •๋ฉ๋‹ˆ๋‹ค.
return  RunScenario();
 object? RunScenario()
{
    UO.AutoBuyEx(0x0F7A, 0, 20, 5, "Black Pearl");
    return null;
}

3. ๋‹ค๋ฅธ ๋ชฉ๋ก์„ ์žฌ์„ค์ •ํ•˜์ง€ ์•Š๊ณ  ์„ ํƒํ•œ ๊ทœ์น™ ์ œ๊ฑฐ - ์Šคํฌ๋ฆฝํŠธ ํด๋ž˜์Šค

๋งค๊ฐœ๋ณ€์ˆ˜์™€ ์‹คํ–‰ ํ๋ฆ„:

  • ์–ด์‹œ์Šคํ„ดํŠธ๋Š” graphic์„ ์ˆ˜๋ฝํ•ฉ๋‹ˆ๋‹ค. AnyHue๊ฐ€ ํฌํ•จ๋œ ๊ธฐ๋ณธ ๊ทœ์น™๋งŒ ์‚ญ์ œ๋ฉ๋‹ˆ๋‹ค. ๊ฐœ๋ณ„ ๊ทœ์น™ hue=0์€ ์œ ์ง€๋ฉ๋‹ˆ๋‹ค. ์ด๋ฏธ ์„œ๋ฒ„๋กœ ์ „์†ก๋œ ๊ฑฐ๋ž˜๋Š” ์ทจ์†Œ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ •ํ™•ํ•œ ์ƒ‰์ƒ์„ ์ œ๊ฑฐํ•˜๋ ค๋ฉด ๊ทœ์น™์„ ์ƒ์„ฑํ•œ ๊ฒƒ๊ณผ ๋™์ผํ•œ hue๋ฅผ ์ „๋‹ฌํ•˜์„ธ์š”.

Shop ๋ชฉ๋ก / ๊ตฌ๋งค ๋ฐ ํŒ๋งค ๋ชฉ๋ก

Shop ๋ชฉ๋ก / ๋งค์ˆ˜ ๋ฐ ๋งค๋„ ๋ชฉ๋ก

return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        DisableReagentRule(0x0F7A);
        DisableReagentRule(0x0F84);
        return null;
    }

    void DisableReagentRule(dynamic itemType)
    {
        UO.AutoBuyEx(itemType, -1, 0, 0, "");
    }
}

๋ช…๋ น ๊ตฌํ˜„

C#์€ ๋Œ€์†Œ๋ฌธ์ž๋ฅผ ๊ตฌ๋ถ„ํ•ฉ๋‹ˆ๋‹ค. ์ •ํ™•ํ•œ UO ์ด๋ฆ„์„ ์‚ฌ์šฉํ•˜์„ธ์š”. ์ˆซ์ž ํ”Œ๋ž˜๊ทธ๋Š” 0๊ณผ ๋น„๊ตํ•˜๊ณ  ๋ฐ˜ํ™˜ ํ˜•์‹์ด bool์ผ ๋•Œ๋งŒ bool์„ ์‚ฌ์šฉํ•˜์„ธ์š”.

UO.AutoBuyEx(itemType, itemColor, quantity, price, name) โ€” UO.AutoBuyEx(Any,Any,Any,Any,Any)

๋งค๊ฐœ๋ณ€์ˆ˜: itemType (Any), itemColor (Any), quantity (Any), price (Any), name (Any)

๊ฒฐ๊ณผ: void / Unit.

ํ˜ธ์ถœ ์‹œ:

๋‚ด๋ถ€ ๊ตฌํ˜„ ์ฝ”๋“œ์ด๋ฉฐ ๋…๋ฆฝ ์Šคํฌ๋ฆฝํŠธ๋กœ ์‹คํ–‰ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

case "autobuyex":

                    bridge.SetAutoBuyRule(Arg(0), Arg(1), Arg(2), Arg(3), Text(4)); return InjectionValue.Unit;

UO.AutoSell

ะฃะบั€ะฐั—ะฝััŒะบะฐ ยท ะ ัƒััะบะธะน ยท English ยท Deutsch ยท Franรงais ยท Italiano ยท Espaรฑol ยท ็น้ซ”ไธญๆ–‡ ยท ๆ—ฅๆœฌ่ชž ยท ํ•œ๊ตญ์–ด

C# ์‹œ๊ทธ๋‹ˆ์ฒ˜

void UO.AutoSell(object? itemType, object? itemColor, object? quantity);

ํ˜„์žฌ Bad Newbie ํ”„๋กœํ•„์˜ ๊ธฐ๋ณธ ๊ธฐ๋ณธ ๋ชฉ๋ก์—์„œ ์ž๋™ ํŒ๋งค ๊ทœ์น™์„ ์ƒ์„ฑ, ์—…๋ฐ์ดํŠธ ๋˜๋Š” ์‚ญ์ œํ•ฉ๋‹ˆ๋‹ค. ์ด ๋ช…๋ น์€ NPC ํŒ๋งค์ž ์ œ์•ˆ์˜ ํ–ฅํ›„ ์ฒ˜๋ฆฌ๋ฅผ ๊ตฌ์„ฑํ•ฉ๋‹ˆ๋‹ค. ๊ตฌ๋งค/ํŒ๋งค๋ฅผ ๋งํ•˜์ง€ ์•Š์œผ๋ฉฐ, ๋งค์žฅ์„ ์—ด์ง€๋„ ์•Š๊ณ , ๊ฑฐ๋ž˜๋ฅผ ํ™•์ธํ•˜์ง€๋„ ์•Š์Šต๋‹ˆ๋‹ค. ์ „์ฒด ์ ˆ์ฐจ: ์Šคํ† ์–ด ๋ชฉ๋ก.

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

  • itemType - ๊ทธ๋ž˜ํ”ฝ ์ œํ’ˆ 0..65535: ์˜ˆ: 0x0F7A - Black Pearl, 0x0F51 - ๋‹จ๊ฒ€. ํŒ๋งค์ž/์•„์ดํ…œ์˜ serial๋„ ์•„๋‹ˆ๊ณ  ์บ๋ฆญํ„ฐ์˜ body๋„ ์•„๋‹™๋‹ˆ๋‹ค. ์Œ์ˆ˜ ๋˜๋Š” 65535๋ณด๋‹ค ํฐ ์ˆซ์ž๋Š” ๊ฑฐ๋ถ€๋ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ 0xFFFF๋Š” ํŠน์ • graphic์ด๋ฉฐ, ๋ชจ๋“  ์ƒํ’ˆ์˜ ๋งˆ์Šคํฌ๋Š” ์•„๋‹™๋‹ˆ๋‹ค.
  • itemColor โ€” ์ œํ’ˆ ์ƒ‰์ƒ: ์Œ์ˆ˜ ๋˜๋Š” 0xFFFF โ€” ๋ชจ๋‘; 0 - ๋„์ƒ‰๋˜์ง€ ์•Š์€ ํ•ญ๋ชฉ๋งŒ ํ•ด๋‹น๋ฉ๋‹ˆ๋‹ค. ์ •ํ™•ํ•œ hue์„ ์œ„ํ•ด์„œ๋Š” 0..65534๋ฅผ ์‚ฌ์šฉํ•˜์„ธ์š”. ์ด ๋ฒ”์œ„๋ฅผ ๋ฒ—์–ด๋‚˜๋Š” ์ƒ‰์ƒ์„ ์‚ฌ์šฉํ•˜์ง€ ๋งˆ์‹ญ์‹œ์˜ค. ์–‘์ˆ˜ ๊ฐ’์€ ushort๋กœ ๋ณ€ํ™˜๋ฉ๋‹ˆ๋‹ค. ํ•„์ˆ˜์˜.
  • quantity โ€” ์Šคํƒ ์ˆ˜๋‚˜ ๋ฐฐ๋‚ญ์—์„œ ์›ํ•˜๋Š” ์ž”์•ก์ด ์•„๋‹ˆ๋ผ ์ˆ˜์‹ ๋œ ํ•œ ๋งค์žฅ ์ œ์•ˆ๋‹น ์ƒํ’ˆ UNITS ์ˆ˜์ž…๋‹ˆ๋‹ค. ์–‘์„ฑ์€ 65535๋กœ ์ œํ•œ๋ฉ๋‹ˆ๋‹ค. 0/negative๋Š” ๊ธฐ๋ณธ๊ฐ’์—์„œ ์ผ์น˜ ๊ทœ์น™ type+color๋ฅผ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์€ โ€œ์ „์ฒด ์ˆ˜๋Ÿ‰โ€์ด ์•„๋‹™๋‹ˆ๋‹ค. ํ•„์ˆ˜์˜.

๋ฐ˜ํ™˜๊ฐ’

void - ๊ฐ’์ด ์—†์Šต๋‹ˆ๋‹ค. var ๊ฒฐ๊ณผ = ๋ฐ if ์—†์ด ๋ณ„๋„์˜ ํšŒ์„ ์œผ๋กœ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค. ํ†ตํ™” ์ข…๋ฃŒ๋Š” ์„ฑ๊ณต์ ์ธ ๊ฑฐ๋ž˜๊ฐ€ ์•„๋‹Œ ์„ค์ • ์ข…๋ฃŒ๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ํ”„๋กœํ•„์ด ์—†๊ฑฐ๋‚˜ ์ž˜๋ชป๋œ graphic ๊ฒฝ์šฐ ๊ทœ์น™์ด ์ƒ์„ฑ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์˜ค๋ฅ˜์— ๋Œ€ํ•œ ์ˆ˜์น˜ ๊ฒฐ๊ณผ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ๋ฐฐ๋‚ญ ๋‚ด์šฉ, ๊ณจ๋“œ, ์„œ๋ฒ„ ์‘๋‹ต์„ ํ†ตํ•ด ์‹ค์ œ ๊ฑฐ๋ž˜๋ฅผ ํ™•์ธํ•˜์„ธ์š”.

๋™์ž‘

  • ๋ชจ๋“  3 ์ธ์ˆ˜๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ๋Œ€๊ธฐ ๊ธฐ๋Šฅ์ด ์•„๋‹Œ ๊ทœ์น™ ์„ค์ •์ž…๋‹ˆ๋‹ค.
  • ๊ทœ์น™ ํ‚ค๋Š” graphic์ด๊ณ  ๊ธฐ๋ณธ๊ฐ’์˜ ๋งˆ์Šคํฌ๋Š” hue์ž…๋‹ˆ๋‹ค. ๋ฐ˜๋ณต ํ˜ธ์ถœ์€ ์ด ๊ทœ์น™์˜ ์ˆ˜๋Ÿ‰ ๋ฐ ๊ธฐํƒ€ ํ•„๋“œ๋ฅผ ๋Œ€์ฒดํ•ฉ๋‹ˆ๋‹ค. ์ด์ „ ์ œํ•œ ์œ„์— ๋‹ค๋ฅธ ์ œํ•œ์„ ์ถ”๊ฐ€ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ฐ€๊ฒฉ/์ด๋ฆ„์ด ์—†์œผ๋ฉด ์ด ํ•„๋“œ์— ๋Œ€ํ•œ ์ด์ „ ์ œํ•œ ์‚ฌํ•ญ์ด ์ œ๊ฑฐ๋ฉ๋‹ˆ๋‹ค.
  • ์‹ ๊ทœ/์—…๋ฐ์ดํŠธ๋จ ํ™œ์„ฑํ™”=true ๊ทœ์น™. ์ผ๋ฐ˜ ๋งค์ˆ˜/๋งค๋„ ์Šค์œ„์น˜๋Š” ๊ทœ์น™ ์œ ๋ฌด์— ๋”ฐ๋ผ ์„ค์ •๋˜๋ฉฐ ํ”„๋กœํ•„์ด ์ €์žฅ๋ฉ๋‹ˆ๋‹ค. ๋น„ํ™œ์„ฑํ™”๋œ ๊ธฐ๋ณธ ๋ชฉ๋ก ์ž์ฒด๋Š” ์ž๋™์œผ๋กœ ํ™œ์„ฑํ™”๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ผ๋ฐ˜ ๋ชจ๋“œ์™€ ๋ชฉ๋ก ๋ชจ๋‘ ์„ค์ •์—์„œ ํ™œ์„ฑํ™”๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ๋ช…๋ช…๋œ ๋ชฉ๋ก์€ ๋ณ€๊ฒฝ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • ์ƒํ’ˆ ๋ชฉ๋ก์ด ๋„์ฐฉํ•˜๋ฉด ์ฒ˜๋ฆฌ๊ฐ€ ์‹œ์ž‘๋ฉ๋‹ˆ๋‹ค. ํ•œ๋„๋Š” ํ•˜๋‚˜์˜ ๊ทœ์น™๊ณผ ์ผ์น˜ํ•˜๋Š” ํ–‰ ์ „์ฒด์— ๊ฑธ์ณ ์ง€์ถœ๋ฉ๋‹ˆ๋‹ค. ๊ฐ ์œ„์น˜์— ๋Œ€ํ•ด ์ฒซ ๋ฒˆ์งธ๋กœ ์ผ์น˜ํ•˜๋Š” ํ™œ์„ฑํ™”๋œ ๊ทœ์น™์ด ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ์ƒ์ ์„ ๋‹ค์‹œ ์—ด๋ฉด ๊ทœ์น™์ด ํ™œ์„ฑํ™”๋œ ๋™์•ˆ ์ƒˆ๋กœ์šด ์ œ์•ˆ๊ณผ ์ƒˆ๋กœ์šด ํ•œ๋„๊ฐ€ ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค.
  • Bad Newbie์™€ ์™„๋ฒฝํ•˜๊ฒŒ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ํด๋ž˜์‹์—์„œ๋Š” ์ด ์ž๋™ํ™”๊ฐ€ ๋น„ํ™œ์„ฑํ™”๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋งค๊ฐœ๋ณ€์ˆ˜์— ์ด๋ฆ„ NPC ๋˜๋Š” ์ €์žฅ๋œ ๋ชฉ๋ก์˜ ์ด๋ฆ„์„ ๋Œ€์ฒดํ•˜์ง€ ๋งˆ์‹ญ์‹œ์˜ค. AutoBuyEx๋Š” ๊ตฌ๋งค ์‹œ ๊ฐ€๊ฒฉ/์ด๋ฆ„ ํ•„ํ„ฐ๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. ClearShopList๋Š” ๋‘ ์ž๋™ํ™”๋ฅผ ์™„์ „ํžˆ ์žฌ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

๋…๋ฆฝ ์‹คํ–‰ C# ์Šคํฌ๋ฆฝํŠธ

๊ฐ ์˜ˆ์ œ๋Š” ๋ณ„๋„์˜ ํŒŒ์ผ .csx๋กœ ์ €์žฅํ•˜๊ณ  IDE์—์„œ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. UO ๊ฐœ์ฒด์™€ ๋Œ€๊ธฐ ๊ธฐ๋Šฅ์€ ํ˜„์žฌ ๊ฒŒ์ž„ ์„ธ์…˜์˜ ํ˜ธ์ŠคํŠธ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ๋ฐ๋ชจ serial ์ด๋ฆ„, ์ขŒํ‘œ, ์ฃผ์†Œ๋ฅผ ์ž์‹ ์˜ ๊ฒƒ์œผ๋กœ ๋ฐ”๊พธ์„ธ์š”.

๊ฐ„๋‹จํ•œ ์˜ˆ์ œ

์ด ์ฝ”๋“œ๋ฅผ ๋ณ„๋„์˜ .csx ํŒŒ์ผ๋กœ ์‹คํ–‰ํ•˜์„ธ์š”. ์ธ์ˆ˜๋Š” ํ˜ธ์ถœ์— ์ง์ ‘ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. ์˜ˆ์ œ์˜ ์ด๋ฆ„, serial, ์ฃผ์†Œ๋ฅผ ์ž์‹ ์˜ ๊ฐ’์œผ๋กœ ๋ฐ”๊พธ์„ธ์š”.

๋ช…๋ น์€ ๋…๋ฆฝ๋œ ๋ฌธ์ž…๋‹ˆ๋‹ค. ์•ž์˜ ๋ฉ”์‹œ์ง€๋Š” ํ˜ธ์ถœ ์‹œ์ž‘์„ ๋‚˜ํƒ€๋‚ด๋ฉฐ ์„œ๋ฒ„ ๋™์ž‘์˜ ์™„๋ฃŒ๋ฅผ ํ™•์ธํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

UO.Print("Calling UO.AutoSell");
UO.AutoSell(0x0F51, -1, 1);

1. ๋‹จ๊ฒ€ 1๊ฐœ ํŒ๋งค ํ—ˆ์šฉ - ์ง์ ‘ ์Šคํฌ๋ฆฝํŠธ

๋งค๊ฐœ๋ณ€์ˆ˜์™€ ์‹คํ–‰ ํ๋ฆ„:

  • 0x0F51 - graphic ๋‹จ๊ฒ€, ์ž„์˜ hue, 1 - ๋ฌธ์žฅ๋‹น ํ•˜๋‚˜. ํŒ€์—์„œ๋Š” ํŠน์ • serial๋ฅผ ์„ ํƒํ•˜์ง€ ์•Š์œผ๋ฉฐ ํ•ญ๋ชฉ์˜ ์œ ์šฉ์„ฑ/๊ฐ€์น˜๋ฅผ ํ…Œ์ŠคํŠธํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์•„์ดํ…œ์˜ ์ •ํ™•ํ•œ type/์ƒ‰์ƒ์„ ์„ ํƒํ•˜์„ธ์š”.
UO.AutoSell(0x0F51, -1, 1);

2. ํŠน์ • ์ƒ‰์ƒ์˜ ๋กœ๋ธŒ๋งŒ ํŒ๋งคํ•˜๋Š” ๊ฒƒ์€ ์Šคํฌ๋ฆฝํŠธ์˜ ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค.

๋งค๊ฐœ๋ณ€์ˆ˜์™€ ์‹คํ–‰ ํ๋ฆ„:

  • 0x1F03๋Š” ํ‘œ์ค€ graphic ๋กœ๋ธŒ์˜ ์˜ˆ์‹œ์ด๊ณ , 0x0044๋Š” hue์˜ ์˜ˆ์‹œ์ž…๋‹ˆ๋‹ค. ๋‘˜ ๋‹ค ๊ท€ํ•˜์˜ ์ œํ’ˆ์œผ๋กœ ๊ต์ฒดํ•˜์‹ญ์‹œ์˜ค. 5 โ€” ๊ฐ€๊ฒฉ์ด ์•„๋‹Œ ๋‹จ์œ„; ์ตœ์†Œ ๊ฐ€๊ฒฉ ๋ฐ ์ด๋ฆ„ ๋งค๊ฐœ๋ณ€์ˆ˜ Sell/AutoSell๋Š” ํ—ˆ์šฉ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์„œ๋ฒ„๋Š” ํŒ๋งค ์ œ์•ˆ์— ํ•ด๋‹น ํ’ˆ๋ชฉ์„ ํฌํ•จํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
return  RunScenario();
 object? RunScenario()
{
    UO.AutoSell(0x1F03, 0x0044, 5);
    return null;
}

3. NPC๋กœ ์ด๋™ํ•˜๊ธฐ ์ „์— ๋‘ ๊ฐ€์ง€ ์œ ํ˜•์˜ ํŒ๋งค๋ฅผ ๋น„ํ™œ์„ฑํ™”ํ•ฉ๋‹ˆ๋‹ค - ์Šคํฌ๋ฆฝํŠธ ํด๋ž˜์Šค

๋งค๊ฐœ๋ณ€์ˆ˜์™€ ์‹คํ–‰ ํ๋ฆ„:

  • ํ”„๋กœ์‹œ์ € ์ด๋ฆ„์€ ์ž„์˜์ ์ž…๋‹ˆ๋‹ค. itemType ๋ฐ hue๋Š” ํ•ด๋‹น ๋งค๊ฐœ๋ณ€์ˆ˜์ž…๋‹ˆ๋‹ค. ๊ธฐํƒ€ ๊ทœ์น™, ๊ตฌ๋งค ๋ฐ ์‚ฌ์šฉ์ž ์ง€์ • ๋ช…๋ช… ๋ชฉ๋ก์€ ์œ ์ง€๋ฉ๋‹ˆ๋‹ค. ํ™œ์„ฑํ™”๋œ ๋‹ค๋ฅธ ๋ชฉ๋ก์—์„œ๋„ ์ด๋Ÿฌํ•œ ํ•ญ๋ชฉ์„ ํŒ๋งคํ•˜๋Š” ๊ฒฝ์šฐ ์„ค์ •์„ ํ†ตํ•ด ํ•ด๋‹น ๋ชฉ๋ก์˜ ํ•ด๋‹น ๊ทœ์น™์„ ๋น„ํ™œ์„ฑํ™”ํ•˜์„ธ์š”.

Shop ๋ชฉ๋ก / ๊ตฌ๋งค ๋ฐ ํŒ๋งค ๋ชฉ๋ก

Shop ๋ชฉ๋ก / ๋งค์ˆ˜ ๋ฐ ๋งค๋„ ๋ชฉ๋ก

return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        RemoveSaleRule(0x0F51, -1);
        RemoveSaleRule(0x1F03, 0x0044);
        return null;
    }

    void RemoveSaleRule(dynamic itemType, dynamic hue)
    {
        UO.AutoSell(itemType, hue, 0);
    }
}

๋ช…๋ น ๊ตฌํ˜„

C#์€ ๋Œ€์†Œ๋ฌธ์ž๋ฅผ ๊ตฌ๋ถ„ํ•ฉ๋‹ˆ๋‹ค. ์ •ํ™•ํ•œ UO ์ด๋ฆ„์„ ์‚ฌ์šฉํ•˜์„ธ์š”. ์ˆซ์ž ํ”Œ๋ž˜๊ทธ๋Š” 0๊ณผ ๋น„๊ตํ•˜๊ณ  ๋ฐ˜ํ™˜ ํ˜•์‹์ด bool์ผ ๋•Œ๋งŒ bool์„ ์‚ฌ์šฉํ•˜์„ธ์š”.

UO.AutoSell(itemType, itemColor, quantity) โ€” UO.AutoSell(Any,Any,Any)

๋งค๊ฐœ๋ณ€์ˆ˜: itemType (Any), itemColor (Any), quantity (Any)

๊ฒฐ๊ณผ: void / Unit.

ํ˜ธ์ถœ ์‹œ:

๋‚ด๋ถ€ ๊ตฌํ˜„ ์ฝ”๋“œ์ด๋ฉฐ ๋…๋ฆฝ ์Šคํฌ๋ฆฝํŠธ๋กœ ์‹คํ–‰ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

case "autosell":

                    bridge.SetAutoSellRule(Arg(0), Arg(1), Arg(2)); return InjectionValue.Unit;

UO.Buy

ะฃะบั€ะฐั—ะฝััŒะบะฐ ยท ะ ัƒััะบะธะน ยท English ยท Deutsch ยท Franรงais ยท Italiano ยท Espaรฑol ยท ็น้ซ”ไธญๆ–‡ ยท ๆ—ฅๆœฌ่ชž ยท ํ•œ๊ตญ์–ด

C# ์‹œ๊ทธ๋‹ˆ์ฒ˜

void UO.Buy(object? @type);
void UO.Buy(object? @type, object? color);
void UO.Buy(object? @type, object? color, object? quantity);
void UO.Buy(object? @type, object? color, object? quantity, object? maxPrice);
void UO.Buy(object? @type, object? color, object? quantity, object? maxPrice, object? name);

ํ˜„์žฌ Bad Newbie ํ”„๋กœํ•„์˜ ๊ธฐ๋ณธ ๊ธฐ๋ณธ ๋ชฉ๋ก์—์„œ ์ž๋™ ๊ตฌ๋งค ๊ทœ์น™์„ ์ƒ์„ฑ, ์—…๋ฐ์ดํŠธ ๋˜๋Š” ์‚ญ์ œํ•ฉ๋‹ˆ๋‹ค. ์ด ๋ช…๋ น์€ NPC ํŒ๋งค์ž ์ œ์•ˆ์˜ ํ–ฅํ›„ ์ฒ˜๋ฆฌ๋ฅผ ๊ตฌ์„ฑํ•ฉ๋‹ˆ๋‹ค. ๊ตฌ๋งค/ํŒ๋งค๋ฅผ ๋งํ•˜์ง€ ์•Š์œผ๋ฉฐ, ๋งค์žฅ์„ ์—ด์ง€๋„ ์•Š๊ณ , ๊ฑฐ๋ž˜๋ฅผ ํ™•์ธํ•˜์ง€๋„ ์•Š์Šต๋‹ˆ๋‹ค. ์ „์ฒด ์ ˆ์ฐจ: ์Šคํ† ์–ด ๋ชฉ๋ก.

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

  • type - ๊ทธ๋ž˜ํ”ฝ ์ œํ’ˆ 0..65535: ์˜ˆ: 0x0F7A - Black Pearl, 0x0F51 - ๋‹จ๊ฒ€. ํŒ๋งค์ž/์•„์ดํ…œ์˜ serial๋„ ์•„๋‹ˆ๊ณ  ์บ๋ฆญํ„ฐ์˜ body๋„ ์•„๋‹™๋‹ˆ๋‹ค. ์Œ์ˆ˜ ๋˜๋Š” 65535๋ณด๋‹ค ํฐ ์ˆซ์ž๋Š” ๊ฑฐ๋ถ€๋ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ 0xFFFF๋Š” ํŠน์ • graphic์ด๋ฉฐ, ๋ชจ๋“  ์ƒํ’ˆ์˜ ๋งˆ์Šคํฌ๋Š” ์•„๋‹™๋‹ˆ๋‹ค.
  • color โ€” ์ œํ’ˆ ์ƒ‰์ƒ: ์Œ์ˆ˜ ๋˜๋Š” 0xFFFF โ€” ๋ชจ๋‘; 0 - ๋„์ƒ‰๋˜์ง€ ์•Š์€ ํ•ญ๋ชฉ๋งŒ ํ•ด๋‹น๋ฉ๋‹ˆ๋‹ค. ์ •ํ™•ํ•œ hue์„ ์œ„ํ•ด์„œ๋Š” 0..65534๋ฅผ ์‚ฌ์šฉํ•˜์„ธ์š”. ์ด ๋ฒ”์œ„๋ฅผ ๋ฒ—์–ด๋‚˜๋Š” ์ƒ‰์ƒ์„ ์‚ฌ์šฉํ•˜์ง€ ๋งˆ์‹ญ์‹œ์˜ค. ์–‘์ˆ˜ ๊ฐ’์€ ushort๋กœ ๋ณ€ํ™˜๋ฉ๋‹ˆ๋‹ค. ๊ธฐ๋ณธ๊ฐ’์€ 1์ž…๋‹ˆ๋‹ค.
  • quantity โ€” ์Šคํƒ ์ˆ˜๋‚˜ ๋ฐฐ๋‚ญ์—์„œ ์›ํ•˜๋Š” ์ž”์•ก์ด ์•„๋‹ˆ๋ผ ์ˆ˜์‹ ๋œ ํ•œ ๋งค์žฅ ์ œ์•ˆ๋‹น ์ƒํ’ˆ UNITS ์ˆ˜์ž…๋‹ˆ๋‹ค. ์–‘์„ฑ์€ 65535๋กœ ์ œํ•œ๋ฉ๋‹ˆ๋‹ค. 0/negative๋Š” ๊ธฐ๋ณธ๊ฐ’์—์„œ ์ผ์น˜ ๊ทœ์น™ type+color๋ฅผ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์€ โ€œ์ „์ฒด ์ˆ˜๋Ÿ‰โ€์ด ์•„๋‹™๋‹ˆ๋‹ค. ๊ธฐ๋ณธ๊ฐ’์€ 1์ž…๋‹ˆ๋‹ค.
  • maxPrice โ€” ์ „์ฒด ๊ฑฐ๋ž˜๊ฐ€ ์•„๋‹Œ ํ•œ ๋‹จ์œ„์˜ ์ตœ๋Œ€ ๊ฐ€๊ฒฉ์ž…๋‹ˆ๋‹ค. 0/์Œ์ˆ˜ โ€“ ๊ฐ€๊ฒฉ ์ƒํ•œ์„ ์ด ์—†์Šต๋‹ˆ๋‹ค. ํ”Œ๋Ÿฌ์Šค ํ•œ๋„๋ณด๋‹ค ๋น„์‹ผ ์ œํ’ˆ์€ ํ†ต๊ณผ๊ฐ€ ํ—ˆ์šฉ๋ฉ๋‹ˆ๋‹ค. ๊ฐ€๊ฒฉ์€ ์„œ๋ฒ„์—์„œ ๊ฑฐ๋ž˜๋˜๊ฑฐ๋‚˜ ๋ณ€๊ฒฝ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ธฐ๋ณธ๊ฐ’์€ 0์ž…๋‹ˆ๋‹ค.
  • name โ€” PRODUCT ์ด๋ฆ„์˜ ํ•˜์œ„ ๋ฌธ์ž์—ด์ด๋ฉฐ ๋Œ€์†Œ๋ฌธ์ž๋ฅผ ๊ตฌ๋ถ„ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ฐ€์žฅ์ž๋ฆฌ ๊ณต๋ฐฑ์ด ์ œ๊ฑฐ๋˜๊ณ  ๋นˆ ์ค„ - ํ•„ํ„ฐ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ์ด๋Š” ํŒ๋งค์ž์˜ ์ด๋ฆ„์ด๋‚˜ ๋ชฉ๋ก์˜ ์ด๋ฆ„์ด ์•„๋‹™๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, "Black Pearl"์€ ์„œ๋ฒ„๊ฐ€ ์ •ํ™•ํžˆ ๊ทธ๋Ÿฌํ•œ ์ด๋ฆ„์„ ๋ณด๋‚ธ ๊ฒฝ์šฐ ๋งค์žฅ ์œ„์น˜์˜ ํ…์ŠคํŠธ๋ฅผ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ๋ณธ๊ฐ’์€ ๋นˆ ๋ฌธ์ž์—ด์ž…๋‹ˆ๋‹ค.

๋ฐ˜ํ™˜๊ฐ’

void - ๊ฐ’์ด ์—†์Šต๋‹ˆ๋‹ค. var ๊ฒฐ๊ณผ = ๋ฐ if ์—†์ด ๋ณ„๋„์˜ ํšŒ์„ ์œผ๋กœ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค. ํ†ตํ™” ์ข…๋ฃŒ๋Š” ์„ฑ๊ณต์ ์ธ ๊ฑฐ๋ž˜๊ฐ€ ์•„๋‹Œ ์„ค์ • ์ข…๋ฃŒ๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ํ”„๋กœํ•„์ด ์—†๊ฑฐ๋‚˜ ์ž˜๋ชป๋œ graphic ๊ฒฝ์šฐ ๊ทœ์น™์ด ์ƒ์„ฑ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์˜ค๋ฅ˜์— ๋Œ€ํ•œ ์ˆ˜์น˜ ๊ฒฐ๊ณผ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ๋ฐฐ๋‚ญ ๋‚ด์šฉ, ๊ณจ๋“œ, ์„œ๋ฒ„ ์‘๋‹ต์„ ํ†ตํ•ด ์‹ค์ œ ๊ฑฐ๋ž˜๋ฅผ ํ™•์ธํ•˜์„ธ์š”.

๋™์ž‘

  • Buy๋Š” 1์—์„œ 5 ์ธ์ˆ˜๋ฅผ ํ—ˆ์šฉํ•ฉ๋‹ˆ๋‹ค. ์˜ค๋ฅธ์ชฝ์— ๋ˆ„๋ฝ๋จ ์ƒ‰์ƒ=-1, ์ˆ˜๋Ÿ‰=1, maxPrice=0, name="".
  • ๊ทœ์น™ ํ‚ค๋Š” graphic์ด๊ณ  ๊ธฐ๋ณธ๊ฐ’์˜ ๋งˆ์Šคํฌ๋Š” hue์ž…๋‹ˆ๋‹ค. ๋ฐ˜๋ณต ํ˜ธ์ถœ์€ ์ด ๊ทœ์น™์˜ ์ˆ˜๋Ÿ‰ ๋ฐ ๊ธฐํƒ€ ํ•„๋“œ๋ฅผ ๋Œ€์ฒดํ•ฉ๋‹ˆ๋‹ค. ์ด์ „ ์ œํ•œ ์œ„์— ๋‹ค๋ฅธ ์ œํ•œ์„ ์ถ”๊ฐ€ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ฐ€๊ฒฉ/์ด๋ฆ„์ด ์—†์œผ๋ฉด ์ด ํ•„๋“œ์— ๋Œ€ํ•œ ์ด์ „ ์ œํ•œ ์‚ฌํ•ญ์ด ์ œ๊ฑฐ๋ฉ๋‹ˆ๋‹ค.
  • ์‹ ๊ทœ/์—…๋ฐ์ดํŠธ๋จ ํ™œ์„ฑํ™”=true ๊ทœ์น™. ์ผ๋ฐ˜ ๋งค์ˆ˜/๋งค๋„ ์Šค์œ„์น˜๋Š” ๊ทœ์น™ ์œ ๋ฌด์— ๋”ฐ๋ผ ์„ค์ •๋˜๋ฉฐ ํ”„๋กœํ•„์ด ์ €์žฅ๋ฉ๋‹ˆ๋‹ค. ๋น„ํ™œ์„ฑํ™”๋œ ๊ธฐ๋ณธ ๋ชฉ๋ก ์ž์ฒด๋Š” ์ž๋™์œผ๋กœ ํ™œ์„ฑํ™”๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ผ๋ฐ˜ ๋ชจ๋“œ์™€ ๋ชฉ๋ก ๋ชจ๋‘ ์„ค์ •์—์„œ ํ™œ์„ฑํ™”๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ๋ช…๋ช…๋œ ๋ชฉ๋ก์€ ๋ณ€๊ฒฝ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • ์ƒํ’ˆ ๋ชฉ๋ก์ด ๋„์ฐฉํ•˜๋ฉด ์ฒ˜๋ฆฌ๊ฐ€ ์‹œ์ž‘๋ฉ๋‹ˆ๋‹ค. ํ•œ๋„๋Š” ํ•˜๋‚˜์˜ ๊ทœ์น™๊ณผ ์ผ์น˜ํ•˜๋Š” ํ–‰ ์ „์ฒด์— ๊ฑธ์ณ ์ง€์ถœ๋ฉ๋‹ˆ๋‹ค. ๊ฐ ์œ„์น˜์— ๋Œ€ํ•ด ์ฒซ ๋ฒˆ์งธ๋กœ ์ผ์น˜ํ•˜๋Š” ํ™œ์„ฑํ™”๋œ ๊ทœ์น™์ด ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ์ƒ์ ์„ ๋‹ค์‹œ ์—ด๋ฉด ๊ทœ์น™์ด ํ™œ์„ฑํ™”๋œ ๋™์•ˆ ์ƒˆ๋กœ์šด ์ œ์•ˆ๊ณผ ์ƒˆ๋กœ์šด ํ•œ๋„๊ฐ€ ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค.
  • Bad Newbie์™€ ์™„๋ฒฝํ•˜๊ฒŒ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ํด๋ž˜์‹์—์„œ๋Š” ์ด ์ž๋™ํ™”๊ฐ€ ๋น„ํ™œ์„ฑํ™”๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋งค๊ฐœ๋ณ€์ˆ˜์— ์ด๋ฆ„ NPC ๋˜๋Š” ์ €์žฅ๋œ ๋ชฉ๋ก์˜ ์ด๋ฆ„์„ ๋Œ€์ฒดํ•˜์ง€ ๋งˆ์‹ญ์‹œ์˜ค. AutoBuyEx๋Š” ๊ตฌ๋งค ์‹œ ๊ฐ€๊ฒฉ/์ด๋ฆ„ ํ•„ํ„ฐ๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. ClearShopList๋Š” ๋‘ ์ž๋™ํ™”๋ฅผ ์™„์ „ํžˆ ์žฌ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

๋…๋ฆฝ ์‹คํ–‰ C# ์Šคํฌ๋ฆฝํŠธ

๊ฐ ์˜ˆ์ œ๋Š” ๋ณ„๋„์˜ ํŒŒ์ผ .csx๋กœ ์ €์žฅํ•˜๊ณ  IDE์—์„œ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. UO ๊ฐœ์ฒด์™€ ๋Œ€๊ธฐ ๊ธฐ๋Šฅ์€ ํ˜„์žฌ ๊ฒŒ์ž„ ์„ธ์…˜์˜ ํ˜ธ์ŠคํŠธ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ๋ฐ๋ชจ serial ์ด๋ฆ„, ์ขŒํ‘œ, ์ฃผ์†Œ๋ฅผ ์ž์‹ ์˜ ๊ฒƒ์œผ๋กœ ๋ฐ”๊พธ์„ธ์š”.

๊ฐ„๋‹จํ•œ ์˜ˆ์ œ

์ด ์ฝ”๋“œ๋ฅผ ๋ณ„๋„์˜ .csx ํŒŒ์ผ๋กœ ์‹คํ–‰ํ•˜์„ธ์š”. ์ธ์ˆ˜๋Š” ํ˜ธ์ถœ์— ์ง์ ‘ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. ์˜ˆ์ œ์˜ ์ด๋ฆ„, serial, ์ฃผ์†Œ๋ฅผ ์ž์‹ ์˜ ๊ฐ’์œผ๋กœ ๋ฐ”๊พธ์„ธ์š”.

๋ช…๋ น์€ ๋…๋ฆฝ๋œ ๋ฌธ์ž…๋‹ˆ๋‹ค. ์•ž์˜ ๋ฉ”์‹œ์ง€๋Š” ํ˜ธ์ถœ ์‹œ์ž‘์„ ๋‚˜ํƒ€๋‚ด๋ฉฐ ์„œ๋ฒ„ ๋™์ž‘์˜ ์™„๋ฃŒ๋ฅผ ํ™•์ธํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

UO.Print("Calling UO.Buy");
UO.Buy(0x0F7A);

1. ์‹œ์•ฝ 1๊ฐœ ๊ตฌ๋งค ์ค€๋น„ - ์ง์ ‘ ์Šคํฌ๋ฆฝํŠธ

๋งค๊ฐœ๋ณ€์ˆ˜์™€ ์‹คํ–‰ ํ๋ฆ„:

  • 0x0F7A - graphic ์‹œ์•ฝ, ID NPC ์•„๋‹˜. ์ˆ˜๋Ÿ‰ - 1; ์ƒ‰์ƒ - ๋ฌด์—‡์ด๋“ . ์ด ์–‘์‹์—๋Š” ๊ฐ€๊ฒฉ ์ƒํ•œ์„ ์ด ๋ช…์‹œ๋˜์–ด ์žˆ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์Šคํฌ๋ฆฝํŠธ ์ž์ฒด๋Š” ์•„๋ฌด ๋ง๋„ ํ•˜์ง€ ์•Š๊ณ  ์Šคํ† ์–ด๋ฅผ ์—ด์ง€๋„ ์•Š์Šต๋‹ˆ๋‹ค. ์ด ๊ทœ์น™์€ ๋ณ€๊ฒฝ/๋น„ํ™œ์„ฑํ™”ํ•  ๋•Œ๊นŒ์ง€ ํ›„์† ๋ฌธ์žฅ์— ๊ณ„์† ์ ์šฉ๋ฉ๋‹ˆ๋‹ค.
UO.Buy(0x0F7A);

2. ๋‹จ์ผ ๋งค์žฅ ์ œ์•ˆ์— ๋Œ€ํ•œ ์‹œ์•ฝ ๊ณต๊ธ‰ ์„ค์ • - ์Šคํฌ๋ฆฝํŠธ ๊ธฐ๋Šฅ

๋งค๊ฐœ๋ณ€์ˆ˜์™€ ์‹คํ–‰ ํ๋ฆ„:

  • 20 - ํ•œ ๋งค์žฅ ์‘๋‹ต์—์„œ ์ตœ๋Œ€๊ฐ’์ด๋ฉฐ, "์ˆ˜๋Ÿ‰์„ 20๋กœ ๊ฐ€์ ธ์˜ค์„ธ์š”"๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค. 5 โ€” ๋‹จ์œ„๋‹น ๊ฐ€๊ฒฉ, "Black Pearl" โ€” ์ œํ’ˆ ์ด๋ฆ„์˜ ํ•˜์œ„ ๋ฌธ์ž์—ด์ž…๋‹ˆ๋‹ค. ์„œ๋ฒ„๊ฐ€ ์‹œ์•ฝ์„ ๋‹ค๋ฅด๊ฒŒ ํ˜ธ์ถœํ•˜๋Š” ๊ฒฝ์šฐ ํ•„ํ„ฐ๋ฅผ ๋ณ€๊ฒฝํ•˜๊ฑฐ๋‚˜ ""๋ฅผ ์ „๋‹ฌํ•˜์‹ญ์‹œ์˜ค. ์ƒํ’ˆ ๋ถ€์กฑ, ๋ˆ ๋ฐ ์„œ๋ฒ„ ๊ทœ์น™์— ๋”ฐ๋ผ ๊ฒฐ๊ณผ๊ฐ€ ๊ฒฐ์ •๋ฉ๋‹ˆ๋‹ค.
return  RunScenario();
 object? RunScenario()
{
    UO.Buy(0x0F7A, 0, 20, 5, "Black Pearl");
    return null;
}

3. ๋‹ค๋ฅธ ๋ชฉ๋ก์„ ์žฌ์„ค์ •ํ•˜์ง€ ์•Š๊ณ  ์„ ํƒํ•œ ๊ทœ์น™ ์ œ๊ฑฐ - ์Šคํฌ๋ฆฝํŠธ ํด๋ž˜์Šค

๋งค๊ฐœ๋ณ€์ˆ˜์™€ ์‹คํ–‰ ํ๋ฆ„:

  • ์–ด์‹œ์Šคํ„ดํŠธ๋Š” graphic์„ ์ˆ˜๋ฝํ•ฉ๋‹ˆ๋‹ค. AnyHue๊ฐ€ ํฌํ•จ๋œ ๊ธฐ๋ณธ ๊ทœ์น™๋งŒ ์‚ญ์ œ๋ฉ๋‹ˆ๋‹ค. ๊ฐœ๋ณ„ ๊ทœ์น™ hue=0์€ ์œ ์ง€๋ฉ๋‹ˆ๋‹ค. ์ด๋ฏธ ์„œ๋ฒ„๋กœ ์ „์†ก๋œ ๊ฑฐ๋ž˜๋Š” ์ทจ์†Œ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ •ํ™•ํ•œ ์ƒ‰์ƒ์„ ์ œ๊ฑฐํ•˜๋ ค๋ฉด ๊ทœ์น™์„ ์ƒ์„ฑํ•œ ๊ฒƒ๊ณผ ๋™์ผํ•œ hue๋ฅผ ์ „๋‹ฌํ•˜์„ธ์š”.

Shop ๋ชฉ๋ก / ๊ตฌ๋งค ๋ฐ ํŒ๋งค ๋ชฉ๋ก

Shop ๋ชฉ๋ก / ๋งค์ˆ˜ ๋ฐ ๋งค๋„ ๋ชฉ๋ก

return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        DisableReagentRule(0x0F7A);
        DisableReagentRule(0x0F84);
        return null;
    }

    void DisableReagentRule(dynamic itemType)
    {
        UO.Buy(itemType, -1, 0);
    }
}

๋ช…๋ น ๊ตฌํ˜„

C#์€ ๋Œ€์†Œ๋ฌธ์ž๋ฅผ ๊ตฌ๋ถ„ํ•ฉ๋‹ˆ๋‹ค. ์ •ํ™•ํ•œ UO ์ด๋ฆ„์„ ์‚ฌ์šฉํ•˜์„ธ์š”. ์ˆซ์ž ํ”Œ๋ž˜๊ทธ๋Š” 0๊ณผ ๋น„๊ตํ•˜๊ณ  ๋ฐ˜ํ™˜ ํ˜•์‹์ด bool์ผ ๋•Œ๋งŒ bool์„ ์‚ฌ์šฉํ•˜์„ธ์š”.

UO.Buy(type) โ€” UO.Buy(Any)

๋งค๊ฐœ๋ณ€์ˆ˜: type (Any)

๊ฒฐ๊ณผ: void / Unit.

ํ˜ธ์ถœ ์‹œ:

๋‚ด๋ถ€ ๊ตฌํ˜„ ์ฝ”๋“œ์ด๋ฉฐ ๋…๋ฆฝ ์Šคํฌ๋ฆฝํŠธ๋กœ ์‹คํ–‰ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

case "buy":

                    bridge.SetAutoBuyRule(Arg(0), arguments.Length > 1 ? Arg(1) : -1, arguments.Length > 2 ? Arg(2) : 1, arguments.Length > 3 ? Arg(3) : 0, arguments.Length > 4 ? Text(4) : string.Empty);

                    break;

UO.Buy(type, color) โ€” UO.Buy(Any,Any)

๋งค๊ฐœ๋ณ€์ˆ˜: type (Any), color (Any)

๊ฒฐ๊ณผ: void / Unit.

ํ˜ธ์ถœ ์‹œ:

๋‚ด๋ถ€ ๊ตฌํ˜„ ์ฝ”๋“œ์ด๋ฉฐ ๋…๋ฆฝ ์Šคํฌ๋ฆฝํŠธ๋กœ ์‹คํ–‰ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

case "buy":

                    bridge.SetAutoBuyRule(Arg(0), arguments.Length > 1 ? Arg(1) : -1, arguments.Length > 2 ? Arg(2) : 1, arguments.Length > 3 ? Arg(3) : 0, arguments.Length > 4 ? Text(4) : string.Empty);

                    break;

UO.Buy(type, color, quantity) โ€” UO.Buy(Any,Any,Any)

๋งค๊ฐœ๋ณ€์ˆ˜: type (Any), color (Any), quantity (Any)

๊ฒฐ๊ณผ: void / Unit.

ํ˜ธ์ถœ ์‹œ:

๋‚ด๋ถ€ ๊ตฌํ˜„ ์ฝ”๋“œ์ด๋ฉฐ ๋…๋ฆฝ ์Šคํฌ๋ฆฝํŠธ๋กœ ์‹คํ–‰ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

case "buy":

                    bridge.SetAutoBuyRule(Arg(0), arguments.Length > 1 ? Arg(1) : -1, arguments.Length > 2 ? Arg(2) : 1, arguments.Length > 3 ? Arg(3) : 0, arguments.Length > 4 ? Text(4) : string.Empty);

                    break;

UO.Buy(type, color, quantity, maxPrice) โ€” UO.Buy(Any,Any,Any,Any)

๋งค๊ฐœ๋ณ€์ˆ˜: type (Any), color (Any), quantity (Any), maxPrice (Any)

๊ฒฐ๊ณผ: void / Unit.

ํ˜ธ์ถœ ์‹œ:

๋‚ด๋ถ€ ๊ตฌํ˜„ ์ฝ”๋“œ์ด๋ฉฐ ๋…๋ฆฝ ์Šคํฌ๋ฆฝํŠธ๋กœ ์‹คํ–‰ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

case "buy":

                    bridge.SetAutoBuyRule(Arg(0), arguments.Length > 1 ? Arg(1) : -1, arguments.Length > 2 ? Arg(2) : 1, arguments.Length > 3 ? Arg(3) : 0, arguments.Length > 4 ? Text(4) : string.Empty);

                    break;

UO.Buy(type, color, quantity, maxPrice, name) โ€” UO.Buy(Any,Any,Any,Any,Any)

๋งค๊ฐœ๋ณ€์ˆ˜: type (Any), color (Any), quantity (Any), maxPrice (Any), name (Any)

๊ฒฐ๊ณผ: void / Unit.

ํ˜ธ์ถœ ์‹œ:

๋‚ด๋ถ€ ๊ตฌํ˜„ ์ฝ”๋“œ์ด๋ฉฐ ๋…๋ฆฝ ์Šคํฌ๋ฆฝํŠธ๋กœ ์‹คํ–‰ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

case "buy":

                    bridge.SetAutoBuyRule(Arg(0), arguments.Length > 1 ? Arg(1) : -1, arguments.Length > 2 ? Arg(2) : 1, arguments.Length > 3 ? Arg(3) : 0, arguments.Length > 4 ? Text(4) : string.Empty);

                    break;

UO.ClearShopList

ะฃะบั€ะฐั—ะฝััŒะบะฐ ยท ะ ัƒััะบะธะน ยท English ยท Deutsch ยท Franรงais ยท Italiano ยท Espaรฑol ยท ็น้ซ”ไธญๆ–‡ ยท ๆ—ฅๆœฌ่ชž ยท ํ•œ๊ตญ์–ด

C# ์‹œ๊ทธ๋‹ˆ์ฒ˜

void UO.ClearShopList();

ํ™œ์„ฑ ํ”„๋กœํ•„์˜ ์ž๋™ ๊ตฌ๋งค ๋ฐ ํŒ๋งค ๊ทœ์น™์„ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค.

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

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

๋ฐ˜ํ™˜๊ฐ’

void - ๋ฐ˜ํ™˜ ๊ฐ’์ด ์—†์Šต๋‹ˆ๋‹ค.

๋™์ž‘

  • BackNewbieAutoBuyRules ๋ฐ BackNewbieAutoSellRules์„ ์ง€์šฐ๊ณ  ๊ณต์œ  AutoBuy/AutoSell๋ฅผ ๋„๊ณ  OptionsGump๋ฅผ ์—…๋ฐ์ดํŠธํ•˜๊ณ  ํ”„๋กœํ•„์„ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค. ์ „๋ฆฌํ’ˆ ๋ชฉ๋ก์€ ๋ณ€๊ฒฝ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ํ”„๋กœํ•„์ด ์—†์œผ๋ฉด ๋นˆ ์ž‘์—…์ด ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค.

๋…๋ฆฝ ์‹คํ–‰ C# ์Šคํฌ๋ฆฝํŠธ

๊ฐ ์˜ˆ์ œ๋Š” ๋ณ„๋„์˜ ํŒŒ์ผ .csx๋กœ ์ €์žฅํ•˜๊ณ  IDE์—์„œ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. UO ๊ฐœ์ฒด์™€ ๋Œ€๊ธฐ ๊ธฐ๋Šฅ์€ ํ˜„์žฌ ๊ฒŒ์ž„ ์„ธ์…˜์˜ ํ˜ธ์ŠคํŠธ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ๋ฐ๋ชจ serial ์ด๋ฆ„, ์ขŒํ‘œ, ์ฃผ์†Œ๋ฅผ ์ž์‹ ์˜ ๊ฒƒ์œผ๋กœ ๋ฐ”๊พธ์„ธ์š”.

๊ฐ„๋‹จํ•œ ์˜ˆ์ œ

์ด ์ฝ”๋“œ๋ฅผ ๋ณ„๋„์˜ .csx ํŒŒ์ผ๋กœ ์‹คํ–‰ํ•˜์„ธ์š”. ์ธ์ˆ˜๋Š” ํ˜ธ์ถœ์— ์ง์ ‘ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. ์˜ˆ์ œ์˜ ์ด๋ฆ„, serial, ์ฃผ์†Œ๋ฅผ ์ž์‹ ์˜ ๊ฐ’์œผ๋กœ ๋ฐ”๊พธ์„ธ์š”.

๋ช…๋ น์€ ๋…๋ฆฝ๋œ ๋ฌธ์ž…๋‹ˆ๋‹ค. ์•ž์˜ ๋ฉ”์‹œ์ง€๋Š” ํ˜ธ์ถœ ์‹œ์ž‘์„ ๋‚˜ํƒ€๋‚ด๋ฉฐ ์„œ๋ฒ„ ๋™์ž‘์˜ ์™„๋ฃŒ๋ฅผ ํ™•์ธํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

UO.Print("Calling UO.ClearShopList");
UO.ClearShopList();

1. ์ƒํƒœ ์ง€์šฐ๊ธฐ - ์ง์ ‘ ์Šคํฌ๋ฆฝํŠธ

๋งค๊ฐœ๋ณ€์ˆ˜์™€ ์‹คํ–‰ ํ๋ฆ„:

  • ํ™œ์„ฑ ํ”„๋กœํ•„์˜ ์ž๋™ ๊ตฌ๋งค ๋ฐ ํŒ๋งค ๊ทœ์น™์„ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค.
UO.ClearShopList();

2. ์„ค์ • ํ›„ ์ง€์šฐ๊ธฐ - ์Šคํฌ๋ฆฝํŠธ ๊ธฐ๋Šฅ

๋งค๊ฐœ๋ณ€์ˆ˜์™€ ์‹คํ–‰ ํ๋ฆ„:

  • ๋‚˜๋จธ์ง€ ๊ฑฐ๋ž˜ ๊ทœ์น™๊ณผ ํ•จ๊ป˜ ๋ถ•๋Œ€ ๊ตฌ๋งค ๊ทœ์น™์„ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค.
return  RunScenario();
 object? RunScenario()
{
    UO.AutoBuy(0x0E21, -1, 10);
    UO.ClearShopList();
    return null;
}

3. ์žฌ์ œ๊ฑฐ - ์Šคํฌ๋ฆฝํŠธ ํด๋ž˜์Šค

๋งค๊ฐœ๋ณ€์ˆ˜์™€ ์‹คํ–‰ ํ๋ฆ„:

  • ๋นˆ ์„ธํŠธ๋ฅผ ์ง€์šฐ๋Š” ๊ฒƒ์€ ํ—ˆ์šฉ๋˜๋ฉฐ ์ƒˆ ์„ค์ •์„ ์ƒ์„ฑํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

Shop ๋ชฉ๋ก / ๊ตฌ๋งค ๋ฐ ํŒ๋งค ๋ชฉ๋ก

Shop ๋ชฉ๋ก / ๋งค์ˆ˜ ๋ฐ ๋งค๋„ ๋ชฉ๋ก

return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        UO.ClearShopList();
        UO.ClearShopList();
        return null;
    }
}

๋ช…๋ น ๊ตฌํ˜„

C#์€ ๋Œ€์†Œ๋ฌธ์ž๋ฅผ ๊ตฌ๋ถ„ํ•ฉ๋‹ˆ๋‹ค. ์ •ํ™•ํ•œ UO ์ด๋ฆ„์„ ์‚ฌ์šฉํ•˜์„ธ์š”. ์ˆซ์ž ํ”Œ๋ž˜๊ทธ๋Š” 0๊ณผ ๋น„๊ตํ•˜๊ณ  ๋ฐ˜ํ™˜ ํ˜•์‹์ด bool์ผ ๋•Œ๋งŒ bool์„ ์‚ฌ์šฉํ•˜์„ธ์š”.

UO.ClearShopList() โ€” UO.ClearShopList()

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

๊ฒฐ๊ณผ: void / Unit.

ํ˜ธ์ถœ ์‹œ:

๋‚ด๋ถ€ ๊ตฌํ˜„ ์ฝ”๋“œ์ด๋ฉฐ ๋…๋ฆฝ ์Šคํฌ๋ฆฝํŠธ๋กœ ์‹คํ–‰ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

case "clearshoplist":

                    bridge.ClearAutoShopRules(); return InjectionValue.Unit;

UO.GetAutoBuyDelay

ะฃะบั€ะฐั—ะฝััŒะบะฐ ยท ะ ัƒััะบะธะน ยท English ยท Deutsch ยท Franรงais ยท Italiano ยท Espaรฑol ยท ็น้ซ”ไธญๆ–‡ ยท ๆ—ฅๆœฌ่ชž ยท ํ•œ๊ตญ์–ด

C# ์‹œ๊ทธ๋‹ˆ์ฒ˜

dynamic UO.GetAutoBuyDelay();

๊ณ ๊ฐ ํ”„๋กœํ•„์—์„œ ํ˜„์žฌ ์ž๋™ ๊ตฌ๋งค ์ง€์—ฐ์„ ์ฝ์Šต๋‹ˆ๋‹ค.

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

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

๋ฐ˜ํ™˜๊ฐ’

int โ€” ํ˜„์žฌ ์ง€์—ฐ(๋ฐ€๋ฆฌ์ดˆ)์ž…๋‹ˆ๋‹ค. setter๊ฐ€ ์“ฐ๋Š” ๊ฐ’์€ 0โ€ฆ65535๋กœ ์ œํ•œ๋ฉ๋‹ˆ๋‹ค. 0๋Š” ์ถ”๊ฐ€ ์ง€์—ฐ์ด ์—†์Œ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ์‹ค์ˆ˜๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค. ๋กœ๋“œ๋œ ํ”„๋กœํ•„์ด ์—†์œผ๋ฉด 3๊ฐ€ ๋ฐ˜ํ™˜๋ฉ๋‹ˆ๋‹ค. ์ฝ๊ธฐ๋Š” ํ•ญ๋ชฉ ์ˆ˜๋Ÿ‰์„ ๋ฐ˜ํ™˜ํ•˜๊ฑฐ๋‚˜ ๊ฑฐ๋ž˜๋ฅผ ํ™•์ธํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋™์ž‘

  • ์„ค์ •์€ ํ˜„์žฌ ํ”„๋กœํ•„์— ๋Œ€ํ•œ ์ผ๋ฐ˜์ ์ธ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ์Šคํฌ๋ฆฝํŠธ ๋˜๋Š” UI์˜ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์€ ๋‹ค์Œ์— ์ฝ์„ ๋•Œ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. 0์€ ์œ ํšจํ•œ ์„ค์ •์ด๋ฉฐ, ๋ฐ์ดํ„ฐ ๋ˆ„๋ฝ์˜ ์ง•ํ›„๊ฐ€ ์•„๋‹ˆ๋ฉฐ ์ด์ „ ์Šคํฌ๋ฆฝํŠธ ์บ์‹œ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ์ด์œ ๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค.
  • ๊ธฐ๋ณธ๊ฐ’์€ 3ms์ž…๋‹ˆ๋‹ค. ์ž๋™ ์ž‘์—…์„ ๋ณด๋‚ธ ํ›„ ๊ด€๋ฆฌ์ž๋Š” ๋‹ค์Œ ํ—ˆ์šฉ ์ž‘์—… ์‹œ๊ฐ„์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. ์ด์ „์— ๋„์ฐฉํ•œ ๊ณต๊ธ‰์—…์ฒด ๋ชฉ๋ก์€ ์ด ํŒจ์Šค๋กœ ์ฒ˜๋ฆฌ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. getter๋Š” ๋Œ€๊ธฐ๋ฅผ ํŠธ๋ฆฌ๊ฑฐํ•˜์ง€ ์•Š์œผ๋ฉฐ ๊ตฌ๋งค/ํŒ๋งค ์ž์ฒด๋ฅผ ๋ณด๋‚ด์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • ์ด๋Š” MassMove, Drag/Drop ๋˜๋Š” ์ˆ˜๋™ ๊ฑฐ๋ž˜์˜ ์ง€์—ฐ์ด ์•„๋‹™๋‹ˆ๋‹ค. ๋‹ค์Œ ์ง€์—ฐ์„ ์˜ˆ์•ฝํ•  ๋•Œ ์ƒˆ ๊ฐ’์ด ์ ์šฉ๋ฉ๋‹ˆ๋‹ค. ์ด๋ฏธ ํ• ๋‹น๋œ ์ˆœ๊ฐ„์€ ๋‹ค์‹œ ๊ณ„์‚ฐ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋…๋ฆฝ ์‹คํ–‰ C# ์Šคํฌ๋ฆฝํŠธ

๊ฐ ์˜ˆ์ œ๋Š” ๋ณ„๋„์˜ ํŒŒ์ผ .csx๋กœ ์ €์žฅํ•˜๊ณ  IDE์—์„œ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. UO ๊ฐœ์ฒด์™€ ๋Œ€๊ธฐ ๊ธฐ๋Šฅ์€ ํ˜„์žฌ ๊ฒŒ์ž„ ์„ธ์…˜์˜ ํ˜ธ์ŠคํŠธ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ๋ฐ๋ชจ serial ์ด๋ฆ„, ์ขŒํ‘œ, ์ฃผ์†Œ๋ฅผ ์ž์‹ ์˜ ๊ฒƒ์œผ๋กœ ๋ฐ”๊พธ์„ธ์š”.

๊ฐ„๋‹จํ•œ ์˜ˆ์ œ

์ด ์ฝ”๋“œ๋ฅผ ๋ณ„๋„์˜ .csx ํŒŒ์ผ๋กœ ์‹คํ–‰ํ•˜์„ธ์š”. ์ธ์ˆ˜๋Š” ํ˜ธ์ถœ์— ์ง์ ‘ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. ์˜ˆ์ œ์˜ ์ด๋ฆ„, serial, ์ฃผ์†Œ๋ฅผ ์ž์‹ ์˜ ๊ฐ’์œผ๋กœ ๋ฐ”๊พธ์„ธ์š”.

ํ•œ ๋ฒˆ์˜ ํ˜ธ์ถœ ๊ฒฐ๊ณผ๋ฅผ ์ €๋„์— ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค. ์ˆซ์ž๋ฅผ bool๋กœ ๋ณ€ํ™˜ํ•˜์ง€ ์•Š์œผ๋ฉฐ, ๋ฐฐ์—ด์ด๋ฉด ์š”์†Œ ์ˆ˜๋ฅผ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค.

object? result = UO.GetAutoBuyDelay();
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));

1. ํ˜„์žฌ ์ง€์—ฐ ํ‘œ์‹œ - ์ง์ ‘ ์Šคํฌ๋ฆฝํŠธ

๋งค๊ฐœ๋ณ€์ˆ˜์™€ ์‹คํ–‰ ํ๋ฆ„:

  • ๋…ผ์Ÿ์ด ์—†์Šต๋‹ˆ๋‹ค. ์ง€์—ฐ โ€” ๋ฐ€๋ฆฌ์ดˆ ๋‹จ์œ„์˜ ์‹œ๊ฐ„์ž…๋‹ˆ๋‹ค.
  • ๊ฐ’์€ ํ˜ธ์ถœ ๋‹น์‹œ์˜ ํ”„๋กœํ•„์„ ๋ฐ˜์˜ํ•ฉ๋‹ˆ๋‹ค. ์ €์žฅ๋œ var๋Š” ์ถ”ํ›„ ์—…๋ฐ์ดํŠธ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
var delay = UO.GetAutoBuyDelay();
UO.Print("Delay ms: " + Convert.ToString(delay));

2. ์„ค์ • ๋ณ€๊ฒฝ ๋ฐ ์ œํ•œ๊ฐ’ ์ฝ๊ธฐ - ์Šคํฌ๋ฆฝํŠธ ๊ธฐ๋Šฅ

๋งค๊ฐœ๋ณ€์ˆ˜์™€ ์‹คํ–‰ ํ๋ฆ„:

  • ์„ธํ„ฐ๋Š” 70000 ms๋ฅผ ์–ป์Šต๋‹ˆ๋‹ค. ํ—ˆ์šฉ๋˜๋Š” ์ตœ๋Œ€๊ฐ’์€ 65535์ž…๋‹ˆ๋‹ค. ์ด ์˜ˆ์—์„œ๋Š” ํ”„๋กœํ•„ ์„ค์ •์„ ๋ณ€๊ฒฝํ•ฉ๋‹ˆ๋‹ค.
  • ํ”„๋กœํ•„์ด ๋กœ๋“œ๋  ๋•Œ ์‹ค์ œ์—๋Š” 65535๊ฐ€ ํฌํ•จ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. Getter๋Š” ์›๋ž˜ ์ธ์ˆ˜ 70000 ๋Œ€์‹  ์‹ค์ œ ์ œํ•œ๋œ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
return  RunScenario();
 object? RunScenario()
{
    UO.SetAutoBuyDelay(70000);
    var actual = UO.GetAutoBuyDelay();
    UO.Print(Convert.ToString(actual));
    return null;
}

3. 0 ์ง€์—ฐ๊ณผ 0์ด ์•„๋‹Œ ์ง€์—ฐ ๊ตฌ๋ณ„ - ์‹œ๋‚˜๋ฆฌ์˜ค ํด๋ž˜์Šค

๋งค๊ฐœ๋ณ€์ˆ˜์™€ ์‹คํ–‰ ํ๋ฆ„:

  • 0์€ ๋ช…์‹œ์ ์œผ๋กœ ํ™•์ธ๋ฉ๋‹ˆ๋‹ค. ์ด ์˜ˆ์—์„œ๋Š” ํ”„๋กœํ•„์„ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • ๋Œ€๊ธฐ ์‹œ๊ฐ„์ด 0์ด๋ผ๊ณ  ํ•ด์„œ ์ž‘์—…์ด ์™„๋ฃŒ๋˜์—ˆ์Œ์„ ์˜๋ฏธํ•˜๋Š” ๊ฒƒ์€ ์•„๋‹™๋‹ˆ๋‹ค. ๊ฑฐ๋ž˜ ๊ฒฐ๊ณผ๋Š” ๊ฒŒ์ž„์˜ค๋ธŒ์ ํŠธ๋ฅผ ํ™•์ธํ•˜์„ธ์š”.
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        var current = UO.GetAutoBuyDelay();
        if (Truth(current == 0))
        {
            UO.Print("No additional delay");
        }
        else
        {
            UO.Print("Delay: " + Convert.ToString(current) + " ms");
        }

        return null;
    }

    bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
}

๋ช…๋ น ๊ตฌํ˜„

C#์€ ๋Œ€์†Œ๋ฌธ์ž๋ฅผ ๊ตฌ๋ถ„ํ•ฉ๋‹ˆ๋‹ค. ์ •ํ™•ํ•œ UO ์ด๋ฆ„์„ ์‚ฌ์šฉํ•˜์„ธ์š”. ์ˆซ์ž ํ”Œ๋ž˜๊ทธ๋Š” 0๊ณผ ๋น„๊ตํ•˜๊ณ  ๋ฐ˜ํ™˜ ํ˜•์‹์ด bool์ผ ๋•Œ๋งŒ bool์„ ์‚ฌ์šฉํ•˜์„ธ์š”.

UO.GetAutoBuyDelay() โ€” UO.GetAutoBuyDelay()

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

๊ฒฐ๊ณผ: dynamic / Any.

ํ˜ธ์ถœ ์‹œ:

๋‚ด๋ถ€ ๊ตฌํ˜„ ์ฝ”๋“œ์ด๋ฉฐ ๋…๋ฆฝ ์Šคํฌ๋ฆฝํŠธ๋กœ ์‹คํ–‰ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

case "getautobuydelay":

                    return new InjectionValue(bridge.GetAutoBuyDelay());

UO.GetAutoSellDelay

ะฃะบั€ะฐั—ะฝััŒะบะฐ ยท ะ ัƒััะบะธะน ยท English ยท Deutsch ยท Franรงais ยท Italiano ยท Espaรฑol ยท ็น้ซ”ไธญๆ–‡ ยท ๆ—ฅๆœฌ่ชž ยท ํ•œ๊ตญ์–ด

C# ์‹œ๊ทธ๋‹ˆ์ฒ˜

dynamic UO.GetAutoSellDelay();

๊ณ ๊ฐ ํ”„๋กœํ•„์—์„œ ํ˜„์žฌ ์ž๋™ ํŒ๋งค ์ง€์—ฐ์„ ์ฝ์Šต๋‹ˆ๋‹ค.

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

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

๋ฐ˜ํ™˜๊ฐ’

int โ€” ํ˜„์žฌ ์ง€์—ฐ(๋ฐ€๋ฆฌ์ดˆ)์ž…๋‹ˆ๋‹ค. setter๊ฐ€ ์“ฐ๋Š” ๊ฐ’์€ 0โ€ฆ65535๋กœ ์ œํ•œ๋ฉ๋‹ˆ๋‹ค. 0๋Š” ์ถ”๊ฐ€ ์ง€์—ฐ์ด ์—†์Œ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ์‹ค์ˆ˜๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค. ๋กœ๋“œ๋œ ํ”„๋กœํ•„์ด ์—†์œผ๋ฉด 3๊ฐ€ ๋ฐ˜ํ™˜๋ฉ๋‹ˆ๋‹ค. ์ฝ๊ธฐ๋Š” ํ•ญ๋ชฉ ์ˆ˜๋Ÿ‰์„ ๋ฐ˜ํ™˜ํ•˜๊ฑฐ๋‚˜ ๊ฑฐ๋ž˜๋ฅผ ํ™•์ธํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋™์ž‘

  • ์„ค์ •์€ ํ˜„์žฌ ํ”„๋กœํ•„์— ๋Œ€ํ•œ ์ผ๋ฐ˜์ ์ธ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ์Šคํฌ๋ฆฝํŠธ ๋˜๋Š” UI์˜ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์€ ๋‹ค์Œ์— ์ฝ์„ ๋•Œ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. 0์€ ์œ ํšจํ•œ ์„ค์ •์ด๋ฉฐ, ๋ฐ์ดํ„ฐ ๋ˆ„๋ฝ์˜ ์ง•ํ›„๊ฐ€ ์•„๋‹ˆ๋ฉฐ ์ด์ „ ์Šคํฌ๋ฆฝํŠธ ์บ์‹œ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ์ด์œ ๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค.
  • ๊ธฐ๋ณธ๊ฐ’์€ 3ms์ž…๋‹ˆ๋‹ค. ์ž๋™ ์ž‘์—…์„ ๋ณด๋‚ธ ํ›„ ๊ด€๋ฆฌ์ž๋Š” ๋‹ค์Œ ํ—ˆ์šฉ ์ž‘์—… ์‹œ๊ฐ„์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. ์ด์ „์— ๋„์ฐฉํ•œ ๊ณต๊ธ‰์—…์ฒด ๋ชฉ๋ก์€ ์ด ํŒจ์Šค๋กœ ์ฒ˜๋ฆฌ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. getter๋Š” ๋Œ€๊ธฐ๋ฅผ ํŠธ๋ฆฌ๊ฑฐํ•˜์ง€ ์•Š์œผ๋ฉฐ ๊ตฌ๋งค/ํŒ๋งค ์ž์ฒด๋ฅผ ๋ณด๋‚ด์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • ์ด๋Š” MassMove, Drag/Drop ๋˜๋Š” ์ˆ˜๋™ ๊ฑฐ๋ž˜์˜ ์ง€์—ฐ์ด ์•„๋‹™๋‹ˆ๋‹ค. ๋‹ค์Œ ์ง€์—ฐ์„ ์˜ˆ์•ฝํ•  ๋•Œ ์ƒˆ ๊ฐ’์ด ์ ์šฉ๋ฉ๋‹ˆ๋‹ค. ์ด๋ฏธ ํ• ๋‹น๋œ ์ˆœ๊ฐ„์€ ๋‹ค์‹œ ๊ณ„์‚ฐ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋…๋ฆฝ ์‹คํ–‰ C# ์Šคํฌ๋ฆฝํŠธ

๊ฐ ์˜ˆ์ œ๋Š” ๋ณ„๋„์˜ ํŒŒ์ผ .csx๋กœ ์ €์žฅํ•˜๊ณ  IDE์—์„œ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. UO ๊ฐœ์ฒด์™€ ๋Œ€๊ธฐ ๊ธฐ๋Šฅ์€ ํ˜„์žฌ ๊ฒŒ์ž„ ์„ธ์…˜์˜ ํ˜ธ์ŠคํŠธ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ๋ฐ๋ชจ serial ์ด๋ฆ„, ์ขŒํ‘œ, ์ฃผ์†Œ๋ฅผ ์ž์‹ ์˜ ๊ฒƒ์œผ๋กœ ๋ฐ”๊พธ์„ธ์š”.

๊ฐ„๋‹จํ•œ ์˜ˆ์ œ

์ด ์ฝ”๋“œ๋ฅผ ๋ณ„๋„์˜ .csx ํŒŒ์ผ๋กœ ์‹คํ–‰ํ•˜์„ธ์š”. ์ธ์ˆ˜๋Š” ํ˜ธ์ถœ์— ์ง์ ‘ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. ์˜ˆ์ œ์˜ ์ด๋ฆ„, serial, ์ฃผ์†Œ๋ฅผ ์ž์‹ ์˜ ๊ฐ’์œผ๋กœ ๋ฐ”๊พธ์„ธ์š”.

ํ•œ ๋ฒˆ์˜ ํ˜ธ์ถœ ๊ฒฐ๊ณผ๋ฅผ ์ €๋„์— ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค. ์ˆซ์ž๋ฅผ bool๋กœ ๋ณ€ํ™˜ํ•˜์ง€ ์•Š์œผ๋ฉฐ, ๋ฐฐ์—ด์ด๋ฉด ์š”์†Œ ์ˆ˜๋ฅผ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค.

object? result = UO.GetAutoSellDelay();
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));

1. ํ˜„์žฌ ์ง€์—ฐ ํ‘œ์‹œ - ์ง์ ‘ ์Šคํฌ๋ฆฝํŠธ

๋งค๊ฐœ๋ณ€์ˆ˜์™€ ์‹คํ–‰ ํ๋ฆ„:

  • ๋…ผ์Ÿ์ด ์—†์Šต๋‹ˆ๋‹ค. ์ง€์—ฐ โ€” ๋ฐ€๋ฆฌ์ดˆ ๋‹จ์œ„์˜ ์‹œ๊ฐ„์ž…๋‹ˆ๋‹ค.
  • ๊ฐ’์€ ํ˜ธ์ถœ ๋‹น์‹œ์˜ ํ”„๋กœํ•„์„ ๋ฐ˜์˜ํ•ฉ๋‹ˆ๋‹ค. ์ €์žฅ๋œ var๋Š” ์ถ”ํ›„ ์—…๋ฐ์ดํŠธ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
var delay = UO.GetAutoSellDelay();
UO.Print("Delay ms: " + Convert.ToString(delay));

2. ์„ค์ • ๋ณ€๊ฒฝ ๋ฐ ์ œํ•œ๊ฐ’ ์ฝ๊ธฐ - ์Šคํฌ๋ฆฝํŠธ ๊ธฐ๋Šฅ

๋งค๊ฐœ๋ณ€์ˆ˜์™€ ์‹คํ–‰ ํ๋ฆ„:

  • ์„ธํ„ฐ๋Š” 70000 ms๋ฅผ ์–ป์Šต๋‹ˆ๋‹ค. ํ—ˆ์šฉ๋˜๋Š” ์ตœ๋Œ€๊ฐ’์€ 65535์ž…๋‹ˆ๋‹ค. ์ด ์˜ˆ์—์„œ๋Š” ํ”„๋กœํ•„ ์„ค์ •์„ ๋ณ€๊ฒฝํ•ฉ๋‹ˆ๋‹ค.
  • ํ”„๋กœํ•„์ด ๋กœ๋“œ๋  ๋•Œ ์‹ค์ œ์—๋Š” 65535๊ฐ€ ํฌํ•จ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. Getter๋Š” ์›๋ž˜ ์ธ์ˆ˜ 70000 ๋Œ€์‹  ์‹ค์ œ ์ œํ•œ๋œ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
return  RunScenario();
 object? RunScenario()
{
    UO.SetAutoSellDelay(70000);
    var actual = UO.GetAutoSellDelay();
    UO.Print(Convert.ToString(actual));
    return null;
}

3. 0 ์ง€์—ฐ๊ณผ 0์ด ์•„๋‹Œ ์ง€์—ฐ ๊ตฌ๋ณ„ - ์‹œ๋‚˜๋ฆฌ์˜ค ํด๋ž˜์Šค

๋งค๊ฐœ๋ณ€์ˆ˜์™€ ์‹คํ–‰ ํ๋ฆ„:

  • 0์€ ๋ช…์‹œ์ ์œผ๋กœ ํ™•์ธ๋ฉ๋‹ˆ๋‹ค. ์ด ์˜ˆ์—์„œ๋Š” ํ”„๋กœํ•„์„ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • ๋Œ€๊ธฐ ์‹œ๊ฐ„์ด 0์ด๋ผ๊ณ  ํ•ด์„œ ์ž‘์—…์ด ์™„๋ฃŒ๋˜์—ˆ์Œ์„ ์˜๋ฏธํ•˜๋Š” ๊ฒƒ์€ ์•„๋‹™๋‹ˆ๋‹ค. ๊ฑฐ๋ž˜ ๊ฒฐ๊ณผ๋Š” ๊ฒŒ์ž„์˜ค๋ธŒ์ ํŠธ๋ฅผ ํ™•์ธํ•˜์„ธ์š”.
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        var current = UO.GetAutoSellDelay();
        if (Truth(current == 0))
        {
            UO.Print("No additional delay");
        }
        else
        {
            UO.Print("Delay: " + Convert.ToString(current) + " ms");
        }

        return null;
    }

    bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
}

๋ช…๋ น ๊ตฌํ˜„

C#์€ ๋Œ€์†Œ๋ฌธ์ž๋ฅผ ๊ตฌ๋ถ„ํ•ฉ๋‹ˆ๋‹ค. ์ •ํ™•ํ•œ UO ์ด๋ฆ„์„ ์‚ฌ์šฉํ•˜์„ธ์š”. ์ˆซ์ž ํ”Œ๋ž˜๊ทธ๋Š” 0๊ณผ ๋น„๊ตํ•˜๊ณ  ๋ฐ˜ํ™˜ ํ˜•์‹์ด bool์ผ ๋•Œ๋งŒ bool์„ ์‚ฌ์šฉํ•˜์„ธ์š”.

UO.GetAutoSellDelay() โ€” UO.GetAutoSellDelay()

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

๊ฒฐ๊ณผ: dynamic / Any.

ํ˜ธ์ถœ ์‹œ:

๋‚ด๋ถ€ ๊ตฌํ˜„ ์ฝ”๋“œ์ด๋ฉฐ ๋…๋ฆฝ ์Šคํฌ๋ฆฝํŠธ๋กœ ์‹คํ–‰ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

case "getautoselldelay":

                    return new InjectionValue(bridge.GetAutoSellDelay());

UO.GetPrice

ะฃะบั€ะฐั—ะฝััŒะบะฐ ยท ะ ัƒััะบะธะน ยท English ยท Deutsch ยท Franรงais ยท Italiano ยท Espaรฑol ยท ็น้ซ”ไธญๆ–‡ ยท ๆ—ฅๆœฌ่ชž ยท ํ•œ๊ตญ์–ด

C# ์‹œ๊ทธ๋‹ˆ์ฒ˜

dynamic UO.GetPrice(object? objID);

serial ํ•ญ๋ชฉ์— ๋Œ€ํ•ด ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ์•Œ๋ ค์ง„ Item.Price๋ฅผ ์ฝ์Šต๋‹ˆ๋‹ค.

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

  • objID โ€” self/backpack/lasttarget/์ €์žฅ๋œ ๊ฐ์ฒด์˜ ๊ฐ์ฒด ์ผ๋ จ๋ฒˆํ˜ธ ๋˜๋Š” ์ง€์›๋˜๋Š” ์ด๋ฆ„์ž…๋‹ˆ๋‹ค. ์ˆซ์ž ๋ฌธ์ž์—ด๊ณผ 0x ๋ฌธ์ž์—ด์€ ๋Ÿฐํƒ€์ž„์— ์˜ํ•ด ํ•ด๊ฒฐ๋ฉ๋‹ˆ๋‹ค.

๋ฐ˜ํ™˜๊ฐ’

int โ€” uint Item.Price๊ฐ€ int๋กœ ๋ณ€ํ™˜๋˜๋Š”์ง€ ํ™•์ธ๋˜์ง€ ์•Š์Œ. ๋ˆ„๋ฝ๋œ ํ•ญ๋ชฉ์€ 0๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. 2147483647 ์ด์ƒ์˜ ๊ฐ€๊ฒฉ์€ ์Œ์ˆ˜ int๋กœ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

๋™์ž‘

  • ํŒ€์€ ๋ฒค๋” ์ œ์•ˆ์„ ์š”์ฒญํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ฐ’์€ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ด์ „์— ์ˆ˜์‹ ํ•œ ๋ฐ์ดํ„ฐ์— ๋”ฐ๋ผ ๋‹ฌ๋ผ์ง‘๋‹ˆ๋‹ค. 0์€ ๊ฐ€๊ฒฉ์„ ์•Œ ์ˆ˜ ์—†๊ฑฐ๋‚˜ ๊ฐ€๊ฒฉ์ด 0์ด๊ฑฐ๋‚˜ ํ’ˆ๋ชฉ์ด ์—†์Œ์„ ๋‚˜ํƒ€๋‚ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐ์ฒด๋ฅผ ํ…Œ์ŠคํŠธํ•˜๋ ค๋ฉด Exists๋ฅผ ์‚ฌ์šฉํ•˜์„ธ์š”.

๋…๋ฆฝ ์‹คํ–‰ C# ์Šคํฌ๋ฆฝํŠธ

๊ฐ ์˜ˆ์ œ๋Š” ๋ณ„๋„์˜ ํŒŒ์ผ .csx๋กœ ์ €์žฅํ•˜๊ณ  IDE์—์„œ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. UO ๊ฐœ์ฒด์™€ ๋Œ€๊ธฐ ๊ธฐ๋Šฅ์€ ํ˜„์žฌ ๊ฒŒ์ž„ ์„ธ์…˜์˜ ํ˜ธ์ŠคํŠธ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ๋ฐ๋ชจ serial ์ด๋ฆ„, ์ขŒํ‘œ, ์ฃผ์†Œ๋ฅผ ์ž์‹ ์˜ ๊ฒƒ์œผ๋กœ ๋ฐ”๊พธ์„ธ์š”.

๊ฐ„๋‹จํ•œ ์˜ˆ์ œ

์ด ์ฝ”๋“œ๋ฅผ ๋ณ„๋„์˜ .csx ํŒŒ์ผ๋กœ ์‹คํ–‰ํ•˜์„ธ์š”. ์ธ์ˆ˜๋Š” ํ˜ธ์ถœ์— ์ง์ ‘ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. ์˜ˆ์ œ์˜ ์ด๋ฆ„, serial, ์ฃผ์†Œ๋ฅผ ์ž์‹ ์˜ ๊ฐ’์œผ๋กœ ๋ฐ”๊พธ์„ธ์š”.

ํ•œ ๋ฒˆ์˜ ํ˜ธ์ถœ ๊ฒฐ๊ณผ๋ฅผ ์ €๋„์— ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค. ์ˆซ์ž๋ฅผ bool๋กœ ๋ณ€ํ™˜ํ•˜์ง€ ์•Š์œผ๋ฉฐ, ๋ฐฐ์—ด์ด๋ฉด ์š”์†Œ ์ˆ˜๋ฅผ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค.

object? result = UO.GetPrice(UO.LastTarget());
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));

1. ์„ ํƒํ•œ ํ•ญ๋ชฉ์˜ ๊ฐ€๊ฒฉ - ์ง์ ‘ ์Šคํฌ๋ฆฝํŠธ

๋งค๊ฐœ๋ณ€์ˆ˜์™€ ์‹คํ–‰ ํ๋ฆ„:

  • ๊ฒฐ๊ณผ๋Š” ์บ์‹œ๋œ Item.Price์ž…๋‹ˆ๋‹ค.
var item = UO.LastTarget();
if (Truth(UO.Exists(item)))
{
    var price = UO.GetPrice(item);
    UO.Print(Convert.ToString(price));
}

bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;

2. Zero serial โ€“ ์Šคํฌ๋ฆฝํŠธ ๊ธฐ๋Šฅ

๋งค๊ฐœ๋ณ€์ˆ˜์™€ ์‹คํ–‰ ํ๋ฆ„:

  • ๋ˆ„๋ฝ๋œ ํ•ญ๋ชฉ์€ 0๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
return  RunScenario();
 object? RunScenario()
{
    var price = UO.GetPrice(0);
    UO.Print(Convert.ToString(price));
    return null;
}

3. ๊ฐ€๊ฒฉ ์Šค๋ƒ…์ƒท - ์Šคํฌ๋ฆฝํŠธ ํด๋ž˜์Šค

๋งค๊ฐœ๋ณ€์ˆ˜์™€ ์‹คํ–‰ ํ๋ฆ„:

  • ์ƒˆ๋กœ์šด ํ˜ธ์ถœ๋งŒ์ด ๋ชจ๋ธ์„ ๋‹ค์‹œ ์ฝ์Šต๋‹ˆ๋‹ค. ์ผ์‹œ ์ค‘์ง€ ์ž์ฒด๋Š” ๊ฐ€๊ฒฉ์„ ์š”๊ตฌํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

    async public Task<object?> RunScenarioAsync()
    {
        var item = UO.LastTarget();
        var before = UO.GetPrice(item);
        await Delay(500);
        var after = UO.GetPrice(item);
        UO.Print(Convert.ToString(before) + " " + Convert.ToString(after));
        return null;
    }

    Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));
}

๋ช…๋ น ๊ตฌํ˜„

C#์€ ๋Œ€์†Œ๋ฌธ์ž๋ฅผ ๊ตฌ๋ถ„ํ•ฉ๋‹ˆ๋‹ค. ์ •ํ™•ํ•œ UO ์ด๋ฆ„์„ ์‚ฌ์šฉํ•˜์„ธ์š”. ์ˆซ์ž ํ”Œ๋ž˜๊ทธ๋Š” 0๊ณผ ๋น„๊ตํ•˜๊ณ  ๋ฐ˜ํ™˜ ํ˜•์‹์ด bool์ผ ๋•Œ๋งŒ bool์„ ์‚ฌ์šฉํ•˜์„ธ์š”.

UO.GetPrice(objID) โ€” UO.GetPrice(Any)

๋งค๊ฐœ๋ณ€์ˆ˜: objID (Any)

๊ฒฐ๊ณผ: dynamic / Any.

ํ˜ธ์ถœ ์‹œ:

๋‚ด๋ถ€ ๊ตฌํ˜„ ์ฝ”๋“œ์ด๋ฉฐ ๋…๋ฆฝ ์Šคํฌ๋ฆฝํŠธ๋กœ ์‹คํ–‰ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

case "getprice":

                    return new InjectionValue(bridge.GetPrice(Arg(0)));

UO.GetShopList

ะฃะบั€ะฐั—ะฝััŒะบะฐ ยท ะ ัƒััะบะธะน ยท English ยท Deutsch ยท Franรงais ยท Italiano ยท Espaรฑol ยท ็น้ซ”ไธญๆ–‡ ยท ๆ—ฅๆœฌ่ชž ยท ํ•œ๊ตญ์–ด

C# ์‹œ๊ทธ๋‹ˆ์ฒ˜

dynamic UO.GetShopList();

NPC ํŒ๋งค์ž์˜ ๋งˆ์ง€๋ง‰ ํ™œ์„ฑ ์ œ์•ˆ ์ œํ’ˆ์„ ์ฝ์Šต๋‹ˆ๋‹ค. ๋งค์ˆ˜, ๋งค๋„ ์ „ ์ข…๋ฅ˜, ์ˆ˜๋Ÿ‰, ๊ฐ€๊ฒฉ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

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

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

๋ฐ˜ํ™˜๊ฐ’

string ๋ฐฐ์—ด โ€” ๋ฌธ์ž์—ด ๋ฐฐ์—ด, 0์˜ ์ธ๋ฑ์Šค. ๊ฐ ์ค„: serial|graphic|hue|๊ธˆ์•ก|๊ฐ€๊ฒฉ|์ด๋ฆ„. ์ผ๋ จ๋ฒˆํ˜ธ - ID ํŠน์ • ์œ„์น˜, graphic - ์œ ํ˜•, hue - ์ƒ‰์ƒ; ์ฒ˜์Œ ์„ธ ํ•„๋“œ๋Š” 0x ํ˜•์‹์œผ๋กœ ์ž‘์„ฑ๋ฉ๋‹ˆ๋‹ค. ๊ธˆ์•ก โ€” ์ฐฝ์˜ ์ดˆ์•ˆ์„ ๋บ€ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๋‹จ์œ„, ๊ฐ€๊ฒฉ โ€” ํ•œ ๋‹จ์œ„์˜ ๊ฐ€๊ฒฉ, ์ด๋ฆ„ โ€” ์ด๋ฆ„. ์ด๊ฒƒ์€ serial ๋ชฉ๋ก๋„ ์•„๋‹ˆ๊ณ  bool ๋ชฉ๋ก๋„ ์•„๋‹™๋‹ˆ๋‹ค. ์ œ์•ˆ์ด ์—†์œผ๋ฉด ๋ฐฐ์—ด์€ ๋น„์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฆ„์—๋Š” |๊ฐ€ ํฌํ•จ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ฒ˜์Œ 5๊ฐœ์˜ ๊ตฌ๋ถ„ ๊ธฐํ˜ธ๋Š” ํ•„๋“œ๋ฅผ ์ •์˜ํ•˜๊ณ  ๋‚˜๋จธ์ง€๋Š” ์ด๋ฆ„์ž…๋‹ˆ๋‹ค.

๋™์ž‘

  • ๋จผ์ € ์ผ๋ฐ˜์ ์ธ ๊ฒŒ์ž„ ๋™์ž‘์œผ๋กœ ์›ํ•˜๋Š” NPC์—์„œ ๊ตฌ๋งค ๋˜๋Š” ํŒ๋งค๋ฅผ ์—ด๊ณ  ์„œ๋ฒ„๊ฐ€ ์ œ๊ณตํ•  ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆฝ๋‹ˆ๋‹ค. ์ด ํŒ€ ์ž์ฒด๋Š” ํŒ๋งค์ž๋ฅผ ์ฐพ์ง€ ์•Š์œผ๋ฉฐ, ๊ฑฐ๋ž˜๋ฅผ ์‹œ์ž‘ํ•˜์ง€ ์•Š์œผ๋ฉฐ, ๊ฐœ์ธ ๊ณต๊ธ‰์—…์ฒด์— ๊ฐ€๊ฒฉ์„ ์„ค์ •ํ•˜์ง€ ์•Š์œผ๋ฉฐ, ์ƒ์ž ๊ฐ„์— ํ•ญ๋ชฉ์„ ์ด๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ํŒ๋งค์ž์˜ ID์€ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ „๋‹ฌ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์—ฌ๋Ÿฌ ์ œ์•ˆ์ด ์žˆ๋Š” ๊ฒฝ์šฐ ๋งˆ์ง€๋ง‰ ์ œ์•ˆ์ด ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.
  • ๊ด€๋ฆฌ์ž์—์„œ ์ œ์•ˆ์€ ๊ฒŒ์ž„ ์„ธ์…˜์— ์ €์žฅ๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋ž˜ํ”ฝ ํด๋ผ์ด์–ธํŠธ๋ฅผ ๋‹ซ์œผ๋ฉด ์ œ์•ˆ์„œ์™€ ์ดˆ์•ˆ์ด ์ €์žฅ๋˜๊ณ , ์—ด๋ฉด ์ฐฝ์ด ๋ณต์›๋ฉ๋‹ˆ๋‹ค. ์ƒ์  ์ž์ฒด๋ฅผ ๋‹ซ๊ฑฐ๋‚˜ ์‘๋‹ตํ•˜๊ฑฐ๋‚˜ ์„œ๋ฒ„๋ฅผ ๋‹ซ๊ฑฐ๋‚˜ ์—ฐ๊ฒฐ์„ ๋Š์œผ๋ฉด ์ œ์•ˆ์ด ์ œ๊ฑฐ๋ฉ๋‹ˆ๋‹ค. ์ž๋™ ๊ตฌ๋งค/์ž๋™ ํŒ๋งค Bad Newbie๋Š” ์Šคํฌ๋ฆฝํŠธ ์ „์— ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์ฝ๊ธฐ์—์„œ๋Š” ์„œ๋ฒ„์— ์š”์ฒญ์„ ๋ณด๋‚ด์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ด๋Š” ์ด๋ฏธ ๋ฐ›์€ ๊ณต๊ธ‰์˜ ์Šค๋ƒ…์ƒท์ด๋ฉฐ NPC์˜ ํ˜„์žฌ ์žฌ๊ณ ๋ฅผ ๋ณด์žฅํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹™๋‹ˆ๋‹ค. ์ˆ˜๋Ÿ‰ ํ•„๋“œ๋Š” ํ–‰/์Šคํƒ ์ˆ˜๊ฐ€ ์•„๋‹Œ ๋‹จ์œ„๋ฅผ ๋ฐ˜์˜ํ•ฉ๋‹ˆ๋‹ค. ArrayLength(ํ–‰)์€ ์œ„์น˜๋ฅผ ๊ณ„์‚ฐํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ ๊ฐ€๊ฒฉ์€ GetShopList์ž…๋‹ˆ๋‹ค. SendShopReply๋Š” ๊ฐ€๊ฒฉ์„ ๋ฐ›์•„๋“ค์ด์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • ๋ช…์‹œ์  ๋ชฉ๋ก์€ ์ดˆ์•ˆ์„ ๋Œ€์ฒดํ•˜๋ฉฐ ์ถ”๊ฐ€๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ํ•˜๋‚˜๋ฅผ ๋ฐ˜๋ณตํ•˜๋ฉด serial ์ˆ˜๋Ÿ‰์ด ์ถ”๊ฐ€๋ฉ๋‹ˆ๋‹ค. ์ด ๊ธˆ์•ก์€ ์ œ์•ˆ์— ํฌํ•จ๋œ ํ’ˆ๋ชฉ์˜ ์ด ์ˆ˜๋Ÿ‰์— ๋”ฐ๋ผ ์ œํ•œ๋ฉ๋‹ˆ๋‹ค. ์•Œ ์ˆ˜ ์—†๋Š” serial, ์ˆ˜๋Ÿ‰์ด ๋ถ€์ •ํ™•ํ•˜๊ฑฐ๋‚˜ ์–‘์ˆ˜๊ฐ€ ์•„๋‹Œ ๊ฒฝ์šฐ ์ œ์ถœํ•˜๊ธฐ ์ „์— ์ „์ฒด ์‘๋‹ต์„ ๊ฑฐ๋ถ€ํ•˜๊ณ  ์ œ์•ˆ์„ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค. ๋ฌธ์žฅ์ด ์—†์œผ๋ฉด SendShopReply๋Š” ์˜ค๋ฅ˜๋ฅผ ๋ณด๊ณ ํ•ฉ๋‹ˆ๋‹ค. "0" ์ค„์€ ์‹คํ–‰ ์ทจ์†Œ ๋ช…๋ น์ด ์•„๋‹™๋‹ˆ๋‹ค. ์‚ฌ์šฉ "".

๋…๋ฆฝ ์‹คํ–‰ C# ์Šคํฌ๋ฆฝํŠธ

๊ฐ ์˜ˆ์ œ๋Š” ๋ณ„๋„์˜ ํŒŒ์ผ .csx๋กœ ์ €์žฅํ•˜๊ณ  IDE์—์„œ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. UO ๊ฐœ์ฒด์™€ ๋Œ€๊ธฐ ๊ธฐ๋Šฅ์€ ํ˜„์žฌ ๊ฒŒ์ž„ ์„ธ์…˜์˜ ํ˜ธ์ŠคํŠธ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ๋ฐ๋ชจ serial ์ด๋ฆ„, ์ขŒํ‘œ, ์ฃผ์†Œ๋ฅผ ์ž์‹ ์˜ ๊ฒƒ์œผ๋กœ ๋ฐ”๊พธ์„ธ์š”.

๊ฐ„๋‹จํ•œ ์˜ˆ์ œ

์ด ์ฝ”๋“œ๋ฅผ ๋ณ„๋„์˜ .csx ํŒŒ์ผ๋กœ ์‹คํ–‰ํ•˜์„ธ์š”. ์ธ์ˆ˜๋Š” ํ˜ธ์ถœ์— ์ง์ ‘ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. ์˜ˆ์ œ์˜ ์ด๋ฆ„, serial, ์ฃผ์†Œ๋ฅผ ์ž์‹ ์˜ ๊ฐ’์œผ๋กœ ๋ฐ”๊พธ์„ธ์š”.

ํ•œ ๋ฒˆ์˜ ํ˜ธ์ถœ ๊ฒฐ๊ณผ๋ฅผ ์ €๋„์— ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค. ์ˆซ์ž๋ฅผ bool๋กœ ๋ณ€ํ™˜ํ•˜์ง€ ์•Š์œผ๋ฉฐ, ๋ฐฐ์—ด์ด๋ฉด ์š”์†Œ ์ˆ˜๋ฅผ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค.

object? result = UO.GetShopList();
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));

1. ์ฒซ ๋ฒˆ์งธ ์œ„์น˜ ๊ตฌ๋ฌธ ๋ถ„์„ - ์ง์ ‘ ์Šคํฌ๋ฆฝํŠธ

๋งค๊ฐœ๋ณ€์ˆ˜์™€ ์‹คํ–‰ ํ๋ฆ„:

  • GetWord๋Š” 0์˜ ์ƒ‰์ธ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค: 0 - serial, 1 - graphic, 2 - hue, 3 - ์ˆ˜๋Ÿ‰, 4 - ๊ฐ€๊ฒฉ. ํ–‰[0] ์ด์ „์— ๋ฐฐ์—ด์˜ ๊ธธ์ด๊ฐ€ ํ™•์ธ๋ฉ๋‹ˆ๋‹ค.
var rows = UO.GetShopList();
if (Truth(ArrayLength(rows) == 0))
{
    return null;
}
var serial = ReadField(rows[0], 0, "|");
var itemType = ReadField(rows[0], 1, "|");
var amount = Convert.ToInt32(ReadField(rows[0], 3, "|"));
var price = Convert.ToDouble(ReadField(rows[0], 4, "|"));
UO.Print(serial + " / " + itemType + " / " + Convert.ToString(amount) + " / " + Convert.ToString(price));

int ArrayLength(object? value) => value is System.Array array ? array.Length : 0;
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;

string ReadField(object? row, int index, string separator) { string[] fields = (Convert.ToString(row) ?? "").Split(new[] { separator }, StringSplitOptions.None); return index >= 0 && index < fields.Length ? fields[index] : ""; }

2. ๋ถ•๋Œ€๋ฅผ ์ตœ๋Œ€ 10๊ฐœ๊นŒ์ง€ ํ•œ์ • ๊ฐ€๊ฒฉ์œผ๋กœ ๊ตฌ๋งค - ์Šคํฌ๋ฆฝํŠธ ๊ธฐ๋Šฅ

๋งค๊ฐœ๋ณ€์ˆ˜์™€ ์‹คํ–‰ ํ๋ฆ„:

  • ์‚ฌ์ „ ์˜คํ”ˆ ๊ตฌ๋งค ์ œ์•ˆ์—๋งŒ ํ•ด๋‹น๋ฉ๋‹ˆ๋‹ค. 0x0E21 โ€” ๋ถ•๋Œ€, 5 โ€” ์ตœ๋Œ€ ๋‹จ๊ฐ€, 10 โ€” ํ•„์ˆ˜ ์ˆ˜๋Ÿ‰. ์ฒซ ๋ฒˆ์งธ ์ ์ ˆํ•œ ์œ„์น˜๋ฅผ ์ฐจ์ง€ํ•ฉ๋‹ˆ๋‹ค. ๋ฌธ์žฅ์—์„œ ์ •ํ™•ํ•œ serial๋ฅผ ์ฝ์Šต๋‹ˆ๋‹ค. ์ฝ”๋“œ๋Š” ๊ตฌ๋งค ์ž์ฒด๋ฅผ ์‹œ์ž‘ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
return  RunScenario();
 object? RunScenario()
{
    var rows = UO.GetShopList();
    for (int i = (int)(0); i <= ArrayLength(rows) - 1; i += (int)(1))
    {
        var row = rows[i];
        if (Truth(ReadField(row, 1, "|") == "0x0E21"))
        {
            var price = Convert.ToDouble(ReadField(row, 4, "|"));
            var amount = Convert.ToInt32(ReadField(row, 3, "|"));
            if (Truth(price > 0) && Truth(price <= 5) && Truth(amount > 0))
            {
                if (Truth(amount > 10))
                {
                    amount = 10;
                }

                UO.SendShopReply(ReadField(row, 0, "|") + ":" + Convert.ToString(amount));
                return null;
            }
        }
    }

    return null;
}

int ArrayLength(object? value) => value is System.Array array ? array.Length : 0;
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
string ReadField(object? row, int index, string separator)
{
    string[] fields = (Convert.ToString(row) ?? "").Split(new[] { separator }, StringSplitOptions.None);
    return index >= 0 && index < fields.Length ? fields[index] : "";
}

3. ์„ ํƒํ•œ ์œ ํ˜•์˜ ๊ฐ€์šฉ ์žฌ๊ณ  ๊ณ„์‚ฐ - ์‹œ๋‚˜๋ฆฌ์˜ค ํด๋ž˜์Šค

๋งค๊ฐœ๋ณ€์ˆ˜์™€ ์‹คํ–‰ ํ๋ฆ„:

  • ๋ณด์กฐ ๊ธฐ๋Šฅ์€ ์ „์ฒด์ ์œผ๋กœ ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค. ์ง€์ •๋œ ์œ ํ˜•์˜ ๋ชจ๋“  ์œ„์น˜์˜ ๊ธˆ์•ก ํ•„๋“œ๋ฅผ ํ•ฉ์‚ฐํ•ฉ๋‹ˆ๋‹ค. ์ ˆ์ด ๋น„์–ด ์žˆ์œผ๋ฉด 0๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ์บ๋ฆญํ„ฐ์˜ ๋™๋ฌผ์ด๋‚˜ ์•„์ดํ…œ ์ˆ˜๊ฐ€ ์•„๋‹Œ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์œ ๋‹› ์ˆ˜์ž…๋‹ˆ๋‹ค.

Shop ๋ชฉ๋ก / ๊ตฌ๋งค ๋ฐ ํŒ๋งค ๋ชฉ๋ก

Shop ๋ชฉ๋ก / ๋งค์ˆ˜ ๋ฐ ๋งค๋„ ๋ชฉ๋ก

return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        var available = CountOfferedType("0x0E21");
        if (Truth(available < 10))
        {
            UO.Print("Bandage stock below 10: " + Convert.ToString(available));
        }

        return null;
    }

    dynamic CountOfferedType(dynamic itemType)
    {
        var total = 0;
        var rows = UO.GetShopList();
        for (int i = (int)(0); i <= ArrayLength(rows) - 1; i += (int)(1))
        {
            if (Truth(ReadField(rows[i], 1, "|") == itemType))
            {
                total = total + Convert.ToInt32(ReadField(rows[i], 3, "|"));
            }
        }

        return total;
    }

    int ArrayLength(object? value) => value is System.Array array ? array.Length : 0;
    bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
    string ReadField(object? row, int index, string separator)
    {
        string[] fields = (Convert.ToString(row) ?? "").Split(new[] { separator }, StringSplitOptions.None);
        return index >= 0 && index < fields.Length ? fields[index] : "";
    }
}

๋ช…๋ น ๊ตฌํ˜„

C#์€ ๋Œ€์†Œ๋ฌธ์ž๋ฅผ ๊ตฌ๋ถ„ํ•ฉ๋‹ˆ๋‹ค. ์ •ํ™•ํ•œ UO ์ด๋ฆ„์„ ์‚ฌ์šฉํ•˜์„ธ์š”. ์ˆซ์ž ํ”Œ๋ž˜๊ทธ๋Š” 0๊ณผ ๋น„๊ตํ•˜๊ณ  ๋ฐ˜ํ™˜ ํ˜•์‹์ด bool์ผ ๋•Œ๋งŒ bool์„ ์‚ฌ์šฉํ•˜์„ธ์š”.

UO.GetShopList() โ€” UO.GetShopList()

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

๊ฒฐ๊ณผ: dynamic / Any.

ํ˜ธ์ถœ ์‹œ:

๋‚ด๋ถ€ ๊ตฌํ˜„ ์ฝ”๋“œ์ด๋ฉฐ ๋…๋ฆฝ ์Šคํฌ๋ฆฝํŠธ๋กœ ์‹คํ–‰ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

public InjectionValue GetShopList()

            => new InjectionValue((bridge.GetShopList() ?? Array.Empty<string>()).Select(item => new InjectionValue(item)).ToArray());

UO.MassPriceMove

ะฃะบั€ะฐั—ะฝััŒะบะฐ ยท ะ ัƒััะบะธะน ยท English ยท Deutsch ยท Franรงais ยท Italiano ยท Espaรฑol ยท ็น้ซ”ไธญๆ–‡ ยท ๆ—ฅๆœฌ่ชž ยท ํ•œ๊ตญ์–ด

C# ์‹œ๊ทธ๋‹ˆ์ฒ˜

void UO.MassPriceMove();
void UO.MassPriceMove(object? delay, object? quantity, object? @type, object? price);
void UO.MassPriceMove(object? delay, object? quantity, object? @type, object? price, object? destination);
void UO.MassPriceMove(object? delay, object? quantity, object? @type, object? price, object? destination, object? x, object? y, object? z);

๊ณต๊ธ‰์—…์ฒด ์žฌ๊ณ ์˜ ์ž๋™ ๊ฐ€๊ฒฉ ์ฑ…์ •์„ ํ†ตํ•ด ํ•˜๋‚˜์˜ TYPE ํ’ˆ๋ชฉ์„ ๋Œ€๋Ÿ‰์œผ๋กœ ์ด์ „ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์†Œ์Šค๋Š” ์ฒซ ๋ฒˆ์งธ ์ˆ˜๋™ ์ „์†ก์— ์˜ํ•ด ๊ฒฐ์ •๋ฉ๋‹ˆ๋‹ค. ๊ฐ ์Šคํƒ์€ ์™„์ „ํžˆ ์ „์†ก๋˜๋ฉฐ ํ•˜๋‚˜์˜ ํ•ญ๋ชฉ์œผ๋กœ ๊ฐ„์ฃผ๋ฉ๋‹ˆ๋‹ค. ๊ฐ€๊ฒฉ์„ ์š”์ฒญํ•œ ํ›„ ํด๋ผ์ด์–ธํŠธ๋Š” ์‘๋‹ตํ•˜๊ณ  ๊ทธ ํ›„์—์•ผ ๋Œ€๊ธฐ์—ด์„ ๊ณ„์†ํ•ฉ๋‹ˆ๋‹ค.

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

  • delay โ€” ์ฒซ ๋ฒˆ์งธ ๋งค๊ฐœ๋ณ€์ˆ˜๋Š” ์ „์†ก ์š”์ฒญ ๊ฐ„ ์ง€์—ฐ ์‹œ๊ฐ„(๋ฐ€๋ฆฌ์ดˆ)์œผ๋กœ, 0๋ถ€ํ„ฐ 2147483647๊นŒ์ง€์˜ ์ •์ˆ˜์ž…๋‹ˆ๋‹ค. 350๋Š” 0,35์ดˆ๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. 0๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๊ฒŒ์ž„ ํ”„๋ ˆ์ž„๋‹น ๋‹ค์Œ ์บ๋ฆฌ๊ฐ€ ํ•˜๋‚˜๋งŒ ์ „์†ก๋ฉ๋‹ˆ๋‹ค. GrabDelay์—๋Š” ์ง€์—ฐ์ด ์ถ”๊ฐ€๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์Œ์ˆ˜ ๊ฐ’์€ ๋ชจ๋“œ๋ฅผ ๋น„ํ™œ์„ฑํ™”ํ•˜๊ณ  ๋Œ€๊ธฐ์—ด์„ ์ง€์›๋‹ˆ๋‹ค. ๋„๋ ค๋ฉด ๋ช…ํ™•ํ•œ UO.MassPriceMove() ํ‘œ๊ธฐ๊ฐ€ ์„ ํ˜ธ๋ฉ๋‹ˆ๋‹ค.
  • quantity - ๋‘ ๋ฒˆ์งธ ๋งค๊ฐœ๋ณ€์ˆ˜๋Š” ์ฒซ ๋ฒˆ์งธ ์ˆ˜๋™ ์ „์†ก์„ ํฌํ•จํ•œ ๊ฐœ๋ณ„ ํ•ญ๋ชฉ(ํ•ญ๋ชฉ)์˜ ์ด ํ•œ๋„์ž…๋‹ˆ๋‹ค. ํ•˜๋‚˜์˜ ์Šคํƒ/์Šคํƒ์€ ๋‚ด๋ถ€ ์ˆ˜๋Ÿ‰์— ๊ด€๊ณ„์—†์ด ํ•˜๋‚˜์˜ ํ’ˆ๋ชฉ์œผ๋กœ ๊ฐ„์ฃผ๋ฉ๋‹ˆ๋‹ค. 50๋Š” ์ตœ๋Œ€ 50 ์ „์ฒด ์Šคํƒ ๋˜๋Š” 50 ๋‹จ์ผ ํ•ญ๋ชฉ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ์Šคํƒ์€ ์ด ์ œํ•œ์œผ๋กœ ๋ถ„ํ• ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. 0 - ๋ชจ๋“  ์ ํ•ฉํ•œ ํ•ญ๋ชฉ. ์Œ์ˆ˜ ๊ฐ’์€ ํ—ˆ์šฉ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • type - ์„ธ ๋ฒˆ์งธ ๋งค๊ฐœ๋ณ€์ˆ˜๋Š” ์•„์ดํ…œ ์œ ํ˜• ์ฝ”๋“œ(๊ทธ๋ž˜ํ”ฝ/์œ ํ˜•), ์ •์ˆ˜ 0..65535(์˜ˆ: 0x0EED ๋˜๋Š” ๊ธˆ์˜ ๊ฒฝ์šฐ "0x0EED" ๋ฌธ์ž์—ด)์ž…๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ serial/ID๋„ ์•„๋‹ˆ๊ณ  ์ด๋ฆ„ AddObject๋„ ์•„๋‹™๋‹ˆ๋‹ค. 0 ์ฒซ ๋ฒˆ์งธ ์ˆ˜๋™ ์ „์†ก์œผ๋กœ ์œ ํ˜•์„ ๊ฒฐ์ •ํ•ฉ๋‹ˆ๋‹ค. ๋ช…์‹œ์  ์œ ํ˜•์„ ์‚ฌ์šฉํ•˜๋ฉด ๋‹ค๋ฅธ ์œ ํ˜•์„ ๋“œ๋ž˜๊ทธํ•ด๋„ ๋Œ€๊ธฐ์—ด์ด ํ™œ์„ฑํ™”๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋ชจ๋“œ๋Š” ์ ํ•ฉํ•œ ํ•ญ๋ชฉ์„ ๊ณ„์†ํ•ด์„œ ๊ธฐ๋‹ค๋ฆฝ๋‹ˆ๋‹ค.
  • price โ€” ๋„ค ๋ฒˆ์งธ ํ•„์ˆ˜ ๋งค๊ฐœ๋ณ€์ˆ˜๋Š” ํ‘œ์‹œ๋œ ๊ฐ ์ „์ฒด ํ•ญ๋ชฉ/์Šคํƒ์— ๋Œ€ํ•œ ์ „์ฒด ๊ฐ€๊ฒฉ 0..2147483647์ž…๋‹ˆ๋‹ค. 0๋Š” ๋ฌด๋ฃŒ, ์ข…๋ฃŒ ์—†์Œ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ๋งˆ์ด๋„ˆ์Šค ๊ฐ€๊ฒฉ์€ ๊ฑฐ๋ถ€๋ฉ๋‹ˆ๋‹ค.
  • destination - ๋‹ค์„ฏ ๋ฒˆ์งธ ์„ ํƒ ๋งค๊ฐœ๋ณ€์ˆ˜๋Š” serial ๋˜๋Š” ๊ณต๊ธ‰์—…์ฒด ์ธ๋ฒคํ† ๋ฆฌ์— ์ €์žฅ๋œ ์ปจํ…Œ์ด๋„ˆ ์ด๋ฆ„์ž…๋‹ˆ๋‹ค. ์—†์œผ๋ฉด ์ˆ˜๋™ ์žฌ์„ค์ •์—์„œ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค. ์ผ๋ฐ˜ ๋ฐฐ๋‚ญ, ์ง€์ƒ์— ์žˆ๋Š” ์ƒ์ž, ๋ชฉ์ ์ง€=0๋Š” ์—ฌ๊ธฐ์—์„œ ๋ฒ—์–ด๋‚˜ ์ง€์ƒ์—์„œ๋Š” ๊ฐ€๊ฒฉ์„ ์ฑ…์ •ํ•˜๋Š” ๊ฒƒ์ด ๋ถˆ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.
  • x โ€” ์—ฌ์„ฏ ๋ฒˆ์งธ ๋งค๊ฐœ๋ณ€์ˆ˜๋Š” ๊ณต๊ธ‰์—…์ฒด ์ปจํ…Œ์ด๋„ˆ ๋‚ด๋ถ€์˜ X์ž…๋‹ˆ๋‹ค. ์ž๋™ ๋ฐฐ์น˜์˜ ๊ฒฝ์šฐ -1 ๋˜๋Š” 65535์ด๊ณ , ๊ทธ๋ ‡์ง€ ์•Š์€ ๊ฒฝ์šฐ 0..65535์ž…๋‹ˆ๋‹ค. Y ๋ฐ Z์™€ ํ•จ๊ป˜๋งŒ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.
  • y - ์ผ๊ณฑ ๋ฒˆ์งธ ๋งค๊ฐœ๋ณ€์ˆ˜ - ๊ณต๊ธ‰์—…์ฒด ์ปจํ…Œ์ด๋„ˆ ๋‚ด๋ถ€ Y: -1/65535 ์ž๋™ ๋ฐฐ์น˜์šฉ, ๊ทธ๋ ‡์ง€ ์•Š์€ ๊ฒฝ์šฐ 0..65535. X ๋ฐ Z์™€ ํ•จ๊ป˜๋งŒ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.
  • z โ€” ์—ฌ๋Ÿ ๋ฒˆ์งธ ๋งค๊ฐœ๋ณ€์ˆ˜๋Š” ๋†’์ด -128..127์ด๋ฉฐ, ์ปจํ…Œ์ด๋„ˆ ๋‚ด๋ถ€๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ 0์ž…๋‹ˆ๋‹ค. ๋ช…์‹œ์ ์ธ X/Y/Z๊ฐ€ ์—†์œผ๋ฉด ์ง€์ •๋œ ๋Œ€์ƒ๊ณผ ํ•จ๊ป˜ -1,-1,0๊ฐ€ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ์ˆ˜๋™์œผ๋กœ ํ• ๋‹นํ•˜๋ฉด ์žฌ์„ค์ • ์œ„์น˜๊ฐ€ ์ ์šฉ๋ฉ๋‹ˆ๋‹ค.

๋ฐ˜ํ™˜๊ฐ’

void: ๊ฐ’์ด ์—†์Šต๋‹ˆ๋‹ค. MassPriceMove๋ฅผ ํ™œ์„ฑํ™”ํ•˜๋ฉด ์ˆ˜๋™ ์ƒ˜ํ”Œ ๋Œ€๊ธฐ๊ฐ€ ํ™œ์„ฑํ™”๋ฉ๋‹ˆ๋‹ค. ์ „์†ก ๋ฐ ๊ฐ€๊ฒฉ ๋ฉ”์‹œ์ง€๋Š” ์ œ์ถœ๋œ ์š”์ฒญ์„ ๋‚˜ํƒ€๋‚ด์ง€๋งŒ ์„œ๋ฒ„ ์Šน์ธ์„ ๋ณด์žฅํ•˜์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค.

๋™์ž‘

  • 0, 4, 5 ๋˜๋Š” 8 ์ธ์ˆ˜๊ฐ€ ํฌํ•จ๋œ ์–‘์‹์ž…๋‹ˆ๋‹ค. ์ •ํ™•ํ•œ ์ˆœ์„œ: ์ง€์—ฐ, ์ˆ˜๋Ÿ‰, type, ๊ฐ€๊ฒฉ, ๋ชฉ์ ์ง€, x, y, z. ๋ถ€๋ถ„ ์ขŒํ‘œ ํŠธ๋ฆฌํ”Œ์€ ์ง€์›๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • ๋จผ์ € ๋ช…๋ น์„ ํ˜ธ์ถœํ•œ ๋‹ค์Œ ํ•ด๋‹น ํ•ญ๋ชฉ ์ „์ฒด๋ฅผ ์„ ํƒํ•˜์—ฌ ๋“œ๋ž˜๊ทธํ•ฉ๋‹ˆ๋‹ค. 0๋ฅผ ์ž…๋ ฅํ•˜๋ฉด ์ด๋ฅผ ๊ธฐ์–ตํ•ฉ๋‹ˆ๋‹ค TYPE; ๋ช…์‹œ์  ์œ ํ˜•์€ ๋‹ค๋ฅธ ์œ ํ˜•์˜ ์ˆ˜๋™ ๋ž˜ํ•‘์„ ๊ฑด๋„ˆ๋œ๋‹ˆ๋‹ค. ์†Œ์Šค๋Š” ํ•ญ์ƒ ์ฒซ ๋ฒˆ์งธ๋กœ ์ ํ•ฉํ•œ ํ•ญ๋ชฉ์—์„œ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.
  • ์ˆ˜๋Ÿ‰์—๋Š” ์ฒซ ๋ฒˆ์งธ ์ˆ˜๋™ ํ•ญ๋ชฉ์ด ํฌํ•จ๋ฉ๋‹ˆ๋‹ค. 50๋Š” ์Šคํƒ์˜ 50 ์œ ๋‹›์ด ์•„๋‹ˆ๋ผ 100์˜ 50 ์ „์ฒด ์Šคํƒ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. 0 - ์ ํ•ฉํ•œ ๋ชจ๋“  ์ง์„  ๊ฐœ์ฒด. ์ƒ‰์ƒ์€ ํ•„ํ„ฐ๋ง๋˜์ง€ ์•Š์œผ๋ฉฐ ์ค‘์ฒฉ๋œ ์ปจํ…Œ์ด๋„ˆ๋Š” ํ™•์žฅ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • ASCII/์œ ๋‹ˆ์ฝ”๋“œ ๋ฐ 10์ดˆ ๋Œ€๊ธฐ๋ฅผ ํฌํ•จํ•˜์—ฌ AllPrice ๊ฐ€๊ฒฉ ์š”์ฒญ ์ธ์‹ ๊ทœ์น™์ด ์ ์šฉ๋ฉ๋‹ˆ๋‹ค. ์ผ์‹œ ์ค‘์ง€ ์ง€์—ฐ - ์ตœ์†Œ ๊ฐ„๊ฒฉ: ๋А๋ฆฐ ์„œ๋ฒ„๋Š” ๊ฐ€๊ฒฉ์„ ํ˜ผ๋™ํ•˜์ง€ ์•Š๋„๋ก ๊ฐ„๊ฒฉ์„ ๋Š˜๋ฆฝ๋‹ˆ๋‹ค.
  • ์ผ๋ฐ˜ ๋ชจ๋“œ AllPrice๋ฅผ ํ™œ์„ฑํ™”ํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ์ด ์ž‘์—…์˜ ๊ฐ€๊ฒฉ์€ AllPrice๋ณด๋‹ค ์šฐ์„ ํ•ฉ๋‹ˆ๋‹ค. ๋Œ€๊ธฐ์—ด ์ค‘์— ๊ฐ€๊ฒฉ์„ ๋ณ€๊ฒฝํ•˜๊ฑฐ๋‚˜(AllPrice) ์ถ”๊ฐ€ ํ•ญ๋ชฉ์„ ์ˆ˜๋™์œผ๋กœ ์ „์†กํ•˜๋Š” ๊ฒƒ์€ ๊ถŒ์žฅ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์•Œ ์ˆ˜ ์—†๋Š” ์‘๋‹ต์ด๋‚˜ ์„œ๋ฒ„ ์˜ค๋ฅ˜๋กœ ์ธํ•ด ๋Œ€๊ธฐ์—ด์ด ์ค‘๋‹จ๋ฉ๋‹ˆ๋‹ค.
  • MassPriceMove()๋Š” ํ˜„์žฌ ์ „์†ก ๋Œ€๊ธฐ์—ด์„ ๋„๊ณ  ๋ณด๋ฅ˜ ์ค‘์ธ ๊ฐ€๊ฒฉ ์‘๋‹ต์„ ์ทจ์†Œํ•ฉ๋‹ˆ๋‹ค. ์ผ๋ฐ˜ AllPrice์€ ๋ณ„๋„๋กœ ํ™œ์„ฑํ™”๋œ ๊ฒฝ์šฐ ์œ ์ง€๋ฉ๋‹ˆ๋‹ค. TerminateAll()๋Š” ๋‘ ๋ชจ๋“œ๋ฅผ ๋ชจ๋‘ ๋•๋‹ˆ๋‹ค. ์ด๋Š” MassMove์™€ ๊ณตํ†ต๋œ ๋Œ€๊ธฐ์—ด์ž…๋‹ˆ๋‹ค. ์ƒˆ ํ™œ์„ฑํ™”๊ฐ€ ์ด์ „ ํ™œ์„ฑํ™”๋ฅผ ๋Œ€์ฒดํ•ฉ๋‹ˆ๋‹ค.
  • ๊ฐ€๊ฒฉ ์š”์ฒญ์ด ์ธ์‹๋˜์ง€ ์•Š์œผ๋ฉด ๋ช…๋ น์€ ์ˆ˜๋™ ์ž…๋ ฅ์„ ์œ„ํ•œ ๋Œ€ํ™” ์ƒ์ž๋ฅผ ์ข…๋ฃŒํ•˜๊ณ  ์ถ”๊ฐ€ ์ „์†ก์„ ์ค‘์ง€ํ•ฉ๋‹ˆ๋‹ค. ์„œ๋ฒ„ ์žฅ์• , ์‚ฌ๋ง, ๋งต ๋ณ€๊ฒฝ, ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋Š” ์•„์ดํ…œ/์ปจํ…Œ์ด๋„ˆ๋„ ์ž‘๋™์„ ๋ฉˆ์ถฅ๋‹ˆ๋‹ค.
  • ๋ชจ๋“œ๊ฐ€ ์ฒซ ๋ฒˆ์งธ ๋งˆ์šฐ์Šค ๋“œ๋ž˜๊ทธ๋ฅผ ๊ธฐ๋‹ค๋ฆฌ๋Š” ๋™์•ˆ ๋™์ผํ•œ ๋ช…๋ น์„ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ๋ฐ˜๋ณต์ ์œผ๋กœ ํ˜ธ์ถœํ•˜๋ฉด ๋Œ€๊ธฐ๊ฐ€ ๊บผ์ง‘๋‹ˆ๋‹ค. ๋น„ํ™œ์„ฑํ™” MassMove/MassPriceMove๊ฐ€ ๊ฒŒ์ž„ ์ฐฝ์— ์ง์ ‘ ๋‚˜ํƒ€๋‚ฉ๋‹ˆ๋‹ค. ๋‹ค์Œ ํ˜ธ์ถœ์€ ๋ชจ๋“œ๋ฅผ ๋‹ค์‹œ ์ผญ๋‹ˆ๋‹ค. ์ฒซ ๋ฒˆ์งธ ์ „์†ก ํ›„ ์ธ์ˆ˜ ์—†๋Š” ํ˜•์‹์„ ์‚ฌ์šฉํ•˜์—ฌ ๋‚˜๋จธ์ง€ ๋Œ€๊ธฐ์—ด์„ ์ค‘์ง€ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฏธ ์ „์†ก๋œ ์š”์ฒญ์€ ๋กค๋ฐฑ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋…๋ฆฝ ์‹คํ–‰ C# ์Šคํฌ๋ฆฝํŠธ

๊ฐ ์˜ˆ์ œ๋Š” ๋ณ„๋„์˜ ํŒŒ์ผ .csx๋กœ ์ €์žฅํ•˜๊ณ  IDE์—์„œ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. UO ๊ฐœ์ฒด์™€ ๋Œ€๊ธฐ ๊ธฐ๋Šฅ์€ ํ˜„์žฌ ๊ฒŒ์ž„ ์„ธ์…˜์˜ ํ˜ธ์ŠคํŠธ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ๋ฐ๋ชจ serial ์ด๋ฆ„, ์ขŒํ‘œ, ์ฃผ์†Œ๋ฅผ ์ž์‹ ์˜ ๊ฒƒ์œผ๋กœ ๋ฐ”๊พธ์„ธ์š”.

๊ฐ„๋‹จํ•œ ์˜ˆ์ œ

์ด ์ฝ”๋“œ๋ฅผ ๋ณ„๋„์˜ .csx ํŒŒ์ผ๋กœ ์‹คํ–‰ํ•˜์„ธ์š”. ์ธ์ˆ˜๋Š” ํ˜ธ์ถœ์— ์ง์ ‘ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. ์˜ˆ์ œ์˜ ์ด๋ฆ„, serial, ์ฃผ์†Œ๋ฅผ ์ž์‹ ์˜ ๊ฐ’์œผ๋กœ ๋ฐ”๊พธ์„ธ์š”.

๋ช…๋ น์€ ๋…๋ฆฝ๋œ ๋ฌธ์ž…๋‹ˆ๋‹ค. ์•ž์˜ ๋ฉ”์‹œ์ง€๋Š” ํ˜ธ์ถœ ์‹œ์ž‘์„ ๋‚˜ํƒ€๋‚ด๋ฉฐ ์„œ๋ฒ„ ๋™์ž‘์˜ ์™„๋ฃŒ๋ฅผ ํ™•์ธํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

UO.Print("Calling UO.MassPriceMove");
UO.MassPriceMove();

1. ๊ฐ€๊ฒฉ์œผ๋กœ 50 ์Šคํƒ์„ ์ด๋™ํ•˜๊ณ  ๋งˆ์šฐ์Šค๋กœ ์œ ํ˜•์„ ๊ฒฐ์ • - ์ง์ ‘ ์Šคํฌ๋ฆฝํŠธ

๋งค๊ฐœ๋ณ€์ˆ˜์™€ ์‹คํ–‰ ํ๋ฆ„:

  • ์ง€์—ฐ=350ms; ์ฒซ ๋ฒˆ์งธ ์ˆ˜๋™ ํ•ญ๋ชฉ์„ ํฌํ•จํ•˜์—ฌ ๊ฐœ๋ณ„ ํ•ญ๋ชฉ์˜ ์ˆ˜๋Ÿ‰=50; type=0๋Š” TYPE ์ƒ˜ํ”Œ์„ ๊ธฐ์–ตํ•ฉ๋‹ˆ๋‹ค. ์ „์ฒด ํ’ˆ๋ชฉ๋‹น ๊ฐ€๊ฒฉ=125.
  • ๋ชฉ์ ์ง€์™€ ์ขŒํ‘œ๊ฐ€ ๋ˆ„๋ฝ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ƒ˜ํ”Œ์„ ๊ณต๊ธ‰์—…์ฒด์˜ ์ธ๋ฒคํ† ๋ฆฌ๋กœ ์ง์ ‘ ๋“œ๋ž˜๊ทธํ•˜์„ธ์š”.
  • ์›๋ž˜ ์Šคํƒ์ด 100์ธ ๊ฒฝ์šฐ ์ตœ๋Œ€ 50 ์ „์ฒด ์Šคํƒ์ด ์ „์†ก๋ฉ๋‹ˆ๋‹ค. ๊ฐ๊ฐ์€ ์„œ๋ฒ„ ์š”์ฒญ ํ›„ ๊ฐ€๊ฒฉ 125๋ฅผ ๋ฐ›์Šต๋‹ˆ๋‹ค.
UO.MassPriceMove(350, 50, 0, 125);
UO.Print("Drag one complete stack into your vendor bag");

2. ์„ ํƒํ•œ ๋ฒค๋” ๋ฐฑ์— ์•Œ๋ ค์ง„ ์œ ํ˜•์˜ ๋ชจ๋“  ํ•ญ๋ชฉ - ์Šคํฌ๋ฆฝํŠธ ๊ธฐ๋Šฅ

๋งค๊ฐœ๋ณ€์ˆ˜์™€ ์‹คํ–‰ ํ๋ฆ„:

  • AddObject๋Š” Vendor Bag์„ ์„ ํƒํ•˜๋ผ๋Š” ๋ฉ”์‹œ์ง€๋ฅผ ํ‘œ์‹œํ•˜๊ณ  Vendor_bag๋กœ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด ID ๋ชฉ์ ์ง€์ž…๋‹ˆ๋‹ค. type๋Š” ์ฝ”๋“œ 0x0F7A๋กœ ์œ ์ง€๋ฉ๋‹ˆ๋‹ค.
  • ์ง€์—ฐ=500, ์ˆ˜๋Ÿ‰=0 ๋ฌด์ œํ•œ, type=0x0F7A, ๊ฐ€๊ฒฉ=250, ๋ชฉ์ ์ง€=vendor_bag.
  • X/Y/Z ๋ˆ„๋ฝ: -1,-1,0. ๋Œ€๊ธฐ์—ด์„ ์‹œ์ž‘ํ•˜๋ ค๋ฉด ์ ์ ˆํ•œ ์œ ํ˜•์˜ ํ•ญ๋ชฉ ํ•˜๋‚˜๋ฅผ ์ˆ˜๋™์œผ๋กœ ๋“œ๋ž˜๊ทธํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์œผ๋กœ๋ถ€ํ„ฐ ์›๋ž˜์˜ ๊ฐ€๋ฐฉ์ด ๊ฒฐ์ •๋ฉ๋‹ˆ๋‹ค.
return  RunScenario();
 object? RunScenario()
{
    UO.AddObject("vendor_bag");
    UO.MassPriceMove(500, 0, "0x0F7A", 250, "vendor_bag");
    UO.Print("Now drag one matching item from the source");
    return null;
}

3. 8๊ฐœ์˜ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ๋ชจ๋‘ ์ง€์ •ํ•˜๊ณ  ๋ฐฑ ๋‚ด๋ถ€ ์œ„์น˜ - ์‹œ๋‚˜๋ฆฌ์˜ค ํด๋ž˜์Šค

๋งค๊ฐœ๋ณ€์ˆ˜์™€ ์‹คํ–‰ ํ๋ฆ„:

  • ์ง€์—ฐ=350ms; ์ˆ˜๋Ÿ‰=10 ์ „์ฒด ํ’ˆ๋ชฉ; type=itemType=0x0EED; ๊ฐ€๊ฒฉ=1000 ๊ฐ ํ’€ ์Šคํƒ.
  • ๋ชฉ์ ์ง€=vendorBag๋Š” ๊ณต๊ธ‰์—…์ฒด ๊ฐ€๋ฐฉ์˜ ์‹ค์ œ ID์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋ฐ”๊พธ์„ธ์š”. ์ด๊ฒƒ์€ ๋„ค ๋ฒˆ์งธ ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ ์•„๋‹Œ ๋‹ค์„ฏ ๋ฒˆ์งธ ๋งค๊ฐœ๋ณ€์ˆ˜์ž…๋‹ˆ๋‹ค.
  • x=60, y=70๋Š” ์ด ๊ฐ€๋ฐฉ ์•ˆ์— ์žˆ๋Š” ๊ณณ์ด๊ณ , z=0์ž…๋‹ˆ๋‹ค. ์ด๋Š” ์ง€๋„์ƒ์˜ ์บ๋ฆญํ„ฐ ์ขŒํ‘œ๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค.
  • ํ˜ธ์ถœ๋˜๋ฉด ์†Œ์Šค์—์„œ ์ ์ ˆํ•œ ์ƒ˜ํ”Œ์„ ์ˆ˜๋™์œผ๋กœ ๋Œ์–ด์„œ ๋†“์Šต๋‹ˆ๋‹ค. ์„œ๋ฒ„๊ฐ€ ๋ฐฐ์น˜๋ฅผ ๊ฑฐ๋ถ€ํ•˜๋ฉด ์ถ”๊ฐ€ ์š”์ฒญ์ด ์ค‘์ง€๋ฉ๋‹ˆ๋‹ค.
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        var itemType = "0x0EED";
        var vendorBag = "0x40005678";
        UO.MassPriceMove(350, 10, itemType, 1000, vendorBag, 60, 70, 0);
        return null;
    }
}

4. ๋Œ€๊ธฐ์—ด ์ทจ์†Œ ๋ฐ ๋ณด๋ฅ˜ ์ค‘์ธ ๊ฐ€๊ฒฉ ์‘๋‹ต - ์ง์ ‘ ์Šคํฌ๋ฆฝํŠธ

๋งค๊ฐœ๋ณ€์ˆ˜์™€ ์‹คํ–‰ ํ๋ฆ„:

  • ์ธ์ˆ˜๊ฐ€ ์—†์œผ๋ฉด ์ด ๋ช…๋ น์€ ์ผ๋ฐ˜ ๋Œ€๋Ÿ‰ ์ „์†ก ๋Œ€๊ธฐ์—ด์„ ๋„๊ณ  ๋ณด๋ฅ˜ ์ค‘์ธ ๊ฐ€๊ฒฉ ์‘๋‹ต์„ ์ง€์›๋‹ˆ๋‹ค.
  • ์„œ๋ฒ„์—์„œ ์ด๋ฏธ ์ˆ˜๋ฝํ•œ ๊ฐ€๊ฒฉ๊ณผ ์ „์†ก์€ ๋กค๋ฐฑ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ์ ˆ์ฐจ๋ฅผ ์ค‘์ง€ํ•˜๊ณ  AllPrice๋ฅผ ๋ณ„๋„๋กœ ํ™œ์„ฑํ™”ํ•˜๋ ค๋ฉด UO.TerminateAll()๋ฅผ ์‚ฌ์šฉํ•˜์„ธ์š”.

Shop ๋ชฉ๋ก / ๊ตฌ๋งค ๋ฐ ํŒ๋งค ๋ชฉ๋ก

Shop ๋ชฉ๋ก / ๋งค์ˆ˜ ๋ฐ ๋งค๋„ ๋ชฉ๋ก

UO.MassPriceMove();

๋ช…๋ น ๊ตฌํ˜„

C#์€ ๋Œ€์†Œ๋ฌธ์ž๋ฅผ ๊ตฌ๋ถ„ํ•ฉ๋‹ˆ๋‹ค. ์ •ํ™•ํ•œ UO ์ด๋ฆ„์„ ์‚ฌ์šฉํ•˜์„ธ์š”. ์ˆซ์ž ํ”Œ๋ž˜๊ทธ๋Š” 0๊ณผ ๋น„๊ตํ•˜๊ณ  ๋ฐ˜ํ™˜ ํ˜•์‹์ด bool์ผ ๋•Œ๋งŒ bool์„ ์‚ฌ์šฉํ•˜์„ธ์š”.

UO.MassPriceMove() โ€” UO.MassPriceMove()

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

๊ฒฐ๊ณผ: void / Unit.

ํ˜ธ์ถœ ์‹œ:

๋‚ด๋ถ€ ๊ตฌํ˜„ ์ฝ”๋“œ์ด๋ฉฐ ๋…๋ฆฝ ์Šคํฌ๋ฆฝํŠธ๋กœ ์‹คํ–‰ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

case "masspricemove":

                    if (arguments.Length == 0) bridge.MassPriceMove(-1, 0, 0, 0, -1, -1, -1, 0);

                    else bridge.MassPriceMove(NumberConversions.ToInt(arguments[0]),

                        NumberConversions.ToInt(arguments[1]), ResolveType(arguments[2]),

                        NumberConversions.ToInt(arguments[3]),

                        arguments.Length > 4 ? ResolveTransferDestination(arguments[4], true) : -1,

                        arguments.Length > 5 ? NumberConversions.ToInt(arguments[5]) : -1,

                        arguments.Length > 6 ? NumberConversions.ToInt(arguments[6]) : -1,

                        arguments.Length > 7 ? NumberConversions.ToInt(arguments[7]) : 0);

                    break;

UO.MassPriceMove(delay, quantity, type, price) โ€” UO.MassPriceMove(Any,Any,Any,Any)

๋งค๊ฐœ๋ณ€์ˆ˜: delay (Any), quantity (Any), type (Any), price (Any)

๊ฒฐ๊ณผ: void / Unit.

ํ˜ธ์ถœ ์‹œ:

๋‚ด๋ถ€ ๊ตฌํ˜„ ์ฝ”๋“œ์ด๋ฉฐ ๋…๋ฆฝ ์Šคํฌ๋ฆฝํŠธ๋กœ ์‹คํ–‰ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

case "masspricemove":

                    if (arguments.Length == 0) bridge.MassPriceMove(-1, 0, 0, 0, -1, -1, -1, 0);

                    else bridge.MassPriceMove(NumberConversions.ToInt(arguments[0]),

                        NumberConversions.ToInt(arguments[1]), ResolveType(arguments[2]),

                        NumberConversions.ToInt(arguments[3]),

                        arguments.Length > 4 ? ResolveTransferDestination(arguments[4], true) : -1,

                        arguments.Length > 5 ? NumberConversions.ToInt(arguments[5]) : -1,

                        arguments.Length > 6 ? NumberConversions.ToInt(arguments[6]) : -1,

                        arguments.Length > 7 ? NumberConversions.ToInt(arguments[7]) : 0);

                    break;

UO.MassPriceMove(delay, quantity, type, price, destination) โ€” UO.MassPriceMove(Any,Any,Any,Any,Any)

๋งค๊ฐœ๋ณ€์ˆ˜: delay (Any), quantity (Any), type (Any), price (Any), destination (Any)

๊ฒฐ๊ณผ: void / Unit.

ํ˜ธ์ถœ ์‹œ:

๋‚ด๋ถ€ ๊ตฌํ˜„ ์ฝ”๋“œ์ด๋ฉฐ ๋…๋ฆฝ ์Šคํฌ๋ฆฝํŠธ๋กœ ์‹คํ–‰ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

case "masspricemove":

                    if (arguments.Length == 0) bridge.MassPriceMove(-1, 0, 0, 0, -1, -1, -1, 0);

                    else bridge.MassPriceMove(NumberConversions.ToInt(arguments[0]),

                        NumberConversions.ToInt(arguments[1]), ResolveType(arguments[2]),

                        NumberConversions.ToInt(arguments[3]),

                        arguments.Length > 4 ? ResolveTransferDestination(arguments[4], true) : -1,

                        arguments.Length > 5 ? NumberConversions.ToInt(arguments[5]) : -1,

                        arguments.Length > 6 ? NumberConversions.ToInt(arguments[6]) : -1,

                        arguments.Length > 7 ? NumberConversions.ToInt(arguments[7]) : 0);

                    break;

UO.MassPriceMove(delay, quantity, type, price, destination, x, y, z) โ€” UO.MassPriceMove(Any,Any,Any,Any,Any,Any,Any,Any)

๋งค๊ฐœ๋ณ€์ˆ˜: delay (Any), quantity (Any), type (Any), price (Any), destination (Any), x (Any), y (Any), z (Any)

๊ฒฐ๊ณผ: void / Unit.

ํ˜ธ์ถœ ์‹œ:

๋‚ด๋ถ€ ๊ตฌํ˜„ ์ฝ”๋“œ์ด๋ฉฐ ๋…๋ฆฝ ์Šคํฌ๋ฆฝํŠธ๋กœ ์‹คํ–‰ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

case "masspricemove":

                    if (arguments.Length == 0) bridge.MassPriceMove(-1, 0, 0, 0, -1, -1, -1, 0);

                    else bridge.MassPriceMove(NumberConversions.ToInt(arguments[0]),

                        NumberConversions.ToInt(arguments[1]), ResolveType(arguments[2]),

                        NumberConversions.ToInt(arguments[3]),

                        arguments.Length > 4 ? ResolveTransferDestination(arguments[4], true) : -1,

                        arguments.Length > 5 ? NumberConversions.ToInt(arguments[5]) : -1,

                        arguments.Length > 6 ? NumberConversions.ToInt(arguments[6]) : -1,

                        arguments.Length > 7 ? NumberConversions.ToInt(arguments[7]) : 0);

                    break;

UO.Sell

ะฃะบั€ะฐั—ะฝััŒะบะฐ ยท ะ ัƒััะบะธะน ยท English ยท Deutsch ยท Franรงais ยท Italiano ยท Espaรฑol ยท ็น้ซ”ไธญๆ–‡ ยท ๆ—ฅๆœฌ่ชž ยท ํ•œ๊ตญ์–ด

C# ์‹œ๊ทธ๋‹ˆ์ฒ˜

void UO.Sell(object? @type);
void UO.Sell(object? @type, object? color);
void UO.Sell(object? @type, object? color, object? quantity);

ํ˜„์žฌ Bad Newbie ํ”„๋กœํ•„์˜ ๊ธฐ๋ณธ ๊ธฐ๋ณธ ๋ชฉ๋ก์—์„œ ์ž๋™ ํŒ๋งค ๊ทœ์น™์„ ์ƒ์„ฑ, ์—…๋ฐ์ดํŠธ ๋˜๋Š” ์‚ญ์ œํ•ฉ๋‹ˆ๋‹ค. ์ด ๋ช…๋ น์€ NPC ํŒ๋งค์ž ์ œ์•ˆ์˜ ํ–ฅํ›„ ์ฒ˜๋ฆฌ๋ฅผ ๊ตฌ์„ฑํ•ฉ๋‹ˆ๋‹ค. ๊ตฌ๋งค/ํŒ๋งค๋ฅผ ๋งํ•˜์ง€ ์•Š์œผ๋ฉฐ, ๋งค์žฅ์„ ์—ด์ง€๋„ ์•Š๊ณ , ๊ฑฐ๋ž˜๋ฅผ ํ™•์ธํ•˜์ง€๋„ ์•Š์Šต๋‹ˆ๋‹ค. ์ „์ฒด ์ ˆ์ฐจ: ์Šคํ† ์–ด ๋ชฉ๋ก.

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

  • type - ๊ทธ๋ž˜ํ”ฝ ์ œํ’ˆ 0..65535: ์˜ˆ: 0x0F7A - Black Pearl, 0x0F51 - ๋‹จ๊ฒ€. ํŒ๋งค์ž/์•„์ดํ…œ์˜ serial๋„ ์•„๋‹ˆ๊ณ  ์บ๋ฆญํ„ฐ์˜ body๋„ ์•„๋‹™๋‹ˆ๋‹ค. ์Œ์ˆ˜ ๋˜๋Š” 65535๋ณด๋‹ค ํฐ ์ˆซ์ž๋Š” ๊ฑฐ๋ถ€๋ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ 0xFFFF๋Š” ํŠน์ • graphic์ด๋ฉฐ, ๋ชจ๋“  ์ƒํ’ˆ์˜ ๋งˆ์Šคํฌ๋Š” ์•„๋‹™๋‹ˆ๋‹ค.
  • color โ€” ์ œํ’ˆ ์ƒ‰์ƒ: ์Œ์ˆ˜ ๋˜๋Š” 0xFFFF โ€” ๋ชจ๋‘; 0 - ๋„์ƒ‰๋˜์ง€ ์•Š์€ ํ•ญ๋ชฉ๋งŒ ํ•ด๋‹น๋ฉ๋‹ˆ๋‹ค. ์ •ํ™•ํ•œ hue์„ ์œ„ํ•ด์„œ๋Š” 0..65534๋ฅผ ์‚ฌ์šฉํ•˜์„ธ์š”. ์ด ๋ฒ”์œ„๋ฅผ ๋ฒ—์–ด๋‚˜๋Š” ์ƒ‰์ƒ์„ ์‚ฌ์šฉํ•˜์ง€ ๋งˆ์‹ญ์‹œ์˜ค. ์–‘์ˆ˜ ๊ฐ’์€ ushort๋กœ ๋ณ€ํ™˜๋ฉ๋‹ˆ๋‹ค. ๊ธฐ๋ณธ๊ฐ’์€ 1์ž…๋‹ˆ๋‹ค.
  • quantity โ€” ์Šคํƒ ์ˆ˜๋‚˜ ๋ฐฐ๋‚ญ์—์„œ ์›ํ•˜๋Š” ์ž”์•ก์ด ์•„๋‹ˆ๋ผ ์ˆ˜์‹ ๋œ ํ•œ ๋งค์žฅ ์ œ์•ˆ๋‹น ์ƒํ’ˆ UNITS ์ˆ˜์ž…๋‹ˆ๋‹ค. ์–‘์„ฑ์€ 65535๋กœ ์ œํ•œ๋ฉ๋‹ˆ๋‹ค. 0/negative๋Š” ๊ธฐ๋ณธ๊ฐ’์—์„œ ์ผ์น˜ ๊ทœ์น™ type+color๋ฅผ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์€ โ€œ์ „์ฒด ์ˆ˜๋Ÿ‰โ€์ด ์•„๋‹™๋‹ˆ๋‹ค. ๊ธฐ๋ณธ๊ฐ’์€ 1์ž…๋‹ˆ๋‹ค.

๋ฐ˜ํ™˜๊ฐ’

void - ๊ฐ’์ด ์—†์Šต๋‹ˆ๋‹ค. var ๊ฒฐ๊ณผ = ๋ฐ if ์—†์ด ๋ณ„๋„์˜ ํšŒ์„ ์œผ๋กœ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค. ํ†ตํ™” ์ข…๋ฃŒ๋Š” ์„ฑ๊ณต์ ์ธ ๊ฑฐ๋ž˜๊ฐ€ ์•„๋‹Œ ์„ค์ • ์ข…๋ฃŒ๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ํ”„๋กœํ•„์ด ์—†๊ฑฐ๋‚˜ ์ž˜๋ชป๋œ graphic ๊ฒฝ์šฐ ๊ทœ์น™์ด ์ƒ์„ฑ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์˜ค๋ฅ˜์— ๋Œ€ํ•œ ์ˆ˜์น˜ ๊ฒฐ๊ณผ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ๋ฐฐ๋‚ญ ๋‚ด์šฉ, ๊ณจ๋“œ, ์„œ๋ฒ„ ์‘๋‹ต์„ ํ†ตํ•ด ์‹ค์ œ ๊ฑฐ๋ž˜๋ฅผ ํ™•์ธํ•˜์„ธ์š”.

๋™์ž‘

  • Sell๋Š” 1 ~ 3 ์ธ์ˆ˜๋ฅผ ํ—ˆ์šฉํ•ฉ๋‹ˆ๋‹ค. ์˜ค๋ฅธ์ชฝ ์ƒ‰์ƒ=-1, ์ˆ˜๋Ÿ‰=1 ๋ˆ„๋ฝ.
  • ๊ทœ์น™ ํ‚ค๋Š” graphic์ด๊ณ  ๊ธฐ๋ณธ๊ฐ’์˜ ๋งˆ์Šคํฌ๋Š” hue์ž…๋‹ˆ๋‹ค. ๋ฐ˜๋ณต ํ˜ธ์ถœ์€ ์ด ๊ทœ์น™์˜ ์ˆ˜๋Ÿ‰ ๋ฐ ๊ธฐํƒ€ ํ•„๋“œ๋ฅผ ๋Œ€์ฒดํ•ฉ๋‹ˆ๋‹ค. ์ด์ „ ์ œํ•œ ์œ„์— ๋‹ค๋ฅธ ์ œํ•œ์„ ์ถ”๊ฐ€ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ฐ€๊ฒฉ/์ด๋ฆ„์ด ์—†์œผ๋ฉด ์ด ํ•„๋“œ์— ๋Œ€ํ•œ ์ด์ „ ์ œํ•œ ์‚ฌํ•ญ์ด ์ œ๊ฑฐ๋ฉ๋‹ˆ๋‹ค.
  • ์‹ ๊ทœ/์—…๋ฐ์ดํŠธ๋จ ํ™œ์„ฑํ™”=true ๊ทœ์น™. ์ผ๋ฐ˜ ๋งค์ˆ˜/๋งค๋„ ์Šค์œ„์น˜๋Š” ๊ทœ์น™ ์œ ๋ฌด์— ๋”ฐ๋ผ ์„ค์ •๋˜๋ฉฐ ํ”„๋กœํ•„์ด ์ €์žฅ๋ฉ๋‹ˆ๋‹ค. ๋น„ํ™œ์„ฑํ™”๋œ ๊ธฐ๋ณธ ๋ชฉ๋ก ์ž์ฒด๋Š” ์ž๋™์œผ๋กœ ํ™œ์„ฑํ™”๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ผ๋ฐ˜ ๋ชจ๋“œ์™€ ๋ชฉ๋ก ๋ชจ๋‘ ์„ค์ •์—์„œ ํ™œ์„ฑํ™”๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ๋ช…๋ช…๋œ ๋ชฉ๋ก์€ ๋ณ€๊ฒฝ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • ์ƒํ’ˆ ๋ชฉ๋ก์ด ๋„์ฐฉํ•˜๋ฉด ์ฒ˜๋ฆฌ๊ฐ€ ์‹œ์ž‘๋ฉ๋‹ˆ๋‹ค. ํ•œ๋„๋Š” ํ•˜๋‚˜์˜ ๊ทœ์น™๊ณผ ์ผ์น˜ํ•˜๋Š” ํ–‰ ์ „์ฒด์— ๊ฑธ์ณ ์ง€์ถœ๋ฉ๋‹ˆ๋‹ค. ๊ฐ ์œ„์น˜์— ๋Œ€ํ•ด ์ฒซ ๋ฒˆ์งธ๋กœ ์ผ์น˜ํ•˜๋Š” ํ™œ์„ฑํ™”๋œ ๊ทœ์น™์ด ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ์ƒ์ ์„ ๋‹ค์‹œ ์—ด๋ฉด ๊ทœ์น™์ด ํ™œ์„ฑํ™”๋œ ๋™์•ˆ ์ƒˆ๋กœ์šด ์ œ์•ˆ๊ณผ ์ƒˆ๋กœ์šด ํ•œ๋„๊ฐ€ ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค.
  • Bad Newbie์™€ ์™„๋ฒฝํ•˜๊ฒŒ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ํด๋ž˜์‹์—์„œ๋Š” ์ด ์ž๋™ํ™”๊ฐ€ ๋น„ํ™œ์„ฑํ™”๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋งค๊ฐœ๋ณ€์ˆ˜์— ์ด๋ฆ„ NPC ๋˜๋Š” ์ €์žฅ๋œ ๋ชฉ๋ก์˜ ์ด๋ฆ„์„ ๋Œ€์ฒดํ•˜์ง€ ๋งˆ์‹ญ์‹œ์˜ค. AutoBuyEx๋Š” ๊ตฌ๋งค ์‹œ ๊ฐ€๊ฒฉ/์ด๋ฆ„ ํ•„ํ„ฐ๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. ClearShopList๋Š” ๋‘ ์ž๋™ํ™”๋ฅผ ์™„์ „ํžˆ ์žฌ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

๋…๋ฆฝ ์‹คํ–‰ C# ์Šคํฌ๋ฆฝํŠธ

๊ฐ ์˜ˆ์ œ๋Š” ๋ณ„๋„์˜ ํŒŒ์ผ .csx๋กœ ์ €์žฅํ•˜๊ณ  IDE์—์„œ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. UO ๊ฐœ์ฒด์™€ ๋Œ€๊ธฐ ๊ธฐ๋Šฅ์€ ํ˜„์žฌ ๊ฒŒ์ž„ ์„ธ์…˜์˜ ํ˜ธ์ŠคํŠธ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ๋ฐ๋ชจ serial ์ด๋ฆ„, ์ขŒํ‘œ, ์ฃผ์†Œ๋ฅผ ์ž์‹ ์˜ ๊ฒƒ์œผ๋กœ ๋ฐ”๊พธ์„ธ์š”.

๊ฐ„๋‹จํ•œ ์˜ˆ์ œ

์ด ์ฝ”๋“œ๋ฅผ ๋ณ„๋„์˜ .csx ํŒŒ์ผ๋กœ ์‹คํ–‰ํ•˜์„ธ์š”. ์ธ์ˆ˜๋Š” ํ˜ธ์ถœ์— ์ง์ ‘ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. ์˜ˆ์ œ์˜ ์ด๋ฆ„, serial, ์ฃผ์†Œ๋ฅผ ์ž์‹ ์˜ ๊ฐ’์œผ๋กœ ๋ฐ”๊พธ์„ธ์š”.

๋ช…๋ น์€ ๋…๋ฆฝ๋œ ๋ฌธ์ž…๋‹ˆ๋‹ค. ์•ž์˜ ๋ฉ”์‹œ์ง€๋Š” ํ˜ธ์ถœ ์‹œ์ž‘์„ ๋‚˜ํƒ€๋‚ด๋ฉฐ ์„œ๋ฒ„ ๋™์ž‘์˜ ์™„๋ฃŒ๋ฅผ ํ™•์ธํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

UO.Print("Calling UO.Sell");
UO.Sell(0x0F51);

1. ๋‹จ๊ฒ€ 1๊ฐœ ํŒ๋งค ํ—ˆ์šฉ - ์ง์ ‘ ์Šคํฌ๋ฆฝํŠธ

๋งค๊ฐœ๋ณ€์ˆ˜์™€ ์‹คํ–‰ ํ๋ฆ„:

  • 0x0F51 - graphic ๋‹จ๊ฒ€, ์ž„์˜ hue, 1 - ๋ฌธ์žฅ๋‹น ํ•˜๋‚˜. ํŒ€์—์„œ๋Š” ํŠน์ • serial๋ฅผ ์„ ํƒํ•˜์ง€ ์•Š์œผ๋ฉฐ ํ•ญ๋ชฉ์˜ ์œ ์šฉ์„ฑ/๊ฐ€์น˜๋ฅผ ํ…Œ์ŠคํŠธํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์•„์ดํ…œ์˜ ์ •ํ™•ํ•œ type/์ƒ‰์ƒ์„ ์„ ํƒํ•˜์„ธ์š”.
UO.Sell(0x0F51);

2. ํŠน์ • ์ƒ‰์ƒ์˜ ๋กœ๋ธŒ๋งŒ ํŒ๋งคํ•˜๋Š” ๊ฒƒ์€ ์Šคํฌ๋ฆฝํŠธ์˜ ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค.

๋งค๊ฐœ๋ณ€์ˆ˜์™€ ์‹คํ–‰ ํ๋ฆ„:

  • 0x1F03๋Š” ํ‘œ์ค€ graphic ๋กœ๋ธŒ์˜ ์˜ˆ์‹œ์ด๊ณ , 0x0044๋Š” hue์˜ ์˜ˆ์‹œ์ž…๋‹ˆ๋‹ค. ๋‘˜ ๋‹ค ๊ท€ํ•˜์˜ ์ œํ’ˆ์œผ๋กœ ๊ต์ฒดํ•˜์‹ญ์‹œ์˜ค. 5 โ€” ๊ฐ€๊ฒฉ์ด ์•„๋‹Œ ๋‹จ์œ„; ์ตœ์†Œ ๊ฐ€๊ฒฉ ๋ฐ ์ด๋ฆ„ ๋งค๊ฐœ๋ณ€์ˆ˜ Sell/AutoSell๋Š” ํ—ˆ์šฉ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์„œ๋ฒ„๋Š” ํŒ๋งค ์ œ์•ˆ์— ํ•ด๋‹น ํ’ˆ๋ชฉ์„ ํฌํ•จํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
return  RunScenario();
 object? RunScenario()
{
    UO.Sell(0x1F03, 0x0044, 5);
    return null;
}

3. NPC๋กœ ์ด๋™ํ•˜๊ธฐ ์ „์— ๋‘ ๊ฐ€์ง€ ์œ ํ˜•์˜ ํŒ๋งค๋ฅผ ๋น„ํ™œ์„ฑํ™”ํ•ฉ๋‹ˆ๋‹ค - ์Šคํฌ๋ฆฝํŠธ ํด๋ž˜์Šค

๋งค๊ฐœ๋ณ€์ˆ˜์™€ ์‹คํ–‰ ํ๋ฆ„:

  • ํ”„๋กœ์‹œ์ € ์ด๋ฆ„์€ ์ž„์˜์ ์ž…๋‹ˆ๋‹ค. itemType ๋ฐ hue๋Š” ํ•ด๋‹น ๋งค๊ฐœ๋ณ€์ˆ˜์ž…๋‹ˆ๋‹ค. ๊ธฐํƒ€ ๊ทœ์น™, ๊ตฌ๋งค ๋ฐ ์‚ฌ์šฉ์ž ์ง€์ • ๋ช…๋ช… ๋ชฉ๋ก์€ ์œ ์ง€๋ฉ๋‹ˆ๋‹ค. ํ™œ์„ฑํ™”๋œ ๋‹ค๋ฅธ ๋ชฉ๋ก์—์„œ๋„ ์ด๋Ÿฌํ•œ ํ•ญ๋ชฉ์„ ํŒ๋งคํ•˜๋Š” ๊ฒฝ์šฐ ์„ค์ •์„ ํ†ตํ•ด ํ•ด๋‹น ๋ชฉ๋ก์˜ ํ•ด๋‹น ๊ทœ์น™์„ ๋น„ํ™œ์„ฑํ™”ํ•˜์„ธ์š”.

Shop ๋ชฉ๋ก / ๊ตฌ๋งค ๋ฐ ํŒ๋งค ๋ชฉ๋ก

Shop ๋ชฉ๋ก / ๋งค์ˆ˜ ๋ฐ ๋งค๋„ ๋ชฉ๋ก

return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        RemoveSaleRule(0x0F51, -1);
        RemoveSaleRule(0x1F03, 0x0044);
        return null;
    }

    void RemoveSaleRule(dynamic itemType, dynamic hue)
    {
        UO.Sell(itemType, hue, 0);
    }
}

๋ช…๋ น ๊ตฌํ˜„

C#์€ ๋Œ€์†Œ๋ฌธ์ž๋ฅผ ๊ตฌ๋ถ„ํ•ฉ๋‹ˆ๋‹ค. ์ •ํ™•ํ•œ UO ์ด๋ฆ„์„ ์‚ฌ์šฉํ•˜์„ธ์š”. ์ˆซ์ž ํ”Œ๋ž˜๊ทธ๋Š” 0๊ณผ ๋น„๊ตํ•˜๊ณ  ๋ฐ˜ํ™˜ ํ˜•์‹์ด bool์ผ ๋•Œ๋งŒ bool์„ ์‚ฌ์šฉํ•˜์„ธ์š”.

UO.Sell(type) โ€” UO.Sell(Any)

๋งค๊ฐœ๋ณ€์ˆ˜: type (Any)

๊ฒฐ๊ณผ: void / Unit.

ํ˜ธ์ถœ ์‹œ:

๋‚ด๋ถ€ ๊ตฌํ˜„ ์ฝ”๋“œ์ด๋ฉฐ ๋…๋ฆฝ ์Šคํฌ๋ฆฝํŠธ๋กœ ์‹คํ–‰ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

case "sell":

                    bridge.SetAutoSellRule(Arg(0), arguments.Length > 1 ? Arg(1) : -1, arguments.Length > 2 ? Arg(2) : 1);

                    break;

UO.Sell(type, color) โ€” UO.Sell(Any,Any)

๋งค๊ฐœ๋ณ€์ˆ˜: type (Any), color (Any)

๊ฒฐ๊ณผ: void / Unit.

ํ˜ธ์ถœ ์‹œ:

๋‚ด๋ถ€ ๊ตฌํ˜„ ์ฝ”๋“œ์ด๋ฉฐ ๋…๋ฆฝ ์Šคํฌ๋ฆฝํŠธ๋กœ ์‹คํ–‰ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

case "sell":

                    bridge.SetAutoSellRule(Arg(0), arguments.Length > 1 ? Arg(1) : -1, arguments.Length > 2 ? Arg(2) : 1);

                    break;

UO.Sell(type, color, quantity) โ€” UO.Sell(Any,Any,Any)

๋งค๊ฐœ๋ณ€์ˆ˜: type (Any), color (Any), quantity (Any)

๊ฒฐ๊ณผ: void / Unit.

ํ˜ธ์ถœ ์‹œ:

๋‚ด๋ถ€ ๊ตฌํ˜„ ์ฝ”๋“œ์ด๋ฉฐ ๋…๋ฆฝ ์Šคํฌ๋ฆฝํŠธ๋กœ ์‹คํ–‰ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

case "sell":

                    bridge.SetAutoSellRule(Arg(0), arguments.Length > 1 ? Arg(1) : -1, arguments.Length > 2 ? Arg(2) : 1);

                    break;

UO.SendShopReply

ะฃะบั€ะฐั—ะฝััŒะบะฐ ยท ะ ัƒััะบะธะน ยท English ยท Deutsch ยท Franรงais ยท Italiano ยท Espaรฑol ยท ็น้ซ”ไธญๆ–‡ ยท ๆ—ฅๆœฌ่ชž ยท ํ•œ๊ตญ์–ด

C# ์‹œ๊ทธ๋‹ˆ์ฒ˜

void UO.SendShopReply(object? reply);

NPC ํŒ๋งค์ž์˜ ๋งˆ์ง€๋ง‰ ํ™œ์„ฑ ์ œ์•ˆ์œผ๋กœ ์ œํ’ˆ ์„ ํƒ์„ ๋ณด๋ƒ…๋‹ˆ๋‹ค. ๊ฑฐ๋ž˜ ๋ฐฉํ–ฅ์€ NPC์—์„œ ๊ตฌ๋งคํ•˜๊ฑฐ๋‚˜ ๊ทธ์—๊ฒŒ ํŒ๋งคํ•˜๋Š” ์ œ์•ˆ์— ๋”ฐ๋ผ ๊ฒฐ์ •๋ฉ๋‹ˆ๋‹ค.

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

  • reply โ€” ๋ฌธ์ž์—ด: "serial:์ˆ˜๋Ÿ‰"; ์—ฌ๋Ÿฌ ์œ„์น˜๋Š” |, ;๋กœ ๊ตฌ๋ถ„๋ฉ๋‹ˆ๋‹ค. ๋˜๋Š” ์‰ผํ‘œ. ๋Œ€์‹  : =์ด๋ผ๊ณ  ๊ฐ€์ •ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ์ผ๋ จ๋ฒˆํ˜ธ - GetShopList์˜ ID ์œ„์น˜, ์†Œ์ˆ˜์  ๋˜๋Š” 0x, graphic ๋ฐ ID ํŒ๋งค์ž๊ฐ€ ์•„๋‹˜. ์ˆ˜๋Ÿ‰์€ ์Šคํƒ ์ˆ˜๊ฐ€ ์•„๋‹Œ ์–‘์˜ ์ •์ˆ˜ 1์ž…๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด 1๊ฐ€ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. "accept"๋Š” ๋Œ€์†Œ๋ฌธ์ž๋ฅผ ๊ตฌ๋ถ„ํ•˜์ง€ ์•Š์œผ๋ฉฐ "1"๋Š” ์ดˆ์•ˆ ์ฐฝ์„ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. ๋นˆ ์ค„์€ ๋นˆ ์‘๋‹ต์œผ๋กœ ํŠธ๋žœ์žญ์…˜์„ ์ทจ์†Œํ•ฉ๋‹ˆ๋‹ค.

๋ฐ˜ํ™˜๊ฐ’

void - ๋ฐ˜ํ™˜ ๊ฐ’์ด ์—†์Šต๋‹ˆ๋‹ค. true/false๋„, ๊ธˆ์•ก๋„, ๊ตฌ๋งค ํ™•์ธ๋„ ์—†์Šต๋‹ˆ๋‹ค. ์„œ๋ฒ„๋Š” ๊ฑฐ๋ž˜๊ฐ€ ์œ ํšจํ•œ์ง€ ์—ฌ๋ถ€๋ฅผ ๊ฒฐ์ •ํ•ฉ๋‹ˆ๋‹ค. ์ œ์ถœ ํ›„ ์—…๋ฐ์ดํŠธ๋œ ์•„์ดํ…œ์ด๋‚˜ ๊ณจ๋“œ, ์„œ๋ฒ„ ๋ฉ”์‹œ์ง€๋ฅผ ํ™•์ธํ•˜์„ธ์š”.

๋™์ž‘

  • ๋จผ์ € ์ผ๋ฐ˜์ ์ธ ๊ฒŒ์ž„ ๋™์ž‘์œผ๋กœ ์›ํ•˜๋Š” NPC์—์„œ ๊ตฌ๋งค ๋˜๋Š” ํŒ๋งค๋ฅผ ์—ด๊ณ  ์„œ๋ฒ„๊ฐ€ ์ œ๊ณตํ•  ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆฝ๋‹ˆ๋‹ค. ์ด ํŒ€ ์ž์ฒด๋Š” ํŒ๋งค์ž๋ฅผ ์ฐพ์ง€ ์•Š์œผ๋ฉฐ, ๊ฑฐ๋ž˜๋ฅผ ์‹œ์ž‘ํ•˜์ง€ ์•Š์œผ๋ฉฐ, ๊ฐœ์ธ ๊ณต๊ธ‰์—…์ฒด์— ๊ฐ€๊ฒฉ์„ ์„ค์ •ํ•˜์ง€ ์•Š์œผ๋ฉฐ, ์ƒ์ž ๊ฐ„์— ํ•ญ๋ชฉ์„ ์ด๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ํŒ๋งค์ž์˜ ID์€ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ „๋‹ฌ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์—ฌ๋Ÿฌ ์ œ์•ˆ์ด ์žˆ๋Š” ๊ฒฝ์šฐ ๋งˆ์ง€๋ง‰ ์ œ์•ˆ์ด ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.
  • ๊ด€๋ฆฌ์ž์—์„œ ์ œ์•ˆ์€ ๊ฒŒ์ž„ ์„ธ์…˜์— ์ €์žฅ๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋ž˜ํ”ฝ ํด๋ผ์ด์–ธํŠธ๋ฅผ ๋‹ซ์œผ๋ฉด ์ œ์•ˆ์„œ์™€ ์ดˆ์•ˆ์ด ์ €์žฅ๋˜๊ณ , ์—ด๋ฉด ์ฐฝ์ด ๋ณต์›๋ฉ๋‹ˆ๋‹ค. ์ƒ์  ์ž์ฒด๋ฅผ ๋‹ซ๊ฑฐ๋‚˜ ์‘๋‹ตํ•˜๊ฑฐ๋‚˜ ์„œ๋ฒ„๋ฅผ ๋‹ซ๊ฑฐ๋‚˜ ์—ฐ๊ฒฐ์„ ๋Š์œผ๋ฉด ์ œ์•ˆ์ด ์ œ๊ฑฐ๋ฉ๋‹ˆ๋‹ค. ์ž๋™ ๊ตฌ๋งค/์ž๋™ ํŒ๋งค Bad Newbie๋Š” ์Šคํฌ๋ฆฝํŠธ ์ „์— ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์ฝ๊ธฐ์—์„œ๋Š” ์„œ๋ฒ„์— ์š”์ฒญ์„ ๋ณด๋‚ด์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ด๋Š” ์ด๋ฏธ ๋ฐ›์€ ๊ณต๊ธ‰์˜ ์Šค๋ƒ…์ƒท์ด๋ฉฐ NPC์˜ ํ˜„์žฌ ์žฌ๊ณ ๋ฅผ ๋ณด์žฅํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹™๋‹ˆ๋‹ค. ์ˆ˜๋Ÿ‰ ํ•„๋“œ๋Š” ํ–‰/์Šคํƒ ์ˆ˜๊ฐ€ ์•„๋‹Œ ๋‹จ์œ„๋ฅผ ๋ฐ˜์˜ํ•ฉ๋‹ˆ๋‹ค. ArrayLength(ํ–‰)์€ ์œ„์น˜๋ฅผ ๊ณ„์‚ฐํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ ๊ฐ€๊ฒฉ์€ GetShopList์ž…๋‹ˆ๋‹ค. SendShopReply๋Š” ๊ฐ€๊ฒฉ์„ ๋ฐ›์•„๋“ค์ด์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • ๋ช…์‹œ์  ๋ชฉ๋ก์€ ์ดˆ์•ˆ์„ ๋Œ€์ฒดํ•˜๋ฉฐ ์ถ”๊ฐ€๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ํ•˜๋‚˜๋ฅผ ๋ฐ˜๋ณตํ•˜๋ฉด serial ์ˆ˜๋Ÿ‰์ด ์ถ”๊ฐ€๋ฉ๋‹ˆ๋‹ค. ์ด ๊ธˆ์•ก์€ ์ œ์•ˆ์— ํฌํ•จ๋œ ํ’ˆ๋ชฉ์˜ ์ด ์ˆ˜๋Ÿ‰์— ๋”ฐ๋ผ ์ œํ•œ๋ฉ๋‹ˆ๋‹ค. ์•Œ ์ˆ˜ ์—†๋Š” serial, ์ˆ˜๋Ÿ‰์ด ๋ถ€์ •ํ™•ํ•˜๊ฑฐ๋‚˜ ์–‘์ˆ˜๊ฐ€ ์•„๋‹Œ ๊ฒฝ์šฐ ์ œ์ถœํ•˜๊ธฐ ์ „์— ์ „์ฒด ์‘๋‹ต์„ ๊ฑฐ๋ถ€ํ•˜๊ณ  ์ œ์•ˆ์„ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค. ๋ฌธ์žฅ์ด ์—†์œผ๋ฉด SendShopReply๋Š” ์˜ค๋ฅ˜๋ฅผ ๋ณด๊ณ ํ•ฉ๋‹ˆ๋‹ค. "0" ์ค„์€ ์‹คํ–‰ ์ทจ์†Œ ๋ช…๋ น์ด ์•„๋‹™๋‹ˆ๋‹ค. ์‚ฌ์šฉ "".

๋…๋ฆฝ ์‹คํ–‰ C# ์Šคํฌ๋ฆฝํŠธ

๊ฐ ์˜ˆ์ œ๋Š” ๋ณ„๋„์˜ ํŒŒ์ผ .csx๋กœ ์ €์žฅํ•˜๊ณ  IDE์—์„œ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. UO ๊ฐœ์ฒด์™€ ๋Œ€๊ธฐ ๊ธฐ๋Šฅ์€ ํ˜„์žฌ ๊ฒŒ์ž„ ์„ธ์…˜์˜ ํ˜ธ์ŠคํŠธ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ๋ฐ๋ชจ serial ์ด๋ฆ„, ์ขŒํ‘œ, ์ฃผ์†Œ๋ฅผ ์ž์‹ ์˜ ๊ฒƒ์œผ๋กœ ๋ฐ”๊พธ์„ธ์š”.

๊ฐ„๋‹จํ•œ ์˜ˆ์ œ

์ด ์ฝ”๋“œ๋ฅผ ๋ณ„๋„์˜ .csx ํŒŒ์ผ๋กœ ์‹คํ–‰ํ•˜์„ธ์š”. ์ธ์ˆ˜๋Š” ํ˜ธ์ถœ์— ์ง์ ‘ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. ์˜ˆ์ œ์˜ ์ด๋ฆ„, serial, ์ฃผ์†Œ๋ฅผ ์ž์‹ ์˜ ๊ฐ’์œผ๋กœ ๋ฐ”๊พธ์„ธ์š”.

๋ช…๋ น์€ ๋…๋ฆฝ๋œ ๋ฌธ์ž…๋‹ˆ๋‹ค. ์•ž์˜ ๋ฉ”์‹œ์ง€๋Š” ํ˜ธ์ถœ ์‹œ์ž‘์„ ๋‚˜ํƒ€๋‚ด๋ฉฐ ์„œ๋ฒ„ ๋™์ž‘์˜ ์™„๋ฃŒ๋ฅผ ํ™•์ธํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

UO.Print("Calling UO.SendShopReply");
UO.SendShopReply("");

1. ์ฒซ ๋ฒˆ์งธ ์œ„์น˜์˜ ์œ ๋‹›์„ ์ตœ๋Œ€ 3๊ฐœ ์„ ํƒ - ์ง์ ‘ ์Šคํฌ๋ฆฝํŠธ

๋งค๊ฐœ๋ณ€์ˆ˜์™€ ์‹คํ–‰ ํ๋ฆ„:

  • ์ตœ๋Œ€ 3 ์ฒซ ๋ฒˆ์งธ ์œ„์น˜ ๋‹จ์œ„๊ฐ€ ์„ ํƒ๋ฉ๋‹ˆ๋‹ค. serial ํ”ผ๋ถ€๊ฐ€ ๋”ฑ๋”ฑํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ตฌ๋งค ์ œ์•ˆ์˜ ๊ฒฝ์šฐ ๊ตฌ๋งค์ด๊ณ , ํŒ๋งค ์ œ์•ˆ์˜ ๊ฒฝ์šฐ ํŒ๋งค์ž…๋‹ˆ๋‹ค. ์–ด๋–ค ์ œ์•ˆ์„ ์—ด์—ˆ๋Š”์ง€ ํ™•์ธํ•˜์„ธ์š”.
var rows = UO.GetShopList();
if (Truth(ArrayLength(rows) == 0))
{
    return null;
}
var amount = Convert.ToInt32(ReadField(rows[0], 3, "|"));
if (Truth(amount > 3))
{
    amount = 3;
}
if (Truth(amount > 0))
{
    UO.SendShopReply(ReadField(rows[0], 0, "|") + ":" + Convert.ToString(amount));
}

int ArrayLength(object? value) => value is System.Array array ? array.Length : 0;
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;

string ReadField(object? row, int index, string separator) { string[] fields = (Convert.ToString(row) ?? "").Split(new[] { separator }, StringSplitOptions.None); return index >= 0 && index < fields.Length ? fields[index] : ""; }

2. ์˜ˆ์‚ฐ ๋‚ด์—์„œ ํ•œ ํ•ญ๋ชฉ์”ฉ ์„ ํƒ - ์Šคํฌ๋ฆฝํŠธ ๊ธฐ๋Šฅ

๋งค๊ฐœ๋ณ€์ˆ˜์™€ ์‹คํ–‰ ํ๋ฆ„:

  • BUY ์ œ์•ˆ์—๋งŒ ํ•ด๋‹น: ์˜ˆ์‚ฐ 30, ์œ ํ˜• 0x0E21. ๊ฐ€๊ฒฉ์ด ์–‘์ˆ˜์ด๊ณ  ๋‚จ์€ ์˜ˆ์‚ฐ ๋ฒ”์œ„ ๋‚ด์ธ ๊ฒฝ์šฐ ๊ฐ ์ ๊ฒฉ ํ’ˆ๋ชฉ์—์„œ ํ•˜๋‚˜์˜ ๋‹จ์œ„๊ฐ€ ์„ ํƒ๋ฉ๋‹ˆ๋‹ค. ๋ฌธ์ž์—ด์€ |๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์—ฐ๊ฒฐ๋ฉ๋‹ˆ๋‹ค. ํ•˜๋‚˜์˜ SendShopReply๋Š” ์ „์ฒด ์„ ํƒ ํ•ญ๋ชฉ์„ ๋ณด๋ƒ…๋‹ˆ๋‹ค.
return  RunScenario();
 object? RunScenario()
{
    double budget = 30;
    var reply = "";
    var rows = UO.GetShopList();
    for (int i = (int)(0); i <= ArrayLength(rows) - 1; i += (int)(1))
    {
        var row = rows[i];
        if (Truth(ReadField(row, 1, "|") == "0x0E21"))
        {
            var price = Convert.ToDouble(ReadField(row, 4, "|"));
            var amount = Convert.ToInt32(ReadField(row, 3, "|"));
            if (Truth(price > 0) && Truth(price <= budget) && Truth(amount > 0))
            {
                if (Truth(reply != ""))
                {
                    reply = reply + "|";
                }

                reply = reply + ReadField(row, 0, "|") + ":1";
                budget = budget - price;
            }
        }
    }

    if (Truth(reply != ""))
    {
        UO.SendShopReply(reply);
    }

    return null;
}

int ArrayLength(object? value) => value is System.Array array ? array.Length : 0;
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
string ReadField(object? row, int index, string separator)
{
    string[] fields = (Convert.ToString(row) ?? "").Split(new[] { separator }, StringSplitOptions.None);
    return index >= 0 && index < fields.Length ? fields[index] : "";
}

3. ์ฐฝ ์ดˆ์•ˆ ํ™•์ธ - ์Šคํฌ๋ฆฝํŠธ ํด๋ž˜์Šค

๋งค๊ฐœ๋ณ€์ˆ˜์™€ ์‹คํ–‰ ํ๋ฆ„:

  • ์ƒ์  ์ฐฝ์—์„œ ์ˆ˜๋Ÿ‰์„ ๋ฏธ๋ฆฌ ์„ ํƒํ•˜์„ธ์š”. "accept"๋Š” ์ •ํ™•ํžˆ ์ด ์ดˆ์•ˆ์„ ๋ณด๋ƒ…๋‹ˆ๋‹ค. ๊ฒŒ์ž„ ์ฐฝ์„ ๋‹ซ์œผ๋ฉด ์ €์žฅ๋ฉ๋‹ˆ๋‹ค. ์•„๋ฌด๊ฒƒ๋„ ์„ ํƒํ•˜์ง€ ์•Š์œผ๋ฉด ๋นˆ ์‘๋‹ต์ด ์ „์†ก๋ฉ๋‹ˆ๋‹ค. "1"์€ serial ์ฃผ์ฒด๊ฐ€ ์•„๋‹Œ ํ™•์ธ์˜ ๋™์˜์–ด์ž…๋‹ˆ๋‹ค.
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        UO.SendShopReply("accept");
        return null;
    }
}

4. ์ œ์•ˆ ์ทจ์†Œ - ์ง์ ‘ ์Šคํฌ๋ฆฝํŠธ

๋งค๊ฐœ๋ณ€์ˆ˜์™€ ์‹คํ–‰ ํ๋ฆ„:

  • ๋นˆ ์ค„์€ ๋นˆ ์‘๋‹ต์„ ๋ณด๋‚ด๊ณ  ํ™œ์„ฑ ์ œ์•ˆ์„ ๋‹ซ์Šต๋‹ˆ๋‹ค. GetShopList ๊ฒ€์‚ฌ๋Š” ์ƒํ’ˆ์ด ์—†์„ ๋•Œ ํ˜ธ์ถœ๋˜๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•˜์ง€๋งŒ ๋นˆ ๋ฌธ์žฅ๊ณผ ์—†๋Š” ๋ฌธ์žฅ์„ ๊ตฌ๋ถ„ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

Shop ๋ชฉ๋ก / ๊ตฌ๋งค ๋ฐ ํŒ๋งค ๋ชฉ๋ก

Shop ๋ชฉ๋ก / ๋งค์ˆ˜ ๋ฐ ๋งค๋„ ๋ชฉ๋ก

if (Truth(ArrayLength(UO.GetShopList()) > 0))
{
    UO.SendShopReply("");
}

int ArrayLength(object? value) => value is System.Array array ? array.Length : 0;
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;

๋ช…๋ น ๊ตฌํ˜„

C#์€ ๋Œ€์†Œ๋ฌธ์ž๋ฅผ ๊ตฌ๋ถ„ํ•ฉ๋‹ˆ๋‹ค. ์ •ํ™•ํ•œ UO ์ด๋ฆ„์„ ์‚ฌ์šฉํ•˜์„ธ์š”. ์ˆซ์ž ํ”Œ๋ž˜๊ทธ๋Š” 0๊ณผ ๋น„๊ตํ•˜๊ณ  ๋ฐ˜ํ™˜ ํ˜•์‹์ด bool์ผ ๋•Œ๋งŒ bool์„ ์‚ฌ์šฉํ•˜์„ธ์š”.

UO.SendShopReply(reply) โ€” UO.SendShopReply(Any)

๋งค๊ฐœ๋ณ€์ˆ˜: reply (Any)

๊ฒฐ๊ณผ: void / Unit.

ํ˜ธ์ถœ ์‹œ:

๋‚ด๋ถ€ ๊ตฌํ˜„ ์ฝ”๋“œ์ด๋ฉฐ ๋…๋ฆฝ ์Šคํฌ๋ฆฝํŠธ๋กœ ์‹คํ–‰ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

public void SendShopReply(InjectionValue reply) => bridge.SendShopReply(reply.ToString());

UO.SetAutoBuyDelay

ะฃะบั€ะฐั—ะฝััŒะบะฐ ยท ะ ัƒััะบะธะน ยท English ยท Deutsch ยท Franรงais ยท Italiano ยท Espaรฑol ยท ็น้ซ”ไธญๆ–‡ ยท ๆ—ฅๆœฌ่ชž ยท ํ•œ๊ตญ์–ด

C# ์‹œ๊ทธ๋‹ˆ์ฒ˜

void UO.SetAutoBuyDelay(object? value);

์ž๋™ ๊ตฌ๋งค ์ง€์—ฐ์„ ์„ค์ •ํ•˜๊ณ  ํ˜„์žฌ ํ”„๋กœํ•„์„ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.

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

  • value โ€” ํ•„์š”ํ•œ ๋ฐ€๋ฆฌ์ดˆ ์ˆ˜์ž…๋‹ˆ๋‹ค. ์Œ์ˆ˜ ๊ฐ’์€ 0๋กœ ์ œํ•œ๋˜๊ณ , 65535๋ณด๋‹ค ํฐ ๊ฐ’์€ 65535 ์ˆ˜๋กœ ์ œํ•œ๋ฉ๋‹ˆ๋‹ค. 0๋Š” ์ถ”๊ฐ€ ์ง€์—ฐ์„ ๋น„ํ™œ์„ฑํ™”ํ•˜์ง€๋งŒ ์ž๋™ ๊ฑฐ๋ž˜ ์ž์ฒด๋ฅผ ๋น„ํ™œ์„ฑํ™”ํ•˜์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค.

๋ฐ˜ํ™˜๊ฐ’

void - ๋ฐ˜ํ™˜ ๊ฐ’์ด ์—†์Šต๋‹ˆ๋‹ค. ๋ณ„๋„์˜ ํšŒ์„ ์œผ๋กœ ํ˜ธ์ถœํ•œ ๋‹ค์Œ GetAutoBuyDelay()๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํšจ๊ณผ์ ์ธ ์„ค์ •์„ ์ฝ์Šต๋‹ˆ๋‹ค. ํ”„๋กœํ•„์ด ์—†์œผ๋ฉด setter๋Š” ์•„๋ฌด๊ฒƒ๋„ ์ €์žฅํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ด ์ƒํƒœ์˜ getter๋Š” ํ‘œ์ค€ 3 ms๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

๋™์ž‘

  • ์„ค์ •์€ ํ˜„์žฌ ํ”„๋กœํ•„์— ๋Œ€ํ•œ ์ผ๋ฐ˜์ ์ธ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ์Šคํฌ๋ฆฝํŠธ ๋˜๋Š” UI์˜ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์€ ๋‹ค์Œ์— ์ฝ์„ ๋•Œ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. 0์€ ์œ ํšจํ•œ ์„ค์ •์ด๋ฉฐ, ๋ฐ์ดํ„ฐ ๋ˆ„๋ฝ์˜ ์ง•ํ›„๊ฐ€ ์•„๋‹ˆ๋ฉฐ ์ด์ „ ์Šคํฌ๋ฆฝํŠธ ์บ์‹œ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ์ด์œ ๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค.
  • ๊ธฐ๋ณธ๊ฐ’์€ 3ms์ž…๋‹ˆ๋‹ค. ์ž๋™ ์ž‘์—…์„ ๋ณด๋‚ธ ํ›„ ๊ด€๋ฆฌ์ž๋Š” ๋‹ค์Œ ํ—ˆ์šฉ ์ž‘์—… ์‹œ๊ฐ„์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. ์ด์ „์— ๋„์ฐฉํ•œ ๊ณต๊ธ‰์—…์ฒด ๋ชฉ๋ก์€ ์ด ํŒจ์Šค๋กœ ์ฒ˜๋ฆฌ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. getter๋Š” ๋Œ€๊ธฐ๋ฅผ ํŠธ๋ฆฌ๊ฑฐํ•˜์ง€ ์•Š์œผ๋ฉฐ ๊ตฌ๋งค/ํŒ๋งค ์ž์ฒด๋ฅผ ๋ณด๋‚ด์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • ์ด๋Š” MassMove, Drag/Drop ๋˜๋Š” ์ˆ˜๋™ ๊ฑฐ๋ž˜์˜ ์ง€์—ฐ์ด ์•„๋‹™๋‹ˆ๋‹ค. ๋‹ค์Œ ์ง€์—ฐ์„ ์˜ˆ์•ฝํ•  ๋•Œ ์ƒˆ ๊ฐ’์ด ์ ์šฉ๋ฉ๋‹ˆ๋‹ค. ์ด๋ฏธ ํ• ๋‹น๋œ ์ˆœ๊ฐ„์€ ๋‹ค์‹œ ๊ณ„์‚ฐ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • ์ผ๋ฐ˜ ํด๋ผ์ด์–ธํŠธ ํ˜ธ์ŠคํŠธ์—์„œ ์ด ์ƒํƒœ ๋ฐ์ดํ„ฐ๋Š” GetPersistentState ๊ด€๋ฆฌ์ž์—์„œ ๊ฐ€์ ธ์˜ค๋ฉฐ ๋™์ผํ•œ ์›”๋“œ/ํ”„๋กœํ•„์˜ ์Šคํฌ๋ฆฝํŠธ/์ฑ„ํŒ…/๋งคํฌ๋กœ์— ๊ณตํ†ต๋˜๋ฉฐ ํ•˜๋‚˜์˜ ์Šคํฌ๋ฆฝํŠธ์— ์†ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค ๋˜๋Š” ๋ช…๋ฐฑํžˆ ๋ณ„๋„์˜ InjectionRuntimeState๊ฐ€ ๋‹ค๋ฅธ ์ƒํƒœ๋ฅผ ๊ฐ–์Šต๋‹ˆ๋‹ค. ํ”„๋กœํ•„์„ ๋กœ๋“œ/์‚ญ์ œํ•˜๋ฉด ํ”„๋กœํ•„์„ ๋Œ€์ฒดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ €์žฅ๋œ serial๋Š” ์—ฌ์ „ํžˆ ๋กœ๋“œ๋œ ์„ธ๊ณ„์™€ ๋น„๊ตํ•˜์—ฌ ํ™•์ธ๋ฉ๋‹ˆ๋‹ค.

๋…๋ฆฝ ์‹คํ–‰ C# ์Šคํฌ๋ฆฝํŠธ

๊ฐ ์˜ˆ์ œ๋Š” ๋ณ„๋„์˜ ํŒŒ์ผ .csx๋กœ ์ €์žฅํ•˜๊ณ  IDE์—์„œ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. UO ๊ฐœ์ฒด์™€ ๋Œ€๊ธฐ ๊ธฐ๋Šฅ์€ ํ˜„์žฌ ๊ฒŒ์ž„ ์„ธ์…˜์˜ ํ˜ธ์ŠคํŠธ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ๋ฐ๋ชจ serial ์ด๋ฆ„, ์ขŒํ‘œ, ์ฃผ์†Œ๋ฅผ ์ž์‹ ์˜ ๊ฒƒ์œผ๋กœ ๋ฐ”๊พธ์„ธ์š”.

๊ฐ„๋‹จํ•œ ์˜ˆ์ œ

์ด ์ฝ”๋“œ๋ฅผ ๋ณ„๋„์˜ .csx ํŒŒ์ผ๋กœ ์‹คํ–‰ํ•˜์„ธ์š”. ์ธ์ˆ˜๋Š” ํ˜ธ์ถœ์— ์ง์ ‘ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. ์˜ˆ์ œ์˜ ์ด๋ฆ„, serial, ์ฃผ์†Œ๋ฅผ ์ž์‹ ์˜ ๊ฐ’์œผ๋กœ ๋ฐ”๊พธ์„ธ์š”.

๋ช…๋ น์€ ๋…๋ฆฝ๋œ ๋ฌธ์ž…๋‹ˆ๋‹ค. ์•ž์˜ ๋ฉ”์‹œ์ง€๋Š” ํ˜ธ์ถœ ์‹œ์ž‘์„ ๋‚˜ํƒ€๋‚ด๋ฉฐ ์„œ๋ฒ„ ๋™์ž‘์˜ ์™„๋ฃŒ๋ฅผ ํ™•์ธํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

UO.Print("Calling UO.SetAutoBuyDelay");
UO.SetAutoBuyDelay(350);

1. ๊ฐ„๊ฒฉ ์„ค์ • 350 ms - ์ง์ ‘ ์Šคํฌ๋ฆฝํŠธ

๋งค๊ฐœ๋ณ€์ˆ˜์™€ ์‹คํ–‰ ํ๋ฆ„:

  • ๊ฐ’=350 โ€” ํ—ˆ์šฉ๋˜๋Š” ์ž๋™ ์ž‘์—… ์‚ฌ์ด์˜ ๋ฐ€๋ฆฌ์ดˆ์ž…๋‹ˆ๋‹ค.
  • ์„ค์ •์€ ํ˜„์žฌ ํ”„๋กœํ•„์— ์ €์žฅ๋˜๋ฉฐ ๋‹ค๋ฅธ ์Šคํฌ๋ฆฝํŠธ์— ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.
UO.SetAutoBuyDelay(350);
UO.Print(Convert.ToString(UO.GetAutoBuyDelay()));

2. ์ถ”๊ฐ€ ์ง€์—ฐ ์ œ๊ฑฐ - ์Šคํฌ๋ฆฝํŠธ ๊ธฐ๋Šฅ

๋งค๊ฐœ๋ณ€์ˆ˜์™€ ์‹คํ–‰ ํ๋ฆ„:

  • Value=0๋Š” ๋…๋ฆฝ์ ์ธ ์˜๋ฏธ๋ฅผ ๊ฐ–์Šต๋‹ˆ๋‹ค. 0์ด ์•„๋‹Œ ์ด์ „ ๊ฐ’์œผ๋กœ ๋Œ€์ฒด๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • ์ง€์—ฐ๋งŒ ๋ณ€๊ฒฝ๋ฉ๋‹ˆ๋‹ค. ๋ฃฐ, ๋ฆฌ์ŠคํŠธ, ์ผ๋ฐ˜ ์ž๋™๋งค๋งค ์Šค์œ„์น˜๋Š” ๋ณ„๋„๋กœ ์„ค์ •๋ฉ๋‹ˆ๋‹ค.
return  RunScenario();
 object? RunScenario()
{
    UO.SetAutoBuyDelay(0);
    var actual = UO.GetAutoBuyDelay();
    if (Truth(actual == 0))
    {
        UO.Print("Delay disabled");
    }

    return null;
}

bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;

3. ๊ณ„์‚ฐ๋œ ๊ฐ’ ์ ์šฉ - ์Šคํฌ๋ฆฝํŠธ ํด๋ž˜์Šค

๋งค๊ฐœ๋ณ€์ˆ˜์™€ ์‹คํ–‰ ํ๋ฆ„:

  • ์š”์ฒญ=70000์ด ์ตœ๋Œ€๊ฐ’์„ ์ดˆ๊ณผํ–ˆ์Šต๋‹ˆ๋‹ค. Apply๋Š” ์„ค์ •์ž ์ œํ•œ ํ›„ ํ”„๋กœํ•„์„ ์ฝ์Šต๋‹ˆ๋‹ค.
  • ํ”„๋กœํ•„์ด ๋กœ๋“œ๋˜๋ฉด ๊ฒฐ๊ณผ๋Š” 65535๊ฐ€ ๋ฉ๋‹ˆ๋‹ค. ํ‘œ์ค€ ์ง€์—ฐ์œผ๋กœ ๋˜๋Œ๋ฆฌ๋ ค๋ฉด 3๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ช…์‹œ์ ์œผ๋กœ setter๋ฅผ ํ˜ธ์ถœํ•˜์„ธ์š”.
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        var requested = 70000;
        UO.SetAutoBuyDelay(requested);
        var applied = UO.GetAutoBuyDelay();
        UO.Print("Requested: " + Convert.ToString(requested));
        UO.Print("Applied: " + Convert.ToString(applied));
        return null;
    }
}

๋ช…๋ น ๊ตฌํ˜„

C#์€ ๋Œ€์†Œ๋ฌธ์ž๋ฅผ ๊ตฌ๋ถ„ํ•ฉ๋‹ˆ๋‹ค. ์ •ํ™•ํ•œ UO ์ด๋ฆ„์„ ์‚ฌ์šฉํ•˜์„ธ์š”. ์ˆซ์ž ํ”Œ๋ž˜๊ทธ๋Š” 0๊ณผ ๋น„๊ตํ•˜๊ณ  ๋ฐ˜ํ™˜ ํ˜•์‹์ด bool์ผ ๋•Œ๋งŒ bool์„ ์‚ฌ์šฉํ•˜์„ธ์š”.

UO.SetAutoBuyDelay(value) โ€” UO.SetAutoBuyDelay(Any)

๋งค๊ฐœ๋ณ€์ˆ˜: value (Any)

๊ฒฐ๊ณผ: void / Unit.

ํ˜ธ์ถœ ์‹œ:

๋‚ด๋ถ€ ๊ตฌํ˜„ ์ฝ”๋“œ์ด๋ฉฐ ๋…๋ฆฝ ์Šคํฌ๋ฆฝํŠธ๋กœ ์‹คํ–‰ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

case "setautobuydelay":

                    state.AutoBuyDelay = Math.Max(0, Arg(0));

                    bridge.SetAutoBuyDelay(state.AutoBuyDelay);

                    return InjectionValue.Unit;

UO.SetAutoSellDelay

ะฃะบั€ะฐั—ะฝััŒะบะฐ ยท ะ ัƒััะบะธะน ยท English ยท Deutsch ยท Franรงais ยท Italiano ยท Espaรฑol ยท ็น้ซ”ไธญๆ–‡ ยท ๆ—ฅๆœฌ่ชž ยท ํ•œ๊ตญ์–ด

C# ์‹œ๊ทธ๋‹ˆ์ฒ˜

void UO.SetAutoSellDelay(object? value);

์ž๋™ ํŒ๋งค ์ง€์—ฐ์„ ์„ค์ •ํ•˜๊ณ  ํ˜„์žฌ ํ”„๋กœํ•„์„ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.

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

  • value โ€” ํ•„์š”ํ•œ ๋ฐ€๋ฆฌ์ดˆ ์ˆ˜์ž…๋‹ˆ๋‹ค. ์Œ์ˆ˜ ๊ฐ’์€ 0๋กœ ์ œํ•œ๋˜๊ณ , 65535๋ณด๋‹ค ํฐ ๊ฐ’์€ 65535 ์ˆ˜๋กœ ์ œํ•œ๋ฉ๋‹ˆ๋‹ค. 0๋Š” ์ถ”๊ฐ€ ์ง€์—ฐ์„ ๋น„ํ™œ์„ฑํ™”ํ•˜์ง€๋งŒ ์ž๋™ ๊ฑฐ๋ž˜ ์ž์ฒด๋ฅผ ๋น„ํ™œ์„ฑํ™”ํ•˜์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค.

๋ฐ˜ํ™˜๊ฐ’

void - ๋ฐ˜ํ™˜ ๊ฐ’์ด ์—†์Šต๋‹ˆ๋‹ค. ๋ณ„๋„์˜ ํšŒ์„ ์œผ๋กœ ํ˜ธ์ถœํ•œ ๋‹ค์Œ GetAutoSellDelay()๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํšจ๊ณผ์ ์ธ ์„ค์ •์„ ์ฝ์Šต๋‹ˆ๋‹ค. ํ”„๋กœํ•„์ด ์—†์œผ๋ฉด setter๋Š” ์•„๋ฌด๊ฒƒ๋„ ์ €์žฅํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ด ์ƒํƒœ์˜ getter๋Š” ํ‘œ์ค€ 3 ms๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

๋™์ž‘

  • ์„ค์ •์€ ํ˜„์žฌ ํ”„๋กœํ•„์— ๋Œ€ํ•œ ์ผ๋ฐ˜์ ์ธ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ์Šคํฌ๋ฆฝํŠธ ๋˜๋Š” UI์˜ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์€ ๋‹ค์Œ์— ์ฝ์„ ๋•Œ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. 0์€ ์œ ํšจํ•œ ์„ค์ •์ด๋ฉฐ, ๋ฐ์ดํ„ฐ ๋ˆ„๋ฝ์˜ ์ง•ํ›„๊ฐ€ ์•„๋‹ˆ๋ฉฐ ์ด์ „ ์Šคํฌ๋ฆฝํŠธ ์บ์‹œ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ์ด์œ ๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค.
  • ๊ธฐ๋ณธ๊ฐ’์€ 3ms์ž…๋‹ˆ๋‹ค. ์ž๋™ ์ž‘์—…์„ ๋ณด๋‚ธ ํ›„ ๊ด€๋ฆฌ์ž๋Š” ๋‹ค์Œ ํ—ˆ์šฉ ์ž‘์—… ์‹œ๊ฐ„์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. ์ด์ „์— ๋„์ฐฉํ•œ ๊ณต๊ธ‰์—…์ฒด ๋ชฉ๋ก์€ ์ด ํŒจ์Šค๋กœ ์ฒ˜๋ฆฌ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. getter๋Š” ๋Œ€๊ธฐ๋ฅผ ํŠธ๋ฆฌ๊ฑฐํ•˜์ง€ ์•Š์œผ๋ฉฐ ๊ตฌ๋งค/ํŒ๋งค ์ž์ฒด๋ฅผ ๋ณด๋‚ด์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • ์ด๋Š” MassMove, Drag/Drop ๋˜๋Š” ์ˆ˜๋™ ๊ฑฐ๋ž˜์˜ ์ง€์—ฐ์ด ์•„๋‹™๋‹ˆ๋‹ค. ๋‹ค์Œ ์ง€์—ฐ์„ ์˜ˆ์•ฝํ•  ๋•Œ ์ƒˆ ๊ฐ’์ด ์ ์šฉ๋ฉ๋‹ˆ๋‹ค. ์ด๋ฏธ ํ• ๋‹น๋œ ์ˆœ๊ฐ„์€ ๋‹ค์‹œ ๊ณ„์‚ฐ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • ์ผ๋ฐ˜ ํด๋ผ์ด์–ธํŠธ ํ˜ธ์ŠคํŠธ์—์„œ ์ด ์ƒํƒœ ๋ฐ์ดํ„ฐ๋Š” GetPersistentState ๊ด€๋ฆฌ์ž์—์„œ ๊ฐ€์ ธ์˜ค๋ฉฐ ๋™์ผํ•œ ์›”๋“œ/ํ”„๋กœํ•„์˜ ์Šคํฌ๋ฆฝํŠธ/์ฑ„ํŒ…/๋งคํฌ๋กœ์— ๊ณตํ†ต๋˜๋ฉฐ ํ•˜๋‚˜์˜ ์Šคํฌ๋ฆฝํŠธ์— ์†ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค ๋˜๋Š” ๋ช…๋ฐฑํžˆ ๋ณ„๋„์˜ InjectionRuntimeState๊ฐ€ ๋‹ค๋ฅธ ์ƒํƒœ๋ฅผ ๊ฐ–์Šต๋‹ˆ๋‹ค. ํ”„๋กœํ•„์„ ๋กœ๋“œ/์‚ญ์ œํ•˜๋ฉด ํ”„๋กœํ•„์„ ๋Œ€์ฒดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ €์žฅ๋œ serial๋Š” ์—ฌ์ „ํžˆ ๋กœ๋“œ๋œ ์„ธ๊ณ„์™€ ๋น„๊ตํ•˜์—ฌ ํ™•์ธ๋ฉ๋‹ˆ๋‹ค.

๋…๋ฆฝ ์‹คํ–‰ C# ์Šคํฌ๋ฆฝํŠธ

๊ฐ ์˜ˆ์ œ๋Š” ๋ณ„๋„์˜ ํŒŒ์ผ .csx๋กœ ์ €์žฅํ•˜๊ณ  IDE์—์„œ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. UO ๊ฐœ์ฒด์™€ ๋Œ€๊ธฐ ๊ธฐ๋Šฅ์€ ํ˜„์žฌ ๊ฒŒ์ž„ ์„ธ์…˜์˜ ํ˜ธ์ŠคํŠธ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ๋ฐ๋ชจ serial ์ด๋ฆ„, ์ขŒํ‘œ, ์ฃผ์†Œ๋ฅผ ์ž์‹ ์˜ ๊ฒƒ์œผ๋กœ ๋ฐ”๊พธ์„ธ์š”.

๊ฐ„๋‹จํ•œ ์˜ˆ์ œ

์ด ์ฝ”๋“œ๋ฅผ ๋ณ„๋„์˜ .csx ํŒŒ์ผ๋กœ ์‹คํ–‰ํ•˜์„ธ์š”. ์ธ์ˆ˜๋Š” ํ˜ธ์ถœ์— ์ง์ ‘ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. ์˜ˆ์ œ์˜ ์ด๋ฆ„, serial, ์ฃผ์†Œ๋ฅผ ์ž์‹ ์˜ ๊ฐ’์œผ๋กœ ๋ฐ”๊พธ์„ธ์š”.

๋ช…๋ น์€ ๋…๋ฆฝ๋œ ๋ฌธ์ž…๋‹ˆ๋‹ค. ์•ž์˜ ๋ฉ”์‹œ์ง€๋Š” ํ˜ธ์ถœ ์‹œ์ž‘์„ ๋‚˜ํƒ€๋‚ด๋ฉฐ ์„œ๋ฒ„ ๋™์ž‘์˜ ์™„๋ฃŒ๋ฅผ ํ™•์ธํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

UO.Print("Calling UO.SetAutoSellDelay");
UO.SetAutoSellDelay(350);

1. ๊ฐ„๊ฒฉ ์„ค์ • 350 ms - ์ง์ ‘ ์Šคํฌ๋ฆฝํŠธ

๋งค๊ฐœ๋ณ€์ˆ˜์™€ ์‹คํ–‰ ํ๋ฆ„:

  • ๊ฐ’=350 โ€” ํ—ˆ์šฉ๋˜๋Š” ์ž๋™ ์ž‘์—… ์‚ฌ์ด์˜ ๋ฐ€๋ฆฌ์ดˆ์ž…๋‹ˆ๋‹ค.
  • ์„ค์ •์€ ํ˜„์žฌ ํ”„๋กœํ•„์— ์ €์žฅ๋˜๋ฉฐ ๋‹ค๋ฅธ ์Šคํฌ๋ฆฝํŠธ์— ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.
UO.SetAutoSellDelay(350);
UO.Print(Convert.ToString(UO.GetAutoSellDelay()));

2. ์ถ”๊ฐ€ ์ง€์—ฐ ์ œ๊ฑฐ - ์Šคํฌ๋ฆฝํŠธ ๊ธฐ๋Šฅ

๋งค๊ฐœ๋ณ€์ˆ˜์™€ ์‹คํ–‰ ํ๋ฆ„:

  • Value=0๋Š” ๋…๋ฆฝ์ ์ธ ์˜๋ฏธ๋ฅผ ๊ฐ–์Šต๋‹ˆ๋‹ค. 0์ด ์•„๋‹Œ ์ด์ „ ๊ฐ’์œผ๋กœ ๋Œ€์ฒด๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • ์ง€์—ฐ๋งŒ ๋ณ€๊ฒฝ๋ฉ๋‹ˆ๋‹ค. ๋ฃฐ, ๋ฆฌ์ŠคํŠธ, ์ผ๋ฐ˜ ์ž๋™๋งค๋งค ์Šค์œ„์น˜๋Š” ๋ณ„๋„๋กœ ์„ค์ •๋ฉ๋‹ˆ๋‹ค.
return  RunScenario();
 object? RunScenario()
{
    UO.SetAutoSellDelay(0);
    var actual = UO.GetAutoSellDelay();
    if (Truth(actual == 0))
    {
        UO.Print("Delay disabled");
    }

    return null;
}

bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;

3. ๊ณ„์‚ฐ๋œ ๊ฐ’ ์ ์šฉ - ์Šคํฌ๋ฆฝํŠธ ํด๋ž˜์Šค

๋งค๊ฐœ๋ณ€์ˆ˜์™€ ์‹คํ–‰ ํ๋ฆ„:

  • ์š”์ฒญ=70000์ด ์ตœ๋Œ€๊ฐ’์„ ์ดˆ๊ณผํ–ˆ์Šต๋‹ˆ๋‹ค. Apply๋Š” ์„ค์ •์ž ์ œํ•œ ํ›„ ํ”„๋กœํ•„์„ ์ฝ์Šต๋‹ˆ๋‹ค.
  • ํ”„๋กœํ•„์ด ๋กœ๋“œ๋˜๋ฉด ๊ฒฐ๊ณผ๋Š” 65535๊ฐ€ ๋ฉ๋‹ˆ๋‹ค. ํ‘œ์ค€ ์ง€์—ฐ์œผ๋กœ ๋˜๋Œ๋ฆฌ๋ ค๋ฉด 3๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ช…์‹œ์ ์œผ๋กœ setter๋ฅผ ํ˜ธ์ถœํ•˜์„ธ์š”.
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        var requested = 70000;
        UO.SetAutoSellDelay(requested);
        var applied = UO.GetAutoSellDelay();
        UO.Print("Requested: " + Convert.ToString(requested));
        UO.Print("Applied: " + Convert.ToString(applied));
        return null;
    }
}

๋ช…๋ น ๊ตฌํ˜„

C#์€ ๋Œ€์†Œ๋ฌธ์ž๋ฅผ ๊ตฌ๋ถ„ํ•ฉ๋‹ˆ๋‹ค. ์ •ํ™•ํ•œ UO ์ด๋ฆ„์„ ์‚ฌ์šฉํ•˜์„ธ์š”. ์ˆซ์ž ํ”Œ๋ž˜๊ทธ๋Š” 0๊ณผ ๋น„๊ตํ•˜๊ณ  ๋ฐ˜ํ™˜ ํ˜•์‹์ด bool์ผ ๋•Œ๋งŒ bool์„ ์‚ฌ์šฉํ•˜์„ธ์š”.

UO.SetAutoSellDelay(value) โ€” UO.SetAutoSellDelay(Any)

๋งค๊ฐœ๋ณ€์ˆ˜: value (Any)

๊ฒฐ๊ณผ: void / Unit.

ํ˜ธ์ถœ ์‹œ:

๋‚ด๋ถ€ ๊ตฌํ˜„ ์ฝ”๋“œ์ด๋ฉฐ ๋…๋ฆฝ ์Šคํฌ๋ฆฝํŠธ๋กœ ์‹คํ–‰ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

case "setautoselldelay":

                    state.AutoSellDelay = Math.Max(0, Arg(0));

                    bridge.SetAutoSellDelay(state.AutoSellDelay);

                    return InjectionValue.Unit;

UO.Shop

ะฃะบั€ะฐั—ะฝััŒะบะฐ ยท ะ ัƒััะบะธะน ยท English ยท Deutsch ยท Franรงais ยท Italiano ยท Espaรฑol ยท ็น้ซ”ไธญๆ–‡ ยท ๆ—ฅๆœฌ่ชž ยท ํ•œ๊ตญ์–ด

C# ์‹œ๊ทธ๋‹ˆ์ฒ˜

void UO.Shop();

์ง€์—ญ ๋ฌด์—ญ ๋ผ์ธ ๋ชฉ๋ก์„ ์ธ์‡„ํ•ฉ๋‹ˆ๋‹ค.

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

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

๋ฐ˜ํ™˜๊ฐ’

void - ๊ฐ’์ด ์—†์Šต๋‹ˆ๋‹ค. ๋ณ„๋„์˜ ํšŒ์„ ์œผ๋กœ ์ „ํ™”ํ•˜์„ธ์š”. ์™„๋ฃŒ๋Š” ์„œ๋ฒ„์˜ ์ž‘์—…์„ ํ™•์ธํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋™์ž‘

  • ExecuteLegacyManualAlias๋Š” ๋ธŒ๋ฆฌ์ง€๋ฅผ ์ฝ๊ณ  GetShopList๋Š” "|"๋ฅผ ํ†ตํ•ด ํ–‰์„ ์—ฐ๊ฒฐํ•ฉ๋‹ˆ๋‹ค. SystemMessage์šฉ. ํŒ๋งค์ž ๋ฉ”๋‰ด๊ฐ€ ์—ด๋ฆฌ์ง€ ์•Š์œผ๋ฉฐ, ๋งค์ˆ˜/๋งค๋„๊ฐ€ ์ด๋ฃจ์–ด์ง€์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • ์ง€์ •๋œ ๋กœ์ปฌ ๋ฐ์ดํ„ฐ๋งŒ ์ˆ˜์ •ํ•˜๊ฑฐ๋‚˜ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค. ์ด ๋ช…๋ น์—๋Š” ์„œ๋ฒ„ ํ™•์ธ์ด ์—†์Šต๋‹ˆ๋‹ค.

๋…๋ฆฝ ์‹คํ–‰ C# ์Šคํฌ๋ฆฝํŠธ

๊ฐ ์˜ˆ์ œ๋Š” ๋ณ„๋„์˜ ํŒŒ์ผ .csx๋กœ ์ €์žฅํ•˜๊ณ  IDE์—์„œ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. UO ๊ฐœ์ฒด์™€ ๋Œ€๊ธฐ ๊ธฐ๋Šฅ์€ ํ˜„์žฌ ๊ฒŒ์ž„ ์„ธ์…˜์˜ ํ˜ธ์ŠคํŠธ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ๋ฐ๋ชจ serial ์ด๋ฆ„, ์ขŒํ‘œ, ์ฃผ์†Œ๋ฅผ ์ž์‹ ์˜ ๊ฒƒ์œผ๋กœ ๋ฐ”๊พธ์„ธ์š”.

๊ฐ„๋‹จํ•œ ์˜ˆ์ œ

์ด ์ฝ”๋“œ๋ฅผ ๋ณ„๋„์˜ .csx ํŒŒ์ผ๋กœ ์‹คํ–‰ํ•˜์„ธ์š”. ์ธ์ˆ˜๋Š” ํ˜ธ์ถœ์— ์ง์ ‘ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. ์˜ˆ์ œ์˜ ์ด๋ฆ„, serial, ์ฃผ์†Œ๋ฅผ ์ž์‹ ์˜ ๊ฐ’์œผ๋กœ ๋ฐ”๊พธ์„ธ์š”.

๋ช…๋ น์€ ๋…๋ฆฝ๋œ ๋ฌธ์ž…๋‹ˆ๋‹ค. ์•ž์˜ ๋ฉ”์‹œ์ง€๋Š” ํ˜ธ์ถœ ์‹œ์ž‘์„ ๋‚˜ํƒ€๋‚ด๋ฉฐ ์„œ๋ฒ„ ๋™์ž‘์˜ ์™„๋ฃŒ๋ฅผ ํ™•์ธํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

UO.Print("Calling UO.Shop");
UO.Shop();

1. ์ง์ ‘ ํ†ตํ™” - ์ง์ ‘ ์Šคํฌ๋ฆฝํŠธ

๋งค๊ฐœ๋ณ€์ˆ˜์™€ ์‹คํ–‰ ํ๋ฆ„:

  • ์ง€์—ญ ๋ฌด์—ญ ๋ผ์ธ ๋ชฉ๋ก์„ ์ธ์‡„ํ•ฉ๋‹ˆ๋‹ค.
UO.Shop();

2. ๋ช…์‹œ์  ์˜ต์…˜ - ์Šคํฌ๋ฆฝํŠธ ๊ธฐ๋Šฅ

๋งค๊ฐœ๋ณ€์ˆ˜์™€ ์‹คํ–‰ ํ๋ฆ„:

  • ExecuteLegacyManualAlias๋Š” ๋ธŒ๋ฆฌ์ง€๋ฅผ ์ฝ๊ณ  GetShopList๋Š” "|"๋ฅผ ํ†ตํ•ด ํ–‰์„ ์—ฐ๊ฒฐํ•ฉ๋‹ˆ๋‹ค. SystemMessage์šฉ. ํŒ๋งค์ž ๋ฉ”๋‰ด๊ฐ€ ์—ด๋ฆฌ์ง€ ์•Š์œผ๋ฉฐ, ๋งค์ˆ˜/๋งค๋„๊ฐ€ ์ด๋ฃจ์–ด์ง€์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
return  RunScenario();
 object? RunScenario()
{
    UO.Shop();
    UO.Print(UO.GetArrayLength(UO.GetShopList()));
    return null;
}

3. ์ „์ฒด ๋„์šฐ๋ฏธ ๊ธฐ๋Šฅ - ์Šคํฌ๋ฆฝํŠธ ํด๋ž˜์Šค

๋งค๊ฐœ๋ณ€์ˆ˜์™€ ์‹คํ–‰ ํ๋ฆ„:

  • ์ง€์ •๋œ ๋กœ์ปฌ ๋ฐ์ดํ„ฐ๋งŒ ์ˆ˜์ •ํ•˜๊ฑฐ๋‚˜ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค. ์ด ๋ช…๋ น์—๋Š” ์„œ๋ฒ„ ํ™•์ธ์ด ์—†์Šต๋‹ˆ๋‹ค.
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        UO.Shop();
        UO.TextOpen();
        UO.TextPrint("Shop list was printed in the journal");
        return null;
    }
}

๋ช…๋ น ๊ตฌํ˜„

C#์€ ๋Œ€์†Œ๋ฌธ์ž๋ฅผ ๊ตฌ๋ถ„ํ•ฉ๋‹ˆ๋‹ค. ์ •ํ™•ํ•œ UO ์ด๋ฆ„์„ ์‚ฌ์šฉํ•˜์„ธ์š”. ์ˆซ์ž ํ”Œ๋ž˜๊ทธ๋Š” 0๊ณผ ๋น„๊ตํ•˜๊ณ  ๋ฐ˜ํ™˜ ํ˜•์‹์ด bool์ผ ๋•Œ๋งŒ bool์„ ์‚ฌ์šฉํ•˜์„ธ์š”.

UO.Shop() โ€” UO.Shop()

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

๊ฒฐ๊ณผ: void / Unit.

ํ˜ธ์ถœ ์‹œ:

๋‚ด๋ถ€ ๊ตฌํ˜„ ์ฝ”๋“œ์ด๋ฉฐ ๋…๋ฆฝ ์Šคํฌ๋ฆฝํŠธ๋กœ ์‹คํ–‰ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

case "shop": SystemMessage(string.Join(" | ", bridge.GetShopList())); break;

UO.VendorMenu

ะฃะบั€ะฐั—ะฝััŒะบะฐ ยท ะ ัƒััะบะธะน ยท English ยท Deutsch ยท Franรงais ยท Italiano ยท Espaรฑol ยท ็น้ซ”ไธญๆ–‡ ยท ๆ—ฅๆœฌ่ชž ยท ํ•œ๊ตญ์–ด

C# ์‹œ๊ทธ๋‹ˆ์ฒ˜

void UO.VendorMenu(object? vendor);
void UO.VendorMenu(object? menu, object? choice);

ํŒ๋งค์ž๋ฅผ ์ด์šฉํ•˜๊ฑฐ๋‚˜ ์˜๊ตฌ ๋ฉ”๋‰ดํ›…์„ ๋“ฑ๋กํ•ฉ๋‹ˆ๋‹ค.

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

  • vendor โ€” ํ•˜๋‚˜์˜ ์ธ์ˆ˜๊ฐ€ ์žˆ๋Š” ์–‘์‹: serial/ํŒ๋งค์ž ๊ฐœ์ฒด์˜ ๋ณ„์นญ.
  • menu โ€” ์ œ๋ชฉ๊ณผ ๋ฉ”๋‰ด ์š”์†Œ๋ผ๋Š” ๋‘ ๊ฐœ์˜ ์ธ์ˆ˜๊ฐ€ ๋ชจ๋‘ ํ…์ŠคํŠธ๋กœ ํฌํ•จ๋œ ์–‘์‹์ž…๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ๋‹ค๋ฅธ ์ž‘์—…์ž…๋‹ˆ๋‹ค. ์ฒซ ๋ฒˆ์งธ ์ธ์ˆ˜๋Š” serial์ด ์•„๋‹™๋‹ˆ๋‹ค.
  • choice โ€” ์ œ๋ชฉ๊ณผ ๋ฉ”๋‰ด ์š”์†Œ๋ผ๋Š” ๋‘ ๊ฐœ์˜ ์ธ์ˆ˜๊ฐ€ ๋ชจ๋‘ ํ…์ŠคํŠธ๋กœ ํฌํ•จ๋œ ์–‘์‹์ž…๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ๋‹ค๋ฅธ ์ž‘์—…์ž…๋‹ˆ๋‹ค. ์ฒซ ๋ฒˆ์งธ ์ธ์ˆ˜๋Š” serial์ด ์•„๋‹™๋‹ˆ๋‹ค.

๋ฐ˜ํ™˜๊ฐ’

void - ๊ฐ’์ด ์—†์Šต๋‹ˆ๋‹ค. ๋ณ„๋„์˜ ํšŒ์„ ์œผ๋กœ ์ „ํ™”ํ•˜์„ธ์š”. ์™„๋ฃŒ๋Š” ์„œ๋ฒ„์˜ ์ž‘์—…์„ ํ™•์ธํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋™์ž‘

  • ํ•˜๋‚˜์˜ ์ธ์ˆ˜๋Š” ๋ธŒ๋ฆฌ์ง€๋ฅผ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค.UseObject. ๋‘ ์ธ์ˆ˜๋Š” bridge.AddMenuHook(menu,choice,true)๋ฅผ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ true๋Š” ๋ฐ˜๋ณต ๊ฐ€๋Šฅํ•œ ํ›„ํฌ๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.
  • ์ž๋™์œผ๋กœ ๊ตฌ๋งคํ•˜๊ฑฐ๋‚˜ ํŒ๋งคํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋ฉ”๋‰ด ์—ด๊ธฐ ๋ฐ ์„ ํƒ์€ ์„œ๋ฒ„์— ์˜ํ•ด ๊ฒฐ์ •๋ฉ๋‹ˆ๋‹ค. ๋“ฑ๋ก๋œ ํ›„ํฌ๋Š” ์ทจ์†Œ๋  ๋•Œ๊นŒ์ง€ ์ผ์น˜ํ•˜๋Š” ๋‹ค์Œ ๋ฉ”๋‰ด์—์„œ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.
  • ๋ฉ”๋‰ด/์„ ํƒ ์–‘์‹์˜ ๊ฒฝ์šฐ ๊ด€๋ฆฌ์ž๋Š” ์ œ๋ชฉ์— ๋Œ€์†Œ๋ฌธ์ž๋ฅผ ๊ตฌ๋ถ„ํ•˜์ง€ ์•Š๋Š” ํ”„๋กฌํ”„ํŠธ๊ฐ€ ํฌํ•จ๋œ ์ฒซ ๋ฒˆ์งธ ๋ฉ”๋‰ด๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค. SessionMenu๋Š” ์ด๋ฆ„์— choice๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ๊ณ  ๋Œ€์†Œ๋ฌธ์ž๋ฅผ ๊ตฌ๋ถ„ํ•˜์ง€ ์•Š๋Š” ์ฒซ ๋ฒˆ์งธ ํ•ญ๋ชฉ์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค. ๋นˆ ํ…์ŠคํŠธ๋Š” ๋ˆ„๊ตฌ์—๊ฒŒ๋‚˜ ์ ํ•ฉํ•ฉ๋‹ˆ๋‹ค. ์ˆซ์ž ํ…์ŠคํŠธ๋Š” ์ƒ‰์ธ์ด ์•„๋‹Œ ์ด๋ฆ„์˜ ์ผ๋ถ€์ž…๋‹ˆ๋‹ค. ์„ฑ๊ณต์ ์œผ๋กœ ์„ ํƒํ•˜๋ฉด ์‘๋‹ต์ด ์ „์†ก๋˜๊ณ  ๋กœ์ปฌ ๋ฉ”๋‰ด๊ฐ€ ๋‹ซํž™๋‹ˆ๋‹ค. ์ผํšŒ์„ฑ ํ›„ํฌ๋Š” ์„ ํƒํ•œ ํ›„์—๋งŒ ์‚ญ์ œ๋ฉ๋‹ˆ๋‹ค. ์˜๊ตฌ ํ›„ํฌ๊ฐ€ ๋‚จ์•„ ์žˆ์Šต๋‹ˆ๋‹ค.

๋…๋ฆฝ ์‹คํ–‰ C# ์Šคํฌ๋ฆฝํŠธ

๊ฐ ์˜ˆ์ œ๋Š” ๋ณ„๋„์˜ ํŒŒ์ผ .csx๋กœ ์ €์žฅํ•˜๊ณ  IDE์—์„œ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. UO ๊ฐœ์ฒด์™€ ๋Œ€๊ธฐ ๊ธฐ๋Šฅ์€ ํ˜„์žฌ ๊ฒŒ์ž„ ์„ธ์…˜์˜ ํ˜ธ์ŠคํŠธ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ๋ฐ๋ชจ serial ์ด๋ฆ„, ์ขŒํ‘œ, ์ฃผ์†Œ๋ฅผ ์ž์‹ ์˜ ๊ฒƒ์œผ๋กœ ๋ฐ”๊พธ์„ธ์š”.

๊ฐ„๋‹จํ•œ ์˜ˆ์ œ

์ด ์ฝ”๋“œ๋ฅผ ๋ณ„๋„์˜ .csx ํŒŒ์ผ๋กœ ์‹คํ–‰ํ•˜์„ธ์š”. ์ธ์ˆ˜๋Š” ํ˜ธ์ถœ์— ์ง์ ‘ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. ์˜ˆ์ œ์˜ ์ด๋ฆ„, serial, ์ฃผ์†Œ๋ฅผ ์ž์‹ ์˜ ๊ฐ’์œผ๋กœ ๋ฐ”๊พธ์„ธ์š”.

๋ช…๋ น์€ ๋…๋ฆฝ๋œ ๋ฌธ์ž…๋‹ˆ๋‹ค. ์•ž์˜ ๋ฉ”์‹œ์ง€๋Š” ํ˜ธ์ถœ ์‹œ์ž‘์„ ๋‚˜ํƒ€๋‚ด๋ฉฐ ์„œ๋ฒ„ ๋™์ž‘์˜ ์™„๋ฃŒ๋ฅผ ํ™•์ธํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

UO.Print("Calling UO.VendorMenu");
UO.VendorMenu("lasttarget");

1. ์ง์ ‘ ํ†ตํ™” - ์ง์ ‘ ์Šคํฌ๋ฆฝํŠธ

๋งค๊ฐœ๋ณ€์ˆ˜์™€ ์‹คํ–‰ ํ๋ฆ„:

  • ํŒ๋งค์ž๋ฅผ ์ด์šฉํ•˜๊ฑฐ๋‚˜ ์˜๊ตฌ ๋ฉ”๋‰ดํ›…์„ ๋“ฑ๋กํ•ฉ๋‹ˆ๋‹ค.
if (Truth(UO.Exists("lasttarget")))
{
    UO.VendorMenu("lasttarget");
}

bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;

2. ๋ช…์‹œ์  ์˜ต์…˜ - ์Šคํฌ๋ฆฝํŠธ ๊ธฐ๋Šฅ

๋งค๊ฐœ๋ณ€์ˆ˜์™€ ์‹คํ–‰ ํ๋ฆ„:

  • ํ•˜๋‚˜์˜ ์ธ์ˆ˜๋Š” ๋ธŒ๋ฆฌ์ง€๋ฅผ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค.UseObject. ๋‘ ์ธ์ˆ˜๋Š” bridge.AddMenuHook(menu,choice,true)๋ฅผ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ true๋Š” ๋ฐ˜๋ณต ๊ฐ€๋Šฅํ•œ ํ›„ํฌ๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.
return  RunScenario();
 object? RunScenario()
{
    UO.VendorMenu("Vendor", "Buy");
    return null;
}

3. ์ „์ฒด ๋„์šฐ๋ฏธ ๊ธฐ๋Šฅ - ์Šคํฌ๋ฆฝํŠธ ํด๋ž˜์Šค

๋งค๊ฐœ๋ณ€์ˆ˜์™€ ์‹คํ–‰ ํ๋ฆ„:

  • ์ž๋™์œผ๋กœ ๊ตฌ๋งคํ•˜๊ฑฐ๋‚˜ ํŒ๋งคํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋ฉ”๋‰ด ์—ด๊ธฐ ๋ฐ ์„ ํƒ์€ ์„œ๋ฒ„์— ์˜ํ•ด ๊ฒฐ์ •๋ฉ๋‹ˆ๋‹ค. ๋“ฑ๋ก๋œ ํ›„ํฌ๋Š” ์ทจ์†Œ๋  ๋•Œ๊นŒ์ง€ ์ผ์น˜ํ•˜๋Š” ๋‹ค์Œ ๋ฉ”๋‰ด์—์„œ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        UO.VendorMenu("Vendor", "Buy");
        UO.Print(UO.MenuHookPresent());
        UO.CancelMenu();
        return null;
    }
}

๋ช…๋ น ๊ตฌํ˜„

C#์€ ๋Œ€์†Œ๋ฌธ์ž๋ฅผ ๊ตฌ๋ถ„ํ•ฉ๋‹ˆ๋‹ค. ์ •ํ™•ํ•œ UO ์ด๋ฆ„์„ ์‚ฌ์šฉํ•˜์„ธ์š”. ์ˆซ์ž ํ”Œ๋ž˜๊ทธ๋Š” 0๊ณผ ๋น„๊ตํ•˜๊ณ  ๋ฐ˜ํ™˜ ํ˜•์‹์ด bool์ผ ๋•Œ๋งŒ bool์„ ์‚ฌ์šฉํ•˜์„ธ์š”.

UO.VendorMenu(vendor) โ€” UO.VendorMenu(Any)

๋งค๊ฐœ๋ณ€์ˆ˜: vendor (Any)

๊ฒฐ๊ณผ: void / Unit.

ํ˜ธ์ถœ ์‹œ:

๋‚ด๋ถ€ ๊ตฌํ˜„ ์ฝ”๋“œ์ด๋ฉฐ ๋…๋ฆฝ ์Šคํฌ๋ฆฝํŠธ๋กœ ์‹คํ–‰ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

case "vendormenu":

                    if (arguments.Length >= 2) bridge.AddMenuHook(Text(0), Text(1), true);

                    else bridge.UseObject(Arg(0, bridge.LastTarget));

                    break;

UO.VendorMenu(menu, choice) โ€” UO.VendorMenu(Any,Any)

๋งค๊ฐœ๋ณ€์ˆ˜: menu (Any), choice (Any)

๊ฒฐ๊ณผ: void / Unit.

ํ˜ธ์ถœ ์‹œ:

๋‚ด๋ถ€ ๊ตฌํ˜„ ์ฝ”๋“œ์ด๋ฉฐ ๋…๋ฆฝ ์Šคํฌ๋ฆฝํŠธ๋กœ ์‹คํ–‰ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

case "vendormenu":

                    if (arguments.Length >= 2) bridge.AddMenuHook(Text(0), Text(1), true);

                    else bridge.UseObject(Arg(0, bridge.LastTarget));

                    break;
โš ๏ธ **GitHub.com Fallback** โš ๏ธ