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(125);
UO.Print("Drop goods into your vendor inventory");๋งค๊ฐ๋ณ์, ๊ฒฐ๊ณผ ๋ฐ ๋ชจ๋ ์๋๋ฆฌ์ค
UO.MassPriceMove(350, 50, 0, 125);
UO.Print("Drag one complete stack into your vendor bag");ะฃะบัะฐัะฝััะบะฐ ยท ะ ัััะบะธะน ยท English ยท Deutsch ยท Franรงais ยท Italiano ยท Espaรฑol ยท ็น้ซไธญๆ ยท ๆฅๆฌ่ช ยท ํ๊ตญ์ด
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(), ์ข ๋ฃ, ์ฌ๋ง, ์นด๋ ๋ณ๊ฒฝ ์์๋ ์๋ ๊ฐ๊ฒฉ์ด ์ฌ์ค์ ๋ฉ๋๋ค. ์ด ๋ช ๋ น์ ์ด๋ฏธ ๋์ด๋ ์ ํ์ ๊ฐ๊ฒฉ์ ๋ณ๊ฒฝํ์ง ์์ต๋๋ค.
๊ฐ ์์ ๋ ๋ณ๋์ ํ์ผ .csx๋ก ์ ์ฅํ๊ณ IDE์์ ์คํํ ์ ์์ต๋๋ค. UO ๊ฐ์ฒด์ ๋๊ธฐ ๊ธฐ๋ฅ์ ํ์ฌ ๊ฒ์ ์ธ์
์ ํธ์คํธ๋ฅผ ์ ๊ณตํฉ๋๋ค. ๋ฐ๋ชจ serial ์ด๋ฆ, ์ขํ, ์ฃผ์๋ฅผ ์์ ์ ๊ฒ์ผ๋ก ๋ฐ๊พธ์ธ์.
์ด ์ฝ๋๋ฅผ ๋ณ๋์ .csx ํ์ผ๋ก ์คํํ์ธ์. ์ธ์๋ ํธ์ถ์ ์ง์ ํ์๋ฉ๋๋ค. ์์ ์ ์ด๋ฆ, serial, ์ฃผ์๋ฅผ ์์ ์ ๊ฐ์ผ๋ก ๋ฐ๊พธ์ธ์.
๋ช ๋ น์ ๋ ๋ฆฝ๋ ๋ฌธ์ ๋๋ค. ์์ ๋ฉ์์ง๋ ํธ์ถ ์์์ ๋ํ๋ด๋ฉฐ ์๋ฒ ๋์์ ์๋ฃ๋ฅผ ํ์ธํ์ง ์์ต๋๋ค.
UO.Print("Calling UO.AllPrice");
UO.AllPrice();๋งค๊ฐ๋ณ์์ ์คํ ํ๋ฆ:
- ๊ฐ๊ฒฉ=125 โ ๊ฐ ํ๋ชฉ์ ์ ์ฒด ๊ฐ๊ฒฉ. type ์์: ๋ชจ๋ ์ ํ์ด ์ ํฉํฉ๋๋ค.
- ์ถ์ ํ ๊ณต๊ธ์ ์ฒด์ ์ธ๋ฒคํ ๋ฆฌ์ ํญ๋ชฉ์ ์๋์ผ๋ก ์ถ๊ฐํ์ธ์. ๊ณ ๊ฐ์ ๊ฐ๊ฒฉ ์์ฒญ์ 125๋ก ์๋ตํฉ๋๋ค. ๊ฐ ํ์ ํ๋ชฉ์ ๊บผ์ง ๋๊น์ง ๋์ผํ ๊ฐ๊ฒฉ์ ๋ฐ์ต๋๋ค.
- Print ๋์๋ง ๊ธฐ์ตํฉ๋๋ค. ์ด ์ ์ฐจ ์์ฒด๋ ์๋ฌด๊ฒ๋ ์ ์กํ์ง ์์ต๋๋ค.
UO.AllPrice(125);
UO.Print("Drop goods into your vendor inventory");๋งค๊ฐ๋ณ์์ ์คํ ํ๋ฆ:
- salePrice๋ ๊ฐ๊ฒฉ=250๋ก ์ ์ก๋ฉ๋๋ค. itemType์ ๋ณ๋์ ์ํ์ serial๊ฐ ์๋ type=0x0F7A๋ก ์ ์ก๋ฉ๋๋ค.
- ๊ฐ๊ฒฉ 250์ ํ์๋๋ ์ ์ฒด ์คํ์ ๋ํ๋ ๋๋ค. ์ด ๋ช ๋ น์ ๊ฐ๊ฒฉ์ ๊ทธ ์์ ํฌํจ๋ ๋จ์ ์๋ฅผ ๊ณฑํ์ง ์์ต๋๋ค.
- ๋ค๋ฅธ ์ ํ์ ์๋ ์๋ต ์์ด ์ ์ง๋ฉ๋๋ค. ์ด๋ฌํ ๊ฒฝ์ฐ ๊ฐ๊ฒฉ์ ์๋์ผ๋ก ์ ๋ ฅํ๊ฑฐ๋ ๋ค๋ฅธ ํํฐ๋ฅผ ์ฌ์ฉํ์ฌ AllPrice๋ฅผ ํฌํจํ์ธ์.
return RunScenario();
object? RunScenario()
{
var itemType = "0x0F7A";
var salePrice = 250;
UO.AllPrice(salePrice, itemType);
return null;
}๋งค๊ฐ๋ณ์์ ์คํ ํ๋ฆ:
- ๊ฐ๊ฒฉ=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;
}
}๋งค๊ฐ๋ณ์์ ์คํ ํ๋ฆ:
- ์ธ์ ์์: ๋ชจ๋๊ฐ ๊บผ์ง๊ณ ๋ณด๋ฅ ์ค์ธ ์๋ต์ด ์ญ์ ๋ฉ๋๋ค.
- ์๋ฒ๊ฐ ์ด๋ฏธ ์ค์ ํ ๊ฐ๊ฒฉ์ ๋ณ๊ฒฝ๋์ง ์์ต๋๋ค. ์ฌ์ฉ์๋ ๋ค์ ๊ฐ๊ฒฉ ์์ฒญ์ ์ง์ ์์ฑํฉ๋๋ค.
Shop ๋ชฉ๋ก / ๋งค์ ๋ฐ ๋งค๋ ๋ชฉ๋ก
UO.AllPrice();C#์ ๋์๋ฌธ์๋ฅผ ๊ตฌ๋ถํฉ๋๋ค. ์ ํํ UO ์ด๋ฆ์ ์ฌ์ฉํ์ธ์. ์ซ์ ํ๋๊ทธ๋ 0๊ณผ ๋น๊ตํ๊ณ ๋ฐํ ํ์์ด bool์ผ ๋๋ง bool์ ์ฌ์ฉํ์ธ์.
๋งค๊ฐ๋ณ์: ๋งค๊ฐ๋ณ์๊ฐ ์์ต๋๋ค.
๊ฒฐ๊ณผ: void / Unit.
ํธ์ถ ์:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.AllPrice:bridge.AllPrice(arguments.Length > 0 ? NumberConversions.ToInt(arguments[0]) : -1, arguments.Length > 1 ? ResolveType(arguments[1]) : 0). -
InjectionScript.Runtime.NumberConversions.ToInt:NumberConversions.ToInt(arguments[0]). -
InjectionScript.Runtime.InjectionApiUO.ResolveType:ResolveType(arguments[1]).
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
case "allprice":
bridge.AllPrice(arguments.Length > 0 ? NumberConversions.ToInt(arguments[0]) : -1,
arguments.Length > 1 ? ResolveType(arguments[1]) : 0);
break;๋งค๊ฐ๋ณ์: price (Any)
๊ฒฐ๊ณผ: void / Unit.
ํธ์ถ ์:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.AllPrice:bridge.AllPrice(arguments.Length > 0 ? NumberConversions.ToInt(arguments[0]) : -1, arguments.Length > 1 ? ResolveType(arguments[1]) : 0). -
InjectionScript.Runtime.NumberConversions.ToInt:NumberConversions.ToInt(arguments[0]). -
InjectionScript.Runtime.InjectionApiUO.ResolveType:ResolveType(arguments[1]).
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
case "allprice":
bridge.AllPrice(arguments.Length > 0 ? NumberConversions.ToInt(arguments[0]) : -1,
arguments.Length > 1 ? ResolveType(arguments[1]) : 0);
break;๋งค๊ฐ๋ณ์: price (Any), type (Any)
๊ฒฐ๊ณผ: void / Unit.
ํธ์ถ ์:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.AllPrice:bridge.AllPrice(arguments.Length > 0 ? NumberConversions.ToInt(arguments[0]) : -1, arguments.Length > 1 ? ResolveType(arguments[1]) : 0). -
InjectionScript.Runtime.NumberConversions.ToInt:NumberConversions.ToInt(arguments[0]). -
InjectionScript.Runtime.InjectionApiUO.ResolveType:ResolveType(arguments[1]).
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
case "allprice":
bridge.AllPrice(arguments.Length > 0 ? NumberConversions.ToInt(arguments[0]) : -1,
arguments.Length > 1 ? ResolveType(arguments[1]) : 0);
break;ะฃะบัะฐัะฝััะบะฐ ยท ะ ัััะบะธะน ยท English ยท Deutsch ยท Franรงais ยท Italiano ยท Espaรฑol ยท ็น้ซไธญๆ ยท ๆฅๆฌ่ช ยท ํ๊ตญ์ด
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๋ ๋ ์๋ํ๋ฅผ ์์ ํ ์ฌ์ค์ ํฉ๋๋ค.
๊ฐ ์์ ๋ ๋ณ๋์ ํ์ผ .csx๋ก ์ ์ฅํ๊ณ IDE์์ ์คํํ ์ ์์ต๋๋ค. UO ๊ฐ์ฒด์ ๋๊ธฐ ๊ธฐ๋ฅ์ ํ์ฌ ๊ฒ์ ์ธ์
์ ํธ์คํธ๋ฅผ ์ ๊ณตํฉ๋๋ค. ๋ฐ๋ชจ serial ์ด๋ฆ, ์ขํ, ์ฃผ์๋ฅผ ์์ ์ ๊ฒ์ผ๋ก ๋ฐ๊พธ์ธ์.
์ด ์ฝ๋๋ฅผ ๋ณ๋์ .csx ํ์ผ๋ก ์คํํ์ธ์. ์ธ์๋ ํธ์ถ์ ์ง์ ํ์๋ฉ๋๋ค. ์์ ์ ์ด๋ฆ, serial, ์ฃผ์๋ฅผ ์์ ์ ๊ฐ์ผ๋ก ๋ฐ๊พธ์ธ์.
๋ช ๋ น์ ๋ ๋ฆฝ๋ ๋ฌธ์ ๋๋ค. ์์ ๋ฉ์์ง๋ ํธ์ถ ์์์ ๋ํ๋ด๋ฉฐ ์๋ฒ ๋์์ ์๋ฃ๋ฅผ ํ์ธํ์ง ์์ต๋๋ค.
UO.Print("Calling UO.AutoBuy");
UO.AutoBuy(0x0F7A, -1, 1);๋งค๊ฐ๋ณ์์ ์คํ ํ๋ฆ:
- 0x0F7A - graphic ์์ฝ, ID NPC ์๋. ์๋ - 1; ์์ - ๋ฌด์์ด๋ . ์ด ์์์๋ ๊ฐ๊ฒฉ ์ํ์ ์ด ๋ช ์๋์ด ์์ง ์์ต๋๋ค. ์คํฌ๋ฆฝํธ ์์ฒด๋ ์๋ฌด ๋ง๋ ํ์ง ์๊ณ ์คํ ์ด๋ฅผ ์ด์ง๋ ์์ต๋๋ค. ์ด ๊ท์น์ ๋ณ๊ฒฝ/๋นํ์ฑํํ ๋๊น์ง ํ์ ๋ฌธ์ฅ์ ๊ณ์ ์ ์ฉ๋ฉ๋๋ค.
UO.AutoBuy(0x0F7A, -1, 1);๋งค๊ฐ๋ณ์์ ์คํ ํ๋ฆ:
- 20 - ์ต๋ 1๊ฐ ๋งค์ฅ ์๋ต์ผ๋ก, โ20๊น์ง ์๋์ ๊ฐ์ ธ์ค์ธ์โ๊ฐ ์๋๋๋ค. AutoBuy์๋ ๊ฐ๊ฒฉ ๋ฐ ์ด๋ฆ ์ธ์๊ฐ ์์ต๋๋ค. ํ์ํ ๊ฒฝ์ฐ AutoBuyEx๋ฅผ ์ฌ์ฉํ์ธ์. ์ ์ฒด ์์ ๋ ์๋ ๋งํฌ์์ ํ์ธํ ์ ์์ต๋๋ค. ์ํ ๋ถ์กฑ, ๋ ๋ฐ ์๋ฒ ๊ท์น์ ๋ฐ๋ผ ๊ฒฐ๊ณผ๊ฐ ๊ฒฐ์ ๋ฉ๋๋ค.
return RunScenario();
object? RunScenario()
{
UO.AutoBuy(0x0F7A, 0, 20);
return null;
}๋งค๊ฐ๋ณ์์ ์คํ ํ๋ฆ:
- ์ด์์คํดํธ๋ graphic์ ์๋ฝํฉ๋๋ค. AnyHue๊ฐ ํฌํจ๋ ๊ธฐ๋ณธ ๊ท์น๋ง ์ญ์ ๋ฉ๋๋ค. ๊ฐ๋ณ ๊ท์น hue=0์ ์ ์ง๋ฉ๋๋ค. ์ด๋ฏธ ์๋ฒ๋ก ์ ์ก๋ ๊ฑฐ๋๋ ์ทจ์๋์ง ์์ต๋๋ค. ์ ํํ ์์์ ์ ๊ฑฐํ๋ ค๋ฉด ๊ท์น์ ์์ฑํ ๊ฒ๊ณผ ๋์ผํ hue๋ฅผ ์ ๋ฌํ์ธ์.
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์ ์ฌ์ฉํ์ธ์.
๋งค๊ฐ๋ณ์: itemType (Any), itemColor (Any), quantity (Any)
๊ฒฐ๊ณผ: void / Unit.
ํธ์ถ ์:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.SetAutoBuyRule:bridge.SetAutoBuyRule(Arg(0), Arg(1), Arg(2), 0, string.Empty). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0).
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
case "autobuy":
bridge.SetAutoBuyRule(Arg(0), Arg(1), Arg(2), 0, string.Empty); return InjectionValue.Unit;ะฃะบัะฐัะฝััะบะฐ ยท ะ ัััะบะธะน ยท English ยท Deutsch ยท Franรงais ยท Italiano ยท Espaรฑol ยท ็น้ซไธญๆ ยท ๆฅๆฌ่ช ยท ํ๊ตญ์ด
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๋ ๋ ์๋ํ๋ฅผ ์์ ํ ์ฌ์ค์ ํฉ๋๋ค.
๊ฐ ์์ ๋ ๋ณ๋์ ํ์ผ .csx๋ก ์ ์ฅํ๊ณ IDE์์ ์คํํ ์ ์์ต๋๋ค. UO ๊ฐ์ฒด์ ๋๊ธฐ ๊ธฐ๋ฅ์ ํ์ฌ ๊ฒ์ ์ธ์
์ ํธ์คํธ๋ฅผ ์ ๊ณตํฉ๋๋ค. ๋ฐ๋ชจ serial ์ด๋ฆ, ์ขํ, ์ฃผ์๋ฅผ ์์ ์ ๊ฒ์ผ๋ก ๋ฐ๊พธ์ธ์.
์ด ์ฝ๋๋ฅผ ๋ณ๋์ .csx ํ์ผ๋ก ์คํํ์ธ์. ์ธ์๋ ํธ์ถ์ ์ง์ ํ์๋ฉ๋๋ค. ์์ ์ ์ด๋ฆ, serial, ์ฃผ์๋ฅผ ์์ ์ ๊ฐ์ผ๋ก ๋ฐ๊พธ์ธ์.
๋ช ๋ น์ ๋ ๋ฆฝ๋ ๋ฌธ์ ๋๋ค. ์์ ๋ฉ์์ง๋ ํธ์ถ ์์์ ๋ํ๋ด๋ฉฐ ์๋ฒ ๋์์ ์๋ฃ๋ฅผ ํ์ธํ์ง ์์ต๋๋ค.
UO.Print("Calling UO.AutoBuyEx");
UO.AutoBuyEx(0x0F7A, -1, 1, 5, "");๋งค๊ฐ๋ณ์์ ์คํ ํ๋ฆ:
- 0x0F7A - graphic ์์ฝ, ID NPC ์๋. ์๋ - 1; ์์ - ๋ฌด์์ด๋ . ๋จ์๋น ๊ฐ๊ฒฉ ์ํ์ 5. ์คํฌ๋ฆฝํธ ์์ฒด๋ ์๋ฌด ๋ง๋ ํ์ง ์๊ณ ์คํ ์ด๋ฅผ ์ด์ง๋ ์์ต๋๋ค. ์ด ๊ท์น์ ๋ณ๊ฒฝ/๋นํ์ฑํํ ๋๊น์ง ํ์ ๋ฌธ์ฅ์ ๊ณ์ ์ ์ฉ๋ฉ๋๋ค.
UO.AutoBuyEx(0x0F7A, -1, 1, 5, "");๋งค๊ฐ๋ณ์์ ์คํ ํ๋ฆ:
- 20 - ํ ๋งค์ฅ ์๋ต์์ ์ต๋๊ฐ์ด๋ฉฐ, "์๋์ 20๋ก ๊ฐ์ ธ์ค์ธ์"๊ฐ ์๋๋๋ค. 5 โ ๋จ์๋น ๊ฐ๊ฒฉ, "Black Pearl" โ ์ ํ ์ด๋ฆ์ ํ์ ๋ฌธ์์ด์ ๋๋ค. ์๋ฒ๊ฐ ์์ฝ์ ๋ค๋ฅด๊ฒ ํธ์ถํ๋ ๊ฒฝ์ฐ ํํฐ๋ฅผ ๋ณ๊ฒฝํ๊ฑฐ๋ ""๋ฅผ ์ ๋ฌํ์ญ์์ค. ์ํ ๋ถ์กฑ, ๋ ๋ฐ ์๋ฒ ๊ท์น์ ๋ฐ๋ผ ๊ฒฐ๊ณผ๊ฐ ๊ฒฐ์ ๋ฉ๋๋ค.
return RunScenario();
object? RunScenario()
{
UO.AutoBuyEx(0x0F7A, 0, 20, 5, "Black Pearl");
return null;
}๋งค๊ฐ๋ณ์์ ์คํ ํ๋ฆ:
- ์ด์์คํดํธ๋ graphic์ ์๋ฝํฉ๋๋ค. AnyHue๊ฐ ํฌํจ๋ ๊ธฐ๋ณธ ๊ท์น๋ง ์ญ์ ๋ฉ๋๋ค. ๊ฐ๋ณ ๊ท์น hue=0์ ์ ์ง๋ฉ๋๋ค. ์ด๋ฏธ ์๋ฒ๋ก ์ ์ก๋ ๊ฑฐ๋๋ ์ทจ์๋์ง ์์ต๋๋ค. ์ ํํ ์์์ ์ ๊ฑฐํ๋ ค๋ฉด ๊ท์น์ ์์ฑํ ๊ฒ๊ณผ ๋์ผํ hue๋ฅผ ์ ๋ฌํ์ธ์.
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์ ์ฌ์ฉํ์ธ์.
๋งค๊ฐ๋ณ์: itemType (Any), itemColor (Any), quantity (Any), price (Any), name (Any)
๊ฒฐ๊ณผ: void / Unit.
ํธ์ถ ์:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.SetAutoBuyRule:bridge.SetAutoBuyRule(Arg(0), Arg(1), Arg(2), Arg(3), Text(4)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Text:Text(4).
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
case "autobuyex":
bridge.SetAutoBuyRule(Arg(0), Arg(1), Arg(2), Arg(3), Text(4)); return InjectionValue.Unit;ะฃะบัะฐัะฝััะบะฐ ยท ะ ัััะบะธะน ยท English ยท Deutsch ยท Franรงais ยท Italiano ยท Espaรฑol ยท ็น้ซไธญๆ ยท ๆฅๆฌ่ช ยท ํ๊ตญ์ด
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๋ ๋ ์๋ํ๋ฅผ ์์ ํ ์ฌ์ค์ ํฉ๋๋ค.
๊ฐ ์์ ๋ ๋ณ๋์ ํ์ผ .csx๋ก ์ ์ฅํ๊ณ IDE์์ ์คํํ ์ ์์ต๋๋ค. UO ๊ฐ์ฒด์ ๋๊ธฐ ๊ธฐ๋ฅ์ ํ์ฌ ๊ฒ์ ์ธ์
์ ํธ์คํธ๋ฅผ ์ ๊ณตํฉ๋๋ค. ๋ฐ๋ชจ serial ์ด๋ฆ, ์ขํ, ์ฃผ์๋ฅผ ์์ ์ ๊ฒ์ผ๋ก ๋ฐ๊พธ์ธ์.
์ด ์ฝ๋๋ฅผ ๋ณ๋์ .csx ํ์ผ๋ก ์คํํ์ธ์. ์ธ์๋ ํธ์ถ์ ์ง์ ํ์๋ฉ๋๋ค. ์์ ์ ์ด๋ฆ, serial, ์ฃผ์๋ฅผ ์์ ์ ๊ฐ์ผ๋ก ๋ฐ๊พธ์ธ์.
๋ช ๋ น์ ๋ ๋ฆฝ๋ ๋ฌธ์ ๋๋ค. ์์ ๋ฉ์์ง๋ ํธ์ถ ์์์ ๋ํ๋ด๋ฉฐ ์๋ฒ ๋์์ ์๋ฃ๋ฅผ ํ์ธํ์ง ์์ต๋๋ค.
UO.Print("Calling UO.AutoSell");
UO.AutoSell(0x0F51, -1, 1);๋งค๊ฐ๋ณ์์ ์คํ ํ๋ฆ:
- 0x0F51 - graphic ๋จ๊ฒ, ์์ hue, 1 - ๋ฌธ์ฅ๋น ํ๋. ํ์์๋ ํน์ serial๋ฅผ ์ ํํ์ง ์์ผ๋ฉฐ ํญ๋ชฉ์ ์ ์ฉ์ฑ/๊ฐ์น๋ฅผ ํ ์คํธํ์ง ์์ต๋๋ค. ์์ดํ ์ ์ ํํ type/์์์ ์ ํํ์ธ์.
UO.AutoSell(0x0F51, -1, 1);๋งค๊ฐ๋ณ์์ ์คํ ํ๋ฆ:
- 0x1F03๋ ํ์ค graphic ๋ก๋ธ์ ์์์ด๊ณ , 0x0044๋ hue์ ์์์ ๋๋ค. ๋ ๋ค ๊ทํ์ ์ ํ์ผ๋ก ๊ต์ฒดํ์ญ์์ค. 5 โ ๊ฐ๊ฒฉ์ด ์๋ ๋จ์; ์ต์ ๊ฐ๊ฒฉ ๋ฐ ์ด๋ฆ ๋งค๊ฐ๋ณ์ Sell/AutoSell๋ ํ์ฉ๋์ง ์์ต๋๋ค. ์๋ฒ๋ ํ๋งค ์ ์์ ํด๋น ํ๋ชฉ์ ํฌํจํด์ผ ํฉ๋๋ค.
return RunScenario();
object? RunScenario()
{
UO.AutoSell(0x1F03, 0x0044, 5);
return null;
}3. NPC๋ก ์ด๋ํ๊ธฐ ์ ์ ๋ ๊ฐ์ง ์ ํ์ ํ๋งค๋ฅผ ๋นํ์ฑํํฉ๋๋ค - ์คํฌ๋ฆฝํธ ํด๋์ค
๋งค๊ฐ๋ณ์์ ์คํ ํ๋ฆ:
- ํ๋ก์์ ์ด๋ฆ์ ์์์ ์ ๋๋ค. itemType ๋ฐ hue๋ ํด๋น ๋งค๊ฐ๋ณ์์ ๋๋ค. ๊ธฐํ ๊ท์น, ๊ตฌ๋งค ๋ฐ ์ฌ์ฉ์ ์ง์ ๋ช ๋ช ๋ชฉ๋ก์ ์ ์ง๋ฉ๋๋ค. ํ์ฑํ๋ ๋ค๋ฅธ ๋ชฉ๋ก์์๋ ์ด๋ฌํ ํญ๋ชฉ์ ํ๋งคํ๋ ๊ฒฝ์ฐ ์ค์ ์ ํตํด ํด๋น ๋ชฉ๋ก์ ํด๋น ๊ท์น์ ๋นํ์ฑํํ์ธ์.
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์ ์ฌ์ฉํ์ธ์.
๋งค๊ฐ๋ณ์: itemType (Any), itemColor (Any), quantity (Any)
๊ฒฐ๊ณผ: void / Unit.
ํธ์ถ ์:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.SetAutoSellRule:bridge.SetAutoSellRule(Arg(0), Arg(1), Arg(2)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0).
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
case "autosell":
bridge.SetAutoSellRule(Arg(0), Arg(1), Arg(2)); return InjectionValue.Unit;ะฃะบัะฐัะฝััะบะฐ ยท ะ ัััะบะธะน ยท English ยท Deutsch ยท Franรงais ยท Italiano ยท Espaรฑol ยท ็น้ซไธญๆ ยท ๆฅๆฌ่ช ยท ํ๊ตญ์ด
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๋ ๋ ์๋ํ๋ฅผ ์์ ํ ์ฌ์ค์ ํฉ๋๋ค.
๊ฐ ์์ ๋ ๋ณ๋์ ํ์ผ .csx๋ก ์ ์ฅํ๊ณ IDE์์ ์คํํ ์ ์์ต๋๋ค. UO ๊ฐ์ฒด์ ๋๊ธฐ ๊ธฐ๋ฅ์ ํ์ฌ ๊ฒ์ ์ธ์
์ ํธ์คํธ๋ฅผ ์ ๊ณตํฉ๋๋ค. ๋ฐ๋ชจ serial ์ด๋ฆ, ์ขํ, ์ฃผ์๋ฅผ ์์ ์ ๊ฒ์ผ๋ก ๋ฐ๊พธ์ธ์.
์ด ์ฝ๋๋ฅผ ๋ณ๋์ .csx ํ์ผ๋ก ์คํํ์ธ์. ์ธ์๋ ํธ์ถ์ ์ง์ ํ์๋ฉ๋๋ค. ์์ ์ ์ด๋ฆ, serial, ์ฃผ์๋ฅผ ์์ ์ ๊ฐ์ผ๋ก ๋ฐ๊พธ์ธ์.
๋ช ๋ น์ ๋ ๋ฆฝ๋ ๋ฌธ์ ๋๋ค. ์์ ๋ฉ์์ง๋ ํธ์ถ ์์์ ๋ํ๋ด๋ฉฐ ์๋ฒ ๋์์ ์๋ฃ๋ฅผ ํ์ธํ์ง ์์ต๋๋ค.
UO.Print("Calling UO.Buy");
UO.Buy(0x0F7A);๋งค๊ฐ๋ณ์์ ์คํ ํ๋ฆ:
- 0x0F7A - graphic ์์ฝ, ID NPC ์๋. ์๋ - 1; ์์ - ๋ฌด์์ด๋ . ์ด ์์์๋ ๊ฐ๊ฒฉ ์ํ์ ์ด ๋ช ์๋์ด ์์ง ์์ต๋๋ค. ์คํฌ๋ฆฝํธ ์์ฒด๋ ์๋ฌด ๋ง๋ ํ์ง ์๊ณ ์คํ ์ด๋ฅผ ์ด์ง๋ ์์ต๋๋ค. ์ด ๊ท์น์ ๋ณ๊ฒฝ/๋นํ์ฑํํ ๋๊น์ง ํ์ ๋ฌธ์ฅ์ ๊ณ์ ์ ์ฉ๋ฉ๋๋ค.
UO.Buy(0x0F7A);๋งค๊ฐ๋ณ์์ ์คํ ํ๋ฆ:
- 20 - ํ ๋งค์ฅ ์๋ต์์ ์ต๋๊ฐ์ด๋ฉฐ, "์๋์ 20๋ก ๊ฐ์ ธ์ค์ธ์"๊ฐ ์๋๋๋ค. 5 โ ๋จ์๋น ๊ฐ๊ฒฉ, "Black Pearl" โ ์ ํ ์ด๋ฆ์ ํ์ ๋ฌธ์์ด์ ๋๋ค. ์๋ฒ๊ฐ ์์ฝ์ ๋ค๋ฅด๊ฒ ํธ์ถํ๋ ๊ฒฝ์ฐ ํํฐ๋ฅผ ๋ณ๊ฒฝํ๊ฑฐ๋ ""๋ฅผ ์ ๋ฌํ์ญ์์ค. ์ํ ๋ถ์กฑ, ๋ ๋ฐ ์๋ฒ ๊ท์น์ ๋ฐ๋ผ ๊ฒฐ๊ณผ๊ฐ ๊ฒฐ์ ๋ฉ๋๋ค.
return RunScenario();
object? RunScenario()
{
UO.Buy(0x0F7A, 0, 20, 5, "Black Pearl");
return null;
}๋งค๊ฐ๋ณ์์ ์คํ ํ๋ฆ:
- ์ด์์คํดํธ๋ graphic์ ์๋ฝํฉ๋๋ค. AnyHue๊ฐ ํฌํจ๋ ๊ธฐ๋ณธ ๊ท์น๋ง ์ญ์ ๋ฉ๋๋ค. ๊ฐ๋ณ ๊ท์น hue=0์ ์ ์ง๋ฉ๋๋ค. ์ด๋ฏธ ์๋ฒ๋ก ์ ์ก๋ ๊ฑฐ๋๋ ์ทจ์๋์ง ์์ต๋๋ค. ์ ํํ ์์์ ์ ๊ฑฐํ๋ ค๋ฉด ๊ท์น์ ์์ฑํ ๊ฒ๊ณผ ๋์ผํ hue๋ฅผ ์ ๋ฌํ์ธ์.
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์ ์ฌ์ฉํ์ธ์.
๋งค๊ฐ๋ณ์: type (Any)
๊ฒฐ๊ณผ: void / Unit.
ํธ์ถ ์:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.SetAutoBuyRule: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). -
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias::Arg:Arg(0). -
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias::Text:Text(4).
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
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;๋งค๊ฐ๋ณ์: type (Any), color (Any)
๊ฒฐ๊ณผ: void / Unit.
ํธ์ถ ์:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.SetAutoBuyRule: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). -
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias::Arg:Arg(0). -
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias::Text:Text(4).
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
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;๋งค๊ฐ๋ณ์: type (Any), color (Any), quantity (Any)
๊ฒฐ๊ณผ: void / Unit.
ํธ์ถ ์:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.SetAutoBuyRule: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). -
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias::Arg:Arg(0). -
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias::Text:Text(4).
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
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;๋งค๊ฐ๋ณ์: type (Any), color (Any), quantity (Any), maxPrice (Any)
๊ฒฐ๊ณผ: void / Unit.
ํธ์ถ ์:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.SetAutoBuyRule: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). -
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias::Arg:Arg(0). -
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias::Text:Text(4).
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
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;๋งค๊ฐ๋ณ์: type (Any), color (Any), quantity (Any), maxPrice (Any), name (Any)
๊ฒฐ๊ณผ: void / Unit.
ํธ์ถ ์:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.SetAutoBuyRule: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). -
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias::Arg:Arg(0). -
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias::Text:Text(4).
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
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;ะฃะบัะฐัะฝััะบะฐ ยท ะ ัััะบะธะน ยท English ยท Deutsch ยท Franรงais ยท Italiano ยท Espaรฑol ยท ็น้ซไธญๆ ยท ๆฅๆฌ่ช ยท ํ๊ตญ์ด
void UO.ClearShopList();ํ์ฑ ํ๋กํ์ ์๋ ๊ตฌ๋งค ๋ฐ ํ๋งค ๊ท์น์ ์ ๊ฑฐํฉ๋๋ค.
๋งค๊ฐ๋ณ์๊ฐ ์์ต๋๋ค.
void - ๋ฐํ ๊ฐ์ด ์์ต๋๋ค.
- BackNewbieAutoBuyRules ๋ฐ BackNewbieAutoSellRules์ ์ง์ฐ๊ณ ๊ณต์ AutoBuy/AutoSell๋ฅผ ๋๊ณ OptionsGump๋ฅผ ์ ๋ฐ์ดํธํ๊ณ ํ๋กํ์ ์ ์ฅํฉ๋๋ค. ์ ๋ฆฌํ ๋ชฉ๋ก์ ๋ณ๊ฒฝ๋์ง ์์ต๋๋ค. ํ๋กํ์ด ์์ผ๋ฉด ๋น ์์ ์ด ์ ๊ณต๋ฉ๋๋ค.
๊ฐ ์์ ๋ ๋ณ๋์ ํ์ผ .csx๋ก ์ ์ฅํ๊ณ IDE์์ ์คํํ ์ ์์ต๋๋ค. UO ๊ฐ์ฒด์ ๋๊ธฐ ๊ธฐ๋ฅ์ ํ์ฌ ๊ฒ์ ์ธ์
์ ํธ์คํธ๋ฅผ ์ ๊ณตํฉ๋๋ค. ๋ฐ๋ชจ serial ์ด๋ฆ, ์ขํ, ์ฃผ์๋ฅผ ์์ ์ ๊ฒ์ผ๋ก ๋ฐ๊พธ์ธ์.
์ด ์ฝ๋๋ฅผ ๋ณ๋์ .csx ํ์ผ๋ก ์คํํ์ธ์. ์ธ์๋ ํธ์ถ์ ์ง์ ํ์๋ฉ๋๋ค. ์์ ์ ์ด๋ฆ, serial, ์ฃผ์๋ฅผ ์์ ์ ๊ฐ์ผ๋ก ๋ฐ๊พธ์ธ์.
๋ช ๋ น์ ๋ ๋ฆฝ๋ ๋ฌธ์ ๋๋ค. ์์ ๋ฉ์์ง๋ ํธ์ถ ์์์ ๋ํ๋ด๋ฉฐ ์๋ฒ ๋์์ ์๋ฃ๋ฅผ ํ์ธํ์ง ์์ต๋๋ค.
UO.Print("Calling UO.ClearShopList");
UO.ClearShopList();๋งค๊ฐ๋ณ์์ ์คํ ํ๋ฆ:
- ํ์ฑ ํ๋กํ์ ์๋ ๊ตฌ๋งค ๋ฐ ํ๋งค ๊ท์น์ ์ ๊ฑฐํฉ๋๋ค.
UO.ClearShopList();๋งค๊ฐ๋ณ์์ ์คํ ํ๋ฆ:
- ๋๋จธ์ง ๊ฑฐ๋ ๊ท์น๊ณผ ํจ๊ป ๋ถ๋ ๊ตฌ๋งค ๊ท์น์ ์ ๊ฑฐํฉ๋๋ค.
return RunScenario();
object? RunScenario()
{
UO.AutoBuy(0x0E21, -1, 10);
UO.ClearShopList();
return null;
}๋งค๊ฐ๋ณ์์ ์คํ ํ๋ฆ:
- ๋น ์ธํธ๋ฅผ ์ง์ฐ๋ ๊ฒ์ ํ์ฉ๋๋ฉฐ ์ ์ค์ ์ ์์ฑํ์ง ์์ต๋๋ค.
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์ ์ฌ์ฉํ์ธ์.
๋งค๊ฐ๋ณ์: ๋งค๊ฐ๋ณ์๊ฐ ์์ต๋๋ค.
๊ฒฐ๊ณผ: void / Unit.
ํธ์ถ ์:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.ClearAutoShopRules:bridge.ClearAutoShopRules().
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
case "clearshoplist":
bridge.ClearAutoShopRules(); return InjectionValue.Unit;ะฃะบัะฐัะฝััะบะฐ ยท ะ ัััะบะธะน ยท English ยท Deutsch ยท Franรงais ยท Italiano ยท Espaรฑol ยท ็น้ซไธญๆ ยท ๆฅๆฌ่ช ยท ํ๊ตญ์ด
dynamic UO.GetAutoBuyDelay();๊ณ ๊ฐ ํ๋กํ์์ ํ์ฌ ์๋ ๊ตฌ๋งค ์ง์ฐ์ ์ฝ์ต๋๋ค.
๋งค๊ฐ๋ณ์๊ฐ ์์ต๋๋ค.
int โ ํ์ฌ ์ง์ฐ(๋ฐ๋ฆฌ์ด)์ ๋๋ค. setter๊ฐ ์ฐ๋ ๊ฐ์ 0โฆ65535๋ก ์ ํ๋ฉ๋๋ค. 0๋ ์ถ๊ฐ ์ง์ฐ์ด ์์์ ์๋ฏธํฉ๋๋ค. ์ด๊ฒ์ ์ค์๊ฐ ์๋๋๋ค. ๋ก๋๋ ํ๋กํ์ด ์์ผ๋ฉด 3๊ฐ ๋ฐํ๋ฉ๋๋ค. ์ฝ๊ธฐ๋ ํญ๋ชฉ ์๋์ ๋ฐํํ๊ฑฐ๋ ๊ฑฐ๋๋ฅผ ํ์ธํ์ง ์์ต๋๋ค.
- ์ค์ ์ ํ์ฌ ํ๋กํ์ ๋ํ ์ผ๋ฐ์ ์ธ ๊ฒ์ ๋๋ค. ๋ค๋ฅธ ์คํฌ๋ฆฝํธ ๋๋ UI์ ๋ณ๊ฒฝ ์ฌํญ์ ๋ค์์ ์ฝ์ ๋ ํ์๋ฉ๋๋ค. 0์ ์ ํจํ ์ค์ ์ด๋ฉฐ, ๋ฐ์ดํฐ ๋๋ฝ์ ์งํ๊ฐ ์๋๋ฉฐ ์ด์ ์คํฌ๋ฆฝํธ ์บ์๋ฅผ ๋ฐํํ๋ ์ด์ ๊ฐ ์๋๋๋ค.
- ๊ธฐ๋ณธ๊ฐ์ 3ms์ ๋๋ค. ์๋ ์์ ์ ๋ณด๋ธ ํ ๊ด๋ฆฌ์๋ ๋ค์ ํ์ฉ ์์ ์๊ฐ์ ์ค์ ํฉ๋๋ค. ์ด์ ์ ๋์ฐฉํ ๊ณต๊ธ์ ์ฒด ๋ชฉ๋ก์ ์ด ํจ์ค๋ก ์ฒ๋ฆฌ๋์ง ์์ต๋๋ค. getter๋ ๋๊ธฐ๋ฅผ ํธ๋ฆฌ๊ฑฐํ์ง ์์ผ๋ฉฐ ๊ตฌ๋งค/ํ๋งค ์์ฒด๋ฅผ ๋ณด๋ด์ง ์์ต๋๋ค.
- ์ด๋ MassMove, Drag/Drop ๋๋ ์๋ ๊ฑฐ๋์ ์ง์ฐ์ด ์๋๋๋ค. ๋ค์ ์ง์ฐ์ ์์ฝํ ๋ ์ ๊ฐ์ด ์ ์ฉ๋ฉ๋๋ค. ์ด๋ฏธ ํ ๋น๋ ์๊ฐ์ ๋ค์ ๊ณ์ฐ๋์ง ์์ต๋๋ค.
๊ฐ ์์ ๋ ๋ณ๋์ ํ์ผ .csx๋ก ์ ์ฅํ๊ณ IDE์์ ์คํํ ์ ์์ต๋๋ค. UO ๊ฐ์ฒด์ ๋๊ธฐ ๊ธฐ๋ฅ์ ํ์ฌ ๊ฒ์ ์ธ์
์ ํธ์คํธ๋ฅผ ์ ๊ณตํฉ๋๋ค. ๋ฐ๋ชจ serial ์ด๋ฆ, ์ขํ, ์ฃผ์๋ฅผ ์์ ์ ๊ฒ์ผ๋ก ๋ฐ๊พธ์ธ์.
์ด ์ฝ๋๋ฅผ ๋ณ๋์ .csx ํ์ผ๋ก ์คํํ์ธ์. ์ธ์๋ ํธ์ถ์ ์ง์ ํ์๋ฉ๋๋ค. ์์ ์ ์ด๋ฆ, serial, ์ฃผ์๋ฅผ ์์ ์ ๊ฐ์ผ๋ก ๋ฐ๊พธ์ธ์.
ํ ๋ฒ์ ํธ์ถ ๊ฒฐ๊ณผ๋ฅผ ์ ๋์ ํ์ํฉ๋๋ค. ์ซ์๋ฅผ bool๋ก ๋ณํํ์ง ์์ผ๋ฉฐ, ๋ฐฐ์ด์ด๋ฉด ์์ ์๋ฅผ ํ์ํฉ๋๋ค.
object? result = UO.GetAutoBuyDelay();
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));๋งค๊ฐ๋ณ์์ ์คํ ํ๋ฆ:
- ๋ ผ์์ด ์์ต๋๋ค. ์ง์ฐ โ ๋ฐ๋ฆฌ์ด ๋จ์์ ์๊ฐ์ ๋๋ค.
- ๊ฐ์ ํธ์ถ ๋น์์ ํ๋กํ์ ๋ฐ์ํฉ๋๋ค. ์ ์ฅ๋ var๋ ์ถํ ์ ๋ฐ์ดํธ๋์ง ์์ต๋๋ค.
var delay = UO.GetAutoBuyDelay();
UO.Print("Delay ms: " + Convert.ToString(delay));๋งค๊ฐ๋ณ์์ ์คํ ํ๋ฆ:
- ์ธํฐ๋ 70000 ms๋ฅผ ์ป์ต๋๋ค. ํ์ฉ๋๋ ์ต๋๊ฐ์ 65535์ ๋๋ค. ์ด ์์์๋ ํ๋กํ ์ค์ ์ ๋ณ๊ฒฝํฉ๋๋ค.
- ํ๋กํ์ด ๋ก๋๋ ๋ ์ค์ ์๋ 65535๊ฐ ํฌํจ๋์ด์ผ ํฉ๋๋ค. Getter๋ ์๋ ์ธ์ 70000 ๋์ ์ค์ ์ ํ๋ ๊ฐ์ ๋ฐํํฉ๋๋ค.
return RunScenario();
object? RunScenario()
{
UO.SetAutoBuyDelay(70000);
var actual = UO.GetAutoBuyDelay();
UO.Print(Convert.ToString(actual));
return null;
}๋งค๊ฐ๋ณ์์ ์คํ ํ๋ฆ:
- 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์ ์ฌ์ฉํ์ธ์.
๋งค๊ฐ๋ณ์: ๋งค๊ฐ๋ณ์๊ฐ ์์ต๋๋ค.
๊ฒฐ๊ณผ: dynamic / Any.
ํธ์ถ ์:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetAutoBuyDelay:bridge.GetAutoBuyDelay().
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
case "getautobuydelay":
return new InjectionValue(bridge.GetAutoBuyDelay());ะฃะบัะฐัะฝััะบะฐ ยท ะ ัััะบะธะน ยท English ยท Deutsch ยท Franรงais ยท Italiano ยท Espaรฑol ยท ็น้ซไธญๆ ยท ๆฅๆฌ่ช ยท ํ๊ตญ์ด
dynamic UO.GetAutoSellDelay();๊ณ ๊ฐ ํ๋กํ์์ ํ์ฌ ์๋ ํ๋งค ์ง์ฐ์ ์ฝ์ต๋๋ค.
๋งค๊ฐ๋ณ์๊ฐ ์์ต๋๋ค.
int โ ํ์ฌ ์ง์ฐ(๋ฐ๋ฆฌ์ด)์ ๋๋ค. setter๊ฐ ์ฐ๋ ๊ฐ์ 0โฆ65535๋ก ์ ํ๋ฉ๋๋ค. 0๋ ์ถ๊ฐ ์ง์ฐ์ด ์์์ ์๋ฏธํฉ๋๋ค. ์ด๊ฒ์ ์ค์๊ฐ ์๋๋๋ค. ๋ก๋๋ ํ๋กํ์ด ์์ผ๋ฉด 3๊ฐ ๋ฐํ๋ฉ๋๋ค. ์ฝ๊ธฐ๋ ํญ๋ชฉ ์๋์ ๋ฐํํ๊ฑฐ๋ ๊ฑฐ๋๋ฅผ ํ์ธํ์ง ์์ต๋๋ค.
- ์ค์ ์ ํ์ฌ ํ๋กํ์ ๋ํ ์ผ๋ฐ์ ์ธ ๊ฒ์ ๋๋ค. ๋ค๋ฅธ ์คํฌ๋ฆฝํธ ๋๋ UI์ ๋ณ๊ฒฝ ์ฌํญ์ ๋ค์์ ์ฝ์ ๋ ํ์๋ฉ๋๋ค. 0์ ์ ํจํ ์ค์ ์ด๋ฉฐ, ๋ฐ์ดํฐ ๋๋ฝ์ ์งํ๊ฐ ์๋๋ฉฐ ์ด์ ์คํฌ๋ฆฝํธ ์บ์๋ฅผ ๋ฐํํ๋ ์ด์ ๊ฐ ์๋๋๋ค.
- ๊ธฐ๋ณธ๊ฐ์ 3ms์ ๋๋ค. ์๋ ์์ ์ ๋ณด๋ธ ํ ๊ด๋ฆฌ์๋ ๋ค์ ํ์ฉ ์์ ์๊ฐ์ ์ค์ ํฉ๋๋ค. ์ด์ ์ ๋์ฐฉํ ๊ณต๊ธ์ ์ฒด ๋ชฉ๋ก์ ์ด ํจ์ค๋ก ์ฒ๋ฆฌ๋์ง ์์ต๋๋ค. getter๋ ๋๊ธฐ๋ฅผ ํธ๋ฆฌ๊ฑฐํ์ง ์์ผ๋ฉฐ ๊ตฌ๋งค/ํ๋งค ์์ฒด๋ฅผ ๋ณด๋ด์ง ์์ต๋๋ค.
- ์ด๋ MassMove, Drag/Drop ๋๋ ์๋ ๊ฑฐ๋์ ์ง์ฐ์ด ์๋๋๋ค. ๋ค์ ์ง์ฐ์ ์์ฝํ ๋ ์ ๊ฐ์ด ์ ์ฉ๋ฉ๋๋ค. ์ด๋ฏธ ํ ๋น๋ ์๊ฐ์ ๋ค์ ๊ณ์ฐ๋์ง ์์ต๋๋ค.
๊ฐ ์์ ๋ ๋ณ๋์ ํ์ผ .csx๋ก ์ ์ฅํ๊ณ IDE์์ ์คํํ ์ ์์ต๋๋ค. UO ๊ฐ์ฒด์ ๋๊ธฐ ๊ธฐ๋ฅ์ ํ์ฌ ๊ฒ์ ์ธ์
์ ํธ์คํธ๋ฅผ ์ ๊ณตํฉ๋๋ค. ๋ฐ๋ชจ serial ์ด๋ฆ, ์ขํ, ์ฃผ์๋ฅผ ์์ ์ ๊ฒ์ผ๋ก ๋ฐ๊พธ์ธ์.
์ด ์ฝ๋๋ฅผ ๋ณ๋์ .csx ํ์ผ๋ก ์คํํ์ธ์. ์ธ์๋ ํธ์ถ์ ์ง์ ํ์๋ฉ๋๋ค. ์์ ์ ์ด๋ฆ, serial, ์ฃผ์๋ฅผ ์์ ์ ๊ฐ์ผ๋ก ๋ฐ๊พธ์ธ์.
ํ ๋ฒ์ ํธ์ถ ๊ฒฐ๊ณผ๋ฅผ ์ ๋์ ํ์ํฉ๋๋ค. ์ซ์๋ฅผ bool๋ก ๋ณํํ์ง ์์ผ๋ฉฐ, ๋ฐฐ์ด์ด๋ฉด ์์ ์๋ฅผ ํ์ํฉ๋๋ค.
object? result = UO.GetAutoSellDelay();
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));๋งค๊ฐ๋ณ์์ ์คํ ํ๋ฆ:
- ๋ ผ์์ด ์์ต๋๋ค. ์ง์ฐ โ ๋ฐ๋ฆฌ์ด ๋จ์์ ์๊ฐ์ ๋๋ค.
- ๊ฐ์ ํธ์ถ ๋น์์ ํ๋กํ์ ๋ฐ์ํฉ๋๋ค. ์ ์ฅ๋ var๋ ์ถํ ์ ๋ฐ์ดํธ๋์ง ์์ต๋๋ค.
var delay = UO.GetAutoSellDelay();
UO.Print("Delay ms: " + Convert.ToString(delay));๋งค๊ฐ๋ณ์์ ์คํ ํ๋ฆ:
- ์ธํฐ๋ 70000 ms๋ฅผ ์ป์ต๋๋ค. ํ์ฉ๋๋ ์ต๋๊ฐ์ 65535์ ๋๋ค. ์ด ์์์๋ ํ๋กํ ์ค์ ์ ๋ณ๊ฒฝํฉ๋๋ค.
- ํ๋กํ์ด ๋ก๋๋ ๋ ์ค์ ์๋ 65535๊ฐ ํฌํจ๋์ด์ผ ํฉ๋๋ค. Getter๋ ์๋ ์ธ์ 70000 ๋์ ์ค์ ์ ํ๋ ๊ฐ์ ๋ฐํํฉ๋๋ค.
return RunScenario();
object? RunScenario()
{
UO.SetAutoSellDelay(70000);
var actual = UO.GetAutoSellDelay();
UO.Print(Convert.ToString(actual));
return null;
}๋งค๊ฐ๋ณ์์ ์คํ ํ๋ฆ:
- 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์ ์ฌ์ฉํ์ธ์.
๋งค๊ฐ๋ณ์: ๋งค๊ฐ๋ณ์๊ฐ ์์ต๋๋ค.
๊ฒฐ๊ณผ: dynamic / Any.
ํธ์ถ ์:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetAutoSellDelay:bridge.GetAutoSellDelay().
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
case "getautoselldelay":
return new InjectionValue(bridge.GetAutoSellDelay());ะฃะบัะฐัะฝััะบะฐ ยท ะ ัััะบะธะน ยท English ยท Deutsch ยท Franรงais ยท Italiano ยท Espaรฑol ยท ็น้ซไธญๆ ยท ๆฅๆฌ่ช ยท ํ๊ตญ์ด
dynamic UO.GetPrice(object? objID);serial ํญ๋ชฉ์ ๋ํด ํด๋ผ์ด์ธํธ์๊ฒ ์๋ ค์ง Item.Price๋ฅผ ์ฝ์ต๋๋ค.
-
objIDโ self/backpack/lasttarget/์ ์ฅ๋ ๊ฐ์ฒด์ ๊ฐ์ฒด ์ผ๋ จ๋ฒํธ ๋๋ ์ง์๋๋ ์ด๋ฆ์ ๋๋ค. ์ซ์ ๋ฌธ์์ด๊ณผ 0x ๋ฌธ์์ด์ ๋ฐํ์์ ์ํด ํด๊ฒฐ๋ฉ๋๋ค.
int โ uint Item.Price๊ฐ int๋ก ๋ณํ๋๋์ง ํ์ธ๋์ง ์์. ๋๋ฝ๋ ํญ๋ชฉ์ 0๋ฅผ ์ ๊ณตํฉ๋๋ค. 2147483647 ์ด์์ ๊ฐ๊ฒฉ์ ์์ int๋ก ํ์๋ฉ๋๋ค.
- ํ์ ๋ฒค๋ ์ ์์ ์์ฒญํ์ง ์์ต๋๋ค. ๊ฐ์ ํด๋ผ์ด์ธํธ๊ฐ ์ด์ ์ ์์ ํ ๋ฐ์ดํฐ์ ๋ฐ๋ผ ๋ฌ๋ผ์ง๋๋ค. 0์ ๊ฐ๊ฒฉ์ ์ ์ ์๊ฑฐ๋ ๊ฐ๊ฒฉ์ด 0์ด๊ฑฐ๋ ํ๋ชฉ์ด ์์์ ๋ํ๋ผ ์ ์์ต๋๋ค. ๊ฐ์ฒด๋ฅผ ํ ์คํธํ๋ ค๋ฉด Exists๋ฅผ ์ฌ์ฉํ์ธ์.
๊ฐ ์์ ๋ ๋ณ๋์ ํ์ผ .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));๋งค๊ฐ๋ณ์์ ์คํ ํ๋ฆ:
- ๊ฒฐ๊ณผ๋ ์บ์๋ 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;๋งค๊ฐ๋ณ์์ ์คํ ํ๋ฆ:
- ๋๋ฝ๋ ํญ๋ชฉ์ 0๋ฅผ ์ ๊ณตํฉ๋๋ค.
return RunScenario();
object? RunScenario()
{
var price = UO.GetPrice(0);
UO.Print(Convert.ToString(price));
return null;
}๋งค๊ฐ๋ณ์์ ์คํ ํ๋ฆ:
- ์๋ก์ด ํธ์ถ๋ง์ด ๋ชจ๋ธ์ ๋ค์ ์ฝ์ต๋๋ค. ์ผ์ ์ค์ง ์์ฒด๋ ๊ฐ๊ฒฉ์ ์๊ตฌํ์ง ์์ต๋๋ค.
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์ ์ฌ์ฉํ์ธ์.
๋งค๊ฐ๋ณ์: objID (Any)
๊ฒฐ๊ณผ: dynamic / Any.
ํธ์ถ ์:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetPrice:bridge.GetPrice(Arg(0)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0).
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
case "getprice":
return new InjectionValue(bridge.GetPrice(Arg(0)));ะฃะบัะฐัะฝััะบะฐ ยท ะ ัััะบะธะน ยท English ยท Deutsch ยท Franรงais ยท Italiano ยท Espaรฑol ยท ็น้ซไธญๆ ยท ๆฅๆฌ่ช ยท ํ๊ตญ์ด
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" ์ค์ ์คํ ์ทจ์ ๋ช ๋ น์ด ์๋๋๋ค. ์ฌ์ฉ "".
๊ฐ ์์ ๋ ๋ณ๋์ ํ์ผ .csx๋ก ์ ์ฅํ๊ณ IDE์์ ์คํํ ์ ์์ต๋๋ค. UO ๊ฐ์ฒด์ ๋๊ธฐ ๊ธฐ๋ฅ์ ํ์ฌ ๊ฒ์ ์ธ์
์ ํธ์คํธ๋ฅผ ์ ๊ณตํฉ๋๋ค. ๋ฐ๋ชจ serial ์ด๋ฆ, ์ขํ, ์ฃผ์๋ฅผ ์์ ์ ๊ฒ์ผ๋ก ๋ฐ๊พธ์ธ์.
์ด ์ฝ๋๋ฅผ ๋ณ๋์ .csx ํ์ผ๋ก ์คํํ์ธ์. ์ธ์๋ ํธ์ถ์ ์ง์ ํ์๋ฉ๋๋ค. ์์ ์ ์ด๋ฆ, serial, ์ฃผ์๋ฅผ ์์ ์ ๊ฐ์ผ๋ก ๋ฐ๊พธ์ธ์.
ํ ๋ฒ์ ํธ์ถ ๊ฒฐ๊ณผ๋ฅผ ์ ๋์ ํ์ํฉ๋๋ค. ์ซ์๋ฅผ bool๋ก ๋ณํํ์ง ์์ผ๋ฉฐ, ๋ฐฐ์ด์ด๋ฉด ์์ ์๋ฅผ ํ์ํฉ๋๋ค.
object? result = UO.GetShopList();
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));๋งค๊ฐ๋ณ์์ ์คํ ํ๋ฆ:
- 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] : ""; }๋งค๊ฐ๋ณ์์ ์คํ ํ๋ฆ:
- ์ฌ์ ์คํ ๊ตฌ๋งค ์ ์์๋ง ํด๋น๋ฉ๋๋ค. 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] : "";
}๋งค๊ฐ๋ณ์์ ์คํ ํ๋ฆ:
- ๋ณด์กฐ ๊ธฐ๋ฅ์ ์ ์ฒด์ ์ผ๋ก ์ ๊ณต๋ฉ๋๋ค. ์ง์ ๋ ์ ํ์ ๋ชจ๋ ์์น์ ๊ธ์ก ํ๋๋ฅผ ํฉ์ฐํฉ๋๋ค. ์ ์ด ๋น์ด ์์ผ๋ฉด 0๋ฅผ ๋ฐํํฉ๋๋ค. ์ด๋ ์บ๋ฆญํฐ์ ๋๋ฌผ์ด๋ ์์ดํ ์๊ฐ ์๋ ์ฌ์ฉ ๊ฐ๋ฅํ ์ ๋ ์์ ๋๋ค.
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์ ์ฌ์ฉํ์ธ์.
๋งค๊ฐ๋ณ์: ๋งค๊ฐ๋ณ์๊ฐ ์์ต๋๋ค.
๊ฒฐ๊ณผ: dynamic / Any.
ํธ์ถ ์:
-
InjectionScript.Runtime.InjectionApiUO.GetShopList. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetShopList:bridge.GetShopList().
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
public InjectionValue GetShopList()
=> new InjectionValue((bridge.GetShopList() ?? Array.Empty<string>()).Select(item => new InjectionValue(item)).ToArray());ะฃะบัะฐัะฝััะบะฐ ยท ะ ัััะบะธะน ยท English ยท Deutsch ยท Franรงais ยท Italiano ยท Espaรฑol ยท ็น้ซไธญๆ ยท ๆฅๆฌ่ช ยท ํ๊ตญ์ด
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๊ฐ ๊ฒ์ ์ฐฝ์ ์ง์ ๋ํ๋ฉ๋๋ค. ๋ค์ ํธ์ถ์ ๋ชจ๋๋ฅผ ๋ค์ ์ผญ๋๋ค. ์ฒซ ๋ฒ์งธ ์ ์ก ํ ์ธ์ ์๋ ํ์์ ์ฌ์ฉํ์ฌ ๋๋จธ์ง ๋๊ธฐ์ด์ ์ค์งํฉ๋๋ค. ์ด๋ฏธ ์ ์ก๋ ์์ฒญ์ ๋กค๋ฐฑ๋์ง ์์ต๋๋ค.
๊ฐ ์์ ๋ ๋ณ๋์ ํ์ผ .csx๋ก ์ ์ฅํ๊ณ IDE์์ ์คํํ ์ ์์ต๋๋ค. UO ๊ฐ์ฒด์ ๋๊ธฐ ๊ธฐ๋ฅ์ ํ์ฌ ๊ฒ์ ์ธ์
์ ํธ์คํธ๋ฅผ ์ ๊ณตํฉ๋๋ค. ๋ฐ๋ชจ serial ์ด๋ฆ, ์ขํ, ์ฃผ์๋ฅผ ์์ ์ ๊ฒ์ผ๋ก ๋ฐ๊พธ์ธ์.
์ด ์ฝ๋๋ฅผ ๋ณ๋์ .csx ํ์ผ๋ก ์คํํ์ธ์. ์ธ์๋ ํธ์ถ์ ์ง์ ํ์๋ฉ๋๋ค. ์์ ์ ์ด๋ฆ, serial, ์ฃผ์๋ฅผ ์์ ์ ๊ฐ์ผ๋ก ๋ฐ๊พธ์ธ์.
๋ช ๋ น์ ๋ ๋ฆฝ๋ ๋ฌธ์ ๋๋ค. ์์ ๋ฉ์์ง๋ ํธ์ถ ์์์ ๋ํ๋ด๋ฉฐ ์๋ฒ ๋์์ ์๋ฃ๋ฅผ ํ์ธํ์ง ์์ต๋๋ค.
UO.Print("Calling UO.MassPriceMove");
UO.MassPriceMove();๋งค๊ฐ๋ณ์์ ์คํ ํ๋ฆ:
- ์ง์ฐ=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");๋งค๊ฐ๋ณ์์ ์คํ ํ๋ฆ:
- 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;
}๋งค๊ฐ๋ณ์์ ์คํ ํ๋ฆ:
- ์ง์ฐ=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;
}
}๋งค๊ฐ๋ณ์์ ์คํ ํ๋ฆ:
- ์ธ์๊ฐ ์์ผ๋ฉด ์ด ๋ช ๋ น์ ์ผ๋ฐ ๋๋ ์ ์ก ๋๊ธฐ์ด์ ๋๊ณ ๋ณด๋ฅ ์ค์ธ ๊ฐ๊ฒฉ ์๋ต์ ์ง์๋๋ค.
- ์๋ฒ์์ ์ด๋ฏธ ์๋ฝํ ๊ฐ๊ฒฉ๊ณผ ์ ์ก์ ๋กค๋ฐฑ๋์ง ์์ต๋๋ค. ๋ค๋ฅธ ์ ์ฐจ๋ฅผ ์ค์งํ๊ณ AllPrice๋ฅผ ๋ณ๋๋ก ํ์ฑํํ๋ ค๋ฉด UO.TerminateAll()๋ฅผ ์ฌ์ฉํ์ธ์.
Shop ๋ชฉ๋ก / ๋งค์ ๋ฐ ๋งค๋ ๋ชฉ๋ก
UO.MassPriceMove();C#์ ๋์๋ฌธ์๋ฅผ ๊ตฌ๋ถํฉ๋๋ค. ์ ํํ UO ์ด๋ฆ์ ์ฌ์ฉํ์ธ์. ์ซ์ ํ๋๊ทธ๋ 0๊ณผ ๋น๊ตํ๊ณ ๋ฐํ ํ์์ด bool์ผ ๋๋ง bool์ ์ฌ์ฉํ์ธ์.
๋งค๊ฐ๋ณ์: ๋งค๊ฐ๋ณ์๊ฐ ์์ต๋๋ค.
๊ฒฐ๊ณผ: void / Unit.
ํธ์ถ ์:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.MassPriceMove:bridge.MassPriceMove(-1, 0, 0, 0, -1, -1, -1, 0). -
InjectionScript.Runtime.NumberConversions.ToInt:NumberConversions.ToInt(arguments[0]). -
InjectionScript.Runtime.InjectionApiUO.ResolveType:ResolveType(arguments[2]). -
InjectionScript.Runtime.InjectionApiUO.ResolveTransferDestination:ResolveTransferDestination(arguments[4], true).
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
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;๋งค๊ฐ๋ณ์: delay (Any), quantity (Any), type (Any), price (Any)
๊ฒฐ๊ณผ: void / Unit.
ํธ์ถ ์:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.MassPriceMove:bridge.MassPriceMove(-1, 0, 0, 0, -1, -1, -1, 0). -
InjectionScript.Runtime.NumberConversions.ToInt:NumberConversions.ToInt(arguments[0]). -
InjectionScript.Runtime.InjectionApiUO.ResolveType:ResolveType(arguments[2]). -
InjectionScript.Runtime.InjectionApiUO.ResolveTransferDestination:ResolveTransferDestination(arguments[4], true).
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
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.
ํธ์ถ ์:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.MassPriceMove:bridge.MassPriceMove(-1, 0, 0, 0, -1, -1, -1, 0). -
InjectionScript.Runtime.NumberConversions.ToInt:NumberConversions.ToInt(arguments[0]). -
InjectionScript.Runtime.InjectionApiUO.ResolveType:ResolveType(arguments[2]). -
InjectionScript.Runtime.InjectionApiUO.ResolveTransferDestination:ResolveTransferDestination(arguments[4], true).
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
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.
ํธ์ถ ์:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.MassPriceMove:bridge.MassPriceMove(-1, 0, 0, 0, -1, -1, -1, 0). -
InjectionScript.Runtime.NumberConversions.ToInt:NumberConversions.ToInt(arguments[0]). -
InjectionScript.Runtime.InjectionApiUO.ResolveType:ResolveType(arguments[2]). -
InjectionScript.Runtime.InjectionApiUO.ResolveTransferDestination:ResolveTransferDestination(arguments[4], true).
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
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;ะฃะบัะฐัะฝััะบะฐ ยท ะ ัััะบะธะน ยท English ยท Deutsch ยท Franรงais ยท Italiano ยท Espaรฑol ยท ็น้ซไธญๆ ยท ๆฅๆฌ่ช ยท ํ๊ตญ์ด
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๋ ๋ ์๋ํ๋ฅผ ์์ ํ ์ฌ์ค์ ํฉ๋๋ค.
๊ฐ ์์ ๋ ๋ณ๋์ ํ์ผ .csx๋ก ์ ์ฅํ๊ณ IDE์์ ์คํํ ์ ์์ต๋๋ค. UO ๊ฐ์ฒด์ ๋๊ธฐ ๊ธฐ๋ฅ์ ํ์ฌ ๊ฒ์ ์ธ์
์ ํธ์คํธ๋ฅผ ์ ๊ณตํฉ๋๋ค. ๋ฐ๋ชจ serial ์ด๋ฆ, ์ขํ, ์ฃผ์๋ฅผ ์์ ์ ๊ฒ์ผ๋ก ๋ฐ๊พธ์ธ์.
์ด ์ฝ๋๋ฅผ ๋ณ๋์ .csx ํ์ผ๋ก ์คํํ์ธ์. ์ธ์๋ ํธ์ถ์ ์ง์ ํ์๋ฉ๋๋ค. ์์ ์ ์ด๋ฆ, serial, ์ฃผ์๋ฅผ ์์ ์ ๊ฐ์ผ๋ก ๋ฐ๊พธ์ธ์.
๋ช ๋ น์ ๋ ๋ฆฝ๋ ๋ฌธ์ ๋๋ค. ์์ ๋ฉ์์ง๋ ํธ์ถ ์์์ ๋ํ๋ด๋ฉฐ ์๋ฒ ๋์์ ์๋ฃ๋ฅผ ํ์ธํ์ง ์์ต๋๋ค.
UO.Print("Calling UO.Sell");
UO.Sell(0x0F51);๋งค๊ฐ๋ณ์์ ์คํ ํ๋ฆ:
- 0x0F51 - graphic ๋จ๊ฒ, ์์ hue, 1 - ๋ฌธ์ฅ๋น ํ๋. ํ์์๋ ํน์ serial๋ฅผ ์ ํํ์ง ์์ผ๋ฉฐ ํญ๋ชฉ์ ์ ์ฉ์ฑ/๊ฐ์น๋ฅผ ํ ์คํธํ์ง ์์ต๋๋ค. ์์ดํ ์ ์ ํํ type/์์์ ์ ํํ์ธ์.
UO.Sell(0x0F51);๋งค๊ฐ๋ณ์์ ์คํ ํ๋ฆ:
- 0x1F03๋ ํ์ค graphic ๋ก๋ธ์ ์์์ด๊ณ , 0x0044๋ hue์ ์์์ ๋๋ค. ๋ ๋ค ๊ทํ์ ์ ํ์ผ๋ก ๊ต์ฒดํ์ญ์์ค. 5 โ ๊ฐ๊ฒฉ์ด ์๋ ๋จ์; ์ต์ ๊ฐ๊ฒฉ ๋ฐ ์ด๋ฆ ๋งค๊ฐ๋ณ์ Sell/AutoSell๋ ํ์ฉ๋์ง ์์ต๋๋ค. ์๋ฒ๋ ํ๋งค ์ ์์ ํด๋น ํ๋ชฉ์ ํฌํจํด์ผ ํฉ๋๋ค.
return RunScenario();
object? RunScenario()
{
UO.Sell(0x1F03, 0x0044, 5);
return null;
}3. NPC๋ก ์ด๋ํ๊ธฐ ์ ์ ๋ ๊ฐ์ง ์ ํ์ ํ๋งค๋ฅผ ๋นํ์ฑํํฉ๋๋ค - ์คํฌ๋ฆฝํธ ํด๋์ค
๋งค๊ฐ๋ณ์์ ์คํ ํ๋ฆ:
- ํ๋ก์์ ์ด๋ฆ์ ์์์ ์ ๋๋ค. itemType ๋ฐ hue๋ ํด๋น ๋งค๊ฐ๋ณ์์ ๋๋ค. ๊ธฐํ ๊ท์น, ๊ตฌ๋งค ๋ฐ ์ฌ์ฉ์ ์ง์ ๋ช ๋ช ๋ชฉ๋ก์ ์ ์ง๋ฉ๋๋ค. ํ์ฑํ๋ ๋ค๋ฅธ ๋ชฉ๋ก์์๋ ์ด๋ฌํ ํญ๋ชฉ์ ํ๋งคํ๋ ๊ฒฝ์ฐ ์ค์ ์ ํตํด ํด๋น ๋ชฉ๋ก์ ํด๋น ๊ท์น์ ๋นํ์ฑํํ์ธ์.
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์ ์ฌ์ฉํ์ธ์.
๋งค๊ฐ๋ณ์: type (Any)
๊ฒฐ๊ณผ: void / Unit.
ํธ์ถ ์:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.SetAutoSellRule:bridge.SetAutoSellRule(Arg(0), arguments.Length > 1 ? Arg(1) : -1, arguments.Length > 2 ? Arg(2) : 1). -
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias::Arg:Arg(0).
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
case "sell":
bridge.SetAutoSellRule(Arg(0), arguments.Length > 1 ? Arg(1) : -1, arguments.Length > 2 ? Arg(2) : 1);
break;๋งค๊ฐ๋ณ์: type (Any), color (Any)
๊ฒฐ๊ณผ: void / Unit.
ํธ์ถ ์:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.SetAutoSellRule:bridge.SetAutoSellRule(Arg(0), arguments.Length > 1 ? Arg(1) : -1, arguments.Length > 2 ? Arg(2) : 1). -
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias::Arg:Arg(0).
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
case "sell":
bridge.SetAutoSellRule(Arg(0), arguments.Length > 1 ? Arg(1) : -1, arguments.Length > 2 ? Arg(2) : 1);
break;๋งค๊ฐ๋ณ์: type (Any), color (Any), quantity (Any)
๊ฒฐ๊ณผ: void / Unit.
ํธ์ถ ์:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.SetAutoSellRule:bridge.SetAutoSellRule(Arg(0), arguments.Length > 1 ? Arg(1) : -1, arguments.Length > 2 ? Arg(2) : 1). -
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias::Arg:Arg(0).
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
case "sell":
bridge.SetAutoSellRule(Arg(0), arguments.Length > 1 ? Arg(1) : -1, arguments.Length > 2 ? Arg(2) : 1);
break;ะฃะบัะฐัะฝััะบะฐ ยท ะ ัััะบะธะน ยท English ยท Deutsch ยท Franรงais ยท Italiano ยท Espaรฑol ยท ็น้ซไธญๆ ยท ๆฅๆฌ่ช ยท ํ๊ตญ์ด
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" ์ค์ ์คํ ์ทจ์ ๋ช ๋ น์ด ์๋๋๋ค. ์ฌ์ฉ "".
๊ฐ ์์ ๋ ๋ณ๋์ ํ์ผ .csx๋ก ์ ์ฅํ๊ณ IDE์์ ์คํํ ์ ์์ต๋๋ค. UO ๊ฐ์ฒด์ ๋๊ธฐ ๊ธฐ๋ฅ์ ํ์ฌ ๊ฒ์ ์ธ์
์ ํธ์คํธ๋ฅผ ์ ๊ณตํฉ๋๋ค. ๋ฐ๋ชจ serial ์ด๋ฆ, ์ขํ, ์ฃผ์๋ฅผ ์์ ์ ๊ฒ์ผ๋ก ๋ฐ๊พธ์ธ์.
์ด ์ฝ๋๋ฅผ ๋ณ๋์ .csx ํ์ผ๋ก ์คํํ์ธ์. ์ธ์๋ ํธ์ถ์ ์ง์ ํ์๋ฉ๋๋ค. ์์ ์ ์ด๋ฆ, serial, ์ฃผ์๋ฅผ ์์ ์ ๊ฐ์ผ๋ก ๋ฐ๊พธ์ธ์.
๋ช ๋ น์ ๋ ๋ฆฝ๋ ๋ฌธ์ ๋๋ค. ์์ ๋ฉ์์ง๋ ํธ์ถ ์์์ ๋ํ๋ด๋ฉฐ ์๋ฒ ๋์์ ์๋ฃ๋ฅผ ํ์ธํ์ง ์์ต๋๋ค.
UO.Print("Calling UO.SendShopReply");
UO.SendShopReply("");๋งค๊ฐ๋ณ์์ ์คํ ํ๋ฆ:
- ์ต๋ 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] : ""; }๋งค๊ฐ๋ณ์์ ์คํ ํ๋ฆ:
- 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] : "";
}๋งค๊ฐ๋ณ์์ ์คํ ํ๋ฆ:
- ์์ ์ฐฝ์์ ์๋์ ๋ฏธ๋ฆฌ ์ ํํ์ธ์. "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;
}
}๋งค๊ฐ๋ณ์์ ์คํ ํ๋ฆ:
- ๋น ์ค์ ๋น ์๋ต์ ๋ณด๋ด๊ณ ํ์ฑ ์ ์์ ๋ซ์ต๋๋ค. GetShopList ๊ฒ์ฌ๋ ์ํ์ด ์์ ๋ ํธ์ถ๋๋ ๊ฒ์ ๋ฐฉ์งํ์ง๋ง ๋น ๋ฌธ์ฅ๊ณผ ์๋ ๋ฌธ์ฅ์ ๊ตฌ๋ถํ์ง ์์ต๋๋ค.
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์ ์ฌ์ฉํ์ธ์.
๋งค๊ฐ๋ณ์: reply (Any)
๊ฒฐ๊ณผ: void / Unit.
ํธ์ถ ์:
-
InjectionScript.Runtime.InjectionApiUO.SendShopReply. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.SendShopReply:bridge.SendShopReply(reply.ToString()). -
InjectionScript.Runtime.InjectionValue.ToString:reply.ToString().
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
public void SendShopReply(InjectionValue reply) => bridge.SendShopReply(reply.ToString());ะฃะบัะฐัะฝััะบะฐ ยท ะ ัััะบะธะน ยท English ยท Deutsch ยท Franรงais ยท Italiano ยท Espaรฑol ยท ็น้ซไธญๆ ยท ๆฅๆฌ่ช ยท ํ๊ตญ์ด
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๋ ์ฌ์ ํ ๋ก๋๋ ์ธ๊ณ์ ๋น๊ตํ์ฌ ํ์ธ๋ฉ๋๋ค.
๊ฐ ์์ ๋ ๋ณ๋์ ํ์ผ .csx๋ก ์ ์ฅํ๊ณ IDE์์ ์คํํ ์ ์์ต๋๋ค. UO ๊ฐ์ฒด์ ๋๊ธฐ ๊ธฐ๋ฅ์ ํ์ฌ ๊ฒ์ ์ธ์
์ ํธ์คํธ๋ฅผ ์ ๊ณตํฉ๋๋ค. ๋ฐ๋ชจ serial ์ด๋ฆ, ์ขํ, ์ฃผ์๋ฅผ ์์ ์ ๊ฒ์ผ๋ก ๋ฐ๊พธ์ธ์.
์ด ์ฝ๋๋ฅผ ๋ณ๋์ .csx ํ์ผ๋ก ์คํํ์ธ์. ์ธ์๋ ํธ์ถ์ ์ง์ ํ์๋ฉ๋๋ค. ์์ ์ ์ด๋ฆ, serial, ์ฃผ์๋ฅผ ์์ ์ ๊ฐ์ผ๋ก ๋ฐ๊พธ์ธ์.
๋ช ๋ น์ ๋ ๋ฆฝ๋ ๋ฌธ์ ๋๋ค. ์์ ๋ฉ์์ง๋ ํธ์ถ ์์์ ๋ํ๋ด๋ฉฐ ์๋ฒ ๋์์ ์๋ฃ๋ฅผ ํ์ธํ์ง ์์ต๋๋ค.
UO.Print("Calling UO.SetAutoBuyDelay");
UO.SetAutoBuyDelay(350);๋งค๊ฐ๋ณ์์ ์คํ ํ๋ฆ:
- ๊ฐ=350 โ ํ์ฉ๋๋ ์๋ ์์ ์ฌ์ด์ ๋ฐ๋ฆฌ์ด์ ๋๋ค.
- ์ค์ ์ ํ์ฌ ํ๋กํ์ ์ ์ฅ๋๋ฉฐ ๋ค๋ฅธ ์คํฌ๋ฆฝํธ์ ํ์๋ฉ๋๋ค.
UO.SetAutoBuyDelay(350);
UO.Print(Convert.ToString(UO.GetAutoBuyDelay()));๋งค๊ฐ๋ณ์์ ์คํ ํ๋ฆ:
- 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;๋งค๊ฐ๋ณ์์ ์คํ ํ๋ฆ:
- ์์ฒญ=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์ ์ฌ์ฉํ์ธ์.
๋งค๊ฐ๋ณ์: value (Any)
๊ฒฐ๊ณผ: void / Unit.
ํธ์ถ ์:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.SetAutoBuyDelay:bridge.SetAutoBuyDelay(state.AutoBuyDelay).
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
case "setautobuydelay":
state.AutoBuyDelay = Math.Max(0, Arg(0));
bridge.SetAutoBuyDelay(state.AutoBuyDelay);
return InjectionValue.Unit;ะฃะบัะฐัะฝััะบะฐ ยท ะ ัััะบะธะน ยท English ยท Deutsch ยท Franรงais ยท Italiano ยท Espaรฑol ยท ็น้ซไธญๆ ยท ๆฅๆฌ่ช ยท ํ๊ตญ์ด
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๋ ์ฌ์ ํ ๋ก๋๋ ์ธ๊ณ์ ๋น๊ตํ์ฌ ํ์ธ๋ฉ๋๋ค.
๊ฐ ์์ ๋ ๋ณ๋์ ํ์ผ .csx๋ก ์ ์ฅํ๊ณ IDE์์ ์คํํ ์ ์์ต๋๋ค. UO ๊ฐ์ฒด์ ๋๊ธฐ ๊ธฐ๋ฅ์ ํ์ฌ ๊ฒ์ ์ธ์
์ ํธ์คํธ๋ฅผ ์ ๊ณตํฉ๋๋ค. ๋ฐ๋ชจ serial ์ด๋ฆ, ์ขํ, ์ฃผ์๋ฅผ ์์ ์ ๊ฒ์ผ๋ก ๋ฐ๊พธ์ธ์.
์ด ์ฝ๋๋ฅผ ๋ณ๋์ .csx ํ์ผ๋ก ์คํํ์ธ์. ์ธ์๋ ํธ์ถ์ ์ง์ ํ์๋ฉ๋๋ค. ์์ ์ ์ด๋ฆ, serial, ์ฃผ์๋ฅผ ์์ ์ ๊ฐ์ผ๋ก ๋ฐ๊พธ์ธ์.
๋ช ๋ น์ ๋ ๋ฆฝ๋ ๋ฌธ์ ๋๋ค. ์์ ๋ฉ์์ง๋ ํธ์ถ ์์์ ๋ํ๋ด๋ฉฐ ์๋ฒ ๋์์ ์๋ฃ๋ฅผ ํ์ธํ์ง ์์ต๋๋ค.
UO.Print("Calling UO.SetAutoSellDelay");
UO.SetAutoSellDelay(350);๋งค๊ฐ๋ณ์์ ์คํ ํ๋ฆ:
- ๊ฐ=350 โ ํ์ฉ๋๋ ์๋ ์์ ์ฌ์ด์ ๋ฐ๋ฆฌ์ด์ ๋๋ค.
- ์ค์ ์ ํ์ฌ ํ๋กํ์ ์ ์ฅ๋๋ฉฐ ๋ค๋ฅธ ์คํฌ๋ฆฝํธ์ ํ์๋ฉ๋๋ค.
UO.SetAutoSellDelay(350);
UO.Print(Convert.ToString(UO.GetAutoSellDelay()));๋งค๊ฐ๋ณ์์ ์คํ ํ๋ฆ:
- 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;๋งค๊ฐ๋ณ์์ ์คํ ํ๋ฆ:
- ์์ฒญ=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์ ์ฌ์ฉํ์ธ์.
๋งค๊ฐ๋ณ์: value (Any)
๊ฒฐ๊ณผ: void / Unit.
ํธ์ถ ์:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.SetAutoSellDelay:bridge.SetAutoSellDelay(state.AutoSellDelay).
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
case "setautoselldelay":
state.AutoSellDelay = Math.Max(0, Arg(0));
bridge.SetAutoSellDelay(state.AutoSellDelay);
return InjectionValue.Unit;ะฃะบัะฐัะฝััะบะฐ ยท ะ ัััะบะธะน ยท English ยท Deutsch ยท Franรงais ยท Italiano ยท Espaรฑol ยท ็น้ซไธญๆ ยท ๆฅๆฌ่ช ยท ํ๊ตญ์ด
void UO.Shop();์ง์ญ ๋ฌด์ญ ๋ผ์ธ ๋ชฉ๋ก์ ์ธ์ํฉ๋๋ค.
๋งค๊ฐ๋ณ์๊ฐ ์์ต๋๋ค.
void - ๊ฐ์ด ์์ต๋๋ค. ๋ณ๋์ ํ์ ์ผ๋ก ์ ํํ์ธ์. ์๋ฃ๋ ์๋ฒ์ ์์ ์ ํ์ธํ์ง ์์ต๋๋ค.
- ExecuteLegacyManualAlias๋ ๋ธ๋ฆฌ์ง๋ฅผ ์ฝ๊ณ GetShopList๋ "|"๋ฅผ ํตํด ํ์ ์ฐ๊ฒฐํฉ๋๋ค. SystemMessage์ฉ. ํ๋งค์ ๋ฉ๋ด๊ฐ ์ด๋ฆฌ์ง ์์ผ๋ฉฐ, ๋งค์/๋งค๋๊ฐ ์ด๋ฃจ์ด์ง์ง ์์ต๋๋ค.
- ์ง์ ๋ ๋ก์ปฌ ๋ฐ์ดํฐ๋ง ์์ ํ๊ฑฐ๋ ํ์ํฉ๋๋ค. ์ด ๋ช ๋ น์๋ ์๋ฒ ํ์ธ์ด ์์ต๋๋ค.
๊ฐ ์์ ๋ ๋ณ๋์ ํ์ผ .csx๋ก ์ ์ฅํ๊ณ IDE์์ ์คํํ ์ ์์ต๋๋ค. UO ๊ฐ์ฒด์ ๋๊ธฐ ๊ธฐ๋ฅ์ ํ์ฌ ๊ฒ์ ์ธ์
์ ํธ์คํธ๋ฅผ ์ ๊ณตํฉ๋๋ค. ๋ฐ๋ชจ serial ์ด๋ฆ, ์ขํ, ์ฃผ์๋ฅผ ์์ ์ ๊ฒ์ผ๋ก ๋ฐ๊พธ์ธ์.
์ด ์ฝ๋๋ฅผ ๋ณ๋์ .csx ํ์ผ๋ก ์คํํ์ธ์. ์ธ์๋ ํธ์ถ์ ์ง์ ํ์๋ฉ๋๋ค. ์์ ์ ์ด๋ฆ, serial, ์ฃผ์๋ฅผ ์์ ์ ๊ฐ์ผ๋ก ๋ฐ๊พธ์ธ์.
๋ช ๋ น์ ๋ ๋ฆฝ๋ ๋ฌธ์ ๋๋ค. ์์ ๋ฉ์์ง๋ ํธ์ถ ์์์ ๋ํ๋ด๋ฉฐ ์๋ฒ ๋์์ ์๋ฃ๋ฅผ ํ์ธํ์ง ์์ต๋๋ค.
UO.Print("Calling UO.Shop");
UO.Shop();๋งค๊ฐ๋ณ์์ ์คํ ํ๋ฆ:
- ์ง์ญ ๋ฌด์ญ ๋ผ์ธ ๋ชฉ๋ก์ ์ธ์ํฉ๋๋ค.
UO.Shop();๋งค๊ฐ๋ณ์์ ์คํ ํ๋ฆ:
- ExecuteLegacyManualAlias๋ ๋ธ๋ฆฌ์ง๋ฅผ ์ฝ๊ณ GetShopList๋ "|"๋ฅผ ํตํด ํ์ ์ฐ๊ฒฐํฉ๋๋ค. SystemMessage์ฉ. ํ๋งค์ ๋ฉ๋ด๊ฐ ์ด๋ฆฌ์ง ์์ผ๋ฉฐ, ๋งค์/๋งค๋๊ฐ ์ด๋ฃจ์ด์ง์ง ์์ต๋๋ค.
return RunScenario();
object? RunScenario()
{
UO.Shop();
UO.Print(UO.GetArrayLength(UO.GetShopList()));
return null;
}๋งค๊ฐ๋ณ์์ ์คํ ํ๋ฆ:
- ์ง์ ๋ ๋ก์ปฌ ๋ฐ์ดํฐ๋ง ์์ ํ๊ฑฐ๋ ํ์ํฉ๋๋ค. ์ด ๋ช ๋ น์๋ ์๋ฒ ํ์ธ์ด ์์ต๋๋ค.
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์ ์ฌ์ฉํ์ธ์.
๋งค๊ฐ๋ณ์: ๋งค๊ฐ๋ณ์๊ฐ ์์ต๋๋ค.
๊ฒฐ๊ณผ: void / Unit.
ํธ์ถ ์:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias. -
InjectionScript.Runtime.InjectionApiUO.SystemMessage:SystemMessage(string.Join(" | ", bridge.GetShopList())). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetShopList:bridge.GetShopList().
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
case "shop": SystemMessage(string.Join(" | ", bridge.GetShopList())); break;ะฃะบัะฐัะฝััะบะฐ ยท ะ ัััะบะธะน ยท English ยท Deutsch ยท Franรงais ยท Italiano ยท Espaรฑol ยท ็น้ซไธญๆ ยท ๆฅๆฌ่ช ยท ํ๊ตญ์ด
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๊ฐ ํฌํจ๋์ด ์๊ณ ๋์๋ฌธ์๋ฅผ ๊ตฌ๋ถํ์ง ์๋ ์ฒซ ๋ฒ์งธ ํญ๋ชฉ์ ์ ํํฉ๋๋ค. ๋น ํ ์คํธ๋ ๋๊ตฌ์๊ฒ๋ ์ ํฉํฉ๋๋ค. ์ซ์ ํ ์คํธ๋ ์์ธ์ด ์๋ ์ด๋ฆ์ ์ผ๋ถ์ ๋๋ค. ์ฑ๊ณต์ ์ผ๋ก ์ ํํ๋ฉด ์๋ต์ด ์ ์ก๋๊ณ ๋ก์ปฌ ๋ฉ๋ด๊ฐ ๋ซํ๋๋ค. ์ผํ์ฑ ํํฌ๋ ์ ํํ ํ์๋ง ์ญ์ ๋ฉ๋๋ค. ์๊ตฌ ํํฌ๊ฐ ๋จ์ ์์ต๋๋ค.
๊ฐ ์์ ๋ ๋ณ๋์ ํ์ผ .csx๋ก ์ ์ฅํ๊ณ IDE์์ ์คํํ ์ ์์ต๋๋ค. UO ๊ฐ์ฒด์ ๋๊ธฐ ๊ธฐ๋ฅ์ ํ์ฌ ๊ฒ์ ์ธ์
์ ํธ์คํธ๋ฅผ ์ ๊ณตํฉ๋๋ค. ๋ฐ๋ชจ serial ์ด๋ฆ, ์ขํ, ์ฃผ์๋ฅผ ์์ ์ ๊ฒ์ผ๋ก ๋ฐ๊พธ์ธ์.
์ด ์ฝ๋๋ฅผ ๋ณ๋์ .csx ํ์ผ๋ก ์คํํ์ธ์. ์ธ์๋ ํธ์ถ์ ์ง์ ํ์๋ฉ๋๋ค. ์์ ์ ์ด๋ฆ, serial, ์ฃผ์๋ฅผ ์์ ์ ๊ฐ์ผ๋ก ๋ฐ๊พธ์ธ์.
๋ช ๋ น์ ๋ ๋ฆฝ๋ ๋ฌธ์ ๋๋ค. ์์ ๋ฉ์์ง๋ ํธ์ถ ์์์ ๋ํ๋ด๋ฉฐ ์๋ฒ ๋์์ ์๋ฃ๋ฅผ ํ์ธํ์ง ์์ต๋๋ค.
UO.Print("Calling UO.VendorMenu");
UO.VendorMenu("lasttarget");๋งค๊ฐ๋ณ์์ ์คํ ํ๋ฆ:
- ํ๋งค์๋ฅผ ์ด์ฉํ๊ฑฐ๋ ์๊ตฌ ๋ฉ๋ดํ ์ ๋ฑ๋กํฉ๋๋ค.
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;๋งค๊ฐ๋ณ์์ ์คํ ํ๋ฆ:
- ํ๋์ ์ธ์๋ ๋ธ๋ฆฌ์ง๋ฅผ ํธ์ถํฉ๋๋ค.UseObject. ๋ ์ธ์๋ bridge.AddMenuHook(menu,choice,true)๋ฅผ ํธ์ถํฉ๋๋ค. ์ฌ๊ธฐ์ true๋ ๋ฐ๋ณต ๊ฐ๋ฅํ ํํฌ๋ฅผ ์๋ฏธํฉ๋๋ค.
return RunScenario();
object? RunScenario()
{
UO.VendorMenu("Vendor", "Buy");
return null;
}๋งค๊ฐ๋ณ์์ ์คํ ํ๋ฆ:
- ์๋์ผ๋ก ๊ตฌ๋งคํ๊ฑฐ๋ ํ๋งคํ์ง ์์ต๋๋ค. ๋ฉ๋ด ์ด๊ธฐ ๋ฐ ์ ํ์ ์๋ฒ์ ์ํด ๊ฒฐ์ ๋ฉ๋๋ค. ๋ฑ๋ก๋ ํํฌ๋ ์ทจ์๋ ๋๊น์ง ์ผ์นํ๋ ๋ค์ ๋ฉ๋ด์์ ์๋ํฉ๋๋ค.
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์ ์ฌ์ฉํ์ธ์.
๋งค๊ฐ๋ณ์: vendor (Any)
๊ฒฐ๊ณผ: void / Unit.
ํธ์ถ ์:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.AddMenuHook:bridge.AddMenuHook(Text(0), Text(1), true). -
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias::Text:Text(0). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.UseObject:bridge.UseObject(Arg(0, bridge.LastTarget)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias::Arg:Arg(0, bridge.LastTarget). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.LastTarget:bridge.LastTarget.
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
case "vendormenu":
if (arguments.Length >= 2) bridge.AddMenuHook(Text(0), Text(1), true);
else bridge.UseObject(Arg(0, bridge.LastTarget));
break;๋งค๊ฐ๋ณ์: menu (Any), choice (Any)
๊ฒฐ๊ณผ: void / Unit.
ํธ์ถ ์:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.AddMenuHook:bridge.AddMenuHook(Text(0), Text(1), true). -
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias::Text:Text(0). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.UseObject:bridge.UseObject(Arg(0, bridge.LastTarget)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias::Arg:Arg(0, bridge.LastTarget). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.LastTarget:bridge.LastTarget.
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
case "vendormenu":
if (arguments.Length >= 2) bridge.AddMenuHook(Text(0), Text(1), true);
else bridge.UseObject(Arg(0, bridge.LastTarget));
break;