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

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

Gump ์ฐฝ

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

์„œ๋ฒ„ ์ฐฝ ์ฝ๊ธฐ ๋ฐ ์‘๋‹ต ๋ณด๋‚ด๊ธฐ: ๋ฒ„ํŠผ, ํ™•์ธ๋ž€, ๋ผ๋””์˜ค ๋ฒ„ํŠผ ๋ฐ ํ•„๋“œ. ID ์ฐฝ, serial ์†Œ์œ ์ž์™€ ์—ด๋ฆฐ ์ฐฝ ์ธ๋ฑ์Šค๋Š” ์„œ๋กœ ๋ฐ”๋€” ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

์„น์…˜

์ฃผ์ œ ๋ช…๋ น ๋ฐ ์„ค๋ช…
GetGump UO.GetGump
GetGumpInfo UO.GetGumpInfo
Gump ID / Serial UO.GetGumpID ยท UO.GetGumpSerial
Text Lines UO.GetGumpTextLines ยท UO.GetGumpFullLines ยท UO.GetGumpShortLines
Buttons UO.GetGumpButtonsDescription ยท UO.NumGumpButton
CheckBox UO.NumGumpCheckBox ยท UO.GumpAutoCheckBox
RadioButton UO.NumGumpRadiobutton ยท UO.GumpAutoRadiobutton
TextEntry UO.NumGumpTextEntry ยท UO.GumpAutoTextEntry
WaitGump UO.WaitGump
SelectGump UO.SelectGump
SendGumpSelect UO.SendGumpSelect
Ignore ๊ฒ€์Šค UO.AddGumpIgnoreByID ยท UO.AddGumpIgnoreBySerial ยท UO.ClearGumpsIgnore
Close Gump UO.IsGumpCanBeClosed ยท UO.CloseClientGump ยท UO.CancelGump

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

๊ฒ€ํ”„ ์ •๋ณด

UO.GetGump ยท UO.GetGumpID ยท UO.GetGumpSerial ยท UO.GetGumpCount ยท UO.GetGumpsCount ยท UO.GetGumpInfo ยท UO.GetGumpButtonsDescription ยท UO.GetGumpFullLines ยท UO.GetGumpShortLines ยท UO.GetGumpTextLines ยท UO.GumpObject ยท UO.LastGump ยท UO.IsGump ยท UO.GumpExists ยท UO.IsGumpCanBeClosed

์‘๋‹ต

UO.NumGumpButton ยท UO.NumGumpCheckBox ยท UO.NumGumpRadiobutton ยท UO.NumGumpTextEntry ยท UO.GumpAutoCheckBox ยท UO.GumpAutoRadiobutton ยท UO.GumpAutoTextEntry ยท UO.WaitGump ยท UO.WaitGumpCheck ยท UO.WaitGumpEntry ยท UO.SelectGump ยท UO.SendGumpSelect ยท UO.SetGump

Ignore / ๋‹ซ๊ธฐ

UO.AddGumpIgnoreByID ยท UO.AddGumpIgnoreBySerial ยท UO.ClearGumpsIgnore ยท UO.CancelGump ยท UO.CloseClientGump

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

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

UO.GetGumpInfo

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

var info = UO.GetGumpInfo(0);
if (Truth(ArrayLength(info) == 5))
{
    UO.Print("Serial=" + Hex(info[0]));
    UO.Print("GumpID=" + Hex(info[1]));
}

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

UO.WaitGump

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

UO.WaitGump(100);
UO.UseObject("0x40001234");

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


UO.AddGumpIgnoreByID

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

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

void UO.AddGumpIgnoreByID(object? id);

UO.GetGumpInfo์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๋กœ์ปฌ ์˜ˆ์™ธ ๋ชฉ๋ก์— ์ˆซ์ž ID gump๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

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

  • id๋Š” UO.GetGumpInfo์„ ๋ฐ˜ํ™˜ํ•˜๋Š” ์ˆซ์ž ID ๊ฒ€ํ”„์ž…๋‹ˆ๋‹ค.

๋ฐ˜ํ™˜๊ฐ’

void. ID์„ ์ถ”๊ฐ€ํ•ด๋„ ์ฐฝ์ด ๋‹ซํžˆ๊ฑฐ๋‚˜ ์„œ๋ฒ„๊ฐ€ ์ฒ˜๋ฆฌํ–ˆ๋Š”์ง€ ํ™•์ธํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋™์ž‘

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

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

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

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

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

UO.Print("Calling UO.AddGumpIgnoreByID");
UO.AddGumpIgnoreByID(123);

1. UO.GetGumpInfo ๊ฒฐ๊ณผ์—์„œ ID 123๋กœ ๊ฒ€ํ”„๋ฅผ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค. - ์ง์ ‘ ์Šคํฌ๋ฆฝํŠธ

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

  • UO.GetGumpInfo ๊ฒฐ๊ณผ์—์„œ ID 123๋กœ ๊ฒ€ํ”„๋ฅผ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค.
UO.AddGumpIgnoreByID(123);

2. ์˜ˆ์™ธ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ค๊ธฐ ์ „์— ID๋ฅผ ๋ณ€์ˆ˜์— ์ €์žฅํ•˜์„ธ์š”. - ์Šคํฌ๋ฆฝํŠธ ๊ธฐ๋Šฅ

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

  • ์˜ˆ์™ธ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ค๊ธฐ ์ „์— ID๋ฅผ ๋ณ€์ˆ˜์— ์ €์žฅํ•˜์„ธ์š”.
return  RunScenario();
 object? RunScenario()
{
    var ignoredId = 123;
    UO.AddGumpIgnoreByID(ignoredId);
    return null;
}

3. ID๋ฅผ ์ถ”๊ฐ€ํ•˜์„ธ์š”. ๊ฐ ์˜ˆ์™ธ๋Š” GetGumpInfo์— ์˜ํ–ฅ์„ ๋ฏธ์นฉ๋‹ˆ๋‹ค. - ์Šคํฌ๋ฆฝํŠธ ํด๋ž˜์Šค

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

  • ID๋ฅผ ์ถ”๊ฐ€ํ•˜์„ธ์š”. ๊ฐ ์˜ˆ์™ธ๋Š” GetGumpInfo์— ์˜ํ–ฅ์„ ๋ฏธ์นฉ๋‹ˆ๋‹ค.
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.AddGumpIgnoreByID(123);
        UO.AddGumpIgnoreByID(456);
        return null;
    }
}

๋ช…๋ น ๊ตฌํ˜„

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

UO.AddGumpIgnoreByID(id) โ€” UO.AddGumpIgnoreByID(Any)

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

๊ฒฐ๊ณผ: void / Unit.

ํ˜ธ์ถœ ์‹œ:

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

case "addgumpignorebyid": state.IgnoredGumpIds.Add(Arg(0)); return InjectionValue.Unit;

UO.AddGumpIgnoreBySerial

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

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

void UO.AddGumpIgnoreBySerial(object? serial);

UO.GetGumpInfo์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๋กœ์ปฌ ์˜ˆ์™ธ ๋ชฉ๋ก์— serial gump๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

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

  • serial๋Š” UO.GetGumpInfo์„ ๋ฐ˜ํ™˜ํ•˜๋Š” ์ˆซ์ž serial ๊ฒ€ํ”„์ž…๋‹ˆ๋‹ค.

๋ฐ˜ํ™˜๊ฐ’

void. serial์„ ์ถ”๊ฐ€ํ•ด๋„ ์ฐฝ์ด ๋‹ซํžˆ๊ฑฐ๋‚˜ ์„œ๋ฒ„๊ฐ€ ์ฒ˜๋ฆฌํ–ˆ๋Š”์ง€ ํ™•์ธํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋™์ž‘

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

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

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

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

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

UO.Print("Calling UO.AddGumpIgnoreBySerial");
UO.AddGumpIgnoreBySerial(1073741824);

1. ๊ฒฐ๊ณผ UO.GetGumpInfo์—์„œ serial 1073741824๋กœ ๊ฒ€ํ”„๋ฅผ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค. - ์ง์ ‘ ์Šคํฌ๋ฆฝํŠธ

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

  • ๊ฒฐ๊ณผ UO.GetGumpInfo์—์„œ serial 1073741824๋กœ ๊ฒ€ํ”„๋ฅผ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค.
UO.AddGumpIgnoreBySerial(1073741824);

2. ๋ณ€์ˆ˜์—์„œ serial๋ฅผ ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค. - ์Šคํฌ๋ฆฝํŠธ ๊ธฐ๋Šฅ

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

  • ๋ณ€์ˆ˜์—์„œ serial๋ฅผ ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค.
return  RunScenario();
 object? RunScenario()
{
    var ignoredSerial = 1073741824;
    UO.AddGumpIgnoreBySerial(ignoredSerial);
    return null;
}

3. GetGumpInfo ์ถœ๋ ฅ์—์„œ โ€‹โ€‹๋‘ ๊ฐœ์˜ serial ๋ฉ์–ด๋ฆฌ๋ฅผ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค. - ์Šคํฌ๋ฆฝํŠธ ํด๋ž˜์Šค

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

  • GetGumpInfo ์ถœ๋ ฅ์—์„œ โ€‹โ€‹๋‘ ๊ฐœ์˜ 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.AddGumpIgnoreBySerial(1073741824);
        UO.AddGumpIgnoreBySerial(1073741825);
        return null;
    }
}

๋ช…๋ น ๊ตฌํ˜„

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

UO.AddGumpIgnoreBySerial(serial) โ€” UO.AddGumpIgnoreBySerial(Any)

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

๊ฒฐ๊ณผ: void / Unit.

ํ˜ธ์ถœ ์‹œ:

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

case "addgumpignorebyserial": state.IgnoredGumpSerials.Add(Arg(0)); return InjectionValue.Unit;

UO.CancelGump

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

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

void UO.CancelGump();
void UO.CancelGump(object? gumpId);

ํ˜ธํ™˜ ๊ฐ€๋Šฅํ•œ ๋ฆฌ์กธ๋ฒ„ CloseSimpleGump๋ฅผ ํ†ตํ•ด ์„ ํƒํ•œ ์„œ๋ฒ„ Gump๋ฅผ ๋‹ซ์Šต๋‹ˆ๋‹ค.

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

  • gumpId - ์„ ํƒ์‚ฌํ•ญ int/์ˆซ์ž ๊ฐ’. ๋ฆฌ์กธ๋ฒ„๋Š” ๋จผ์ € ์ผ์น˜ํ•˜๋Š” ์„œ๋ฒ„/๋กœ์ปฌ serial๋ฅผ ์ฐพ์€ ๋‹ค์Œ ์„œ๋ฒ„ ๊ฒ€ํ”„ ์ธ๋ฑ์Šค๋ฅผ ์ฐพ์Šต๋‹ˆ๋‹ค. ์ธ์ˆ˜๊ฐ€ ์—†์œผ๋ฉด -1๊ฐ€ ์ „๋‹ฌ๋˜๊ณ  ๋งˆ์ง€๋ง‰ ๊ฒ€ํ”„๊ฐ€ ์„ ํƒ๋ฉ๋‹ˆ๋‹ค.

๋ฐ˜ํ™˜๊ฐ’

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

๋™์ž‘

  • gumpId๋ผ๋Š” ์ธ์ˆ˜๋Š” ID๋งŒ ๊ฒ€์ƒ‰ํ•œ๋‹ค๊ณ  ๋ณด์žฅํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. CloseGumpUnsafe ์„œ๋ฒ„ ๊ฒ€ํ”„์˜ ๊ฒฝ์šฐ 0 ๋ฒ„ํŠผ์„ ๋ณด๋‚ธ ๋‹ค์Œ ๋กœ์ปฌ ์ฐฝ์„ ์‚ญ์ œํ•ฉ๋‹ˆ๋‹ค. Gump๊ฐ€ ๋ฐœ๊ฒฌ๋˜์ง€ ์•Š์œผ๋ฉด ์•„๋ฌด๋Ÿฐ ์กฐ์น˜๋„ ์ทจํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ด๋Š” CancelMenu๋„ ์•„๋‹ˆ๊ณ  ๋ณด๋ฅ˜ ์ค‘์ธ WaitGump๋ฅผ ์ง€์šฐ๋Š” ๊ฒƒ๋„ ์•„๋‹™๋‹ˆ๋‹ค.

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

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

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

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

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

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

1. ๋งˆ์ง€๋ง‰ ๊ฒ€ํ”„ ๋‹ซ๊ธฐ - ์ง์ ‘ ์Šคํฌ๋ฆฝํŠธ

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

  • ์ธ์ˆ˜๊ฐ€ ์—†๋Š” ์–‘์‹์€ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์ตœ์‹  ์„œ๋ฒ„ ๊ฒ€ํ”„๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.
UO.CancelGump();

2. ์•Œ๋ ค์ง„ ID๋กœ ๊ฒ€ํ”„๋ฅผ ๋‹ซ์Šต๋‹ˆ๋‹ค - ์Šคํฌ๋ฆฝํŠธ ๊ธฐ๋Šฅ

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

  • ์ฒซ ๋ฒˆ์งธ ๊ฒ€ํ”„์˜ ์‹ค์ œ ID๊ฐ€ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ๋ชฉ๋ก์€ ํ†ตํ™” ๊ฐ„์— ๋ณ€๊ฒฝ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
return  RunScenario();
 object? RunScenario()
{
    var id = UO.GetGumpID(0);
    if (Truth(id != 0))
    {
        UO.CancelGump(id);
    }

    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. ๋ช…์‹œ์  ๋งˆ์ง€๋ง‰ ์ธ๋ฑ์Šค - ์Šคํฌ๋ฆฝํŠธ ํด๋ž˜์Šค

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

  • -1 ๊ฐ’์€ ๋ฆฌ์กธ๋ฒ„์˜ ๋งˆ์ง€๋ง‰ ๊ฒ€ํ”„๋ฅผ ๋ช…์‹œ์ ์œผ๋กœ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.
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.CancelGump(-1);
        return null;
    }
}

๋ช…๋ น ๊ตฌํ˜„

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

UO.CancelGump() โ€” UO.CancelGump()

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

๊ฒฐ๊ณผ: void / Unit.

ํ˜ธ์ถœ ์‹œ:

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

case "cancelgump": bridge.CloseSimpleGump(arguments.Length > 0 ? Arg(0) : -1); break;

UO.CancelGump(gumpId) โ€” UO.CancelGump(Any)

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

๊ฒฐ๊ณผ: void / Unit.

ํ˜ธ์ถœ ์‹œ:

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

case "cancelgump": bridge.CloseSimpleGump(arguments.Length > 0 ? Arg(0) : -1); break;

UO.ClearGumpsIgnore

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

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

void UO.ClearGumpsIgnore();

๋ฌด์‹œ๋œ gump ID ๋ฐ gump serial ๋Ÿฐํƒ€์ž„ ์„ธํŠธ๋ฅผ ๋ชจ๋‘ ์ง€์›๋‹ˆ๋‹ค.

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

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

๋ฐ˜ํ™˜๊ฐ’

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

๋™์ž‘

  • ์ฐฝ๋ฌธ์„ ๋‹ซ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ผ๋‹จ ์ง€์›Œ์ง€๋ฉด GetGumpInfo๋Š” ์ด์ „์— ๋ฌด์‹œํ–ˆ๋˜ ๊ฒ€ํ”„์˜ ์Šค๋ƒ…์ƒท์„ ๋‹ค์‹œ ๋ฐ˜ํ™˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

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

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

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

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

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

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

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

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

  • ๋ฌด์‹œ๋œ gump ID ๋ฐ gump serial ๋Ÿฐํƒ€์ž„ ์„ธํŠธ๋ฅผ ๋ชจ๋‘ ์ง€์›๋‹ˆ๋‹ค.
UO.ClearGumpsIgnore();

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

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

  • ์ถ”๊ฐ€๋œ ๋ฌด์‹œ ๊ทœ์น™์„ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค.
return  RunScenario();
 object? RunScenario()
{
    UO.AddGumpIgnoreByID(0x1234);
    UO.ClearGumpsIgnore();
    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.ClearGumpsIgnore();
        UO.ClearGumpsIgnore();
        return null;
    }
}

๋ช…๋ น ๊ตฌํ˜„

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

UO.ClearGumpsIgnore() โ€” UO.ClearGumpsIgnore()

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

๊ฒฐ๊ณผ: void / Unit.

ํ˜ธ์ถœ ์‹œ:

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

case "cleargumpsignore":

                    state.IgnoredGumpIds.Clear(); state.IgnoredGumpSerials.Clear(); return InjectionValue.Unit;

UO.CloseClientGump

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

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

void UO.CloseClientGump(object? id);

ServerSerial๊ฐ€ ์ „๋‹ฌ๋œ ID์™€ ์ผ์น˜ํ•˜๋Š” ๋กœ์ปฌ ์„œ๋ฒ„ ๊ฒ€ํ”„๋ฅผ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค.

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

  • id - int/์ˆซ์ž ID ServerSerial์™€ ๋น„๊ตํ•ด ๋ณผ ๋•Œ. ์ด๊ฒƒ์€ ๋ชฉ๋ก ์ƒ‰์ธ๋„ ์•„๋‹ˆ๊ณ  ๋กœ์ปฌ serial๋„ ์•„๋‹™๋‹ˆ๋‹ค.

๋ฐ˜ํ™˜๊ฐ’

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

๋™์ž‘

  • ServerGumpsUnsafe๋ฅผ ๋ฐ˜๋ณตํ•˜๊ณ  ๋ชจ๋“  ์ผ์น˜ ํ•ญ๋ชฉ์˜ ์Šค๋ƒ…์ƒท์„ ์ƒ์„ฑํ•˜๊ณ  Dispose๋ฅผ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค. 0 ๋ฒ„ํŠผ์ด๋‚˜ ์–‘์‹ ๊ฒฐ๊ณผ๋ฅผ ์„œ๋ฒ„๋กœ ๋ณด๋‚ด์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ผ์น˜ํ•˜๋Š” ํ•ญ๋ชฉ์ด ์—†์œผ๋ฉด ์•„๋ฌด๊ฒƒ๋„ ๋ณ€๊ฒฝ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

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

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

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

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

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

UO.Print("Calling UO.CloseClientGump");
UO.CloseClientGump(UO.GetGumpID(0));

1. ID๋กœ ์ฒซ ๋ฒˆ์งธ ๊ฒ€ํ”„๋ฅผ ๋‹ซ์Šต๋‹ˆ๋‹ค - ์ง์ ‘ ์Šคํฌ๋ฆฝํŠธ

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

  • GetGumpID๋Š” ์„œ๋ฒ„ ID๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. CloseClientGump๋Š” ์ผ์น˜ํ•˜๋Š” ๋กœ์ปฌ ์ฐฝ์„ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค.
if (Truth(UO.GetGumpsCount() > 0))
{
    var id = UO.GetGumpID(0);
    UO.CloseClientGump(id);
}

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

2. ๋ณ€์ˆ˜์˜ ID - ์Šคํฌ๋ฆฝํŠธ ๊ธฐ๋Šฅ

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

  • ์›ํ•˜๋Š” ์„œ๋ฒ„ ๊ฒ€ํ”„์˜ ID๋ฅผ ์ง€์ •ํ•˜์„ธ์š”. ์ผ์น˜ํ•˜๋Š” ํ•ญ๋ชฉ์ด ํ—ˆ์šฉ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
return  RunScenario();
 object? RunScenario()
{
    var id = 0x12345678;
    UO.CloseClientGump(id);
    return null;
}

3. Reclose - ์Šคํฌ๋ฆฝํŠธ ํด๋ž˜์Šค

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

  • ์ฒซ ๋ฒˆ์งธ Dispose ํ›„ ๋‘ ๋ฒˆ์งธ ๋‹ซ๊ธฐ๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ๋” ์ด์ƒ ์ฐฝ์„ ์ฐพ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
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 id = UO.GetGumpID(0);
        if (Truth(id != 0))
        {
            UO.CloseClientGump(id);
            UO.CloseClientGump(id);
        }

        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.CloseClientGump(id) โ€” UO.CloseClientGump(Any)

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

๊ฒฐ๊ณผ: void / Unit.

ํ˜ธ์ถœ ์‹œ:

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

case "closeclientgump": bridge.CloseClientGump(Arg(0)); return InjectionValue.Unit;

UO.GetGump

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

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

dynamic UO.GetGump(object? identifier);
dynamic UO.GetGump(object? gumpId, object? identifier);
dynamic UO.GetGump(object? gumpId, object? identifier, object? key);

์„ ํƒํ•œ ์„œ๋ฒ„ Gump์˜ ํ•œ ํ•„๋“œ๋ฅผ ์ฝ์Šต๋‹ˆ๋‹ค. ์ฐฝ ์„ ํƒ๊ธฐ๋ฅผ ๋ช…์‹œ์ ์œผ๋กœ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

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

  • gumpId - (gumpId,์‹๋ณ„์ž) โ€‹โ€‹๋ฐ (gumpId,์‹๋ณ„์ž, ํ‚ค) ํ˜•์‹์˜ ์ฒซ ๋ฒˆ์งธ int ์„ ํƒ ์‚ฌํ•ญ์ž…๋‹ˆ๋‹ค. int ๋˜๋Š” ์ˆซ์ž ๋ฌธ์ž์—ด: ๋จผ์ € ์ •ํ™•ํ•œ GumpID/serial ์ผ์น˜๋ฅผ ์ฐพ์€ ๋‹ค์Œ 0๋กœ ์ƒ‰์ธ์„ ์ฐพ์Šต๋‹ˆ๋‹ค. -1์€ ์ด ์Šคํฌ๋ฆฝํŠธ์—์„œ ์„ ํƒํ•œ Gump์ด๊ณ , ์—†์œผ๋ฉด ํ˜„์žฌ ๋ชฉ๋ก์˜ ๋งˆ์ง€๋ง‰ Gump์ž…๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ๋ถ€์ •์ ์ธ int๋Š” 32๋น„ํŠธ ID๋ฅผ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” NumGump*์˜ ์—„๊ฒฉํ•œ GumpIndex์™€ ๋ฐ˜๋Œ€๋˜๋Š” ์„ ํƒ๊ธฐ์ž…๋‹ˆ๋‹ค.
  • identifier - string ๋Œ€์†Œ๋ฌธ์ž๋ฅผ ๊ตฌ๋ถ„ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ง€์›๋˜๋Š” ๋ชจ๋“  ๊ฐ’๊ณผ ๊ฒฐ๊ณผ ์œ ํ˜•์€ ๋ฐ˜ํ’ˆ ์„น์…˜์— ๋‚˜์—ด๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ์•Œ ์ˆ˜ ์—†๋Š” ์ด๋ฆ„์€ ๋นˆ ๋ฌธ์ž์—ด์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
  • key - ์„ ํƒ ์‚ฌํ•ญ int, ๊ธฐ๋ณธ๊ฐ’ - 1. ๋ฒ„ํŠผ/ํ…์ŠคํŠธ/object/๋ช…๋ น์˜ ๊ฒฝ์šฐ 0๋กœ ์ƒ‰์ธ์„ ์ƒ์„ฑํ•˜์„ธ์š”. ์ด๊ฒƒ์€ ID ์ œ์–ด๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค. ์Œ์ˆ˜ ์ธ๋ฑ์Šค์™€ ๋ฒ”์œ„๋ฅผ ๋ฒ—์–ด๋‚˜๋ฉด ๋ฒ„ํŠผ์˜ ๊ฒฝ์šฐ 0์ด ๋˜๊ณ  ํ…์ŠคํŠธ ํ•„๋“œ์˜ ๊ฒฝ์šฐ ๋นˆ ๋ฌธ์ž์—ด์ด ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ์‹๋ณ„์ž๋Š” ํ‚ค๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋ฐ˜ํ™˜๊ฐ’

๊ฒฐ๊ณผ ์œ ํ˜•์€ ์‹๋ณ„์ž์— ๋”ฐ๋ผ ๋‹ค๋ฆ…๋‹ˆ๋‹ค. int: Buttonlen โ€” ์ผ๋ฐ˜ ๋ฒ„ํŠผ ์ˆ˜; ๋ฒ„ํŠผ โ€” ์ธ๋ฑ์Šค ํ‚ค๋ณ„ ButtonID์ž…๋‹ˆ๋‹ค. textlen โ€” ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ํ…์ŠคํŠธ ์š”์†Œ ์ˆ˜; injid โ€” ํ˜„์žฌ ์ฐฝ ์ธ๋ฑ์Šค; ํšŒ์‹  โ€” 0 (์‘๋‹ต ๋‚ด์—ญ์€ ์ €์žฅ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค); inclient โ€” ๋ฐœ๊ฒฌ๋œ ๋ผ์ด๋ธŒ ์ฐฝ์˜ ๊ฒฝ์šฐ 1, ์—†๋Š” ๊ฒฝ์šฐ 0; objectcount - ์ค‘์ฒฉ๋œ ์ปจํŠธ๋กค์„ ํฌํ•จํ•œ ๋ผ์ด๋ธŒ ์ปจํŠธ๋กค์˜ ์ˆ˜์ž…๋‹ˆ๋‹ค. string: serial ๋ฐ gumpid - 16์ง„์ˆ˜ ๋ฌธ์ž์—ด 0xXXXXXXXX; text โ€” ์ธ๋ฑ์Šค ํ‚ค์˜ ์š”์†Œ ํ…์ŠคํŠธ์ž…๋‹ˆ๋‹ค. object โ€” ์ปจํŠธ๋กค ์œ ํ˜• ์ด๋ฆ„; ๋ช…๋ น โ€” ์ปจํŠธ๋กค์— ๋Œ€ํ•œ ์„ค๋ช…(์œ ํ˜•, ํŽ˜์ด์ง€, ID, ์ขŒํ‘œ, ํฌ๊ธฐ ๋ฐ ์ง€์›๋˜๋Š” ํ•„๋“œ) ์ฐฝ์ด ์—†์œผ๋ฉด ์ˆซ์ž ์‹๋ณ„์ž๋Š” 0๋ฅผ ์ œ๊ณตํ•˜๊ณ  ๋ฌธ์ž์—ด ์‹๋ณ„์ž๋Š” ๋นˆ ๋ฌธ์ž์—ด์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. injid=0๋„ ์œ ํšจํ•œ ์ฒซ ๋ฒˆ์งธ ์ƒ‰์ธ์ž…๋‹ˆ๋‹ค. 0 ์ž์ฒด๋งŒ์œผ๋กœ๋Š” ์ฐฝ์ด ์—†์Œ์„ ์ฆ๋ช…ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ Array๋‚˜ Pascal TGumpInfo๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค.

๋™์ž‘

  • ํ™œ์„ฑ ์„œ๋ฒ„ ๊ฒ€ํ”„์™€ ํ•จ๊ป˜ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ๋ฐฐ๋‚ญ, ์ง€๋„, ์„ค์ • ๋ฐ ๊ธฐํƒ€ ๋กœ์ปฌ ์ฐฝ์€ ์ด ๋ชฉ๋ก์— ํฌํ•จ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ํ•œ ๋ฒˆ์˜ ํ˜ธ์ถœ์€ ๊ฒŒ์ž„ ์Šค๋ ˆ๋“œ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์Šต๋‹ˆ๋‹ค. ํ†ตํ™”๋งˆ๋‹ค ๋ชฉ๋ก์˜ ์ƒํƒœ๊ฐ€ ๋‹ค๋ฅผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • SelectGump/InfoGump๋Š” ํ˜„์žฌ ๋Ÿฐํƒ€์ž„์—์„œ๋งŒ ์„ ํƒํ•œ ์ฐฝ์„ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค. ์„ ํƒํ•œ ์ฐฝ์ด ๋‹ซํžˆ๋ฉด ํ˜„์žฌ ๋ชฉ๋ก์˜ ๋งˆ์ง€๋ง‰ ํ•ญ๋ชฉ์ด ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ์ด๋Š” ๋ฐ˜๋“œ์‹œ ๊ฐ€์žฅ ์ตœ๊ทผ ํ•ญ๋ชฉ์ผ ํ•„์š”๋Š” ์—†์Šต๋‹ˆ๋‹ค.
  • textlen/text๋Š” ์„œ๋ฒ„ ํŒจํ‚ค์ง€์˜ ์›๋ž˜ ๋ฌธ์ž์—ด ํ’€์ด ์•„๋‹Œ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ํ…์ŠคํŠธ ์ปจํŠธ๋กค์„ ์ฐธ์กฐํ•ฉ๋‹ˆ๋‹ค. object/command๋Š” ๋ผ์ด๋ธŒ ์ปจํŠธ๋กค์˜ ์ „์ฒด ํŠธ๋ฆฌ๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ๋ชฉ๋ก์˜ ์ธ๋ฑ์Šค๋Š” ํ˜ผํ•ฉ๋  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
  • ๊ฐ ํ˜ธ์ถœ์€ ํ˜„์žฌ ์ƒํƒœ๋ฅผ ๊ฐœ๋ณ„์ ์œผ๋กœ ์ฝ์Šต๋‹ˆ๋‹ค. ์ผ์น˜ํ•˜๋Š” serial, GumpID ๋ฐ ๋ชฉ๋ก์˜ ๊ฒฝ์šฐ GetGumpInfo๋ฅผ ์‚ฌ์šฉํ•˜์„ธ์š”.

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

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

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

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

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

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

1. ์„ ํƒํ•œ ์ฐฝ์˜ ID ์ฝ๊ธฐ - ์ง์ ‘ ์Šคํฌ๋ฆฝํŠธ

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

  • gumpid ๋ฐ serial๋Š” ์ด๋ฏธ 16์ง„์ˆ˜๋กœ ํ˜•์‹ํ™”๋œ ๋ฌธ์ž์—ด์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ์ถ”๊ฐ€ 16์ง„์ˆ˜๊ฐ€ ํ•„์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋นˆ ์ค„์€ ์ฝ์„ ๋•Œ ์ฐฝ์ด ์—†์Œ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.
var id = UO.GetGump("gumpid");
var serial = UO.GetGump("serial");
UO.Print(id + " / " + serial);

2. ButtonID ์—ด๊ฑฐ - ์Šคํฌ๋ฆฝํŠธ ํ•จ์ˆ˜

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

  • Buttonlen โ€” ๋ฒ„ํŠผ ์ˆ˜; i๋Š” 0๋ถ€ํ„ฐ count-1๊นŒ์ง€์˜ ํ–‰ ์ธ๋ฑ์Šค์ž…๋‹ˆ๋‹ค. ๋ฒ„ํŠผ - ๊ทธ๋ž˜ํ”ฝ์ด๋‚˜ ์ƒ‰์ธ์ด ์•„๋‹Œ ๋‹ต๋ณ€์šฉ ID์ž…๋‹ˆ๋‹ค. ์ฐฝ์„ ๋ณ€๊ฒฝํ•  ๋•Œ ๋ชฉ๋ก์„ ๋‹ค์‹œ ์ฝ์œผ์‹ญ์‹œ์˜ค.
return  RunScenario();
 object? RunScenario()
{
    var count = UO.GetGump("buttonlen");
    var i = 0;
    while (Truth(i < count))
    {
        var button = UO.GetGump("button", i);
        UO.Print(Convert.ToString(button));
        i = i + 1;
    }

    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. ์„ ํƒ ํ›„ ํ…์ŠคํŠธ ์ฝ๊ธฐ - ์Šคํฌ๋ฆฝํŠธ ํด๋ž˜์Šค

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

  • 0x12345678๋Š” GumpID/serial์˜ ์˜ˆ์ž…๋‹ˆ๋‹ค. ID๋ฅผ ์›ํ•˜๋Š” ํ˜•์‹์œผ๋กœ ๋ฐ”๊พธ์„ธ์š”. key=0์ธ ํ…์ŠคํŠธ๋Š” ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์ฒซ ๋ฒˆ์งธ ํ…์ŠคํŠธ ์ปจํŠธ๋กค์„ ์ฝ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ๋ฒ„ํŠผ๊ณผ ๋‹ค๋ฅธ ๋ชฉ๋ก์ž…๋‹ˆ๋‹ค.
  • SelectGump๋Š” ์ง€์ •๋œ ์ฐฝ์ด ์—†๋‹ค๊ณ  ๋ณด๊ณ ํ•˜์ง€๋งŒ ํ›„์† ์ฝ๊ธฐ๋ฅผ ์ฐจ๋‹จํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ํ•„์š”ํ•œ ๊ฒฝ์šฐ ๋ฐ˜ํ™˜๋œ gumpid๋ฅผ ๋ณ„๋„๋กœ ํ™•์ธํ•˜์„ธ์š”.
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.SelectGump(0x12345678);
        if (Truth(UO.GetGump("inclient")))
        {
            var count = UO.GetGump("textlen");
            if (Truth(count > 0))
            {
                UO.Print(UO.GetGump("text", 0));
            }
        }

        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.GetGump(identifier) โ€” UO.GetGump(String)

๋งค๊ฐœ๋ณ€์ˆ˜: identifier (String)

๊ฒฐ๊ณผ: dynamic / Any.

ํ˜ธ์ถœ ์‹œ:

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

public InjectionValue GetGump(string identifier) => LastGump(identifier, -1);

UO.GetGump(gumpId, identifier) โ€” UO.GetGump(Integer,String)

๋งค๊ฐœ๋ณ€์ˆ˜: gumpId (Integer/String), identifier (String/Integer)

๊ฒฐ๊ณผ: dynamic / Any.

ํ˜ธ์ถœ ์‹œ:

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

public InjectionValue GetGump(int gumpId, string identifier) => GetGump(gumpId, identifier, -1);

UO.GetGump(gumpId, identifier) โ€” UO.GetGump(String,Integer)

๋งค๊ฐœ๋ณ€์ˆ˜: gumpId (Integer/String), identifier (String/Integer)

๊ฒฐ๊ณผ: dynamic / Any.

ํ˜ธ์ถœ ์‹œ:

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

public InjectionValue GetGump(string identifier, int key) => LastGump(identifier, key);

UO.GetGump(gumpId, identifier, key) โ€” UO.GetGump(Integer,String,Integer)

๋งค๊ฐœ๋ณ€์ˆ˜: gumpId (Integer), identifier (String), key (Integer)

๊ฒฐ๊ณผ: dynamic / Any.

ํ˜ธ์ถœ ์‹œ:

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

public InjectionValue GetGump(int gumpId, string identifier, int key)

            => ConvertGumpValue(identifier, bridge.GetGumpValue(gumpId, identifier, key));

UO.GetGumpButtonsDescription

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

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

dynamic UO.GetGumpButtonsDescription(object? gumpIndex);

์ผ๋ฐ˜ ์„œ๋ฒ„ ๊ฒ€ํ”„ ๋ฒ„ํŠผ์— ๋Œ€ํ•œ ์„ค๋ช…์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

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

  • gumpIndex โ€” ํ•„์ˆ˜ int โ€” 0๋ถ€ํ„ฐ GetGumpsCount()-1๊นŒ์ง€ ํ™œ์„ฑ ์„œ๋ฒ„ ๊ฒ€ํ”„์˜ ์ธ๋ฑ์Šค์ž…๋‹ˆ๋‹ค. GumpID/serial๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค. ๋ชฉ๋ก ์™ธ๋ถ€์˜ ์Œ์ˆ˜์™€ ์ธ๋ฑ์Šค๋Š” ์œ ํšจํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ฐฝ์„ ์—ด๊ณ  ๋‹ซ๊ณ  ์žฌ์ •๋ ฌํ•˜๋ฉด ์ƒ‰์ธ์ด ๋ณ€๊ฒฝ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ–‰๋™ํ•˜๊ธฐ ์ „์— GetGumpID/GetGumpSerial๋ฅผ ํ™•์ธํ•˜์„ธ์š”.

๋ฐ˜ํ™˜๊ฐ’

Array - ์ผ๋ฐ˜ ๋ฒ„ํŠผ์— ๋Œ€ํ•œ ์„ค๋ช…์ž…๋‹ˆ๋‹ค. [] - ์ธ๋ฑ์Šค๊ฐ€ ์ž˜๋ชป๋˜์—ˆ๊ฑฐ๋‚˜ ์ผ์น˜ํ•˜๋Š” ์š”์†Œ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ํ–‰ ์ธ๋ฑ์Šค๋Š” 0๋กœ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค. ID ์ปจํŠธ๋กค์ด ์•„๋‹™๋‹ˆ๋‹ค.

๋™์ž‘

  • ํ™œ์„ฑ ์„œ๋ฒ„ ๊ฒ€ํ”„์™€ ํ•จ๊ป˜ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ๋ฐฐ๋‚ญ, ์ง€๋„, ์„ค์ • ๋ฐ ๊ธฐํƒ€ ๋กœ์ปฌ ์ฐฝ์€ ์ด ๋ชฉ๋ก์— ํฌํ•จ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ํ•œ ๋ฒˆ์˜ ํ˜ธ์ถœ์€ ๊ฒŒ์ž„ ์Šค๋ ˆ๋“œ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์Šต๋‹ˆ๋‹ค. ํ†ตํ™”๋งˆ๋‹ค ๋ชฉ๋ก์˜ ์ƒํƒœ๊ฐ€ ๋‹ค๋ฅผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๊ฐ ์ค„์—๋Š” ButtonID, ์ž‘์—…, toPage ๋ฐ ๊ทธ๋ž˜ํ”ฝ์ด ํฌํ•จ๋ฉ๋‹ˆ๋‹ค. ๋ผ๋””์˜ค ๋ฒ„ํŠผ์€ ์ผ๋ฐ˜ ์‘๋‹ต ๋ฒ„ํŠผ์ด ์•„๋‹™๋‹ˆ๋‹ค.
  • SilentMode=0์ด๋ฉด ๋น„์–ด ์žˆ์ง€ ์•Š์€ ๊ฒฐ๊ณผ๋„ ํ…์ŠคํŠธ ์ฐฝ์— ์ถ”๊ฐ€๋˜์–ด ์—ด๋ฆฝ๋‹ˆ๋‹ค. SetSilentMode(1)๋Š” ๋ฐฐ์—ด๋งŒ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

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

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

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

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

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

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

1. ์ฒซ ๋ฒˆ์งธ ์ค„ ์ฝ๊ธฐ - ์ง์ ‘ ์Šคํฌ๋ฆฝํŠธ

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

  • 0 โ€” ์ฐฝ ์ƒ‰์ธ. ArrayLength๋Š” ๋ผ์ธ[0]์„ ํ˜ธ์ถœํ•˜๊ธฐ ์ „์— ๋ผ์ธ์ด ์žˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
var lines = UO.GetGumpButtonsDescription(0);
if (Truth(ArrayLength(lines) > 0))
{
    UO.Print(lines[0]);
}

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;

2. ์ž๋™ ์ฐฝ ์—†์ด ๋ชจ๋“  ๋ผ์ธ์„ ์ˆœํšŒ - ์Šคํฌ๋ฆฝํŠธ ๊ธฐ๋Šฅ

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

  • SetSilentMode(1)๋Š” ์ถ”๊ฐ€ ํ…์ŠคํŠธ ์ฐฝ์„ ๋น„ํ™œ์„ฑํ™”ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ์ œ์—์„œ ๋ช…์‹œ์ ์ธ Print๋Š” ์—ฌ์ „ํžˆ ํ•ด๋‹น ํ–‰์„ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค.
  • i๋Š” ๋ฐฐ์—ด ์ธ๋ฑ์Šค์ž…๋‹ˆ๋‹ค. ํ•ด๋‹น ์„ค๋ช…์—์„œ ์›ํ•˜๋Š” ๋ฒ„ํŠผ/์Šค์œ„์น˜์˜ ID๋ฅผ ์„ ํƒํ•˜์„ธ์š”.
return  RunScenario();
 object? RunScenario()
{
    UO.SetSilentMode(1);
    var lines = UO.GetGumpButtonsDescription(0);
    var i = 0;
    while (Truth(i < ArrayLength(lines)))
    {
        UO.Print(lines[i]);
        i = i + 1;
    }

    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;

3. ๋งˆ์ง€๋ง‰์œผ๋กœ ์—ด๋ฆฐ ์„œ๋ฒ„ ์ฐฝ ๋ฐ์ดํ„ฐ ์ฝ๊ธฐ - ์Šคํฌ๋ฆฝํŠธ ํด๋ž˜์Šค

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

  • ๊ฐœ์ˆ˜๋Š” ๋งˆ์ง€๋ง‰ ์ฐฝ์˜ ์ธ๋ฑ์Šค๋กœ ๋ณ€ํ™˜๋ฉ๋‹ˆ๋‹ค. ๋กœ๋“œ๋œ ์„œ๋ฒ„ Gump์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์Šต๋‹ˆ๋‹ค. ๋กœ์ปฌ ์ฐฝ์€ ์—ฌ๊ธฐ์— ํฌํ•จ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
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()
    {
        int count = UO.GetGumpsCount();
        if (count == 0)
            return null;
        int index = count - 1;
        var lines = UO.GetGumpButtonsDescription(index);
        foreach (object? line in (object? [])lines)
            UO.Print(Convert.ToString(line) ?? "");
        return null;
    }
}

๋ช…๋ น ๊ตฌํ˜„

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

UO.GetGumpButtonsDescription(gumpIndex) โ€” UO.GetGumpButtonsDescription(Any)

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

๊ฒฐ๊ณผ: dynamic / Array.

ํ˜ธ์ถœ ์‹œ:

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

case "getgumpbuttonsdescription": return GumpLinesResult(bridge.GetGumpButtonsDescription(Arg(0)));

UO.GetGumpCount

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

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

int UO.GetGumpCount();

์งง์€ ๋ฒ„์ „ GetGumpsCount: ํ™œ์„ฑ ์„œ๋ฒ„ ๊ฒ€ํ”„ ์ˆ˜.

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

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

๋ฐ˜ํ™˜๊ฐ’

int >= 0 โ€” ๋งˆ์ง€๋ง‰ ์ฐฝ์˜ ์ธ๋ฑ์Šค๊ฐ€ ์•„๋‹Œ ์ฐฝ ์ˆ˜์ž…๋‹ˆ๋‹ค. 0 โ€” ๋ชฉ๋ก์ด ๋น„์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

๋™์ž‘

  • ํ™œ์„ฑ ์„œ๋ฒ„ ๊ฒ€ํ”„์™€ ํ•จ๊ป˜ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ๋ฐฐ๋‚ญ, ์ง€๋„, ์„ค์ • ๋ฐ ๊ธฐํƒ€ ๋กœ์ปฌ ์ฐฝ์€ ์ด ๋ชฉ๋ก์— ํฌํ•จ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ํ•œ ๋ฒˆ์˜ ํ˜ธ์ถœ์€ ๊ฒŒ์ž„ ์Šค๋ ˆ๋“œ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์Šต๋‹ˆ๋‹ค. ํ†ตํ™”๋งˆ๋‹ค ๋ชฉ๋ก์˜ ์ƒํƒœ๊ฐ€ ๋‹ค๋ฅผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

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

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

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

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

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

var result = UO.GetGumpCount();
UO.Print("GetGumpCount: " + Convert.ToString(result));

1. ์„œ๋ฒ„ ์ฐฝ ํ™•์ธ - ์ง์ ‘ ์Šคํฌ๋ฆฝํŠธ

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

  • ์ด๋Š” ์ฐฝ ์ธ๋ฑ์Šค๊ฐ€ ์•„๋‹Œ ์„œ๋ฒ„ ๊ฒ€ํ”„ ์ˆ˜์ž…๋‹ˆ๋‹ค. ํ˜„์ง€ ๋ฐฐ๋‚ญ๊ณผ ์ง€๋„๋Š” ์—ฌ๊ธฐ์— ํฌํ•จ๋˜์–ด ์žˆ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
int count = UO.GetGumpCount();
UO.Print($"Active server gumps: {count}");

2. ์—ด๋ฆฐ ์ฐฝ ID ์ฝ๊ธฐ - ์Šคํฌ๋ฆฝํŠธ ๊ธฐ๋Šฅ

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

  • ์ธ๋ฑ์Šค๋Š” 0๋ถ€ํ„ฐ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค. ํ†ตํ™”๋งˆ๋‹ค ๋ชฉ๋ก์ด ๋ฐ”๋€” ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์ฝ๊ธฐ ์ „์— ํ˜„์žฌ ์ˆ˜๋Ÿ‰์„ ํ™•์ธํ•˜์„ธ์š”.
return  RunScenario();
 object? RunScenario()
{
    int count = UO.GetGumpCount();
    for (int index = 0; index < count; index++)
    {
        if (index >= UO.GetGumpCount())
            break;
        UO.Print($"Gump {index}: ID={UO.GetGumpID(index)}, serial={UO.GetGumpSerial(index)}");
    }

    return null;
}

3. ์‹œ๊ฐ„์ด ์ง€์ •๋œ ์ฐฝ์„ ๊ธฐ๋‹ค๋ฆฝ๋‹ˆ๋‹ค - ์Šคํฌ๋ฆฝํŠธ ํด๋ž˜์Šค

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

  • ๋Œ€๊ธฐ ์‹œ๊ฐ„์€ ์‹œ๊ฐ„ ์ดˆ๊ณผ๋กœ ์ œํ•œ๋ฉ๋‹ˆ๋‹ค. ๋‹จ์ง€ ์ฐฝ๋ฌธ์ด ์กด์žฌํ•œ๋‹ค๊ณ  ํ•ด์„œ ์ด๊ฒƒ์ด ๊ผญ ํ•„์š”ํ•œ ๊ฒ€ํ”„๋ผ๋Š” ๊ฒƒ์„ ์ฆ๋ช…ํ•˜๋Š” ๊ฒƒ์€ ์•„๋‹™๋‹ˆ๋‹ค. ์„ ํƒํ•˜๋ ค๋ฉด ํ™•์ธํ•˜์„ธ์š” ID.
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()
    {
        bool appeared = await WaitForGump(3000);
        UO.Print(appeared ? "A server gump appeared" : "No server gump within the timeout");
        return null;
    }

    async Task<bool> WaitForGump(int timeoutMs)
    {
        var timer = System.Diagnostics.Stopwatch.StartNew();
        while (timer.ElapsedMilliseconds < timeoutMs)
        {
            if (UO.GetGumpCount() > 0)
                return true;
            await WaitAsync(50);
        }

        return false;
    }
}

๋ช…๋ น ๊ตฌํ˜„

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

UO.GetGumpCount() โ€” UO.GetGumpCount()

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

๊ฒฐ๊ณผ: int / Integer.

ํ˜ธ์ถœ ์‹œ:

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

public int GetGumpCount() => bridge.GetGumpCount();

UO.GetGumpFullLines

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

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

dynamic UO.GetGumpFullLines(object? gumpIndex);

์ค‘์ฒฉ๋œ ์„œ๋ฒ„ ๊ฒ€ํ”„๋ฅผ ํฌํ•จํ•˜์—ฌ ๋ชจ๋“  ์‚ด์•„์žˆ๋Š” ์š”์†Œ์— ๋Œ€ํ•œ ์„ค๋ช…์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

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

  • gumpIndex โ€” ํ•„์ˆ˜ int โ€” 0๋ถ€ํ„ฐ GetGumpsCount()-1๊นŒ์ง€ ํ™œ์„ฑ ์„œ๋ฒ„ ๊ฒ€ํ”„์˜ ์ธ๋ฑ์Šค์ž…๋‹ˆ๋‹ค. GumpID/serial๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค. ๋ชฉ๋ก ์™ธ๋ถ€์˜ ์Œ์ˆ˜์™€ ์ธ๋ฑ์Šค๋Š” ์œ ํšจํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ฐฝ์„ ์—ด๊ณ  ๋‹ซ๊ณ  ์žฌ์ •๋ ฌํ•˜๋ฉด ์ƒ‰์ธ์ด ๋ณ€๊ฒฝ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ–‰๋™ํ•˜๊ธฐ ์ „์— GetGumpID/GetGumpSerial๋ฅผ ํ™•์ธํ•˜์„ธ์š”.

๋ฐ˜ํ™˜๊ฐ’

Array - ์ค‘์ฒฉ๋œ ์š”์†Œ๋ฅผ ํฌํ•จํ•˜์—ฌ ๋ชจ๋“  ์‚ด์•„์žˆ๋Š” ์š”์†Œ์— ๋Œ€ํ•œ ์„ค๋ช…์ž…๋‹ˆ๋‹ค. [] - ์ธ๋ฑ์Šค๊ฐ€ ์ž˜๋ชป๋˜์—ˆ๊ฑฐ๋‚˜ ์ผ์น˜ํ•˜๋Š” ์š”์†Œ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ํ–‰ ์ธ๋ฑ์Šค๋Š” 0๋กœ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค. ID ์ปจํŠธ๋กค์ด ์•„๋‹™๋‹ˆ๋‹ค.

๋™์ž‘

  • ํ™œ์„ฑ ์„œ๋ฒ„ ๊ฒ€ํ”„์™€ ํ•จ๊ป˜ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ๋ฐฐ๋‚ญ, ์ง€๋„, ์„ค์ • ๋ฐ ๊ธฐํƒ€ ๋กœ์ปฌ ์ฐฝ์€ ์ด ๋ชฉ๋ก์— ํฌํ•จ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ํ•œ ๋ฒˆ์˜ ํ˜ธ์ถœ์€ ๊ฒŒ์ž„ ์Šค๋ ˆ๋“œ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์Šต๋‹ˆ๋‹ค. ํ†ตํ™”๋งˆ๋‹ค ๋ชฉ๋ก์˜ ์ƒํƒœ๊ฐ€ ๋‹ค๋ฅผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ํ˜„์žฌ ์ œ์–ด ํŠธ๋ฆฌ์— ๋Œ€ํ•œ ์„ค๋ช…: ์œ ํ˜•, ํŽ˜์ด์ง€, ID, X/Y, ํฌ๊ธฐ ๋ฐ ์ง€์›๋˜๋Š” ํ•„๋“œ. ์ด๊ฒƒ์€ ์›์‹œ ์„œ๋ฒ„ ๋งˆํฌ์—… ํŒจํ‚ค์ง€๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค.
  • SilentMode=0์ด๋ฉด ๋น„์–ด ์žˆ์ง€ ์•Š์€ ๊ฒฐ๊ณผ๋„ ํ…์ŠคํŠธ ์ฐฝ์— ์ถ”๊ฐ€๋˜์–ด ์—ด๋ฆฝ๋‹ˆ๋‹ค. SetSilentMode(1)๋Š” ๋ฐฐ์—ด๋งŒ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

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

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

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

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

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

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

1. ์ฒซ ๋ฒˆ์งธ ์ค„ ์ฝ๊ธฐ - ์ง์ ‘ ์Šคํฌ๋ฆฝํŠธ

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

  • 0 โ€” ์ฐฝ ์ƒ‰์ธ. ArrayLength๋Š” ๋ผ์ธ[0]์„ ํ˜ธ์ถœํ•˜๊ธฐ ์ „์— ๋ผ์ธ์ด ์žˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
var lines = UO.GetGumpFullLines(0);
if (Truth(ArrayLength(lines) > 0))
{
    UO.Print(lines[0]);
}

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;

2. ์ž๋™ ์ฐฝ ์—†์ด ๋ชจ๋“  ๋ผ์ธ์„ ์ˆœํšŒ - ์Šคํฌ๋ฆฝํŠธ ๊ธฐ๋Šฅ

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

  • SetSilentMode(1)๋Š” ์ถ”๊ฐ€ ํ…์ŠคํŠธ ์ฐฝ์„ ๋น„ํ™œ์„ฑํ™”ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ์ œ์—์„œ ๋ช…์‹œ์ ์ธ Print๋Š” ์—ฌ์ „ํžˆ ํ•ด๋‹น ํ–‰์„ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค.
  • i๋Š” ๋ฐฐ์—ด ์ธ๋ฑ์Šค์ž…๋‹ˆ๋‹ค. ํ•ด๋‹น ์„ค๋ช…์—์„œ ์›ํ•˜๋Š” ๋ฒ„ํŠผ/์Šค์œ„์น˜์˜ ID๋ฅผ ์„ ํƒํ•˜์„ธ์š”.
return  RunScenario();
 object? RunScenario()
{
    UO.SetSilentMode(1);
    var lines = UO.GetGumpFullLines(0);
    var i = 0;
    while (Truth(i < ArrayLength(lines)))
    {
        UO.Print(lines[i]);
        i = i + 1;
    }

    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;

3. ๋งˆ์ง€๋ง‰์œผ๋กœ ์—ด๋ฆฐ ์„œ๋ฒ„ ์ฐฝ ๋ฐ์ดํ„ฐ ์ฝ๊ธฐ - ์Šคํฌ๋ฆฝํŠธ ํด๋ž˜์Šค

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

  • ๊ฐœ์ˆ˜๋Š” ๋งˆ์ง€๋ง‰ ์ฐฝ์˜ ์ธ๋ฑ์Šค๋กœ ๋ณ€ํ™˜๋ฉ๋‹ˆ๋‹ค. ๋กœ๋“œ๋œ ์„œ๋ฒ„ Gump์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์Šต๋‹ˆ๋‹ค. ๋กœ์ปฌ ์ฐฝ์€ ์—ฌ๊ธฐ์— ํฌํ•จ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
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()
    {
        int count = UO.GetGumpsCount();
        if (count == 0)
            return null;
        int index = count - 1;
        var lines = UO.GetGumpFullLines(index);
        foreach (object? line in (object? [])lines)
            UO.Print(Convert.ToString(line) ?? "");
        return null;
    }
}

๋ช…๋ น ๊ตฌํ˜„

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

UO.GetGumpFullLines(gumpIndex) โ€” UO.GetGumpFullLines(Any)

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

๊ฒฐ๊ณผ: dynamic / Array.

ํ˜ธ์ถœ ์‹œ:

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

case "getgumpfulllines": return GumpLinesResult(bridge.GetGumpFullLines(Arg(0)));

UO.GetGumpID

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

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

int UO.GetGumpID(object? gumpIndex);

์„œ๋ฒ„ ๊ฒ€ํ”„ ์ธ๋ฑ์Šค์—์„œ GumpID ์ฐฝ ์œ ํ˜• ID๋ฅผ ์ฝ์Šต๋‹ˆ๋‹ค.

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

  • gumpIndex โ€” ํ•„์ˆ˜ int โ€” 0๋ถ€ํ„ฐ GetGumpsCount()-1๊นŒ์ง€ ํ™œ์„ฑ ์„œ๋ฒ„ ๊ฒ€ํ”„์˜ ์ธ๋ฑ์Šค์ž…๋‹ˆ๋‹ค. GumpID/serial๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค. ๋ชฉ๋ก ์™ธ๋ถ€์˜ ์Œ์ˆ˜์™€ ์ธ๋ฑ์Šค๋Š” ์œ ํšจํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ฐฝ์„ ์—ด๊ณ  ๋‹ซ๊ณ  ์žฌ์ •๋ ฌํ•˜๋ฉด ์ƒ‰์ธ์ด ๋ณ€๊ฒฝ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ–‰๋™ํ•˜๊ธฐ ์ „์— GetGumpID/GetGumpSerial๋ฅผ ํ™•์ธํ•˜์„ธ์š”.

๋ฐ˜ํ™˜๊ฐ’

int โ€” 32 ๋น„ํŠธ ์ฐฝ ์œ ํ˜• ์‹๋ณ„์ž GumpID. 0๋Š” ์ž˜๋ชป๋œ ์ƒ‰์ธ์ž…๋‹ˆ๋‹ค(serial=0๊ฐ€ ์ฐฝ ์ž์ฒด์— ์žˆ์„ ์ˆ˜๋„ ์žˆ์Œ). ์ตœ์ƒ์œ„ ๋น„ํŠธ๊ฐ€ ์„ค์ •๋˜๋ฉด int๋Š” ์Œ์ˆ˜์ž…๋‹ˆ๋‹ค. Hex(๊ฐ’)์„ ์‚ฌ์šฉํ•˜์—ฌ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ์ฃผ์ œ์˜ type ๋˜๋Š” ์ƒ‰์ธ์ด ์•„๋‹™๋‹ˆ๋‹ค.

๋™์ž‘

  • ํ™œ์„ฑ ์„œ๋ฒ„ ๊ฒ€ํ”„์™€ ํ•จ๊ป˜ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ๋ฐฐ๋‚ญ, ์ง€๋„, ์„ค์ • ๋ฐ ๊ธฐํƒ€ ๋กœ์ปฌ ์ฐฝ์€ ์ด ๋ชฉ๋ก์— ํฌํ•จ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ํ•œ ๋ฒˆ์˜ ํ˜ธ์ถœ์€ ๊ฒŒ์ž„ ์Šค๋ ˆ๋“œ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์Šต๋‹ˆ๋‹ค. ํ†ตํ™”๋งˆ๋‹ค ๋ชฉ๋ก์˜ ์ƒํƒœ๊ฐ€ ๋‹ค๋ฅผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์ผ์น˜ํ•˜๋Š” serial/GumpID ์Œ์˜ ๊ฒฝ์šฐ ํ•˜๋‚˜์˜ GetGumpInfo(info[0] ๋ฐ info[1] ํ•„๋“œ)๋ฅผ ์‚ฌ์šฉํ•˜์„ธ์š”.

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

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

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

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

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

var result = UO.GetGumpID(0);
UO.Print("GetGumpID: " + Convert.ToString(result));

1. 16์ง„์ˆ˜๋กœ ID ํ‘œ์‹œ - ์ง์ ‘ ์Šคํฌ๋ฆฝํŠธ

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

  • 0์€ ์„œ๋ฒ„ ๋ชฉ๋ก์˜ ์ฒซ ๋ฒˆ์งธ ์ƒ‰์ธ์ž…๋‹ˆ๋‹ค. 16์ง„์ˆ˜๋Š” ์Œ์ˆ˜ int์˜ ๋น„ํŠธ ํ‘œํ˜„์„ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.
var value = UO.GetGumpID(0);
UO.Print(Hex(value));

string Hex(object? value) => Convert.ToInt64(value).ToString("X");

2. ์ฒดํฌ๋ฆฌ์ŠคํŠธ ๊ฒฝ๊ณ„ - ์Šคํฌ๋ฆฝํŠธ ๊ธฐ๋Šฅ

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

  • ๋ณ€๊ฒฝํ•  ์ˆ˜ ์—†๋Š” ๋ชฉ๋ก์˜ ๊ฒฝ์šฐ ๊ฐœ์ˆ˜๋Š” ๋งˆ์ง€๋ง‰ ์ธ๋ฑ์Šค ์ดํ›„์ด๋ฏ€๋กœ ๋ˆ„๋ฝ=0์ž…๋‹ˆ๋‹ค. ๋งˆ์ง€๋ง‰ ์œ ํšจํ•œ ์ธ๋ฑ์Šค๋Š” count-1์ž…๋‹ˆ๋‹ค.
return  RunScenario();
 object? RunScenario()
{
    var count = UO.GetGumpsCount();
    var missing = UO.GetGumpID(count);
    UO.Print(Hex(missing));
    return null;
}

string Hex(object? value) => Convert.ToInt64(value).ToString("X");

3. ์•Œ๋ ค์ง„ ID๋กœ ์—ด๋ฆฐ ์ฐฝ ์ฐพ๊ธฐ - ์Šคํฌ๋ฆฝํŠธ ํด๋ž˜์Šค

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

  • 0x999๋Š” ID์˜ ์˜ˆ์ž…๋‹ˆ๋‹ค. ์›ํ•˜๋Š” ์ฐฝ์˜ ์‹ค์ œ ID๋กœ ๋ฐ”๊พธ์„ธ์š”. Index, ID ๋ฐ 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()
    {
        int wantedId = 0x00000999;
        int count = UO.GetGumpsCount();
        for (int index = 0; index < count; index++)
        {
            if (index >= UO.GetGumpsCount())
                break;
            if (UO.GetGumpID(index) == wantedId)
            {
                UO.Print($"Gump index {index}, serial {UO.GetGumpSerial(index)}");
                return index;
            }
        }

        return -1;
        return null;
    }
}

๋ช…๋ น ๊ตฌํ˜„

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

UO.GetGumpID(gumpIndex) โ€” UO.GetGumpID(Any)

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

๊ฒฐ๊ณผ: int / Integer.

ํ˜ธ์ถœ ์‹œ:

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

case "getgumpid": return new InjectionValue(bridge.GetGumpId(Arg(0)));

UO.GetGumpInfo

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

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

dynamic UO.GetGumpInfo(object? gumpIndex);

๋‹จ์ผ ์„œ๋ฒ„ Gump์˜ ์‹๋ณ„์ž ๋ฐ ์š”์†Œ์— ๋Œ€ํ•œ ์ผ๊ด€๋œ ์Šค๋ƒ…์ƒท์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

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

  • gumpIndex โ€” ํ•„์ˆ˜ int โ€” 0๋ถ€ํ„ฐ GetGumpsCount()-1๊นŒ์ง€ ํ™œ์„ฑ ์„œ๋ฒ„ ๊ฒ€ํ”„์˜ ์ธ๋ฑ์Šค์ž…๋‹ˆ๋‹ค. GumpID/serial๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค. ๋ชฉ๋ก ์™ธ๋ถ€์˜ ์Œ์ˆ˜์™€ ์ธ๋ฑ์Šค๋Š” ์œ ํšจํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ฐฝ์„ ์—ด๊ณ  ๋‹ซ๊ณ  ์žฌ์ •๋ ฌํ•˜๋ฉด ์ƒ‰์ธ์ด ๋ณ€๊ฒฝ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ–‰๋™ํ•˜๊ธฐ ์ „์— GetGumpID/GetGumpSerial๋ฅผ ํ™•์ธํ•˜์„ธ์š”.

๋ฐ˜ํ™˜๊ฐ’

๋ฐฐ์—ด - ์ •ํ™•ํžˆ 5๊ฐœ์˜ ์š”์†Œ: [0] int serial; [1] int GumpID; [2] ๋น„์–ด ์žˆ์ง€ ์•Š์€ ํ…์ŠคํŠธ ๋ฐฐ์—ด; [3] ์ผ๋ฐ˜ ๋ฒ„ํŠผ์˜ ๋ฐฐ์—ด ์„ค๋ช…; [4] ์ค‘์ฒฉ๋œ ์š”์†Œ๋ฅผ ํฌํ•จํ•˜์—ฌ ๋ชจ๋“  ์‚ด์•„์žˆ๋Š” ์š”์†Œ์— ๋Œ€ํ•œ ๋ฐฐ์—ด ์„ค๋ช…์ž…๋‹ˆ๋‹ค. ์ด ์Šคํฌ๋ฆฝํŠธ์— ์˜ํ•ด ์œ ํšจํ•˜์ง€ ์•Š๊ฑฐ๋‚˜ ๋‹ซํžˆ๊ฑฐ๋‚˜ ๋ฌด์‹œ๋œ ๊ฒ€ํ”„๋Š” ๋นˆ ๋ฐฐ์—ด []์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ์ตœ์ƒ์œ„ ๋น„ํŠธ๊ฐ€ ์žˆ๋Š” ID๋Š” ์Œ์ˆ˜ int๋กœ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. ๋นˆ ํ…์ŠคํŠธ ๋ฐฐ์—ด ์ž์ฒด๊ฐ€ ์ฐฝ์ด ์—†๋‹ค๋Š” ์˜๋ฏธ๋Š” ์•„๋‹™๋‹ˆ๋‹ค.

๋™์ž‘

  • ํ™œ์„ฑ ์„œ๋ฒ„ ๊ฒ€ํ”„์™€ ํ•จ๊ป˜ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ๋ฐฐ๋‚ญ, ์ง€๋„, ์„ค์ • ๋ฐ ๊ธฐํƒ€ ๋กœ์ปฌ ์ฐฝ์€ ์ด ๋ชฉ๋ก์— ํฌํ•จ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ํ•œ ๋ฒˆ์˜ ํ˜ธ์ถœ์€ ๊ฒŒ์ž„ ์Šค๋ ˆ๋“œ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์Šต๋‹ˆ๋‹ค. ํ†ตํ™”๋งˆ๋‹ค ๋ชฉ๋ก์˜ ์ƒํƒœ๊ฐ€ ๋‹ค๋ฅผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์ „์ฒด ์Šค๋ƒ…์ƒท์€ ํ•˜๋‚˜์˜ ๊ฒŒ์ž„ ์Šค๋ ˆ๋“œ ์š”์ฒญ์œผ๋กœ ๋ณต์‚ฌ๋ฉ๋‹ˆ๋‹ค. ๋ฐ˜ํ™˜ ํ›„ ์ฐฝ์„ ๋ณ€๊ฒฝ/๋‹ซ์•„๋„ ์ €์žฅ๋œ ๋ฐฐ์—ด์€ ๋ณ€๊ฒฝ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • ์ปจํŠธ๋กค ์„ค๋ช…์€ ์œ ํ˜•, ํŽ˜์ด์ง€, ID, X/Y, ํฌ๊ธฐ๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. ๋ฒ„ํŠผ์—๋Š” ButtonID, ์ž‘์—…, toPage ๋ฐ graphic๊ฐ€ ์ถ”๊ฐ€๋กœ ํฌํ•จ๋ฉ๋‹ˆ๋‹ค. ์Šค์œ„์น˜ - ID, ์„ ํƒ๋จ, ๋น„ํ™œ์„ฑ/ํ™œ์„ฑ. ํ…์ŠคํŠธ์—๋Š” ๊ณต๋ฐฑ๊ณผ =๊ฐ€ ํฌํ•จ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฌธ์ž์—ด์€ ๋ฌด์กฐ๊ฑด ๊ณต๋ฐฑ์œผ๋กœ ๊ตฌ๋ฌธ ๋ถ„์„ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
  • AddGumpIgnoreByID/AddGumpIgnoreBySerial ํ˜„์žฌ ์Šคํฌ๋ฆฝํŠธ์—์„œ ์ด ์ฝ๊ธฐ ๊ฒฐ๊ณผ๋งŒ ์ˆจ๊น๋‹ˆ๋‹ค. ClearGumpsIgnore๋Š” ์ด๋Ÿฌํ•œ ํ•„ํ„ฐ๋ฅผ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค. GetGumpsCount๋Š” ๊ฐ์†Œํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

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

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

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

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

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

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

1. ID ๋‘˜ ๋‹ค ์ฝ๊ธฐ - ์ง์ ‘ ์Šคํฌ๋ฆฝํŠธ

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

  • GumpIndex=0 โ€” ์ฒซ ๋ฒˆ์งธ ์„œ๋ฒ„ ๊ฒ€ํ”„. ๊ธธ์ด ๊ฒ€์‚ฌ๋Š” ๋ˆ„๋ฝ๋œ ์ฐฝ ํ•„๋“œ์— ๋Œ€ํ•œ ์•ก์„ธ์Šค๋ฅผ ๋ณดํ˜ธํ•ฉ๋‹ˆ๋‹ค.
  • info[0] โ€” serial, info[1] โ€” GumpID; ๋‘˜ ๋‹ค ๋™์ผํ•œ ๋…น์Œ์— ์†ํ•ฉ๋‹ˆ๋‹ค.
var info = UO.GetGumpInfo(0);
if (Truth(ArrayLength(info) == 5))
{
    UO.Print("Serial=" + Hex(info[0]));
    UO.Print("GumpID=" + Hex(info[1]));
}

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

2. ์‹ค์ œ ButtonID ๋‚˜์—ด - ์Šคํฌ๋ฆฝํŠธ ๊ธฐ๋Šฅ

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

  • info[3] โ€” ๋ฒ„ํŠผ ์„ค๋ช… ๋ฐฐ์—ด; ํ•ด๋‹น ์ค„์˜ ButtonID ํ•„๋“œ๋Š” ์‘๋‹ต์— ๋Œ€ํ•ด ID๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค. i๋Š” ButtonID๊ฐ€ ์•„๋‹Œ ํ–‰ ์ธ๋ฑ์Šค์ผ ๋ฟ์ž…๋‹ˆ๋‹ค.
  • ๋ผ๋””์˜ค ๋ฒ„ํŠผ์€ ๋ผ๋””์˜ค ๋ฒ„ํŠผ์ด๋ฉฐ ์ผ๋ฐ˜ ๋ฒ„ํŠผ ๋ชฉ๋ก์ด ์•„๋‹Œ ์ •๋ณด[4]์— ๋‚˜ํƒ€๋‚ฉ๋‹ˆ๋‹ค.
return  RunScenario();
 object? RunScenario()
{
    var info = UO.GetGumpInfo(0);
    if (Truth(ArrayLength(info) == 5))
    {
        var buttons = info[3];
        var i = 0;
        while (Truth(i < ArrayLength(buttons)))
        {
            UO.Print(buttons[i]);
            i = i + 1;
        }
    }

    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;

3. ๋‹ซ์„ ๋•Œ๊นŒ์ง€ ํ…์ŠคํŠธ ์ €์žฅ - ์Šคํฌ๋ฆฝํŠธ ํด๋ž˜์Šค

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

  • info[2] - ํ…์ŠคํŠธ ์‚ฌ๋ณธ. ๋‹ซ๋Š” ๊ฒƒ์€ ๊ธˆ์ง€๋˜์ง€ ์•Š์€ ์ฐฝ NoClose์—๋งŒ ํ—ˆ์šฉ๋ฉ๋‹ˆ๋‹ค.
  • ๋‹ซ์•„๋„ ์ €์žฅ๋œ ํ…์ŠคํŠธ๋Š” ์ง€์›Œ์ง€์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ธฐ์กด ์ฐฝ์—๋Š” ๋นˆ ํ…์ŠคํŠธ ๋ฐฐ์—ด๋„ ํ—ˆ์šฉ๋ฉ๋‹ˆ๋‹ค.
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 info = UO.GetGumpInfo(0);
        if (Truth(ArrayLength(info) == 5))
        {
            var texts = info[2];
            UO.CloseSimpleGump(0);
            if (Truth(ArrayLength(texts) > 0))
            {
                UO.Print(texts[0]);
            }
        }

        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;
}

๋ช…๋ น ๊ตฌํ˜„

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

UO.GetGumpInfo(gumpIndex) โ€” UO.GetGumpInfo(Any)

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

๊ฒฐ๊ณผ: dynamic / Array.

ํ˜ธ์ถœ ์‹œ:

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

case "getgumpinfo":

                {

                    int index = Arg(0);

                    GumpSnapshot snapshot;

                    if (bridge is IApiGumpAccess reader)

                        snapshot = reader.ReadGump(index);

                    else

                    {

                        int id = bridge.GetGumpId(index);

                        snapshot = id == 0 ? null : new GumpSnapshot(bridge.GetGumpSerial(index), id,

                            bridge.GetGumpTextLines(index), bridge.GetGumpButtonsDescription(index), bridge.GetGumpFullLines(index));

                    }

                    if (snapshot == null || state.IgnoredGumpIds.Contains(snapshot.Id)

                        || state.IgnoredGumpSerials.Contains(snapshot.Serial))

                        return new InjectionValue(Array.Empty<InjectionValue>());

                    return new InjectionValue(new[]

                    {

                        new InjectionValue(snapshot.Serial), new InjectionValue(snapshot.Id), StringArray(snapshot.Text),

                        StringArray(snapshot.Buttons), StringArray(snapshot.Controls)

                    });

                }

UO.GetGumpSerial

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

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

int UO.GetGumpSerial(object? gumpIndex);

์„œ๋ฒ„ ๊ฒ€ํ”„ ์ธ๋ฑ์Šค๋กœ serial ์ธ์Šคํ„ด์Šค/์ฐฝ ์†Œ์œ ์ž๋ฅผ ์ฝ์Šต๋‹ˆ๋‹ค.

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

  • gumpIndex โ€” ํ•„์ˆ˜ int โ€” 0๋ถ€ํ„ฐ GetGumpsCount()-1๊นŒ์ง€ ํ™œ์„ฑ ์„œ๋ฒ„ ๊ฒ€ํ”„์˜ ์ธ๋ฑ์Šค์ž…๋‹ˆ๋‹ค. GumpID/serial๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค. ๋ชฉ๋ก ์™ธ๋ถ€์˜ ์Œ์ˆ˜์™€ ์ธ๋ฑ์Šค๋Š” ์œ ํšจํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ฐฝ์„ ์—ด๊ณ  ๋‹ซ๊ณ  ์žฌ์ •๋ ฌํ•˜๋ฉด ์ƒ‰์ธ์ด ๋ณ€๊ฒฝ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ–‰๋™ํ•˜๊ธฐ ์ „์— GetGumpID/GetGumpSerial๋ฅผ ํ™•์ธํ•˜์„ธ์š”.

๋ฐ˜ํ™˜๊ฐ’

int๋Š” ์ฐฝ ์ธ์Šคํ„ด์Šค/์†Œ์œ ์ž์˜ 32๋น„ํŠธ serial์ž…๋‹ˆ๋‹ค. 0๋Š” ์ž˜๋ชป๋œ ์ƒ‰์ธ์ž…๋‹ˆ๋‹ค(serial=0๊ฐ€ ์ฐฝ ์ž์ฒด์— ์žˆ์„ ์ˆ˜๋„ ์žˆ์Œ). ์ตœ์ƒ์œ„ ๋น„ํŠธ๊ฐ€ ์„ค์ •๋˜๋ฉด int๋Š” ์Œ์ˆ˜์ž…๋‹ˆ๋‹ค. Hex(๊ฐ’)์„ ์‚ฌ์šฉํ•˜์—ฌ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ์ฃผ์ œ์˜ type๋„ ์•„๋‹ˆ๊ณ  ์ƒ‰์ธ๋„ ์•„๋‹™๋‹ˆ๋‹ค.

๋™์ž‘

  • ํ™œ์„ฑ ์„œ๋ฒ„ ๊ฒ€ํ”„์™€ ํ•จ๊ป˜ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ๋ฐฐ๋‚ญ, ์ง€๋„, ์„ค์ • ๋ฐ ๊ธฐํƒ€ ๋กœ์ปฌ ์ฐฝ์€ ์ด ๋ชฉ๋ก์— ํฌํ•จ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ํ•œ ๋ฒˆ์˜ ํ˜ธ์ถœ์€ ๊ฒŒ์ž„ ์Šค๋ ˆ๋“œ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์Šต๋‹ˆ๋‹ค. ํ†ตํ™”๋งˆ๋‹ค ๋ชฉ๋ก์˜ ์ƒํƒœ๊ฐ€ ๋‹ค๋ฅผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์ผ์น˜ํ•˜๋Š” serial/GumpID ์Œ์˜ ๊ฒฝ์šฐ ํ•˜๋‚˜์˜ GetGumpInfo(info[0] ๋ฐ info[1] ํ•„๋“œ)๋ฅผ ์‚ฌ์šฉํ•˜์„ธ์š”.

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

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

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

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

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

var result = UO.GetGumpSerial(0);
UO.Print("GetGumpSerial: " + Convert.ToString(result));

1. 16์ง„์ˆ˜๋กœ ID ํ‘œ์‹œ - ์ง์ ‘ ์Šคํฌ๋ฆฝํŠธ

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

  • 0์€ ์„œ๋ฒ„ ๋ชฉ๋ก์˜ ์ฒซ ๋ฒˆ์งธ ์ƒ‰์ธ์ž…๋‹ˆ๋‹ค. 16์ง„์ˆ˜๋Š” ์Œ์ˆ˜ int์˜ ๋น„ํŠธ ํ‘œํ˜„์„ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.
var value = UO.GetGumpSerial(0);
UO.Print(Hex(value));

string Hex(object? value) => Convert.ToInt64(value).ToString("X");

2. ์ฒดํฌ๋ฆฌ์ŠคํŠธ ๊ฒฝ๊ณ„ - ์Šคํฌ๋ฆฝํŠธ ๊ธฐ๋Šฅ

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

  • ๋ณ€๊ฒฝํ•  ์ˆ˜ ์—†๋Š” ๋ชฉ๋ก์˜ ๊ฒฝ์šฐ ๊ฐœ์ˆ˜๋Š” ๋งˆ์ง€๋ง‰ ์ธ๋ฑ์Šค ์ดํ›„์ด๋ฏ€๋กœ ๋ˆ„๋ฝ=0์ž…๋‹ˆ๋‹ค. ๋งˆ์ง€๋ง‰ ์œ ํšจํ•œ ์ธ๋ฑ์Šค๋Š” count-1์ž…๋‹ˆ๋‹ค.
return  RunScenario();
 object? RunScenario()
{
    var count = UO.GetGumpsCount();
    var missing = UO.GetGumpSerial(count);
    UO.Print(Hex(missing));
    return null;
}

string Hex(object? value) => Convert.ToInt64(value).ToString("X");

3. ๋กœ๋“œ๋œ ๋ชจ๋“  ์„œ๋ฒ„ ์ฐฝ์˜ ์†Œ์œ ์ž ํ‘œ์‹œ - ์Šคํฌ๋ฆฝํŠธ ํด๋ž˜์Šค

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

  • 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()
    {
        int count = UO.GetGumpsCount();
        for (int index = 0; index < count; index++)
        {
            if (index >= UO.GetGumpsCount())
                break;
            int serial = UO.GetGumpSerial(index);
            UO.Print($"Window {index}: serial={UO.Int2Hex(serial)}, ID={UO.GetGumpID(index)}");
        }

        return null;
    }
}

๋ช…๋ น ๊ตฌํ˜„

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

UO.GetGumpSerial(gumpIndex) โ€” UO.GetGumpSerial(Any)

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

๊ฒฐ๊ณผ: int / Integer.

ํ˜ธ์ถœ ์‹œ:

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

case "getgumpserial": return new InjectionValue(bridge.GetGumpSerial(Arg(0)));

UO.GetGumpShortLines

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

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

dynamic UO.GetGumpShortLines(object? gumpIndex);

์„œ๋ฒ„ Gump์˜ ํ…์ŠคํŠธ ์š”์†Œ ๋ฐ ๋ฒ„ํŠผ์— ๋Œ€ํ•œ ์„ค๋ช…์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

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

  • gumpIndex โ€” ํ•„์ˆ˜ int โ€” 0๋ถ€ํ„ฐ GetGumpsCount()-1๊นŒ์ง€ ํ™œ์„ฑ ์„œ๋ฒ„ ๊ฒ€ํ”„์˜ ์ธ๋ฑ์Šค์ž…๋‹ˆ๋‹ค. GumpID/serial๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค. ๋ชฉ๋ก ์™ธ๋ถ€์˜ ์Œ์ˆ˜์™€ ์ธ๋ฑ์Šค๋Š” ์œ ํšจํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ฐฝ์„ ์—ด๊ณ  ๋‹ซ๊ณ  ์žฌ์ •๋ ฌํ•˜๋ฉด ์ƒ‰์ธ์ด ๋ณ€๊ฒฝ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ–‰๋™ํ•˜๊ธฐ ์ „์— GetGumpID/GetGumpSerial๋ฅผ ํ™•์ธํ•˜์„ธ์š”.

๋ฐ˜ํ™˜๊ฐ’

Array - ํ…์ŠคํŠธ ์š”์†Œ ๋ฐ ๋ฒ„ํŠผ์— ๋Œ€ํ•œ ์„ค๋ช…์ž…๋‹ˆ๋‹ค. [] - ์ธ๋ฑ์Šค๊ฐ€ ์ž˜๋ชป๋˜์—ˆ๊ฑฐ๋‚˜ ์ผ์น˜ํ•˜๋Š” ์š”์†Œ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ํ–‰ ์ธ๋ฑ์Šค๋Š” 0๋กœ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค. ID ์ปจํŠธ๋กค์ด ์•„๋‹™๋‹ˆ๋‹ค.

๋™์ž‘

  • ํ™œ์„ฑ ์„œ๋ฒ„ ๊ฒ€ํ”„์™€ ํ•จ๊ป˜ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ๋ฐฐ๋‚ญ, ์ง€๋„, ์„ค์ • ๋ฐ ๊ธฐํƒ€ ๋กœ์ปฌ ์ฐฝ์€ ์ด ๋ชฉ๋ก์— ํฌํ•จ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ํ•œ ๋ฒˆ์˜ ํ˜ธ์ถœ์€ ๊ฒŒ์ž„ ์Šค๋ ˆ๋“œ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์Šต๋‹ˆ๋‹ค. ํ†ตํ™”๋งˆ๋‹ค ๋ชฉ๋ก์˜ ์ƒํƒœ๊ฐ€ ๋‹ค๋ฅผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์งง์€ ๋ชฉ๋ก์—๋Š” ํ…์ŠคํŠธ๊ฐ€ ์—†๊ณ  ๋ฒ„ํŠผ ์œ ํ˜•์ด ์—†๋Š” ์žฅ์‹์ด ์ œ์™ธ๋ฉ๋‹ˆ๋‹ค. ๋ผ๋””์˜ค ๋ฒ„ํŠผ์ด ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.
  • SilentMode=0์ด๋ฉด ๋น„์–ด ์žˆ์ง€ ์•Š์€ ๊ฒฐ๊ณผ๋„ ํ…์ŠคํŠธ ์ฐฝ์— ์ถ”๊ฐ€๋˜์–ด ์—ด๋ฆฝ๋‹ˆ๋‹ค. SetSilentMode(1)๋Š” ๋ฐฐ์—ด๋งŒ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

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

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

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

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

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

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

1. ์ฒซ ๋ฒˆ์งธ ์ค„ ์ฝ๊ธฐ - ์ง์ ‘ ์Šคํฌ๋ฆฝํŠธ

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

  • 0 โ€” ์ฐฝ ์ƒ‰์ธ. ArrayLength๋Š” ๋ผ์ธ[0]์„ ํ˜ธ์ถœํ•˜๊ธฐ ์ „์— ๋ผ์ธ์ด ์žˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
var lines = UO.GetGumpShortLines(0);
if (Truth(ArrayLength(lines) > 0))
{
    UO.Print(lines[0]);
}

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;

2. ์ž๋™ ์ฐฝ ์—†์ด ๋ชจ๋“  ๋ผ์ธ์„ ์ˆœํšŒ - ์Šคํฌ๋ฆฝํŠธ ๊ธฐ๋Šฅ

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

  • SetSilentMode(1)๋Š” ์ถ”๊ฐ€ ํ…์ŠคํŠธ ์ฐฝ์„ ๋น„ํ™œ์„ฑํ™”ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ์ œ์—์„œ ๋ช…์‹œ์ ์ธ Print๋Š” ์—ฌ์ „ํžˆ ํ•ด๋‹น ํ–‰์„ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค.
  • i๋Š” ๋ฐฐ์—ด ์ธ๋ฑ์Šค์ž…๋‹ˆ๋‹ค. ํ•ด๋‹น ์„ค๋ช…์—์„œ ์›ํ•˜๋Š” ๋ฒ„ํŠผ/์Šค์œ„์น˜์˜ ID๋ฅผ ์„ ํƒํ•˜์„ธ์š”.
return  RunScenario();
 object? RunScenario()
{
    UO.SetSilentMode(1);
    var lines = UO.GetGumpShortLines(0);
    var i = 0;
    while (Truth(i < ArrayLength(lines)))
    {
        UO.Print(lines[i]);
        i = i + 1;
    }

    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;

3. ๋งˆ์ง€๋ง‰์œผ๋กœ ์—ด๋ฆฐ ์„œ๋ฒ„ ์ฐฝ ๋ฐ์ดํ„ฐ ์ฝ๊ธฐ - ์Šคํฌ๋ฆฝํŠธ ํด๋ž˜์Šค

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

  • ๊ฐœ์ˆ˜๋Š” ๋งˆ์ง€๋ง‰ ์ฐฝ์˜ ์ธ๋ฑ์Šค๋กœ ๋ณ€ํ™˜๋ฉ๋‹ˆ๋‹ค. ๋กœ๋“œ๋œ ์„œ๋ฒ„ Gump์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์Šต๋‹ˆ๋‹ค. ๋กœ์ปฌ ์ฐฝ์€ ์—ฌ๊ธฐ์— ํฌํ•จ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
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()
    {
        int count = UO.GetGumpsCount();
        if (count == 0)
            return null;
        int index = count - 1;
        var lines = UO.GetGumpShortLines(index);
        foreach (object? line in (object? [])lines)
            UO.Print(Convert.ToString(line) ?? "");
        return null;
    }
}

๋ช…๋ น ๊ตฌํ˜„

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

UO.GetGumpShortLines(gumpIndex) โ€” UO.GetGumpShortLines(Any)

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

๊ฒฐ๊ณผ: dynamic / Array.

ํ˜ธ์ถœ ์‹œ:

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

case "getgumpshortlines": return GumpLinesResult(bridge.GetGumpShortLines(Arg(0)));

UO.GetGumpTextLines

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

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

dynamic UO.GetGumpTextLines(object? gumpIndex);

๋ ˆ์ด๋ธ”, HTML, ์ž…๋ ฅ ํ•„๋“œ ๋ฐ ์„œ๋ฒ„ ๊ฒ€ํ”„ ์Šค์œ„์น˜ ๋ ˆ์ด๋ธ”์˜ ๋น„์–ด ์žˆ์ง€ ์•Š์€ ํ…์ŠคํŠธ๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

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

  • gumpIndex โ€” ํ•„์ˆ˜ int โ€” 0๋ถ€ํ„ฐ GetGumpsCount()-1๊นŒ์ง€ ํ™œ์„ฑ ์„œ๋ฒ„ ๊ฒ€ํ”„์˜ ์ธ๋ฑ์Šค์ž…๋‹ˆ๋‹ค. GumpID/serial๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค. ๋ชฉ๋ก ์™ธ๋ถ€์˜ ์Œ์ˆ˜์™€ ์ธ๋ฑ์Šค๋Š” ์œ ํšจํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ฐฝ์„ ์—ด๊ณ  ๋‹ซ๊ณ  ์žฌ์ •๋ ฌํ•˜๋ฉด ์ƒ‰์ธ์ด ๋ณ€๊ฒฝ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ–‰๋™ํ•˜๊ธฐ ์ „์— GetGumpID/GetGumpSerial๋ฅผ ํ™•์ธํ•˜์„ธ์š”.

๋ฐ˜ํ™˜๊ฐ’

Array โ€” ๋ผ๋ฒจ, HTML, ์ž…๋ ฅ ํ•„๋“œ ๋ฐ ์Šค์œ„์น˜ ๋ผ๋ฒจ์˜ ๋น„์–ด ์žˆ์ง€ ์•Š์€ ํ…์ŠคํŠธ์ž…๋‹ˆ๋‹ค. [] - ์ธ๋ฑ์Šค๊ฐ€ ์ž˜๋ชป๋˜์—ˆ๊ฑฐ๋‚˜ ์ผ์น˜ํ•˜๋Š” ์š”์†Œ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ํ–‰ ์ธ๋ฑ์Šค๋Š” 0๋กœ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค. ID ์ œ์–ด๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค.

๋™์ž‘

  • ํ™œ์„ฑ ์„œ๋ฒ„ ๊ฒ€ํ”„์™€ ํ•จ๊ป˜ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ๋ฐฐ๋‚ญ, ์ง€๋„, ์„ค์ • ๋ฐ ๊ธฐํƒ€ ๋กœ์ปฌ ์ฐฝ์€ ์ด ๋ชฉ๋ก์— ํฌํ•จ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ํ•œ ๋ฒˆ์˜ ํ˜ธ์ถœ์€ ๊ฒŒ์ž„ ์Šค๋ ˆ๋“œ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์Šต๋‹ˆ๋‹ค. ํ†ตํ™”๋งˆ๋‹ค ๋ชฉ๋ก์˜ ์ƒํƒœ๊ฐ€ ๋‹ค๋ฅผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ํ…์ŠคํŠธ๋งŒ; ButtonID, ํฌ๊ธฐ ๋ฐ ๊ตฌ์กฐ๋Š” ํฌํ•จ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ถ”๊ฐ€๋กœ ์•„๋ฌด๊ฒƒ๋„ ์ธ์‡„ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • GetGumpTextLines๋Š” ํ…์ŠคํŠธ ์ฐฝ์„ ์—ด์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

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

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

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

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

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

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

1. ์ฒซ ๋ฒˆ์งธ ์ค„ ์ฝ๊ธฐ - ์ง์ ‘ ์Šคํฌ๋ฆฝํŠธ

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

  • 0 โ€” ์ฐฝ ์ƒ‰์ธ. ArrayLength๋Š” ๋ผ์ธ[0]์„ ํ˜ธ์ถœํ•˜๊ธฐ ์ „์— ๋ผ์ธ์ด ์žˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
var lines = UO.GetGumpTextLines(0);
if (Truth(ArrayLength(lines) > 0))
{
    UO.Print(lines[0]);
}

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;

2. ์ž๋™ ์ฐฝ ์—†์ด ๋ชจ๋“  ๋ผ์ธ์„ ์ˆœํšŒ - ์Šคํฌ๋ฆฝํŠธ ๊ธฐ๋Šฅ

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

  • SetSilentMode(1)๋Š” ์ถ”๊ฐ€ ํ…์ŠคํŠธ ์ฐฝ์„ ๋น„ํ™œ์„ฑํ™”ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ์ œ์—์„œ ๋ช…์‹œ์ ์ธ Print๋Š” ์—ฌ์ „ํžˆ ํ•ด๋‹น ํ–‰์„ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค.
  • i๋Š” ๋ฐฐ์—ด ์ธ๋ฑ์Šค์ž…๋‹ˆ๋‹ค. ํ•ด๋‹น ์„ค๋ช…์—์„œ ์›ํ•˜๋Š” ๋ฒ„ํŠผ/์Šค์œ„์น˜์˜ ID๋ฅผ ์„ ํƒํ•˜์„ธ์š”.
return  RunScenario();
 object? RunScenario()
{
    UO.SetSilentMode(1);
    var lines = UO.GetGumpTextLines(0);
    var i = 0;
    while (Truth(i < ArrayLength(lines)))
    {
        UO.Print(lines[i]);
        i = i + 1;
    }

    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;

3. ๋งˆ์ง€๋ง‰์œผ๋กœ ์—ด๋ฆฐ ์„œ๋ฒ„ ์ฐฝ ๋ฐ์ดํ„ฐ ์ฝ๊ธฐ - ์Šคํฌ๋ฆฝํŠธ ํด๋ž˜์Šค

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

  • ๊ฐœ์ˆ˜๋Š” ๋งˆ์ง€๋ง‰ ์ฐฝ์˜ ์ธ๋ฑ์Šค๋กœ ๋ณ€ํ™˜๋ฉ๋‹ˆ๋‹ค. ๋กœ๋“œ๋œ ์„œ๋ฒ„ Gump์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์Šต๋‹ˆ๋‹ค. ๋กœ์ปฌ ์ฐฝ์€ ์—ฌ๊ธฐ์— ํฌํ•จ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
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()
    {
        int count = UO.GetGumpsCount();
        if (count == 0)
            return null;
        int index = count - 1;
        var lines = UO.GetGumpTextLines(index);
        foreach (object? line in (object? [])lines)
            UO.Print(Convert.ToString(line) ?? "");
        return null;
    }
}

๋ช…๋ น ๊ตฌํ˜„

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

UO.GetGumpTextLines(gumpIndex) โ€” UO.GetGumpTextLines(Any)

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

๊ฒฐ๊ณผ: dynamic / Array.

ํ˜ธ์ถœ ์‹œ:

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

case "getgumptextlines": return StringArray(bridge.GetGumpTextLines(Arg(0)));

UO.GetGumpsCount

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

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

int UO.GetGumpsCount();

ํ™œ์„ฑ ์„œ๋ฒ„ ๊ฒ€ํ”„ ์ˆ˜๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

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

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

๋ฐ˜ํ™˜๊ฐ’

int >= 0 โ€” ๋งˆ์ง€๋ง‰ ์ฐฝ์˜ ์ธ๋ฑ์Šค๊ฐ€ ์•„๋‹Œ ์ฐฝ ์ˆ˜์ž…๋‹ˆ๋‹ค. 0 โ€” ๋ชฉ๋ก์ด ๋น„์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

๋™์ž‘

  • ํ™œ์„ฑ ์„œ๋ฒ„ ๊ฒ€ํ”„์™€ ํ•จ๊ป˜ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ๋ฐฐ๋‚ญ, ์ง€๋„, ์„ค์ • ๋ฐ ๊ธฐํƒ€ ๋กœ์ปฌ ์ฐฝ์€ ์ด ๋ชฉ๋ก์— ํฌํ•จ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ํ•œ ๋ฒˆ์˜ ํ˜ธ์ถœ์€ ๊ฒŒ์ž„ ์Šค๋ ˆ๋“œ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์Šต๋‹ˆ๋‹ค. ํ†ตํ™”๋งˆ๋‹ค ๋ชฉ๋ก์˜ ์ƒํƒœ๊ฐ€ ๋‹ค๋ฅผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

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

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

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

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

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

var result = UO.GetGumpsCount();
UO.Print("GetGumpsCount: " + Convert.ToString(result));

1. ์ฐฝ ํ™•์ธ - ์ง์ ‘ ์Šคํฌ๋ฆฝํŠธ

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

  • ๋…ผ์Ÿ์ด ์—†์Šต๋‹ˆ๋‹ค. count=0๋Š” ํ˜„์žฌ ๋ชฉ๋ก์— ์„œ๋ฒ„ ์ฐฝ์ด ์—†์Œ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.
var count = UO.GetGumpsCount();
if (Truth(count == 0))
{
    UO.Print("No server gumps");
}

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

2. ๋ชฉ๋ก ID - ์Šคํฌ๋ฆฝํŠธ ๊ธฐ๋Šฅ

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

  • i๋Š” 0์˜ ์ƒ‰์ธ์ž…๋‹ˆ๋‹ค. ๊ฒฐ๊ณผ ID๋Š” ๋ชฉ๋ก์˜ ์œ„์น˜๊ฐ€ ์•„๋‹Œ ์ฐฝ ์œ ํ˜•์„ ์‹๋ณ„ํ•ฉ๋‹ˆ๋‹ค.
  • ์ด๋™ ์ค‘์— ์ฐฝ์ด ๋ณ€๊ฒฝ๋˜๋ฉด ๋ชฉ๋ก์„ ๋‹ค์‹œ ์ฝ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. count๋Š” ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ฐจ๋‹จํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
return  RunScenario();
 object? RunScenario()
{
    var count = UO.GetGumpsCount();
    var i = 0;
    while (Truth(i < count))
    {
        UO.Print(Hex(UO.GetGumpID(i)));
        i = i + 1;
    }

    return null;
}

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

3. ๋ชฉ๋ก์˜ ๋งˆ์ง€๋ง‰ ์š”์†Œ ์ฝ๊ธฐ - ์Šคํฌ๋ฆฝํŠธ ํด๋ž˜์Šค

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

  • count-1๋Š” ํ˜„์žฌ ๋ชฉ๋ก์˜ ๋งˆ์ง€๋ง‰ ์ƒ‰์ธ์ด๋ฉฐ ์ตœ์‹  ์ฐฝ์„ ๋ณด์žฅํ•˜์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค. ์ฝ๊ธฐ ์ „์— ์ฐฝ์ด ์‚ฌ๋ผ์ง„ ๊ฒฝ์šฐ ์ •๋ณด๋Š” ๋น„์–ด ์žˆ์Šต๋‹ˆ๋‹ค.
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 count = UO.GetGumpsCount();
        if (Truth(count > 0))
        {
            var info = UO.GetGumpInfo(count - 1);
            UO.Print(ArrayLength(info));
        }

        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;
}

๋ช…๋ น ๊ตฌํ˜„

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

UO.GetGumpsCount() โ€” UO.GetGumpsCount()

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

๊ฒฐ๊ณผ: int / Integer.

ํ˜ธ์ถœ ์‹œ:

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

case "getgumpscount": return new InjectionValue(bridge.GetGumpCount());

UO.GumpAutoCheckBox

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

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

void UO.GumpAutoCheckBox(object? checkBoxID, object? value);

์ฒซ ๋ฒˆ์งธ ์ ํ•ฉํ•œ ์„œ๋ฒ„ ๊ฒ€ํ”„์—์„œ ์š”์†Œ์˜ ๊ฐ’์„ ํ•œ ๋ฒˆ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. ์š”์†Œ๊ฐ€ ์•„์ง ์กด์žฌํ•˜์ง€ ์•Š์œผ๋ฉด ๋Œ€๊ธฐ ์‹œ๊ฐ„์„ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.

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

  • checkBoxID - int - ํ•ด๋‹น ์œ ํ˜• ์š”์†Œ์˜ ์ •ํ™•ํ•œ ID. ์ด๊ฒƒ์€ ์ธ๋ฑ์Šค๋„ ์•„๋‹ˆ๊ณ  GumpID๋„ ์•„๋‹ˆ๊ณ  serial ์ฐฝ์ด ์•„๋‹™๋‹ˆ๋‹ค. 0๋Š” ์ฒซ ๋ฒˆ์งธ ์š”์†Œ๋ฅผ ๋Œ€์ฒดํ•˜์ง€ ์•Š๋Š” ์ผ๋ฐ˜์ ์ธ ID์ž…๋‹ˆ๋‹ค.
  • value - int - 1 ํ™œ์„ฑํ™”, 0 ๋น„ํ™œ์„ฑํ™”. 0์ด ์•„๋‹Œ ์ˆซ์ž ๊ฐ’๋„ ํฌํ•จ๋ฉ๋‹ˆ๋‹ค. 0/1๋ฅผ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค. ๋ผ๋””์˜ค ๋ฒ„ํŠผ์„ ์„ ํƒํ•˜๋ฉด ํ•ด๋‹น ๊ทธ๋ฃน์˜ ์ธ์ ‘ํ•œ ๋ผ๋””์˜ค ๋ฒ„ํŠผ์ด ์„ ํƒ ์ทจ์†Œ๋ฉ๋‹ˆ๋‹ค.

๋ฐ˜ํ™˜๊ฐ’

void - ์•„๋ฌด๊ฒƒ๋„ ๋ฐ˜ํ™˜ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์„ฑ๊ณต๋„, ์ƒˆ ๊ฐ’๋„, ์„œ๋ฒ„ ํ™•์ธ๋„ ๋ฐ˜ํ™˜๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋™์ž‘

  • ๋จผ์ € ํ˜„์žฌ ์ธํ„ฐํŽ˜์ด์Šค ์ˆœ์„œ๋กœ ๊ธฐ์กด ์ฐฝ์„ ํ™•์ธํ•œ ๋‹ค์Œ ์ƒˆ๋กญ๊ฑฐ๋‚˜ ์—…๋ฐ์ดํŠธ๋œ ์„œ๋ฒ„ ๋ ˆ์ด์•„์›ƒ์„ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. ์œ ํ˜•๊ณผ ID์˜ ์ฒซ ๋ฒˆ์งธ ์ผ์น˜์—์„œ ํ•œ ๋ฒˆ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค. ํŠน์ • ์ฐฝ์˜ ๊ฒฝ์šฐ ์ƒ‰์ธ๊ณผ ํ•จ๊ป˜ NumGump*๋ฅผ ์‚ฌ์šฉํ•˜์„ธ์š”.
  • ๋ณด๋ฅ˜ ์ค‘์ธ ๋ชจ๋“  ํ•„๋“œ๋Š” ์ž๋™ ๋ฒ„ํŠผ ์‘๋‹ต ์ „์— ์ ์šฉ๋ฉ๋‹ˆ๋‹ค. ํ•˜๋‚˜์˜ ์Šคํฌ๋ฆฝํŠธ์—์„œ ๋™์ผํ•œ ์œ ํ˜•๊ณผ ID๋ฅผ ๋ฐ˜๋ณตํ•˜๋ฉด ์•„์ง ์‹คํ–‰๋˜์ง€ ์•Š์€ ๊ฐ’์„ ๋Œ€์ฒดํ•ฉ๋‹ˆ๋‹ค. ์ œํ•œ โ€” 1024 ๋ณด๋ฅ˜ ์ค‘์ธ ํด๋ผ์ด์–ธํŠธ ํ•„๋“œ; ์ดˆ๊ณผํ•˜๋ฉด ์Šคํฌ๋ฆฝํŠธ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.
  • ์ ˆ์ฐจ๊ฐ€ ์ •์ƒ์ ์œผ๋กœ ์™„๋ฃŒ๋˜๋ฉด ๋Œ€๊ธฐ ์‹œ๊ฐ„์ด ์ ˆ์•ฝ๋ฉ๋‹ˆ๋‹ค. ์†Œ์œ ์ž๋ฅผ ์ทจ์†Œํ•˜๊ฑฐ๋‚˜ ๊ทธ์˜ ์ด๋ฆ„์œผ๋กœ Terminate์„ ์ž…๋ ฅํ•˜๋ฉด ๋Œ€๊ธฐ ์‹œ๊ฐ„์ด ์ œ๊ฑฐ๋ฉ๋‹ˆ๋‹ค. TerminateAll๋Š” ์ ˆ์ฐจ ์™„๋ฃŒ ํ›„ ๋‚จ์€ ๋‚ด์šฉ์„ ํฌํ•จํ•˜์—ฌ ๋ชจ๋“  ๋‚ด์šฉ์„ ์‚ญ์ œํ•ฉ๋‹ˆ๋‹ค. ์„ธ์ƒ์„ ๋ฐ”๊พธ๋ฉด ๋Œ€๊ธฐ์—ด์ด ์ง€์›Œ์ง‘๋‹ˆ๋‹ค. ๊ธฐ๋Œ€์น˜๋Š” ํ”„๋กœํ•„์— ์ €์žฅ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

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

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

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

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

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

UO.Print("Calling UO.GumpAutoCheckBox");
UO.GumpAutoCheckBox(33, 1);

1. ์ฆ‰์‹œ ์ฑ„์šฐ๊ธฐ - ์ง์ ‘ ์Šคํฌ๋ฆฝํŠธ

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

  • ์ฒซ ๋ฒˆ์งธ ๋งค๊ฐœ๋ณ€์ˆ˜ 33๋Š” ์›ํ•˜๋Š” ์š”์†Œ์˜ ์˜ˆ์‹œ ID์ž…๋‹ˆ๋‹ค. InfoGump์˜ ์‹ค์ œ ID๋กœ ๋ฐ”๊พธ์„ธ์š”. ๋‘ ๋ฒˆ์งธ๋Š” ์„ค์ •ํ•  ๊ฐ’์ž…๋‹ˆ๋‹ค. ์š”์†Œ๊ฐ€ ์—†์œผ๋ฉด ์ž‘์—…์€ ๋ณด๋ฅ˜ ์ƒํƒœ๋กœ ์œ ์ง€๋ฉ๋‹ˆ๋‹ค.
UO.GumpAutoCheckBox(33, 1);

2. ์—ด๊ธฐ ์ „ ์ฑ„์šฐ๊ธฐ - ์Šคํฌ๋ฆฝํŠธ ๊ธฐ๋Šฅ

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

  • 33๋Š” ์š”์†Œ์˜ ID์ด๊ณ , 100๋Š” ํ™•์ธ ButtonID์˜ ์˜ˆ์ด๋ฉฐ, 0x40001234๋Š” ์–‘์‹์„ ์—ฌ๋Š” ๊ฐœ์ฒด์˜ serial์ž…๋‹ˆ๋‹ค. ์„ธ ๊ฐ€์ง€ ๊ฐ’์„ ๋ชจ๋‘ ์ž์‹ ์˜ ๊ฐ’์œผ๋กœ ๋ฐ”๊พธ์‹ญ์‹œ์˜ค. ์ฐฝ์ด ๋‚˜์ค‘์— ๋„์ฐฉํ•œ ๊ฒฝ์šฐ์—๋„ ๋‹ต๋ณ€ ์ „์— ํ•„๋“œ๊ฐ€ ์ฑ„์›Œ์ง‘๋‹ˆ๋‹ค.
return  RunScenario();
 object? RunScenario()
{
    UO.GumpAutoCheckBox(33, 1);
    UO.WaitGump(100);
    UO.UseObject("0x40001234");
    return null;
}

3. ๋ณด๋ฅ˜ ์ค‘์ธ ๊ฐ’ ๋ฐ”๊พธ๊ธฐ - ์Šคํฌ๋ฆฝํŠธ ํด๋ž˜์Šค

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

  • ๋‘ ํ˜ธ์ถœ ๋ชจ๋‘ ID 33๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์š”์†Œ๊ฐ€ ์•„์ง ๋‚˜ํƒ€๋‚˜์ง€ ์•Š์€ ๊ฒฝ์šฐ ๋งˆ์ง€๋ง‰ ๊ฐ’์ด ์ ์šฉ๋ฉ๋‹ˆ๋‹ค. ์ฐฝ์ด ์ด๋ฏธ ์—ด๋ ค ์žˆ์œผ๋ฉด ๋‘ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ๋ชจ๋‘ ์ˆœ์„œ๋Œ€๋กœ ์ฆ‰์‹œ ์ˆ˜ํ–‰๋ฉ๋‹ˆ๋‹ค.
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.GumpAutoCheckBox(33, 1);
        UO.GumpAutoCheckBox(33, 0);
        return null;
    }
}

๋ช…๋ น ๊ตฌํ˜„

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

UO.GumpAutoCheckBox(checkBoxID, value) โ€” UO.GumpAutoCheckBox(Any,Any)

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

๊ฒฐ๊ณผ: void / Unit.

ํ˜ธ์ถœ ์‹œ:

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

case "gumpautocheckbox": QueueGumpControl("checkbox", Arg(0), Text(1)); return InjectionValue.Unit;

UO.GumpAutoRadiobutton

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

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

void UO.GumpAutoRadiobutton(object? radiobuttonID, object? value);

์ฒซ ๋ฒˆ์งธ ์ ํ•ฉํ•œ ์„œ๋ฒ„ ๊ฒ€ํ”„์—์„œ ์š”์†Œ์˜ ๊ฐ’์„ ํ•œ ๋ฒˆ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. ์š”์†Œ๊ฐ€ ์•„์ง ์กด์žฌํ•˜์ง€ ์•Š์œผ๋ฉด ๋Œ€๊ธฐ ์‹œ๊ฐ„์„ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.

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

  • radiobuttonID - int - ํ•ด๋‹น ์œ ํ˜• ์š”์†Œ์˜ ์ •ํ™•ํ•œ ID. ์ด๊ฒƒ์€ ์ธ๋ฑ์Šค๋„ ์•„๋‹ˆ๊ณ  GumpID๋„ ์•„๋‹ˆ๊ณ  serial ์ฐฝ์ด ์•„๋‹™๋‹ˆ๋‹ค. 0๋Š” ์ฒซ ๋ฒˆ์งธ ์š”์†Œ๋ฅผ ๋Œ€์ฒดํ•˜์ง€ ์•Š๋Š” ์ผ๋ฐ˜์ ์ธ ID์ž…๋‹ˆ๋‹ค.
  • value - int - 1 ํ™œ์„ฑํ™”, 0 ๋น„ํ™œ์„ฑํ™”. 0์ด ์•„๋‹Œ ์ˆซ์ž ๊ฐ’๋„ ํฌํ•จ๋ฉ๋‹ˆ๋‹ค. 0/1๋ฅผ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค. ๋ผ๋””์˜ค ๋ฒ„ํŠผ์„ ์„ ํƒํ•˜๋ฉด ํ•ด๋‹น ๊ทธ๋ฃน์˜ ์ธ์ ‘ํ•œ ๋ผ๋””์˜ค ๋ฒ„ํŠผ์ด ์„ ํƒ ์ทจ์†Œ๋ฉ๋‹ˆ๋‹ค.

๋ฐ˜ํ™˜๊ฐ’

void - ์•„๋ฌด๊ฒƒ๋„ ๋ฐ˜ํ™˜ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์„ฑ๊ณต๋„, ์ƒˆ ๊ฐ’๋„, ์„œ๋ฒ„ ํ™•์ธ๋„ ๋ฐ˜ํ™˜๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋™์ž‘

  • ๋จผ์ € ํ˜„์žฌ ์ธํ„ฐํŽ˜์ด์Šค ์ˆœ์„œ๋กœ ๊ธฐ์กด ์ฐฝ์„ ํ™•์ธํ•œ ๋‹ค์Œ ์ƒˆ๋กญ๊ฑฐ๋‚˜ ์—…๋ฐ์ดํŠธ๋œ ์„œ๋ฒ„ ๋ ˆ์ด์•„์›ƒ์„ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. ์œ ํ˜•๊ณผ ID์˜ ์ฒซ ๋ฒˆ์งธ ์ผ์น˜์—์„œ ํ•œ ๋ฒˆ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค. ํŠน์ • ์ฐฝ์˜ ๊ฒฝ์šฐ ์ƒ‰์ธ๊ณผ ํ•จ๊ป˜ NumGump*๋ฅผ ์‚ฌ์šฉํ•˜์„ธ์š”.
  • ๋ณด๋ฅ˜ ์ค‘์ธ ๋ชจ๋“  ํ•„๋“œ๋Š” ์ž๋™ ๋ฒ„ํŠผ ์‘๋‹ต ์ „์— ์ ์šฉ๋ฉ๋‹ˆ๋‹ค. ํ•˜๋‚˜์˜ ์Šคํฌ๋ฆฝํŠธ์—์„œ ๋™์ผํ•œ ์œ ํ˜•๊ณผ ID๋ฅผ ๋ฐ˜๋ณตํ•˜๋ฉด ์•„์ง ์‹คํ–‰๋˜์ง€ ์•Š์€ ๊ฐ’์„ ๋Œ€์ฒดํ•ฉ๋‹ˆ๋‹ค. ์ œํ•œ โ€” 1024 ๋ณด๋ฅ˜ ์ค‘์ธ ํด๋ผ์ด์–ธํŠธ ํ•„๋“œ; ์ดˆ๊ณผํ•˜๋ฉด ์Šคํฌ๋ฆฝํŠธ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.
  • ์ ˆ์ฐจ๊ฐ€ ์ •์ƒ์ ์œผ๋กœ ์™„๋ฃŒ๋˜๋ฉด ๋Œ€๊ธฐ ์‹œ๊ฐ„์ด ์ ˆ์•ฝ๋ฉ๋‹ˆ๋‹ค. ์†Œ์œ ์ž๋ฅผ ์ทจ์†Œํ•˜๊ฑฐ๋‚˜ ๊ทธ์˜ ์ด๋ฆ„์œผ๋กœ Terminate์„ ์ž…๋ ฅํ•˜๋ฉด ๋Œ€๊ธฐ ์‹œ๊ฐ„์ด ์ œ๊ฑฐ๋ฉ๋‹ˆ๋‹ค. TerminateAll๋Š” ์ ˆ์ฐจ ์™„๋ฃŒ ํ›„ ๋‚จ์€ ๋‚ด์šฉ์„ ํฌํ•จํ•˜์—ฌ ๋ชจ๋“  ๋‚ด์šฉ์„ ์‚ญ์ œํ•ฉ๋‹ˆ๋‹ค. ์„ธ์ƒ์„ ๋ฐ”๊พธ๋ฉด ๋Œ€๊ธฐ์—ด์ด ์ง€์›Œ์ง‘๋‹ˆ๋‹ค. ๊ธฐ๋Œ€์น˜๋Š” ํ”„๋กœํ•„์— ์ €์žฅ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

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

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

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

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

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

UO.Print("Calling UO.GumpAutoRadiobutton");
UO.GumpAutoRadiobutton(33, 1);

1. ์ฆ‰์‹œ ์ฑ„์šฐ๊ธฐ - ์ง์ ‘ ์Šคํฌ๋ฆฝํŠธ

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

  • ์ฒซ ๋ฒˆ์งธ ๋งค๊ฐœ๋ณ€์ˆ˜ 33๋Š” ์›ํ•˜๋Š” ์š”์†Œ์˜ ์˜ˆ์‹œ ID์ž…๋‹ˆ๋‹ค. InfoGump์˜ ์‹ค์ œ ID๋กœ ๋ฐ”๊พธ์„ธ์š”. ๋‘ ๋ฒˆ์งธ๋Š” ์„ค์ •ํ•  ๊ฐ’์ž…๋‹ˆ๋‹ค. ์š”์†Œ๊ฐ€ ์—†์œผ๋ฉด ์ž‘์—…์€ ๋ณด๋ฅ˜ ์ƒํƒœ๋กœ ์œ ์ง€๋ฉ๋‹ˆ๋‹ค.
UO.GumpAutoRadiobutton(33, 1);

2. ์—ด๊ธฐ ์ „ ์ฑ„์šฐ๊ธฐ - ์Šคํฌ๋ฆฝํŠธ ๊ธฐ๋Šฅ

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

  • 33๋Š” ์š”์†Œ์˜ ID์ด๊ณ , 100๋Š” ํ™•์ธ ButtonID์˜ ์˜ˆ์ด๋ฉฐ, 0x40001234๋Š” ์–‘์‹์„ ์—ฌ๋Š” ๊ฐœ์ฒด์˜ serial์ž…๋‹ˆ๋‹ค. ์„ธ ๊ฐ€์ง€ ๊ฐ’์„ ๋ชจ๋‘ ์ž์‹ ์˜ ๊ฐ’์œผ๋กœ ๋ฐ”๊พธ์‹ญ์‹œ์˜ค. ์ฐฝ์ด ๋‚˜์ค‘์— ๋„์ฐฉํ•œ ๊ฒฝ์šฐ์—๋„ ๋‹ต๋ณ€ ์ „์— ํ•„๋“œ๊ฐ€ ์ฑ„์›Œ์ง‘๋‹ˆ๋‹ค.
return  RunScenario();
 object? RunScenario()
{
    UO.GumpAutoRadiobutton(33, 1);
    UO.WaitGump(100);
    UO.UseObject("0x40001234");
    return null;
}

3. ๋ณด๋ฅ˜ ์ค‘์ธ ๊ฐ’ ๋ฐ”๊พธ๊ธฐ - ์Šคํฌ๋ฆฝํŠธ ํด๋ž˜์Šค

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

  • ๋‘ ํ˜ธ์ถœ ๋ชจ๋‘ ID 33๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์š”์†Œ๊ฐ€ ์•„์ง ๋‚˜ํƒ€๋‚˜์ง€ ์•Š์€ ๊ฒฝ์šฐ ๋งˆ์ง€๋ง‰ ๊ฐ’์ด ์ ์šฉ๋ฉ๋‹ˆ๋‹ค. ์ฐฝ์ด ์ด๋ฏธ ์—ด๋ ค ์žˆ์œผ๋ฉด ๋‘ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ๋ชจ๋‘ ์ˆœ์„œ๋Œ€๋กœ ์ฆ‰์‹œ ์ˆ˜ํ–‰๋ฉ๋‹ˆ๋‹ค.
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.GumpAutoRadiobutton(33, 1);
        UO.GumpAutoRadiobutton(33, 0);
        return null;
    }
}

๋ช…๋ น ๊ตฌํ˜„

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

UO.GumpAutoRadiobutton(radiobuttonID, value) โ€” UO.GumpAutoRadiobutton(Any,Any)

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

๊ฒฐ๊ณผ: void / Unit.

ํ˜ธ์ถœ ์‹œ:

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

case "gumpautoradiobutton": QueueGumpControl("radio", Arg(0), Text(1)); return InjectionValue.Unit;

UO.GumpAutoTextEntry

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

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

void UO.GumpAutoTextEntry(object? textEntryID, object? value);

์ฒซ ๋ฒˆ์งธ ์ ํ•ฉํ•œ ์„œ๋ฒ„ ๊ฒ€ํ”„์—์„œ ์š”์†Œ์˜ ๊ฐ’์„ ํ•œ ๋ฒˆ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. ์š”์†Œ๊ฐ€ ์•„์ง ์กด์žฌํ•˜์ง€ ์•Š์œผ๋ฉด ๋Œ€๊ธฐ ์‹œ๊ฐ„์„ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.

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

  • textEntryID - int - ํ•ด๋‹น ์œ ํ˜• ์š”์†Œ์˜ ์ •ํ™•ํ•œ ID. ์ด๊ฒƒ์€ ์ธ๋ฑ์Šค๋„ ์•„๋‹ˆ๊ณ  GumpID๋„ ์•„๋‹ˆ๊ณ  serial ์ฐฝ์ด ์•„๋‹™๋‹ˆ๋‹ค. 0๋Š” ์ฒซ ๋ฒˆ์งธ ์š”์†Œ๋ฅผ ๋Œ€์ฒดํ•˜์ง€ ์•Š๋Š” ์ผ๋ฐ˜์ ์ธ ID์ž…๋‹ˆ๋‹ค.
  • value - string - ์ง€์šฐ๊ธฐ ์œ„ํ•œ ๋นˆ ์ค„์„ ํฌํ•จํ•œ ํ•„๋“œ ํ…์ŠคํŠธ์ž…๋‹ˆ๋‹ค. ํ•„๋“œ ์ž์ฒด์˜ ๊ธธ์ด ๋ฐ ํ—ˆ์šฉ๋˜๋Š” ๋ฌธ์ž์— ๋Œ€ํ•œ ์ œํ•œ์€ ์œ ์ง€๋ฉ๋‹ˆ๋‹ค.

๋ฐ˜ํ™˜๊ฐ’

void - ์•„๋ฌด๊ฒƒ๋„ ๋ฐ˜ํ™˜ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์„ฑ๊ณต๋„, ์ƒˆ ๊ฐ’๋„, ์„œ๋ฒ„ ํ™•์ธ๋„ ๋ฐ˜ํ™˜๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋™์ž‘

  • ๋จผ์ € ํ˜„์žฌ ์ธํ„ฐํŽ˜์ด์Šค ์ˆœ์„œ๋กœ ๊ธฐ์กด ์ฐฝ์„ ํ™•์ธํ•œ ๋‹ค์Œ ์ƒˆ๋กญ๊ฑฐ๋‚˜ ์—…๋ฐ์ดํŠธ๋œ ์„œ๋ฒ„ ๋ ˆ์ด์•„์›ƒ์„ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. ์œ ํ˜•๊ณผ ID์˜ ์ฒซ ๋ฒˆ์งธ ์ผ์น˜์—์„œ ํ•œ ๋ฒˆ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค. ํŠน์ • ์ฐฝ์˜ ๊ฒฝ์šฐ ์ƒ‰์ธ๊ณผ ํ•จ๊ป˜ NumGump*๋ฅผ ์‚ฌ์šฉํ•˜์„ธ์š”.
  • ๋ณด๋ฅ˜ ์ค‘์ธ ๋ชจ๋“  ํ•„๋“œ๋Š” ์ž๋™ ๋ฒ„ํŠผ ์‘๋‹ต ์ „์— ์ ์šฉ๋ฉ๋‹ˆ๋‹ค. ํ•˜๋‚˜์˜ ์Šคํฌ๋ฆฝํŠธ์—์„œ ๋™์ผํ•œ ์œ ํ˜•๊ณผ ID๋ฅผ ๋ฐ˜๋ณตํ•˜๋ฉด ์•„์ง ์‹คํ–‰๋˜์ง€ ์•Š์€ ๊ฐ’์„ ๋Œ€์ฒดํ•ฉ๋‹ˆ๋‹ค. ์ œํ•œ โ€” 1024 ๋ณด๋ฅ˜ ์ค‘์ธ ํด๋ผ์ด์–ธํŠธ ํ•„๋“œ; ์ดˆ๊ณผํ•˜๋ฉด ์Šคํฌ๋ฆฝํŠธ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.
  • ์ ˆ์ฐจ๊ฐ€ ์ •์ƒ์ ์œผ๋กœ ์™„๋ฃŒ๋˜๋ฉด ๋Œ€๊ธฐ ์‹œ๊ฐ„์ด ์ ˆ์•ฝ๋ฉ๋‹ˆ๋‹ค. ์†Œ์œ ์ž๋ฅผ ์ทจ์†Œํ•˜๊ฑฐ๋‚˜ ๊ทธ์˜ ์ด๋ฆ„์œผ๋กœ Terminate์„ ์ž…๋ ฅํ•˜๋ฉด ๋Œ€๊ธฐ ์‹œ๊ฐ„์ด ์ œ๊ฑฐ๋ฉ๋‹ˆ๋‹ค. TerminateAll๋Š” ์ ˆ์ฐจ ์™„๋ฃŒ ํ›„ ๋‚จ์€ ๋‚ด์šฉ์„ ํฌํ•จํ•˜์—ฌ ๋ชจ๋“  ๋‚ด์šฉ์„ ์‚ญ์ œํ•ฉ๋‹ˆ๋‹ค. ์„ธ์ƒ์„ ๋ฐ”๊พธ๋ฉด ๋Œ€๊ธฐ์—ด์ด ์ง€์›Œ์ง‘๋‹ˆ๋‹ค. ๊ธฐ๋Œ€์น˜๋Š” ํ”„๋กœํ•„์— ์ €์žฅ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • ํ•„๋“œ๋กœ ์ œํ•œ๋œ ํ…์ŠคํŠธ๋Š” ๋‹จ์ถ•๋˜๊ฑฐ๋‚˜ ๊ฑฐ๋ถ€๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฐœ๊ฒฌ๋œ ์š”์†Œ๋Š” ์—ฌ์ „ํžˆ ์ผํšŒ์„ฑ ์ž‘์—…์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ด ๋ช…๋ น์€ ๋ฒ„ํŠผ ์‘๋‹ต์„ ๋ณด๋‚ด์ง€ ์•Š์œผ๋ฉฐ ์„œ๋ฒ„๋ฅผ ๊ธฐ๋‹ค๋ฆฌ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ํ™•์ธํ•˜๋ ค๋ฉด GetGumpInfo/NumGumpTextEntry๋ฅผ ์‚ฌ์šฉํ•˜์„ธ์š”.

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

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

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

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

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

UO.Print("Calling UO.GumpAutoTextEntry");
UO.GumpAutoTextEntry(33, "500");

1. ์ฆ‰์‹œ ์ฑ„์šฐ๊ธฐ - ์ง์ ‘ ์Šคํฌ๋ฆฝํŠธ

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

  • ์ฒซ ๋ฒˆ์งธ ๋งค๊ฐœ๋ณ€์ˆ˜ 33๋Š” ์›ํ•˜๋Š” ์š”์†Œ์˜ ์˜ˆ์‹œ ID์ž…๋‹ˆ๋‹ค. InfoGump์˜ ์‹ค์ œ ID๋กœ ๋ฐ”๊พธ์„ธ์š”. ๋‘ ๋ฒˆ์งธ๋Š” ์„ค์ •ํ•  ๊ฐ’์ž…๋‹ˆ๋‹ค. ์š”์†Œ๊ฐ€ ์—†์œผ๋ฉด ์ž‘์—…์€ ๋ณด๋ฅ˜ ์ƒํƒœ๋กœ ์œ ์ง€๋ฉ๋‹ˆ๋‹ค.
UO.GumpAutoTextEntry(33, "500");

2. ์—ด๊ธฐ ์ „ ์ฑ„์šฐ๊ธฐ - ์Šคํฌ๋ฆฝํŠธ ๊ธฐ๋Šฅ

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

  • 33๋Š” ์š”์†Œ์˜ ID์ด๊ณ , 100๋Š” ํ™•์ธ ButtonID์˜ ์˜ˆ์ด๋ฉฐ, 0x40001234๋Š” ์–‘์‹์„ ์—ฌ๋Š” ๊ฐœ์ฒด์˜ serial์ž…๋‹ˆ๋‹ค. ์„ธ ๊ฐ€์ง€ ๊ฐ’์„ ๋ชจ๋‘ ์ž์‹ ์˜ ๊ฐ’์œผ๋กœ ๋ฐ”๊พธ์‹ญ์‹œ์˜ค. ์ฐฝ์ด ๋‚˜์ค‘์— ๋„์ฐฉํ•œ ๊ฒฝ์šฐ์—๋„ ๋‹ต๋ณ€ ์ „์— ํ•„๋“œ๊ฐ€ ์ฑ„์›Œ์ง‘๋‹ˆ๋‹ค.
return  RunScenario();
 object? RunScenario()
{
    UO.GumpAutoTextEntry(33, "500");
    UO.WaitGump(100);
    UO.UseObject("0x40001234");
    return null;
}

3. ๋ณด๋ฅ˜ ์ค‘์ธ ๊ฐ’ ๋ฐ”๊พธ๊ธฐ - ์Šคํฌ๋ฆฝํŠธ ํด๋ž˜์Šค

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

  • ๋‘ ํ˜ธ์ถœ ๋ชจ๋‘ ID 33๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์š”์†Œ๊ฐ€ ์•„์ง ๋‚˜ํƒ€๋‚˜์ง€ ์•Š์€ ๊ฒฝ์šฐ ๋งˆ์ง€๋ง‰ ๊ฐ’์ด ์ ์šฉ๋ฉ๋‹ˆ๋‹ค. ์ฐฝ์ด ์ด๋ฏธ ์—ด๋ ค ์žˆ์œผ๋ฉด ๋‘ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ๋ชจ๋‘ ์ˆœ์„œ๋Œ€๋กœ ์ฆ‰์‹œ ์ˆ˜ํ–‰๋ฉ๋‹ˆ๋‹ค.
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.GumpAutoTextEntry(33, "500");
        UO.GumpAutoTextEntry(33, "");
        return null;
    }
}

๋ช…๋ น ๊ตฌํ˜„

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

UO.GumpAutoTextEntry(textEntryID, value) โ€” UO.GumpAutoTextEntry(Any,Any)

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

๊ฒฐ๊ณผ: void / Unit.

ํ˜ธ์ถœ ์‹œ:

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

case "gumpautotextentry": QueueGumpControl("textentry", Arg(0), Text(1)); return InjectionValue.Unit;

UO.GumpExists

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

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

int UO.GumpExists(object? id);
int UO.GumpExists(object? firstId, object? secondId);

ํ•˜๋‚˜์˜ ์„ ํƒ๊ธฐ ๋˜๋Š” ์ •ํ™•ํ•œ ์Œ serial/GumpID๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์„œ๋ฒ„ Gump๊ฐ€ ์žˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

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

  • id โ€” ๋‹จ์ผ ์ธ์ˆ˜ ํ˜•์‹: ์ˆซ์ž serial, GumpID ๋˜๋Š” 0๊ฐ€ ํฌํ•จ๋œ ์ธ๋ฑ์Šค. -1๋Š” ์—ฌ๊ธฐ์„œ ๋งˆ์ง€๋ง‰ ๊ฒ€ํ”„๋ฅผ ์„ ํƒํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • firstId โ€” 2๊ฐœ ์ธ์ˆ˜ ํ˜•์‹: ์ˆซ์ž 32๋น„ํŠธ serial(์ตœ์ƒ์œ„ ๋น„ํŠธ๊ฐ€ ์žˆ๋Š” ์Œ์ˆ˜ int ํฌํ•จ).
  • secondId โ€” 2์ธ์ˆ˜ ํ˜•์‹: ์ •ํ™•ํ•œ 32๋น„ํŠธ GumpID. 0๋Š” ์™€์ผ๋“œ์นด๋“œ๊ฐ€ ์•„๋‹Œ ์ •ํ™•ํ•œ ์ˆซ์ž์ž…๋‹ˆ๋‹ค. -1๋งŒ serial/GumpID/index๋กœ firstId์˜ ๋‹จ์ผ ์ธ์ˆ˜ ํ™•์ธ์œผ๋กœ ๋‹ค์‹œ ์ „ํ™˜๋ฉ๋‹ˆ๋‹ค.

๋ฐ˜ํ™˜๊ฐ’

int - 1, ํ•ด๋‹น ์ฐฝ์ด ํ˜„์žฌ ์กด์žฌํ•˜๋Š” ๊ฒฝ์šฐ; 0 ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด. ์ƒ‰์ธ, serial ๋˜๋Š” ์ผ์น˜ ํ•ญ๋ชฉ ์ˆ˜๋ฅผ ๋ฐ˜ํ™˜ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋™์ž‘

  • ํ™œ์„ฑ ์„œ๋ฒ„ ๊ฒ€ํ”„์™€ ํ•จ๊ป˜ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ๋ฐฐ๋‚ญ, ์ง€๋„, ์„ค์ • ๋ฐ ๊ธฐํƒ€ ๋กœ์ปฌ ์ฐฝ์€ ์ด ๋ชฉ๋ก์— ํฌํ•จ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ํ•œ ๋ฒˆ์˜ ํ˜ธ์ถœ์€ ๊ฒŒ์ž„ ์Šค๋ ˆ๋“œ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์Šต๋‹ˆ๋‹ค. ํ†ตํ™”๋งˆ๋‹ค ๋ชฉ๋ก์˜ ์ƒํƒœ๊ฐ€ ๋‹ค๋ฅผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์ˆ˜ํ‘œ๋Š” ์ฐฝ์„ ์„ ํƒํ•˜์ง€ ์•Š์œผ๋ฉฐ ์˜ˆ์•ฝํ•˜์ง€๋„ ์•Š์Šต๋‹ˆ๋‹ค. ID ์Œ์ด ์ „์ฒด์ ์œผ๋กœ ํ™•์ธ๋ฉ๋‹ˆ๋‹ค. ์ตœ์ƒ์œ„ ๋น„ํŠธ๊ฐ€ ์žˆ๋Š” ID์€ ํ•„ํ„ฐ๋ฅผ ๋น„ํ™œ์„ฑํ™”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

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

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

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

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

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

var result = UO.GumpExists(0x87654321);
UO.Print("GumpExists: " + Convert.ToString(result));

1. ์•Œ๋ ค์ง„ ID ํ™•์ธ - ์ง์ ‘ ์Šคํฌ๋ฆฝํŠธ

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

  • 0x87654321 โ€” ์›ํ•˜๋Š” GumpID ๋˜๋Š” serial. ํ•˜๋‚˜์˜ ์ธ์ˆ˜๋Š” ์ด๋Ÿฌํ•œ ๊ณต๋ฐฑ ID์„ ๊ตฌ๋ณ„ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
var exists = UO.GumpExists(0x87654321);
UO.Print(Convert.ToString(exists));

2. ์ •ํ™•ํ•œ ์Œ ํ™•์ธ - ์Šคํฌ๋ฆฝํŠธ ๊ธฐ๋Šฅ

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

  • ์ฒซ ๋ฒˆ์งธ ์ˆซ์ž๋Š” serial์ด๊ณ  ๋‘ ๋ฒˆ์งธ ์ˆซ์ž๋Š” GumpID์ž…๋‹ˆ๋‹ค. ๋‘˜ ๋‹ค ๋ถ€ํ˜ธ ์žˆ๋Š” int์—์„œ๋Š” ์Œ์ˆ˜์ด์ง€๋งŒ ๋น„๊ต์—์„œ๋Š” ๋ชจ๋“  32 ๋น„ํŠธ๊ฐ€ ์œ ์ง€๋ฉ๋‹ˆ๋‹ค.
return  RunScenario();
 object? RunScenario()
{
    var exists = UO.GumpExists(0x87654321, 0x98765432);
    if (Truth(exists))
    {
        UO.Print("Matching pair exists");
    }

    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. ์ €์žฅ๋œ ์‹๋ณ„์ž ํ™•์ธ - ์Šคํฌ๋ฆฝํŠธ ํด๋ž˜์Šค

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

  • info[0]/info[1]๋Š” ๋™์ผํ•œ ์ด๋ฏธ์ง€์— ์†ํ•ฉ๋‹ˆ๋‹ค. ์กด์žฌ=1๋Š” ํ˜„์žฌ ์Œ์ด ์กด์žฌํ•จ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ๋™์ผํ•œ ์Œ์œผ๋กœ ๋‹ค์‹œ ์—ด๋ฆฐ ์ฐฝ์€ ์ด์ „ ์ฐฝ๊ณผ ๋‹ค๋ฅด์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
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 info = UO.GetGumpInfo(0);
        if (Truth(ArrayLength(info) == 5))
        {
            var exists = UO.GumpExists(info[0], info[1]);
            UO.Print(Convert.ToString(exists));
        }

        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;
}

๋ช…๋ น ๊ตฌํ˜„

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

UO.GumpExists(id) โ€” UO.GumpExists(Any)

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

๊ฒฐ๊ณผ: int / Integer.

ํ˜ธ์ถœ ์‹œ:

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

public int GumpExists(InjectionValue id) => bridge.GumpExists(NumberConversions.ToInt(id), -1);

UO.GumpExists(firstId, secondId) โ€” UO.GumpExists(Any,Any)

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

๊ฒฐ๊ณผ: int / Integer.

ํ˜ธ์ถœ ์‹œ:

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

public int GumpExists(InjectionValue firstId, InjectionValue secondId)

            => bridge.GumpExists(NumberConversions.ToInt(firstId), NumberConversions.ToInt(secondId));

UO.GumpObject

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

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

void UO.GumpObject(object? gumpId);

ํ›„์† ํ˜ธ์ถœ์„ ์œ„ํ•ด ๊ธฐ์กด ์„œ๋ฒ„ Gump๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.

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

  • gumpId - int: LocalSerial ๋˜๋Š” ServerSerial๋ฅผ ๋จผ์ € ์ผ์น˜์‹œํ‚จ ๋‹ค์Œ ํ˜„์žฌ ๊ฒ€ํ”„ ๋ชฉ๋ก์—์„œ ์ธ๋ฑ์Šค 0์„ ์ฐพ์Šต๋‹ˆ๋‹ค. ID ๋ฒ„ํŠผ์ด ์•„๋‹™๋‹ˆ๋‹ค.

๋ฐ˜ํ™˜๊ฐ’

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

๋™์ž‘

  • Bridge.SelectGump๋Š” _selectedServerGump๋ฅผ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค. serial์ด ์ผ์น˜ํ•˜์ง€ ์•Š์œผ๋ฉด 0..count-1 ์ธ๋ฑ์Šค๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ฐพ์„ ์ˆ˜ ์—†์Œ - ์„ ํƒํ•œ ๊ฒ€ํ”„๊ฐ€ null๊ฐ€ ๋˜๊ณ  ๋ฉ”์‹œ์ง€๊ฐ€ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.
  • Gump๊ฐ€ ์—ด๋ฆฌ์ง€ ์•Š๊ณ  ์„œ๋ฒ„์— ์‘๋‹ต์ด ์ „์†ก๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ฐฝ์ด ์—ด๋ฆฌ๊ฑฐ๋‚˜ ๋‹ซํž ๋•Œ ์ธ๋ฑ์Šค๊ฐ€ ๋ณ€๊ฒฝ๋ฉ๋‹ˆ๋‹ค. ์•ˆ์ •์ ์ธ ์„ ํƒ์„ ์œ„ํ•ด ํ˜„์žฌ serial/id๋ฅผ ์‚ฌ์šฉํ•˜์„ธ์š”.

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

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

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

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

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

UO.Print("Calling UO.GumpObject");
UO.GumpObject(0);

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

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

  • ํ›„์† ํ˜ธ์ถœ์„ ์œ„ํ•ด ๊ธฐ์กด ์„œ๋ฒ„ Gump๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.
if (Truth(UO.GumpExists(0)))
{
    UO.GumpObject(0);
}

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

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

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

  • Bridge.SelectGump๋Š” _selectedServerGump๋ฅผ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค. serial์ด ์ผ์น˜ํ•˜์ง€ ์•Š์œผ๋ฉด 0..count-1 ์ธ๋ฑ์Šค๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ฐพ์„ ์ˆ˜ ์—†์Œ - ์„ ํƒํ•œ ๊ฒ€ํ”„๊ฐ€ null๊ฐ€ ๋˜๊ณ  ๋ฉ”์‹œ์ง€๊ฐ€ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.
return  RunScenario();
 object? RunScenario()
{
    if (Truth(UO.GetGumpsCount() > 0))
    {
        var serial = UO.GetGumpSerial(0);
        UO.GumpObject(serial);
    }

    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. ์ „์ฒด ๋„์šฐ๋ฏธ ๊ธฐ๋Šฅ - ์Šคํฌ๋ฆฝํŠธ ํด๋ž˜์Šค

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

  • Gump๊ฐ€ ์—ด๋ฆฌ์ง€ ์•Š๊ณ  ์„œ๋ฒ„์— ์‘๋‹ต์ด ์ „์†ก๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ฐฝ์ด ์—ด๋ฆฌ๊ฑฐ๋‚˜ ๋‹ซํž ๋•Œ ์ธ๋ฑ์Šค๊ฐ€ ๋ณ€๊ฒฝ๋ฉ๋‹ˆ๋‹ค. ์•ˆ์ •์ ์ธ ์„ ํƒ์„ ์œ„ํ•ด ํ˜„์žฌ serial/id๋ฅผ ์‚ฌ์šฉํ•˜์„ธ์š”.
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()
    {
        if (Truth(UO.GetGumpsCount() > 0))
        {
            UO.GumpObject(0);
            UO.Print(UO.LastGump("gumpid"));
        }

        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.GumpObject(gumpId) โ€” UO.GumpObject(Any)

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

๊ฒฐ๊ณผ: void / Unit.

ํ˜ธ์ถœ ์‹œ:

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

case "gumpobject": bridge.SelectGump(Arg(0)); break;

UO.IsGump

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

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

int UO.IsGump();

ํ™œ์„ฑ ์„œ๋ฒ„ ๊ฒ€ํ”„๊ฐ€ ํ•˜๋‚˜ ์ด์ƒ ์žˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

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

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

๋ฐ˜ํ™˜๊ฐ’

int โ€” 1, ๋ชฉ๋ก์ด ๋น„์–ด ์žˆ์ง€ ์•Š์€ ๊ฒฝ์šฐ; 0 ๋น„์–ด ์žˆ๋Š” ๊ฒฝ์šฐ. ์ด๋Š” ์ฐฝ ์ˆ˜๊ฐ€ ์•„๋‹ˆ๋ผ ๊ฐ€์šฉ์„ฑ์„ ๋‚˜ํƒ€๋‚ด๋Š” ํ‘œ์‹œ์ž…๋‹ˆ๋‹ค.

๋™์ž‘

  • ํ™œ์„ฑ ์„œ๋ฒ„ ๊ฒ€ํ”„์™€ ํ•จ๊ป˜ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ๋ฐฐ๋‚ญ, ์ง€๋„, ์„ค์ • ๋ฐ ๊ธฐํƒ€ ๋กœ์ปฌ ์ฐฝ์€ ์ด ๋ชฉ๋ก์— ํฌํ•จ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ํ•œ ๋ฒˆ์˜ ํ˜ธ์ถœ์€ ๊ฒŒ์ž„ ์Šค๋ ˆ๋“œ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์Šต๋‹ˆ๋‹ค. ํ†ตํ™”๋งˆ๋‹ค ๋ชฉ๋ก์˜ ์ƒํƒœ๊ฐ€ ๋‹ค๋ฅผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

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

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

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

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

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

var result = UO.IsGump();
UO.Print("IsGump: " + Convert.ToString(result));

1. ์กฐ๊ฑด๋ถ€ ์ฝ๊ธฐ - ์ง์ ‘ ์Šคํฌ๋ฆฝํŠธ

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

  • ๋…ผ์Ÿ์ด ์—†์Šต๋‹ˆ๋‹ค. GetGumpInfo(0)๋Š” ์ฒซ ๋ฒˆ์งธ ์š”์†Œ๋ฅผ ์ฝ๊ณ  ์ฐฝ์ด ์ด๋ฏธ ๋‹ซํ˜€ ์žˆ์œผ๋ฉด ๋นˆ ๋ฐฐ์—ด์„ ๋ฐ˜ํ™˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
if (Truth(UO.IsGump()))
{
    var info = UO.GetGumpInfo(0);
    UO.Print(ArrayLength(info));
}

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;

2. ์–‘๊ณผ ์กด์žฌ๋ฅผ ๊ตฌ๋ณ„ - ์Šคํฌ๋ฆฝํŠธ ๊ธฐ๋Šฅ

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

  • ์„ธ ๊ฐœ์˜ ์•ˆ์ •์ ์ธ ์ฐฝ์ด ์žˆ๋Š” ๊ฒฝ์šฐ=1, ๊ฐœ์ˆ˜=3.
return  RunScenario();
 object? RunScenario()
{
    var present = UO.IsGump();
    var count = UO.GetGumpsCount();
    UO.Print(Convert.ToString(present) + "/" + Convert.ToString(count));
    return null;
}

3. ์ œํ•œ๋œ ๋Œ€๊ธฐ - ์Šคํฌ๋ฆฝํŠธ ํด๋ž˜์Šค

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

  • ์•ฝ 3000ms ์ด์ƒ ๊ธฐ๋‹ค๋ฆฌ์ง€ ๋ง๊ณ  50ms๋งˆ๋‹ค ํ™•์ธํ•˜์„ธ์š”. ์ตœ์ข… ํ˜„์žฌ๋Š” ๋Œ€๊ธฐ ํ›„์˜ ์ƒํƒœ๋ฅผ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.
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 started = Now();
        while (Truth(UO.IsGump() == 0) && Truth(Now() - started < 3000))
        {
            await Delay(50);
        }

        var present = UO.IsGump();
        return null;
    }

    Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));
    bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
    private int Now() => global::ClassicUO.CSharp.CSharpScriptContext.Current.Now();
}

๋ช…๋ น ๊ตฌํ˜„

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

UO.IsGump() โ€” UO.IsGump()

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

๊ฒฐ๊ณผ: int / Integer.

ํ˜ธ์ถœ ์‹œ:

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

case "isgump": return new InjectionValue(bridge.GetGumpCount() > 0 ? 1 : 0);

UO.IsGumpCanBeClosed

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

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

int UO.IsGumpCanBeClosed(object? gumpIndex);

์„œ๋ฒ„ ๊ฒ€ํ”„์˜ ๋กœ์ปฌ ๋งˆ์šฐ์Šค ์˜ค๋ฅธ์ชฝ ๋ฒ„ํŠผ ํด๋ฆญ ๋‹ซ๊ธฐ๊ฐ€ ํ—ˆ์šฉ๋˜๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

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

  • gumpIndex โ€” ํ•„์ˆ˜ int โ€” 0๋ถ€ํ„ฐ GetGumpsCount()-1๊นŒ์ง€ ํ™œ์„ฑ ์„œ๋ฒ„ ๊ฒ€ํ”„์˜ ์ธ๋ฑ์Šค์ž…๋‹ˆ๋‹ค. GumpID/serial๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค. ๋ชฉ๋ก ์™ธ๋ถ€์˜ ์Œ์ˆ˜์™€ ์ธ๋ฑ์Šค๋Š” ์œ ํšจํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ฐฝ์„ ์—ด๊ณ  ๋‹ซ๊ณ  ์žฌ์ •๋ ฌํ•˜๋ฉด ์ƒ‰์ธ์ด ๋ณ€๊ฒฝ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ–‰๋™ํ•˜๊ธฐ ์ „์— GetGumpID/GetGumpSerial๋ฅผ ํ™•์ธํ•˜์„ธ์š”.

๋ฐ˜ํ™˜๊ฐ’

int โ€” 1, ์ฐฝ์ด ์กด์žฌํ•˜๊ณ  CanCloseWithRightClick๊ฐ€ ํ™œ์„ฑํ™”๋œ ๊ฒฝ์šฐ; ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด 0. ์ด๋Š” ๋‹ซ์•˜๊ฑฐ๋‚˜ ์ทจ์†Œ ๋ฒ„ํŠผ์ด ์žˆ์–ด์„œ ๋ฐœ์ƒํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹™๋‹ˆ๋‹ค.

๋™์ž‘

  • ํ™œ์„ฑ ์„œ๋ฒ„ ๊ฒ€ํ”„์™€ ํ•จ๊ป˜ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ๋ฐฐ๋‚ญ, ์ง€๋„, ์„ค์ • ๋ฐ ๊ธฐํƒ€ ๋กœ์ปฌ ์ฐฝ์€ ์ด ๋ชฉ๋ก์— ํฌํ•จ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ํ•œ ๋ฒˆ์˜ ํ˜ธ์ถœ์€ ๊ฒŒ์ž„ ์Šค๋ ˆ๋“œ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์Šต๋‹ˆ๋‹ค. ํ†ตํ™”๋งˆ๋‹ค ๋ชฉ๋ก์˜ ์ƒํƒœ๊ฐ€ ๋‹ค๋ฅผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • NoClose๋Š” CloseSimpleGump์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค. ButtonID๋ฅผ ์„œ๋ฒ„์— ๋ณด๋‚ด๋Š” ๊ธฐ๋Šฅ์€ ๋ณ„๋„์˜ ์ž‘์—…์ž…๋‹ˆ๋‹ค.

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

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

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

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

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

var result = UO.IsGumpCanBeClosed(0);
UO.Print("IsGumpCanBeClosed: " + Convert.ToString(result));

1. ์กฐ๊ฑด๋ถ€ ๋‹ซ๊ธฐ - ์ง์ ‘ ์Šคํฌ๋ฆฝํŠธ

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

  • 0 โ€” ์ฐฝ ์ƒ‰์ธ. ๊ฒ€์ฆ๊ณผ ์ข…๊ฒฐ์€ ์„œ๋กœ ๋‹ค๋ฅธ ๊ณผ์ œ์ž…๋‹ˆ๋‹ค. ์ธ๋ฑ์Šค๋Š” ๊ทธ๋“ค ์‚ฌ์ด์—์„œ ๋ณ€๊ฒฝ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
if (Truth(UO.IsGumpCanBeClosed(0)))
{
    UO.CloseSimpleGump(0);
}

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

2. ๋‹ซ๊ธฐ ํ‘œ์‹œ ๋น„ํ™œ์„ฑํ™” - ์Šคํฌ๋ฆฝํŠธ ๊ธฐ๋Šฅ

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

  • ๊ธฐ์กด ์ฐฝ์—์„œ closable=0๋Š” ์ฐฝ์ด ์—†๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ์ฐฝ์„ ๋‹ซ์„ ์ˆ˜ ์—†๋‹ค๋Š” ์˜๋ฏธ์ž…๋‹ˆ๋‹ค.
return  RunScenario();
 object? RunScenario()
{
    if (Truth(UO.GetGumpsCount() > 0))
    {
        var closable = UO.IsGumpCanBeClosed(0);
        UO.Print(Convert.ToString(closable));
    }

    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. ์ž˜๋ชป๋œ ์ธ๋ฑ์Šค - ์Šคํฌ๋ฆฝํŠธ ํด๋ž˜์Šค

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

  • -1๋Š” ์ด ์ธ๋ฑ์Šค ๋ช…๋ น์— ์œ ํšจํ•˜์ง€ ์•Š์œผ๋ฉฐ 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 result = UO.IsGumpCanBeClosed(-1);
        UO.Print(Convert.ToString(result));
        return null;
    }
}

๋ช…๋ น ๊ตฌํ˜„

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

UO.IsGumpCanBeClosed(gumpIndex) โ€” UO.IsGumpCanBeClosed(Any)

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

๊ฒฐ๊ณผ: int / Integer.

ํ˜ธ์ถœ ์‹œ:

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

case "isgumpcanbeclosed": return new InjectionValue(bridge.IsGumpCanBeClosed(Arg(0)));

UO.LastGump

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

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

dynamic UO.LastGump(object? identifier);
dynamic UO.LastGump(object? identifier, object? key);

์„ ํƒํ•œ ์„œ๋ฒ„ Gump์˜ ํ•œ ํ•„๋“œ๋ฅผ ์ฝ์Šต๋‹ˆ๋‹ค. ์ด ์Šคํฌ๋ฆฝํŠธ์— ์˜ํ•ด ์„ ํƒ๋œ ์ฐฝ์ด๋‚˜ ํ˜„์žฌ ๋ชฉ๋ก์˜ ๋งˆ์ง€๋ง‰ ์š”์†Œ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

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

  • identifier - string ๋Œ€์†Œ๋ฌธ์ž๋ฅผ ๊ตฌ๋ถ„ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ง€์›๋˜๋Š” ๋ชจ๋“  ๊ฐ’๊ณผ ๊ฒฐ๊ณผ ์œ ํ˜•์€ ๋ฐ˜ํ’ˆ ์„น์…˜์— ๋‚˜์—ด๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ์•Œ ์ˆ˜ ์—†๋Š” ์ด๋ฆ„์€ ๋นˆ ๋ฌธ์ž์—ด์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
  • key - ์„ ํƒ ์‚ฌํ•ญ int, ๊ธฐ๋ณธ๊ฐ’ - 1. ๋ฒ„ํŠผ/ํ…์ŠคํŠธ/object/๋ช…๋ น์˜ ๊ฒฝ์šฐ 0๋กœ ์ƒ‰์ธ์„ ์ƒ์„ฑํ•˜์„ธ์š”. ์ด๊ฒƒ์€ ID ์ œ์–ด๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค. ์Œ์ˆ˜ ์ธ๋ฑ์Šค์™€ ๋ฒ”์œ„๋ฅผ ๋ฒ—์–ด๋‚˜๋ฉด ๋ฒ„ํŠผ์˜ ๊ฒฝ์šฐ 0์ด ๋˜๊ณ  ํ…์ŠคํŠธ ํ•„๋“œ์˜ ๊ฒฝ์šฐ ๋นˆ ๋ฌธ์ž์—ด์ด ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ์‹๋ณ„์ž๋Š” ํ‚ค๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋ฐ˜ํ™˜๊ฐ’

๊ฒฐ๊ณผ ์œ ํ˜•์€ ์‹๋ณ„์ž์— ๋”ฐ๋ผ ๋‹ค๋ฆ…๋‹ˆ๋‹ค. int: Buttonlen โ€” ์ผ๋ฐ˜ ๋ฒ„ํŠผ ์ˆ˜; ๋ฒ„ํŠผ โ€” ์ธ๋ฑ์Šค ํ‚ค๋ณ„ ButtonID์ž…๋‹ˆ๋‹ค. textlen โ€” ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ํ…์ŠคํŠธ ์š”์†Œ ์ˆ˜; injid โ€” ํ˜„์žฌ ์ฐฝ ์ธ๋ฑ์Šค; ํšŒ์‹  โ€” 0 (์‘๋‹ต ๋‚ด์—ญ์€ ์ €์žฅ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค); inclient โ€” ๋ฐœ๊ฒฌ๋œ ๋ผ์ด๋ธŒ ์ฐฝ์˜ ๊ฒฝ์šฐ 1, ์—†๋Š” ๊ฒฝ์šฐ 0; objectcount - ์ค‘์ฒฉ๋œ ์ปจํŠธ๋กค์„ ํฌํ•จํ•œ ๋ผ์ด๋ธŒ ์ปจํŠธ๋กค์˜ ์ˆ˜์ž…๋‹ˆ๋‹ค. string: serial ๋ฐ gumpid - 16์ง„์ˆ˜ ๋ฌธ์ž์—ด 0xXXXXXXXX; text โ€” ์ธ๋ฑ์Šค ํ‚ค์˜ ์š”์†Œ ํ…์ŠคํŠธ์ž…๋‹ˆ๋‹ค. object โ€” ์ปจํŠธ๋กค ์œ ํ˜• ์ด๋ฆ„; ๋ช…๋ น โ€” ์ปจํŠธ๋กค์— ๋Œ€ํ•œ ์„ค๋ช…(์œ ํ˜•, ํŽ˜์ด์ง€, ID, ์ขŒํ‘œ, ํฌ๊ธฐ ๋ฐ ์ง€์›๋˜๋Š” ํ•„๋“œ) ์ฐฝ์ด ์—†์œผ๋ฉด ์ˆซ์ž ์‹๋ณ„์ž๋Š” 0๋ฅผ ์ œ๊ณตํ•˜๊ณ  ๋ฌธ์ž์—ด ์‹๋ณ„์ž๋Š” ๋นˆ ๋ฌธ์ž์—ด์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. injid=0๋„ ์œ ํšจํ•œ ์ฒซ ๋ฒˆ์งธ ์ƒ‰์ธ์ž…๋‹ˆ๋‹ค. 0 ์ž์ฒด๋งŒ์œผ๋กœ๋Š” ์ฐฝ์ด ์—†์Œ์„ ์ฆ๋ช…ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ Array๋‚˜ Pascal TGumpInfo๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค.

๋™์ž‘

  • ํ™œ์„ฑ ์„œ๋ฒ„ ๊ฒ€ํ”„์™€ ํ•จ๊ป˜ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ๋ฐฐ๋‚ญ, ์ง€๋„, ์„ค์ • ๋ฐ ๊ธฐํƒ€ ๋กœ์ปฌ ์ฐฝ์€ ์ด ๋ชฉ๋ก์— ํฌํ•จ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ํ•œ ๋ฒˆ์˜ ํ˜ธ์ถœ์€ ๊ฒŒ์ž„ ์Šค๋ ˆ๋“œ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์Šต๋‹ˆ๋‹ค. ํ†ตํ™”๋งˆ๋‹ค ๋ชฉ๋ก์˜ ์ƒํƒœ๊ฐ€ ๋‹ค๋ฅผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • SelectGump/InfoGump๋Š” ํ˜„์žฌ ๋Ÿฐํƒ€์ž„์—์„œ๋งŒ ์„ ํƒํ•œ ์ฐฝ์„ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค. ์„ ํƒํ•œ ์ฐฝ์ด ๋‹ซํžˆ๋ฉด ํ˜„์žฌ ๋ชฉ๋ก์˜ ๋งˆ์ง€๋ง‰ ํ•ญ๋ชฉ์ด ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ์ด๋Š” ๋ฐ˜๋“œ์‹œ ๊ฐ€์žฅ ์ตœ๊ทผ ํ•ญ๋ชฉ์ผ ํ•„์š”๋Š” ์—†์Šต๋‹ˆ๋‹ค.
  • textlen/text๋Š” ์„œ๋ฒ„ ํŒจํ‚ค์ง€์˜ ์›๋ž˜ ๋ฌธ์ž์—ด ํ’€์ด ์•„๋‹Œ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ํ…์ŠคํŠธ ์ปจํŠธ๋กค์„ ์ฐธ์กฐํ•ฉ๋‹ˆ๋‹ค. object/command๋Š” ๋ผ์ด๋ธŒ ์ปจํŠธ๋กค์˜ ์ „์ฒด ํŠธ๋ฆฌ๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ๋ชฉ๋ก์˜ ์ธ๋ฑ์Šค๋Š” ํ˜ผํ•ฉ๋  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
  • ๊ฐ ํ˜ธ์ถœ์€ ํ˜„์žฌ ์ƒํƒœ๋ฅผ ๊ฐœ๋ณ„์ ์œผ๋กœ ์ฝ์Šต๋‹ˆ๋‹ค. ์ผ์น˜ํ•˜๋Š” serial, GumpID ๋ฐ ๋ชฉ๋ก์˜ ๊ฒฝ์šฐ GetGumpInfo๋ฅผ ์‚ฌ์šฉํ•˜์„ธ์š”.

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

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

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

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

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

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

1. ์„ ํƒํ•œ ์ฐฝ์˜ ID ์ฝ๊ธฐ - ์ง์ ‘ ์Šคํฌ๋ฆฝํŠธ

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

  • gumpid ๋ฐ serial๋Š” ์ด๋ฏธ 16์ง„์ˆ˜๋กœ ํ˜•์‹ํ™”๋œ ๋ฌธ์ž์—ด์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ์ถ”๊ฐ€ 16์ง„์ˆ˜๊ฐ€ ํ•„์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋นˆ ์ค„์€ ์ฝ์„ ๋•Œ ์ฐฝ์ด ์—†์Œ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.
var id = UO.LastGump("gumpid");
var serial = UO.LastGump("serial");
UO.Print(id + " / " + serial);

2. ButtonID ์—ด๊ฑฐ - ์Šคํฌ๋ฆฝํŠธ ํ•จ์ˆ˜

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

  • Buttonlen โ€” ๋ฒ„ํŠผ ์ˆ˜; i๋Š” 0๋ถ€ํ„ฐ count-1๊นŒ์ง€์˜ ํ–‰ ์ธ๋ฑ์Šค์ž…๋‹ˆ๋‹ค. ๋ฒ„ํŠผ - ๊ทธ๋ž˜ํ”ฝ์ด๋‚˜ ์ƒ‰์ธ์ด ์•„๋‹Œ ๋‹ต๋ณ€์šฉ ID์ž…๋‹ˆ๋‹ค. ์ฐฝ์„ ๋ณ€๊ฒฝํ•  ๋•Œ ๋ชฉ๋ก์„ ๋‹ค์‹œ ์ฝ์œผ์‹ญ์‹œ์˜ค.
return  RunScenario();
 object? RunScenario()
{
    var count = UO.LastGump("buttonlen");
    var i = 0;
    while (Truth(i < count))
    {
        var button = UO.LastGump("button", i);
        UO.Print(Convert.ToString(button));
        i = i + 1;
    }

    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. ์„ ํƒ ํ›„ ํ…์ŠคํŠธ ์ฝ๊ธฐ - ์Šคํฌ๋ฆฝํŠธ ํด๋ž˜์Šค

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

  • 0x12345678๋Š” GumpID/serial์˜ ์˜ˆ์ž…๋‹ˆ๋‹ค. ID๋ฅผ ์›ํ•˜๋Š” ํ˜•์‹์œผ๋กœ ๋ฐ”๊พธ์„ธ์š”. key=0์ธ ํ…์ŠคํŠธ๋Š” ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์ฒซ ๋ฒˆ์งธ ํ…์ŠคํŠธ ์ปจํŠธ๋กค์„ ์ฝ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ๋ฒ„ํŠผ๊ณผ ๋‹ค๋ฅธ ๋ชฉ๋ก์ž…๋‹ˆ๋‹ค.
  • SelectGump๋Š” ์ง€์ •๋œ ์ฐฝ์ด ์—†๋‹ค๊ณ  ๋ณด๊ณ ํ•˜์ง€๋งŒ ํ›„์† ์ฝ๊ธฐ๋ฅผ ์ฐจ๋‹จํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ํ•„์š”ํ•œ ๊ฒฝ์šฐ ๋ฐ˜ํ™˜๋œ gumpid๋ฅผ ๋ณ„๋„๋กœ ํ™•์ธํ•˜์„ธ์š”.
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.SelectGump(0x12345678);
        if (Truth(UO.LastGump("inclient")))
        {
            var count = UO.LastGump("textlen");
            if (Truth(count > 0))
            {
                UO.Print(UO.LastGump("text", 0));
            }
        }

        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.LastGump(identifier) โ€” UO.LastGump(String)

๋งค๊ฐœ๋ณ€์ˆ˜: identifier (String)

๊ฒฐ๊ณผ: dynamic / Any.

ํ˜ธ์ถœ ์‹œ:

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

public InjectionValue LastGump(string identifier) => LastGump(identifier, -1);

UO.LastGump(identifier, key) โ€” UO.LastGump(String,Integer)

๋งค๊ฐœ๋ณ€์ˆ˜: identifier (String), key (Integer)

๊ฒฐ๊ณผ: dynamic / Any.

ํ˜ธ์ถœ ์‹œ:

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

public InjectionValue LastGump(string identifier, int key) => ConvertGumpValue(identifier, bridge.GetGumpValue(-1, identifier, key));

UO.NumGumpButton

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

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

int UO.NumGumpButton(object? gumpIndex, object? value);

์—„๊ฒฉํ•œ ์ฐฝ ์ธ๋ฑ์Šค์™€ ์ •ํ™•ํ•œ ButtonID๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๊ธฐ์กด ์„œ๋ฒ„ ๊ฒ€ํ”„ ๋ฒ„ํŠผ์„ ํ™œ์„ฑํ™”ํ•ฉ๋‹ˆ๋‹ค.

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

  • gumpIndex โ€” ํ•„์ˆ˜ int โ€” 0๋ถ€ํ„ฐ GetGumpsCount()-1๊นŒ์ง€ ํ™œ์„ฑ ์„œ๋ฒ„ ๊ฒ€ํ”„์˜ ์ธ๋ฑ์Šค์ž…๋‹ˆ๋‹ค. GumpID/serial๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค. ๋ชฉ๋ก ์™ธ๋ถ€์˜ ์Œ์ˆ˜์™€ ์ธ๋ฑ์Šค๋Š” ์œ ํšจํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ฐฝ์„ ์—ด๊ณ  ๋‹ซ๊ณ  ์žฌ์ •๋ ฌํ•˜๋ฉด ์ƒ‰์ธ์ด ๋ณ€๊ฒฝ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ–‰๋™ํ•˜๊ธฐ ์ „์— GetGumpID/GetGumpSerial๋ฅผ ํ™•์ธํ•˜์„ธ์š”.
  • value - int - ์ผ๋ฐ˜ ๋ฒ„ํŠผ ์„ค๋ช…์˜ ButtonID์ž…๋‹ˆ๋‹ค. ์ค„๋ฒˆํ˜ธ๋„ ์•„๋‹ˆ๊ณ , graphic ๋ฒ„ํŠผ๋„ ์•„๋‹ˆ๊ณ , GumpID๋„ ์•„๋‹™๋‹ˆ๋‹ค.

๋ฐ˜ํ™˜๊ฐ’

int (bool) - 1, ์ฐฝ๊ณผ ๋ฒ„ํŠผ์ด ๋ฐœ๊ฒฌ๋˜๊ณ  ๋กœ์ปฌ ์ž‘์—…์ด ์ˆ˜ํ–‰๋˜๋Š” ๊ฒฝ์šฐ; 0 ์ฐฝ/๋ฒ„ํŠผ์ด ์—†๋Š” ๊ฒฝ์šฐ. ํŽ˜์ด์ง€๋ฅผ ๋ณ€๊ฒฝํ•˜๋ฉด 1๋„ ๋ฐ˜ํ™˜๋ฉ๋‹ˆ๋‹ค. ์ด๋Š” ์„œ๋ฒ„ ์ฒ˜๋ฆฌ์— ๋Œ€ํ•œ ํ™•์ธ์ด ์•„๋‹™๋‹ˆ๋‹ค.

๋ช…๋ น์˜ ๊ฒฐ๊ณผ๋Š” ์ˆซ์ž ํ”Œ๋ž˜๊ทธ์ž…๋‹ˆ๋‹ค. 1๋Š” ์ถฉ์กฑ๋œ ์กฐ๊ฑด์„ ์˜๋ฏธํ•˜๊ณ , 0๋Š” ์ถฉ์กฑ๋˜์ง€ ์•Š์€ ์กฐ๊ฑด์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. var result = command(...) ํ›„์— (๊ฒฐ๊ณผ != 0) ๋˜๋Š” (๊ฒฐ๊ณผ == 0)์ธ์ง€ ํ™•์ธํ•˜์„ธ์š”. ํ•œ ๋ฒˆ์˜ ํ˜ธ์ถœ ๊ฒฐ๊ณผ๋ฅผ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค. ๋ฐ˜๋ณต๋œ ํ˜ธ์ถœ์„ ํ†ตํ•ด ํ•ด๋‹น ์ž‘์—…์„ ๋‹ค์‹œ ์ˆ˜ํ–‰ํ•˜๊ฑฐ๋‚˜ ์ด๋ฏธ ๋ณ€๊ฒฝ๋œ ์ƒํƒœ๋ฅผ ์ฝ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋™์ž‘

  • ํ™œ์„ฑ ์„œ๋ฒ„ ๊ฒ€ํ”„์™€ ํ•จ๊ป˜ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ๋ฐฐ๋‚ญ, ์ง€๋„, ์„ค์ • ๋ฐ ๊ธฐํƒ€ ๋กœ์ปฌ ์ฐฝ์€ ์ด ๋ชฉ๋ก์— ํฌํ•จ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ํ•œ ๋ฒˆ์˜ ํ˜ธ์ถœ์€ ๊ฒŒ์ž„ ์Šค๋ ˆ๋“œ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์Šต๋‹ˆ๋‹ค. ํ†ตํ™”๋งˆ๋‹ค ๋ชฉ๋ก์˜ ์ƒํƒœ๊ฐ€ ๋‹ค๋ฅผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • SwitchPage ๋ฒ„ํŠผ์€ ํŽ˜์ด์ง€๋ฅผ ๋กœ์ปฌ๋กœ ์ „ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ํ™œ์„ฑํ™” ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋ฉด ๊ฒ€ํ”„ ์‘๋‹ต์ด ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ์ฐฝ๋ฌธ์€ ๋ณดํ†ต ๋‹ซํž™๋‹ˆ๋‹ค. SendGumpSelect์™€ ๋‹ฌ๋ฆฌ ์ด ๋ช…๋ น์—๋Š” ์ปจํŠธ๋กค ํŠธ๋ฆฌ์— ๊ธฐ์กด ButtonID๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

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

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

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

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

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

var result = UO.NumGumpButton(0, 77);
UO.Print("NumGumpButton: " + Convert.ToString(result));

1. ์ž˜ ์•Œ๋ ค์ง„ ๋ฒ„ํŠผ ๋ˆ„๋ฅด๊ธฐ - ์ง์ ‘ ์Šคํฌ๋ฆฝํŠธ

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

  • 0์€ ์ฐฝ ์ธ๋ฑ์Šค์ด๊ณ , 77๋Š” ๊ฒ€์‚ฌ๊ธฐ์˜ ButtonID ์˜ˆ์‹œ์ž…๋‹ˆ๋‹ค. ๊ท€ํ•˜์˜ ์–‘์‹์—๋Š” ์‹ค์ œ ID๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.
var ok = UO.NumGumpButton(0, 77);
if (Truth(ok == 0))
{
    UO.Print("Button not found");
}

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

2. ์ฐฝ ์œ ํ˜•์„ ๋จผ์ € ํ™•์ธํ•˜์„ธ์š” - ์Šคํฌ๋ฆฝํŠธ ๊ธฐ๋Šฅ

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

  • 0x12345678์€ ์˜ˆ์ƒ๋˜๋Š” GumpID์ด๊ณ , 100๋Š” ButtonID์ž…๋‹ˆ๋‹ค. ์ด ๋‘ ์ˆซ์ž๋Š” ์„œ๋กœ ๋‹ค๋ฅธ ๊ณต๋ฐฑ ID์— ์†ํ•ฉ๋‹ˆ๋‹ค.
return  RunScenario();
 object? RunScenario()
{
    if (Truth(UO.GetGumpID(0) == 0x12345678))
    {
        var ok = UO.NumGumpButton(0, 100);
    }

    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. ๋ฒ„ํŠผ ์•ž์˜ ์ฒดํฌ๋ฐ•์Šค ๋ณ€๊ฒฝ - ์Šคํฌ๋ฆฝํŠธ ํด๋ž˜์Šค

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

  • 33 - ID ํ™•์ธ๋ž€, 1 - ํ™œ์„ฑํ™”, 100 - ID ๋ฒ„ํŠผ. ํ™•์ธ๋ž€ ์ƒํƒœ๋Š” ํ™œ์„ฑํ™” ๋ฒ„ํŠผ์— ๋Œ€ํ•œ ์‘๋‹ต์—๋งŒ ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.
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()
    {
        if (Truth(UO.NumGumpCheckBox(0, 33, 1)))
        {
            var ok = UO.NumGumpButton(0, 100);
        }

        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.NumGumpButton(gumpIndex, value) โ€” UO.NumGumpButton(Any,Any)

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

๊ฒฐ๊ณผ: int / Integer.

ํ˜ธ์ถœ ์‹œ:

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

case "numgumpbutton": return (bridge is IApiGumpAccess buttons

                    ? buttons.ActivateGumpButtonAtIndex(Arg(0), Arg(1)) : bridge.ActivateGumpButton(Arg(0), Arg(1))) != 0 ? InjectionValue.True : InjectionValue.False;

UO.NumGumpCheckBox

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

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

int UO.NumGumpCheckBox(object? gumpIndex, object? cbid, object? value);

์„œ๋ฒ„ ๊ฒ€ํ”„์˜ ํ”Œ๋ž˜๊ทธ ์ƒํƒœ๋ฅผ ์ธ๋ฑ์Šค๋ณ„๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

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

  • gumpIndex โ€” ํ•„์ˆ˜ int โ€” 0๋ถ€ํ„ฐ GetGumpsCount()-1๊นŒ์ง€ ํ™œ์„ฑ ์„œ๋ฒ„ ๊ฒ€ํ”„์˜ ์ธ๋ฑ์Šค์ž…๋‹ˆ๋‹ค. GumpID/serial๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค. ๋ชฉ๋ก ์™ธ๋ถ€์˜ ์Œ์ˆ˜์™€ ์ธ๋ฑ์Šค๋Š” ์œ ํšจํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ฐฝ์„ ์—ด๊ณ  ๋‹ซ๊ณ  ์žฌ์ •๋ ฌํ•˜๋ฉด ์ƒ‰์ธ์ด ๋ณ€๊ฒฝ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ–‰๋™ํ•˜๊ธฐ ์ „์— GetGumpID/GetGumpSerial๋ฅผ ํ™•์ธํ•˜์„ธ์š”.
  • cbid - int - ๊ฒ€ํ”„ ์„ค๋ช…์˜ ์ •ํ™•ํ•œ ID ์š”์†Œ์ž…๋‹ˆ๋‹ค. ์ด๋Š” ์š”์†Œ์˜ ์ผ๋ จ๋ฒˆํ˜ธ๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค. ๋ˆ„๋ฝ๋œ ID๋Š” ์ƒ‰์ธ์œผ๋กœ ๋Œ€์ฒด๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • value โ€” int โ€” 1 ํ™œ์„ฑํ™”/์„ ํƒ, 0 ๋น„ํ™œ์„ฑํ™”. 0์ด ์•„๋‹Œ ์ˆซ์ž ๊ฐ’, true ๋ฐ selected๋„ ์ธ์‹๋ฉ๋‹ˆ๋‹ค. 0 ๋ฐ 1๋ฅผ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค.

๋ฐ˜ํ™˜๊ฐ’

int (bool) โ€” 1, ํ•„์š”ํ•œ ์š”์†Œ๊ฐ€ ๋ฐœ๊ฒฌ๋˜๊ณ  ์ตœ์ข… ๊ฐ’์ด ์ง€์ •๋œ ์š”์†Œ์™€ ์ผ์น˜ํ•˜๋Š” ๊ฒฝ์šฐ; 0 ์ƒ‰์ธ์ด ์œ ํšจํ•˜์ง€ ์•Š์€ ๊ฒฝ์šฐ ID/์š”์†Œ ์œ ํ˜•์ด ๋ˆ„๋ฝ๋˜์—ˆ๊ฑฐ๋‚˜ ํ•„๋“œ๊ฐ€ ์ •ํ™•ํ•œ ๊ฐ’์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š์€ ๊ฒฝ์šฐ์ž…๋‹ˆ๋‹ค. ์ด๋ฏธ ์„ค์ •๋œ ๊ฐ’์„ ์žฌ์„ค์ •ํ•ด๋„ ์„ฑ๊ณตํ•ฉ๋‹ˆ๋‹ค.

๋ช…๋ น์˜ ๊ฒฐ๊ณผ๋Š” ์ˆซ์ž ํ”Œ๋ž˜๊ทธ์ž…๋‹ˆ๋‹ค. 1๋Š” ์ถฉ์กฑ๋œ ์กฐ๊ฑด์„ ์˜๋ฏธํ•˜๊ณ , 0๋Š” ์ถฉ์กฑ๋˜์ง€ ์•Š์€ ์กฐ๊ฑด์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. var result = command(...) ํ›„์— (๊ฒฐ๊ณผ != 0) ๋˜๋Š” (๊ฒฐ๊ณผ == 0)์ธ์ง€ ํ™•์ธํ•˜์„ธ์š”. ํ•œ ๋ฒˆ์˜ ํ˜ธ์ถœ ๊ฒฐ๊ณผ๋ฅผ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค. ๋ฐ˜๋ณต๋œ ํ˜ธ์ถœ์„ ํ†ตํ•ด ํ•ด๋‹น ์ž‘์—…์„ ๋‹ค์‹œ ์ˆ˜ํ–‰ํ•˜๊ฑฐ๋‚˜ ์ด๋ฏธ ๋ณ€๊ฒฝ๋œ ์ƒํƒœ๋ฅผ ์ฝ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋™์ž‘

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

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

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

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

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

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

var result = UO.NumGumpCheckBox(0, 33, 1);
UO.Print("NumGumpCheckBox: " + Convert.ToString(result));

1. ๊ฐ’ ์„ค์ • ๋ฐ ๊ฒฐ๊ณผ ํ™•์ธ - ์ง์ ‘ ์Šคํฌ๋ฆฝํŠธ

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

  • 0 โ€” ์ฐฝ ์ธ๋ฑ์Šค; 33 โ€” ์ •ํ™•ํ•œ CBID; 1 - ์ƒˆ๋กœ์šด ๊ฐ’. ๊ฒ€ํ”„์—์„œ 33๋ฅผ ID๋กœ ๋ฐ”๊พธ์„ธ์š”.
var ok = UO.NumGumpCheckBox(0, 33, 1);
if (Truth(ok == 0))
{
    UO.Print("Control missing or value rejected");
}

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

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

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

  • 0 ํ•„๋“œ๋ฅผ ์ง€์šฐ๊ฑฐ๋‚˜ ์„ ํƒ์„ ์ทจ์†Œํ•ฉ๋‹ˆ๋‹ค. ํ•„๋“œ์˜ ์ƒˆ ๊ฐ’์ด ์•„๋‹Œ ๋ณ€๊ฒฝ ์„ฑ๊ณต์ด ๋ฐ˜ํ™˜๋ฉ๋‹ˆ๋‹ค.
return  RunScenario();
 object? RunScenario()
{
    var ok = UO.NumGumpCheckBox(0, 33, 0);
    UO.Print(Convert.ToString(ok));
    return null;
}

3. ๋‹ต์žฅ ์ „ ์ฑ„์šฐ๊ธฐ - ์Šคํฌ๋ฆฝํŠธ ํด๋ž˜์Šค

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

  • 100 - ์„œ๋ฒ„ ButtonID ํ™•์ธ ์˜ˆ์‹œ; ์ฐฝ๋ฌธ์˜ ID๋ฅผ ๊ต์ฒดํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. 0 ~ SendGumpSelect(0,100)๋Š” ์ฐฝ ์ธ๋ฑ์Šค์ž…๋‹ˆ๋‹ค.
  • ๋Œ€๋‹ต์€ ๊ฒ€ํ”„๋ฅผ ๋‹ซ๊ณ  ์ธ๋ฑ์Šค๋ฅผ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ „์†ก๋จ์€ ๋กœ์ปฌ ์ „์†ก์„ ์˜๋ฏธํ•˜๋ฉฐ, ์„œ๋ฒ„์—์„œ ํ™•์ธ๋˜์ง€ ์•Š์€ ์ž‘์—…์˜ ๊ฒฐ๊ณผ์ž…๋‹ˆ๋‹ค.
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()
    {
        if (Truth(UO.NumGumpCheckBox(0, 33, 1)))
        {
            var sent = UO.SendGumpSelect(0, 100);
            UO.Print(Convert.ToString(sent));
        }

        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.NumGumpCheckBox(gumpIndex, cbid, value) โ€” UO.NumGumpCheckBox(Any,Any,Any)

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

๊ฒฐ๊ณผ: int / Integer.

ํ˜ธ์ถœ ์‹œ:

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

case "numgumpcheckbox": return SetIndexedGumpValue(Arg(0), "checkbox", Arg(1), Text(2));

UO.NumGumpRadiobutton

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

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

int UO.NumGumpRadiobutton(object? gumpIndex, object? radiobuttonID, object? value);

์ธ๋ฑ์Šค๋ณ„๋กœ ์„œ๋ฒ„ ๊ฒ€ํ”„์˜ ๋ผ๋””์˜ค ๋ฒ„ํŠผ ์ƒํƒœ๋ฅผ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

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

  • gumpIndex โ€” ํ•„์ˆ˜ int โ€” 0๋ถ€ํ„ฐ GetGumpsCount()-1๊นŒ์ง€ ํ™œ์„ฑ ์„œ๋ฒ„ ๊ฒ€ํ”„์˜ ์ธ๋ฑ์Šค์ž…๋‹ˆ๋‹ค. GumpID/serial๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค. ๋ชฉ๋ก ์™ธ๋ถ€์˜ ์Œ์ˆ˜์™€ ์ธ๋ฑ์Šค๋Š” ์œ ํšจํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ฐฝ์„ ์—ด๊ณ  ๋‹ซ๊ณ  ์žฌ์ •๋ ฌํ•˜๋ฉด ์ƒ‰์ธ์ด ๋ณ€๊ฒฝ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ–‰๋™ํ•˜๊ธฐ ์ „์— GetGumpID/GetGumpSerial๋ฅผ ํ™•์ธํ•˜์„ธ์š”.
  • radiobuttonID - int - ๊ฒ€ํ”„ ์„ค๋ช…์˜ ์ •ํ™•ํ•œ ID ์š”์†Œ์ž…๋‹ˆ๋‹ค. ์ด๋Š” ์š”์†Œ์˜ ์ผ๋ จ๋ฒˆํ˜ธ๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค. ๋ˆ„๋ฝ๋œ ID๋Š” ์ƒ‰์ธ์œผ๋กœ ๋Œ€์ฒด๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • value โ€” int โ€” 1 ํ™œ์„ฑํ™”/์„ ํƒ, 0 ๋น„ํ™œ์„ฑํ™”. 0์ด ์•„๋‹Œ ์ˆซ์ž ๊ฐ’, true ๋ฐ selected๋„ ์ธ์‹๋ฉ๋‹ˆ๋‹ค. 0 ๋ฐ 1๋ฅผ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค.

๋ฐ˜ํ™˜๊ฐ’

int (bool) โ€” 1, ํ•„์š”ํ•œ ์š”์†Œ๊ฐ€ ๋ฐœ๊ฒฌ๋˜๊ณ  ์ตœ์ข… ๊ฐ’์ด ์ง€์ •๋œ ์š”์†Œ์™€ ์ผ์น˜ํ•˜๋Š” ๊ฒฝ์šฐ; 0 ์ƒ‰์ธ์ด ์œ ํšจํ•˜์ง€ ์•Š์€ ๊ฒฝ์šฐ ID/์š”์†Œ ์œ ํ˜•์ด ๋ˆ„๋ฝ๋˜์—ˆ๊ฑฐ๋‚˜ ํ•„๋“œ๊ฐ€ ์ •ํ™•ํ•œ ๊ฐ’์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š์€ ๊ฒฝ์šฐ์ž…๋‹ˆ๋‹ค. ์ด๋ฏธ ์„ค์ •๋œ ๊ฐ’์„ ์žฌ์„ค์ •ํ•ด๋„ ์„ฑ๊ณตํ•ฉ๋‹ˆ๋‹ค.

๋ช…๋ น์˜ ๊ฒฐ๊ณผ๋Š” ์ˆซ์ž ํ”Œ๋ž˜๊ทธ์ž…๋‹ˆ๋‹ค. 1๋Š” ์ถฉ์กฑ๋œ ์กฐ๊ฑด์„ ์˜๋ฏธํ•˜๊ณ , 0๋Š” ์ถฉ์กฑ๋˜์ง€ ์•Š์€ ์กฐ๊ฑด์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. var result = command(...) ํ›„์— (๊ฒฐ๊ณผ != 0) ๋˜๋Š” (๊ฒฐ๊ณผ == 0)์ธ์ง€ ํ™•์ธํ•˜์„ธ์š”. ํ•œ ๋ฒˆ์˜ ํ˜ธ์ถœ ๊ฒฐ๊ณผ๋ฅผ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค. ๋ฐ˜๋ณต๋œ ํ˜ธ์ถœ์„ ํ†ตํ•ด ํ•ด๋‹น ์ž‘์—…์„ ๋‹ค์‹œ ์ˆ˜ํ–‰ํ•˜๊ฑฐ๋‚˜ ์ด๋ฏธ ๋ณ€๊ฒฝ๋œ ์ƒํƒœ๋ฅผ ์ฝ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋™์ž‘

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

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

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

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

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

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

var result = UO.NumGumpRadiobutton(0, 33, 1);
UO.Print("NumGumpRadiobutton: " + Convert.ToString(result));

1. ๊ฐ’ ์„ค์ • ๋ฐ ๊ฒฐ๊ณผ ํ™•์ธ - ์ง์ ‘ ์Šคํฌ๋ฆฝํŠธ

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

  • 0 โ€” ์ฐฝ ์ธ๋ฑ์Šค; 33 โ€” ์ •ํ™•ํ•œ RadiobuttonID; 1 - ์ƒˆ๋กœ์šด ๊ฐ’. ๊ฒ€ํ”„์—์„œ 33๋ฅผ ID๋กœ ๋ฐ”๊พธ์„ธ์š”.
var ok = UO.NumGumpRadiobutton(0, 33, 1);
if (Truth(ok == 0))
{
    UO.Print("Control missing or value rejected");
}

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

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

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

  • 0 ํ•„๋“œ๋ฅผ ์ง€์šฐ๊ฑฐ๋‚˜ ์„ ํƒ์„ ์ทจ์†Œํ•ฉ๋‹ˆ๋‹ค. ํ•„๋“œ์˜ ์ƒˆ ๊ฐ’์ด ์•„๋‹Œ ๋ณ€๊ฒฝ ์„ฑ๊ณต์ด ๋ฐ˜ํ™˜๋ฉ๋‹ˆ๋‹ค.
return  RunScenario();
 object? RunScenario()
{
    var ok = UO.NumGumpRadiobutton(0, 33, 0);
    UO.Print(Convert.ToString(ok));
    return null;
}

3. ๋‹ต์žฅ ์ „ ์ฑ„์šฐ๊ธฐ - ์Šคํฌ๋ฆฝํŠธ ํด๋ž˜์Šค

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

  • 100 - ์„œ๋ฒ„ ButtonID ํ™•์ธ ์˜ˆ์‹œ; ์ฐฝ๋ฌธ์˜ ID๋ฅผ ๊ต์ฒดํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. 0 ~ SendGumpSelect(0,100)๋Š” ์ฐฝ ์ธ๋ฑ์Šค์ž…๋‹ˆ๋‹ค.
  • ๋Œ€๋‹ต์€ ๊ฒ€ํ”„๋ฅผ ๋‹ซ๊ณ  ์ธ๋ฑ์Šค๋ฅผ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ „์†ก๋จ์€ ๋กœ์ปฌ ์ „์†ก์„ ์˜๋ฏธํ•˜๋ฉฐ, ์„œ๋ฒ„์—์„œ ํ™•์ธ๋˜์ง€ ์•Š์€ ์ž‘์—…์˜ ๊ฒฐ๊ณผ์ž…๋‹ˆ๋‹ค.
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()
    {
        if (Truth(UO.NumGumpRadiobutton(0, 33, 1)))
        {
            var sent = UO.SendGumpSelect(0, 100);
            UO.Print(Convert.ToString(sent));
        }

        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.NumGumpRadiobutton(gumpIndex, radiobuttonID, value) โ€” UO.NumGumpRadiobutton(Any,Any,Any)

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

๊ฒฐ๊ณผ: int / Integer.

ํ˜ธ์ถœ ์‹œ:

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

case "numgumpradiobutton": return SetIndexedGumpValue(Arg(0), "radio", Arg(1), Text(2));

UO.NumGumpTextEntry

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

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

int UO.NumGumpTextEntry(object? gumpIndex, object? textEntryID, object? value);

์„œ๋ฒ„ ๊ฒ€ํ”„์˜ ์ž…๋ ฅ ํ•„๋“œ ํ…์ŠคํŠธ๋ฅผ ์ธ๋ฑ์Šค๋ณ„๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

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

  • gumpIndex โ€” ํ•„์ˆ˜ int โ€” 0๋ถ€ํ„ฐ GetGumpsCount()-1๊นŒ์ง€ ํ™œ์„ฑ ์„œ๋ฒ„ ๊ฒ€ํ”„์˜ ์ธ๋ฑ์Šค์ž…๋‹ˆ๋‹ค. GumpID/serial๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค. ๋ชฉ๋ก ์™ธ๋ถ€์˜ ์Œ์ˆ˜์™€ ์ธ๋ฑ์Šค๋Š” ์œ ํšจํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ฐฝ์„ ์—ด๊ณ  ๋‹ซ๊ณ  ์žฌ์ •๋ ฌํ•˜๋ฉด ์ƒ‰์ธ์ด ๋ณ€๊ฒฝ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ–‰๋™ํ•˜๊ธฐ ์ „์— GetGumpID/GetGumpSerial๋ฅผ ํ™•์ธํ•˜์„ธ์š”.
  • textEntryID - int - ๊ฒ€ํ”„ ์„ค๋ช…์˜ ์ •ํ™•ํ•œ ID ์š”์†Œ์ž…๋‹ˆ๋‹ค. ์ด๋Š” ์š”์†Œ์˜ ์ผ๋ จ๋ฒˆํ˜ธ๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค. ๋ˆ„๋ฝ๋œ ID๋Š” ์ƒ‰์ธ์œผ๋กœ ๋Œ€์ฒด๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • value - string - ์ƒˆ ํ…์ŠคํŠธ. ๋นˆ ๋ฌธ์ž์—ด์€ ํ•„๋“œ๋ฅผ ์ง€์›๋‹ˆ๋‹ค. ํ•„๋“œ ์ž์ฒด์˜ ๊ธธ์ด/๋ฌธ์ž ์ œํ•œ์€ ์œ ์ง€๋ฉ๋‹ˆ๋‹ค.

๋ฐ˜ํ™˜๊ฐ’

int (bool) โ€” 1, ํ•„์š”ํ•œ ์š”์†Œ๊ฐ€ ๋ฐœ๊ฒฌ๋˜๊ณ  ์ตœ์ข… ๊ฐ’์ด ์ง€์ •๋œ ์š”์†Œ์™€ ์ผ์น˜ํ•˜๋Š” ๊ฒฝ์šฐ; 0 ์ƒ‰์ธ์ด ์œ ํšจํ•˜์ง€ ์•Š์€ ๊ฒฝ์šฐ ID/์š”์†Œ ์œ ํ˜•์ด ๋ˆ„๋ฝ๋˜์—ˆ๊ฑฐ๋‚˜ ํ•„๋“œ๊ฐ€ ์ •ํ™•ํ•œ ๊ฐ’์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š์€ ๊ฒฝ์šฐ์ž…๋‹ˆ๋‹ค. ์ด๋ฏธ ์„ค์ •๋œ ๊ฐ’์„ ์žฌ์„ค์ •ํ•ด๋„ ์„ฑ๊ณตํ•ฉ๋‹ˆ๋‹ค.

๋ช…๋ น์˜ ๊ฒฐ๊ณผ๋Š” ์ˆซ์ž ํ”Œ๋ž˜๊ทธ์ž…๋‹ˆ๋‹ค. 1๋Š” ์ถฉ์กฑ๋œ ์กฐ๊ฑด์„ ์˜๋ฏธํ•˜๊ณ , 0๋Š” ์ถฉ์กฑ๋˜์ง€ ์•Š์€ ์กฐ๊ฑด์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. var result = command(...) ํ›„์— (๊ฒฐ๊ณผ != 0) ๋˜๋Š” (๊ฒฐ๊ณผ == 0)์ธ์ง€ ํ™•์ธํ•˜์„ธ์š”. ํ•œ ๋ฒˆ์˜ ํ˜ธ์ถœ ๊ฒฐ๊ณผ๋ฅผ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค. ๋ฐ˜๋ณต๋œ ํ˜ธ์ถœ์„ ํ†ตํ•ด ํ•ด๋‹น ์ž‘์—…์„ ๋‹ค์‹œ ์ˆ˜ํ–‰ํ•˜๊ฑฐ๋‚˜ ์ด๋ฏธ ๋ณ€๊ฒฝ๋œ ์ƒํƒœ๋ฅผ ์ฝ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋™์ž‘

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

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

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

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

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

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

var result = UO.NumGumpTextEntry(0, 33, "500");
UO.Print("NumGumpTextEntry: " + Convert.ToString(result));

1. ๊ฐ’ ์„ค์ • ๋ฐ ๊ฒฐ๊ณผ ํ™•์ธ - ์ง์ ‘ ์Šคํฌ๋ฆฝํŠธ

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

  • 0 โ€” ์ฐฝ ์ธ๋ฑ์Šค; 33 โ€” ์ •ํ™•ํ•œ TextEntryID; '500'๋Š” ์ƒˆ๋กœ์šด ๊ฐ’์ž…๋‹ˆ๋‹ค. ๊ฒ€ํ”„์—์„œ 33๋ฅผ ID๋กœ ๋ฐ”๊พธ์„ธ์š”.
var ok = UO.NumGumpTextEntry(0, 33, "500");
if (Truth(ok == 0))
{
    UO.Print("Control missing or value rejected");
}

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

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

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

  • ''๋Š” ํ•„๋“œ๋ฅผ ์ง€์šฐ๊ฑฐ๋‚˜ ์„ ํƒ์„ ์ทจ์†Œํ•ฉ๋‹ˆ๋‹ค. ํ•„๋“œ์˜ ์ƒˆ ๊ฐ’์ด ์•„๋‹Œ ๋ณ€๊ฒฝ ์„ฑ๊ณต์ด ๋ฐ˜ํ™˜๋ฉ๋‹ˆ๋‹ค.
return  RunScenario();
 object? RunScenario()
{
    var ok = UO.NumGumpTextEntry(0, 33, "");
    UO.Print(Convert.ToString(ok));
    return null;
}

3. ๋‹ต์žฅ ์ „ ์ฑ„์šฐ๊ธฐ - ์Šคํฌ๋ฆฝํŠธ ํด๋ž˜์Šค

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

  • 100 - ์„œ๋ฒ„ ButtonID ํ™•์ธ ์˜ˆ์‹œ; ์ฐฝ๋ฌธ์˜ ID๋ฅผ ๊ต์ฒดํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. 0 ~ SendGumpSelect(0,100)๋Š” ์ฐฝ ์ธ๋ฑ์Šค์ž…๋‹ˆ๋‹ค.
  • ๋Œ€๋‹ต์€ ๊ฒ€ํ”„๋ฅผ ๋‹ซ๊ณ  ์ธ๋ฑ์Šค๋ฅผ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ „์†ก๋จ์€ ๋กœ์ปฌ ์ „์†ก์„ ์˜๋ฏธํ•˜๋ฉฐ, ์„œ๋ฒ„์—์„œ ํ™•์ธ๋˜์ง€ ์•Š์€ ์ž‘์—…์˜ ๊ฒฐ๊ณผ์ž…๋‹ˆ๋‹ค.
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()
    {
        if (Truth(UO.NumGumpTextEntry(0, 33, "500")))
        {
            var sent = UO.SendGumpSelect(0, 100);
            UO.Print(Convert.ToString(sent));
        }

        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.NumGumpTextEntry(gumpIndex, textEntryID, value) โ€” UO.NumGumpTextEntry(Any,Any,Any)

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

๊ฒฐ๊ณผ: int / Integer.

ํ˜ธ์ถœ ์‹œ:

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

case "numgumptextentry": return SetIndexedGumpValue(Arg(0), "textentry", Arg(1), Text(2));

UO.SelectGump

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

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

void UO.SelectGump(object? id);

ํ›„์† ํ˜ธ์ถœ์„ ์œ„ํ•ด ๊ธฐ์กด ์„œ๋ฒ„ Gump๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.

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

  • id - int: LocalSerial ๋˜๋Š” ServerSerial๋ฅผ ๋จผ์ € ์ผ์น˜์‹œํ‚จ ๋‹ค์Œ ํ˜„์žฌ ๊ฒ€ํ”„ ๋ชฉ๋ก์—์„œ ์ธ๋ฑ์Šค 0์„ ์ฐพ์Šต๋‹ˆ๋‹ค. ID ๋ฒ„ํŠผ์ด ์•„๋‹™๋‹ˆ๋‹ค.

๋ฐ˜ํ™˜๊ฐ’

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

๋™์ž‘

  • Bridge.SelectGump๋Š” _selectedServerGump๋ฅผ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค. serial์ด ์ผ์น˜ํ•˜์ง€ ์•Š์œผ๋ฉด 0..count-1 ์ธ๋ฑ์Šค๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ฐพ์„ ์ˆ˜ ์—†์Œ - ์„ ํƒํ•œ ๊ฒ€ํ”„๊ฐ€ null๊ฐ€ ๋˜๊ณ  ๋ฉ”์‹œ์ง€๊ฐ€ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.
  • Gump๊ฐ€ ์—ด๋ฆฌ์ง€ ์•Š๊ณ  ์„œ๋ฒ„์— ์‘๋‹ต์ด ์ „์†ก๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ฐฝ์ด ์—ด๋ฆฌ๊ฑฐ๋‚˜ ๋‹ซํž ๋•Œ ์ธ๋ฑ์Šค๊ฐ€ ๋ณ€๊ฒฝ๋ฉ๋‹ˆ๋‹ค. ์•ˆ์ •์ ์ธ ์„ ํƒ์„ ์œ„ํ•ด ํ˜„์žฌ serial/id๋ฅผ ์‚ฌ์šฉํ•˜์„ธ์š”.

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

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

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

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

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

UO.Print("Calling UO.SelectGump");
UO.SelectGump(0);

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

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

  • ํ›„์† ํ˜ธ์ถœ์„ ์œ„ํ•ด ๊ธฐ์กด ์„œ๋ฒ„ Gump๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.
if (Truth(UO.GumpExists(0)))
{
    UO.SelectGump(0);
}

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

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

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

  • Bridge.SelectGump๋Š” _selectedServerGump๋ฅผ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค. serial์ด ์ผ์น˜ํ•˜์ง€ ์•Š์œผ๋ฉด 0..count-1 ์ธ๋ฑ์Šค๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ฐพ์„ ์ˆ˜ ์—†์Œ - ์„ ํƒํ•œ ๊ฒ€ํ”„๊ฐ€ null๊ฐ€ ๋˜๊ณ  ๋ฉ”์‹œ์ง€๊ฐ€ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.
return  RunScenario();
 object? RunScenario()
{
    if (Truth(UO.GetGumpsCount() > 0))
    {
        var serial = UO.GetGumpSerial(0);
        UO.SelectGump(serial);
    }

    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. ์ „์ฒด ๋„์šฐ๋ฏธ ๊ธฐ๋Šฅ - ์Šคํฌ๋ฆฝํŠธ ํด๋ž˜์Šค

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

  • Gump๊ฐ€ ์—ด๋ฆฌ์ง€ ์•Š๊ณ  ์„œ๋ฒ„์— ์‘๋‹ต์ด ์ „์†ก๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ฐฝ์ด ์—ด๋ฆฌ๊ฑฐ๋‚˜ ๋‹ซํž ๋•Œ ์ธ๋ฑ์Šค๊ฐ€ ๋ณ€๊ฒฝ๋ฉ๋‹ˆ๋‹ค. ์•ˆ์ •์ ์ธ ์„ ํƒ์„ ์œ„ํ•ด ํ˜„์žฌ serial/id๋ฅผ ์‚ฌ์šฉํ•˜์„ธ์š”.
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()
    {
        if (Truth(UO.GetGumpsCount() > 0))
        {
            UO.SelectGump(0);
            UO.Print(UO.LastGump("gumpid"));
        }

        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.SelectGump(id) โ€” UO.SelectGump(Any)

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

๊ฒฐ๊ณผ: void / Unit.

ํ˜ธ์ถœ ์‹œ:

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

public void SelectGump(InjectionValue id) => bridge.SelectGump(NumberConversions.ToInt(id));

UO.SendGumpSelect

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

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

int UO.SendGumpSelect(object? triggerId);
int UO.SendGumpSelect(object? gumpIndex, object? triggerId);
int UO.SendGumpSelect(object? serial, object? gumpId, object? triggerId);
int UO.SendGumpSelect(object? serial, object? gumpId, object? triggerId, object? timeout);

์„ ํƒํ•œ ์„œ๋ฒ„ Gump์˜ ButtonID๋ฅผ ๋ณด๋ƒ…๋‹ˆ๋‹ค.

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

  • triggerId - int ๋˜๋Š” ์ˆซ์ž ๋ฌธ์ž์—ด - ์„œ๋ฒ„ ButtonID. 0๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ๋‹ซ๊ธฐ/๊ฑฐ๋ถ€๋ฅผ ์˜๋ฏธํ•˜์ง€๋งŒ ์ •ํ™•ํ•œ ๋™์ž‘์€ ์„œ๋ฒ„์— ์˜ํ•ด ๊ฒฐ์ •๋ฉ๋‹ˆ๋‹ค. ํŠธ๋ฆฌ์— ํ‘œ์‹œ๋˜๋Š” ButtonID๋Š” ํ•„์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • gumpIndex โ€” ํ•„์ˆ˜ int โ€” 0๋ถ€ํ„ฐ GetGumpsCount()-1๊นŒ์ง€ ํ™œ์„ฑ ์„œ๋ฒ„ ๊ฒ€ํ”„์˜ ์ธ๋ฑ์Šค์ž…๋‹ˆ๋‹ค. GumpID/serial์ด ์•„๋‹™๋‹ˆ๋‹ค. ๋ชฉ๋ก ์™ธ๋ถ€์˜ ์Œ์ˆ˜์™€ ์ธ๋ฑ์Šค๋Š” ์œ ํšจํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ฐฝ์„ ์—ด๊ณ  ๋‹ซ๊ณ  ์žฌ์ •๋ ฌํ•˜๋ฉด ์ƒ‰์ธ์ด ๋ณ€๊ฒฝ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ–‰๋™ํ•˜๊ธฐ ์ „์— GetGumpID/GetGumpSerial๋ฅผ ํ™•์ธํ•˜์„ธ์š”. ๋‘ ๊ฐœ์˜ ์ธ์ˆ˜ ํ˜•์‹(gumpIndex, triggerId)์—์„œ๋งŒ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.
  • serial โ€” 3/4 ์ธ์ˆ˜ ํ˜•์‹์—์„œ ์ˆซ์ž 32๋น„ํŠธ serial๊ฐ€ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. 0 ๋˜๋Š” -1๋Š” ํ•„ํ„ฐ serial๋ฅผ ๋น„ํ™œ์„ฑํ™”ํ•ฉ๋‹ˆ๋‹ค. ์ตœ์ƒ์œ„ ๋น„ํŠธ์˜ ์Œ์ˆ˜๋ฅผ ํฌํ•จํ•œ ๋‚˜๋จธ์ง€ ์ˆซ์ž๋Š” ์ •ํ™•ํ•˜๊ฒŒ ๋น„๊ต๋ฉ๋‹ˆ๋‹ค.
  • gumpId โ€” 3/4 ์ธ์ˆ˜ ํ˜•์‹์—์„œ ์ˆซ์ž 32 ๋น„ํŠธ GumpID์ž…๋‹ˆ๋‹ค. 0 ๋˜๋Š” -1๋Š” GumpID ํ•„ํ„ฐ๋ฅผ ๋น„ํ™œ์„ฑํ™”ํ•ฉ๋‹ˆ๋‹ค. 16์ง„์ˆ˜ ๋ฌธ์ž์—ด์ด ํ—ˆ์šฉ๋ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์—๋Š” ์ด๋ฆ„ AddObject์ด ํ—ˆ์šฉ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • timeout โ€” ์„ ํƒ์ ์ธ ๋„ค ๋ฒˆ์งธ ์ธ์ˆ˜, int ์ผ์น˜ํ•˜๋Š” ID ์Œ์„ ๊ธฐ๋‹ค๋ฆฌ๋Š” ๋ฐ ๊ฑธ๋ฆฌ๋Š” ์‹œ๊ฐ„(๋ฐ€๋ฆฌ์ดˆ)์ž…๋‹ˆ๋‹ค. ๊ธฐ๋ณธ์ ์œผ๋กœ 0๋Š” ์ฆ‰๊ฐ์ ์ธ ์‹œ๋„ 1ํšŒ์ž…๋‹ˆ๋‹ค. ๋ถ€์ •์€ 0๋กœ ์ œํ•œ๋ฉ๋‹ˆ๋‹ค. ๊ฐ„๊ฒฉ 20ms๋ฅผ ๋‹ค์‹œ ํ™•์ธํ•˜์„ธ์š”.

๋ฐ˜ํ™˜๊ฐ’

int โ€” 1, ๋ผ์ด๋ธŒ ์„œ๋ฒ„ Gump๊ฐ€ ๋ฐœ๊ฒฌ๋˜๊ณ  ์‘๋‹ต์ด ํ˜ธ์ถœ๋˜๋Š” ๊ฒฝ์šฐ; 0 ์‹œ๊ฐ„ ์ดˆ๊ณผ๊ฐ€ ๋งŒ๋ฃŒ๋˜๊ธฐ ์ „์— ์ฐฝ์„ ์ฐพ์ง€ ๋ชปํ•œ ๊ฒฝ์šฐ. ์„ ํƒํ•œ ID๋ฅผ ๋ฐ˜ํ™˜ํ•˜์ง€ ์•Š์œผ๋ฉฐ ์„œ๋ฒ„๊ฐ€ ๊ฒฐ๊ณผ๋ฅผ ํ™•์ธํ•  ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆฌ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋™์ž‘

  • ํ™œ์„ฑ ์„œ๋ฒ„ ๊ฒ€ํ”„์™€ ํ•จ๊ป˜ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ๋ฐฐ๋‚ญ, ์ง€๋„, ์„ค์ • ๋ฐ ๊ธฐํƒ€ ๋กœ์ปฌ ์ฐฝ์€ ์ด ๋ชฉ๋ก์— ํฌํ•จ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ํ•œ ๋ฒˆ์˜ ํ˜ธ์ถœ์€ ๊ฒŒ์ž„ ์Šค๋ ˆ๋“œ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์Šต๋‹ˆ๋‹ค. ํ†ตํ™”๋งˆ๋‹ค ๋ชฉ๋ก์˜ ์ƒํƒœ๊ฐ€ ๋‹ค๋ฅผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ํ•œ ์ธ์ˆ˜๋Š” ์ด ์Šคํฌ๋ฆฝํŠธ์—์„œ ์ด์ „์— ์„ ํƒํ•œ ๊ฒ€ํ”„๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค. ๋‹ซํ˜€ ์žˆ๊ฑฐ๋‚˜ ์„ ํƒ๋˜์ง€ ์•Š์€ ๊ฒฝ์šฐ - ํ˜„์žฌ ๋ชฉ๋ก์˜ ๋งˆ์ง€๋ง‰ ์š”์†Œ์ž…๋‹ˆ๋‹ค. ๋‘ ๊ฐœ์˜ ์ธ์ˆ˜๊ฐ€ ์—„๊ฒฉํ•œ ์ธ๋ฑ์Šค๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค. 3/4 - ํ•„ํ„ฐ๊ฐ€ ์žˆ๋Š” ID ์Œ.
  • ์‘๋‹ต ์„ ํƒ ๋ฐ ํ˜ธ์ถœ์€ ํ•˜๋‚˜์˜ ๊ฒŒ์ž„ ์Šค๋ ˆ๋“œ ์š”์ฒญ์—์„œ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ์ ˆ์ฐจ๋ฅผ ์ค‘์ง€ํ•˜๋ฉด ๋Œ€๊ธฐ๊ฐ€ ์ทจ์†Œ๋ฉ๋‹ˆ๋‹ค. ์ง์ ‘์ ์ธ ์„œ๋ฒ„ ์‘๋‹ต๊ณผ ํŽ˜์ด์ง€ ๋ณ€๊ฒฝ์„ ํ˜ผ๋™ํ•˜์ง€ ๋งˆ์‹ญ์‹œ์˜ค. SwitchPage ๋ฒ„ํŠผ์—๋Š” NumGumpButton์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

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

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

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

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

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

var result = UO.SendGumpSelect(100);
UO.Print("SendGumpSelect: " + Convert.ToString(result));

1. ์„ ํƒํ•œ ์ฐฝ์— ๋‹ต์žฅ - ์ง์ ‘ ์Šคํฌ๋ฆฝํŠธ

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

  • SelectGump ์œ ํ˜•/serial 0x12345678์„ ์„ ํƒํ•˜๊ฑฐ๋‚˜ ๋ถ€์žฌ๋ฅผ ์‹ ๊ณ ํ•ฉ๋‹ˆ๋‹ค. 100 - ๋ฒ„ํŠผID.
  • ๋” ์ด์ƒ ์„ ํƒ๋œ ์ฐฝ์ด ์—†์œผ๋ฉด ๋‹จ์ผ ์ธ์ˆ˜ ํ˜•์‹์€ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๋งˆ์ง€๋ง‰ ์ฐฝ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์—„๊ฒฉํ•œ ์‹ ์› ํ™•์ธ์„ ์œ„ํ•ด ID ๋‘ ๊ฐœ๊ฐ€ ํฌํ•จ๋œ ์–‘์‹์„ ์‚ฌ์šฉํ•˜์„ธ์š”.
UO.SelectGump(0x12345678);
var sent = UO.SendGumpSelect(100);
UO.Print(Convert.ToString(sent));

2. ์ฒซ ๋ฒˆ์งธ ๋ชฉ๋ก ํ•ญ๋ชฉ์— ์‘๋‹ต - ์Šคํฌ๋ฆฝํŠธ ๊ธฐ๋Šฅ

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

  • 0 โ€” ์ธ๋ฑ์Šค, 100 โ€” ๋ฒ„ํŠผID. ์ด๊ฒƒ์€ serial=0๋„ ์•„๋‹ˆ๊ณ  GumpID=100๋„ ์•„๋‹™๋‹ˆ๋‹ค.
return  RunScenario();
 object? RunScenario()
{
    var sent = UO.SendGumpSelect(0, 100);
    if (Truth(sent == 0))
    {
        UO.Print("No gump at index zero");
    }

    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. ์Šค๋ƒ…์ƒท์—์„œ ์ฐฝ์— ๊ตฌ์ฒด์ ์œผ๋กœ ์‘๋‹ต - ์Šคํฌ๋ฆฝํŠธ ํด๋ž˜์Šค

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

  • info[0] - serial, info[1] - GumpID, 100 - ButtonID. ์ธ๋ฑ์Šค๋ฅผ ๋ณ€๊ฒฝํ•ด๋„ ์‘๋‹ต์ด ๋‹ค๋ฅธ ์œ ํ˜•/์†Œ์œ ์ž๋กœ ๋ฆฌ๋””๋ ‰์…˜๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • Serial/GumpID ๊ฐ’ โ€‹โ€‹0/-1์€ ์ œํ•œ๋˜์ง€ ์•Š์€ ํ•„ํ„ฐ์ž…๋‹ˆ๋‹ค. ๋™์ผํ•œ ์Œ์€ ๋‹ค์‹œ ์—ด๋ฆฐ ์ธ์Šคํ„ด์Šค๋ฅผ ๊ตฌ๋ณ„ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
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 info = UO.GetGumpInfo(0);
        if (Truth(ArrayLength(info) == 5))
        {
            var sent = UO.SendGumpSelect(info[0], info[1], 100);
        }

        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;
}

4. ํŠน์ • ์œ ํ˜•์„ ๊ธฐ๋Œ€ํ•ฉ๋‹ˆ๋‹ค - ์ง์ ‘ ์Šคํฌ๋ฆฝํŠธ

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

  • 0 ํ•„ํ„ฐ serial๋ฅผ ๋น„ํ™œ์„ฑํ™”ํ•ฉ๋‹ˆ๋‹ค. 0x87654321 โ€” ์ตœ์ƒ์œ„ ๋น„ํŠธ๊ฐ€ ์žˆ๋Š” ์ •ํ™•ํ•œ ID; 100 โ€” ๋ฒ„ํŠผ; 2000 โ€” ์ตœ๋Œ€ ๋Œ€๊ธฐ ์‹œ๊ฐ„(ms) ๋ฌด์กฐ๊ฑด์ ์ธ ์™€์ผ๋“œ์นด๋“œ๋กœ ์‚ฌ์šฉ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
var sent = UO.SendGumpSelect(0, 0x87654321, 100, 2000);
UO.Print(Convert.ToString(sent));

๋ช…๋ น ๊ตฌํ˜„

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

UO.SendGumpSelect(triggerId) โ€” UO.SendGumpSelect(Integer)

๋งค๊ฐœ๋ณ€์ˆ˜: triggerId (Integer/String)

๊ฒฐ๊ณผ: int / Integer.

ํ˜ธ์ถœ ์‹œ:

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

public int SendGumpSelect(int triggerId) => bridge.SendGumpSelect(triggerId);

UO.SendGumpSelect(triggerId) โ€” UO.SendGumpSelect(String)

๋งค๊ฐœ๋ณ€์ˆ˜: triggerId (Integer/String)

๊ฒฐ๊ณผ: int / Integer.

ํ˜ธ์ถœ ์‹œ:

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

public int SendGumpSelect(string triggerId) => SendGumpSelect(NumberConversions.ToInt(triggerId));

UO.SendGumpSelect(gumpIndex, triggerId) โ€” UO.SendGumpSelect(Any,Any)

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

๊ฒฐ๊ณผ: int / Integer.

ํ˜ธ์ถœ ์‹œ:

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

public int SendGumpSelect(InjectionValue gumpIndex, InjectionValue triggerId)

            => bridge.SendGumpSelect(NumberConversions.ToInt(gumpIndex), NumberConversions.ToInt(triggerId));

UO.SendGumpSelect(serial, gumpId, triggerId) โ€” UO.SendGumpSelect(Any,Any,Any)

๋งค๊ฐœ๋ณ€์ˆ˜: serial (Any), gumpId (Any), triggerId (Any)

๊ฒฐ๊ณผ: int / Integer.

ํ˜ธ์ถœ ์‹œ:

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

public int SendGumpSelect(InjectionValue serial, InjectionValue gumpId, InjectionValue triggerId)

            => bridge.SendGumpSelect(NumberConversions.ToInt(serial), NumberConversions.ToInt(gumpId), NumberConversions.ToInt(triggerId));

UO.SendGumpSelect(serial, gumpId, triggerId, timeout) โ€” UO.SendGumpSelect(Any,Any,Any,Any)

๋งค๊ฐœ๋ณ€์ˆ˜: serial (Any), gumpId (Any), triggerId (Any), timeout (Any)

๊ฒฐ๊ณผ: int / Integer.

ํ˜ธ์ถœ ์‹œ:

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

public int SendGumpSelect(InjectionValue serial, InjectionValue gumpId, InjectionValue triggerId, InjectionValue timeout)

            => bridge.SendGumpSelect(NumberConversions.ToInt(serial), NumberConversions.ToInt(gumpId),

                NumberConversions.ToInt(triggerId), Math.Max(0, NumberConversions.ToInt(timeout)));

UO.SetGump

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

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

void UO.SetGump(object? identifier, object? key, object? stateValue);
void UO.SetGump(object? gumpId, object? identifier, object? key, object? stateValue);

๊ธฐ์กด ์„œ๋ฒ„ ๊ฒ€ํ”„์˜ ํ•„๋“œ๋ฅผ ๋ณ€๊ฒฝํ•ฉ๋‹ˆ๋‹ค.

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

  • gumpId - 4๊ฐœ์˜ ์ธ์ˆ˜ ํ˜•์‹๋งŒ ํ•ด๋‹น: serial/id ๋˜๋Š” 0 ๊ฒ€ํ”„ ์ธ๋ฑ์Šค. ์„ธ ๊ฐ€์ง€ ์šฉ๋„๋กœ ์‚ฌ์šฉ๋˜๋Š” ํ˜•ํƒœ -1 - ์„ ํƒ/๋งˆ์ง€๋ง‰ ๊ฒ€ํ”„.
  • identifier โ€” ๋ฌธ์ž์—ด "checkbox", "radio" ๋˜๋Š” "textentry", ๋Œ€์†Œ๋ฌธ์ž๋Š” ์ค‘์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ง€์›๋˜์ง€ ์•Š๋Š” ์ด๋ฆ„์€ ํ•„๋“œ๋ฅผ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • key - int: ๋จผ์ € LocalSerial/ID ์š”์†Œ, ๊ทธ ๋‹ค์Œ์—๋Š” ์ง€์ •๋œ ์ข…๋ฅ˜์˜ ์š”์†Œ ์ค‘ ์ธ๋ฑ์Šค๊ฐ€ 0์ž…๋‹ˆ๋‹ค. ์š”์†Œ ์—†์Œ - ์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€์ž…๋‹ˆ๋‹ค.
  • stateValue โ€” ์ฒดํฌ๋ฐ•์Šค/๋ผ๋””์˜ค์˜ ๊ฒฝ์šฐ: "checked", "true" ๋Œ€์†Œ๋ฌธ์ž๋ฅผ ๊ตฌ๋ถ„ํ•˜์ง€ ์•Š๊ฑฐ๋‚˜ 0์ด ์•„๋‹Œ ์ธ์‹๋œ int ํฌํ•จ; ๋‹ค๋ฅธ ํ•˜๋‚˜๋Š” ๊บผ์ง‘๋‹ˆ๋‹ค. ํ…์ŠคํŠธ ์ž…๋ ฅ์˜ ๊ฒฝ์šฐ - ToString๊นŒ์ง€์˜ ๋ชจ๋“  ํ…์ŠคํŠธ์ž…๋‹ˆ๋‹ค.

๋ฐ˜ํ™˜๊ฐ’

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

๋™์ž‘

  • SetGumpValue ์ „ํ™” TrySetGumpValue; 0๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ฉ”์‹œ์ง€๊ฐ€ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. ์ด๋ฏธ ์กด์žฌํ•˜๋Š” Gump์˜ ๋กœ์ปฌ ํ•„๋“œ๋ฅผ ๋ณ€๊ฒฝํ•˜๊ณ  ์ƒˆ ์ฐฝ์„ ๊ธฐ๋‹ค๋ฆฌ๋Š” ํ›„ํฌ๋ฅผ ๋“ฑ๋กํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • ์ฒดํฌ๋ฐ•์Šค/ํ…์ŠคํŠธ ํ•ญ๋ชฉ์„ ๋ณ€๊ฒฝํ•ด๋„ ์„œ๋ฒ„ ์ž์ฒด์— ์‘๋‹ต์ด ์ „์†ก๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ „ํ™”๋ฅผ ๋ฐ›์œผ๋ ค๋ฉด SendGumpSelect/WaitGump ๋ฒ„ํŠผ์„ ์„ ํƒํ•˜์„ธ์š”. ๋ผ๋””์˜ค ๋ฒ„ํŠผ์€ ๋ณ„๋„์˜ ๋ณด๊ธฐ์—์„œ ์ฒ˜๋ฆฌ๋ฉ๋‹ˆ๋‹ค.

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

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

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

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

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

UO.Print("Calling UO.SetGump");
UO.SetGump("checkbox", 0, 1);

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

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

  • ๊ธฐ์กด ์„œ๋ฒ„ ๊ฒ€ํ”„์˜ ํ•„๋“œ๋ฅผ ๋ณ€๊ฒฝํ•ฉ๋‹ˆ๋‹ค.
if (Truth(UO.GetGumpsCount() > 0))
{
    UO.SetGump("checkbox", 0, 1);
}

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

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

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

  • SetGumpValue ์ „ํ™” TrySetGumpValue; 0๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ฉ”์‹œ์ง€๊ฐ€ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. ์ด๋ฏธ ์กด์žฌํ•˜๋Š” Gump์˜ ๋กœ์ปฌ ํ•„๋“œ๋ฅผ ๋ณ€๊ฒฝํ•˜๊ณ  ์ƒˆ ์ฐฝ์„ ๊ธฐ๋‹ค๋ฆฌ๋Š” ํ›„ํฌ๋ฅผ ๋“ฑ๋กํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
return  RunScenario();
 object? RunScenario()
{
    if (Truth(UO.GetGumpsCount() > 0))
    {
        UO.SetGump(0, "textentry", 0, "Example");
    }

    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. ์ „์ฒด ๋„์šฐ๋ฏธ ๊ธฐ๋Šฅ - ์Šคํฌ๋ฆฝํŠธ ํด๋ž˜์Šค

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

  • ์ฒดํฌ๋ฐ•์Šค/ํ…์ŠคํŠธ ํ•ญ๋ชฉ์„ ๋ณ€๊ฒฝํ•ด๋„ ์„œ๋ฒ„ ์ž์ฒด์— ์‘๋‹ต์ด ์ „์†ก๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ „ํ™”๋ฅผ ๋ฐ›์œผ๋ ค๋ฉด SendGumpSelect/WaitGump ๋ฒ„ํŠผ์„ ์„ ํƒํ•˜์„ธ์š”. ๋ผ๋””์˜ค ๋ฒ„ํŠผ์€ ๋ณ„๋„์˜ ๋ณด๊ธฐ์—์„œ ์ฒ˜๋ฆฌ๋ฉ๋‹ˆ๋‹ค.
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()
    {
        if (Truth(UO.GetGumpsCount() > 0))
        {
            UO.SetGump("radio", 0, "true");
            UO.SetGump("checkbox", 0, 0);
        }

        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.SetGump(identifier, key, stateValue) โ€” UO.SetGump(Any,Any,Any)

๋งค๊ฐœ๋ณ€์ˆ˜: identifier (Any), key (Any), stateValue (Any)

๊ฒฐ๊ณผ: void / Unit.

ํ˜ธ์ถœ ์‹œ:

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

public void SetGump(InjectionValue identifier, InjectionValue key, InjectionValue stateValue)

            => bridge.SetGumpValue(-1, identifier.ToString(), NumberConversions.ToInt(key), stateValue.ToString());

UO.SetGump(gumpId, identifier, key, stateValue) โ€” UO.SetGump(Any,Any,Any,Any)

๋งค๊ฐœ๋ณ€์ˆ˜: gumpId (Any), identifier (Any), key (Any), stateValue (Any)

๊ฒฐ๊ณผ: void / Unit.

ํ˜ธ์ถœ ์‹œ:

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

public void SetGump(InjectionValue gumpId, InjectionValue identifier, InjectionValue key, InjectionValue stateValue)

            => bridge.SetGumpValue(NumberConversions.ToInt(gumpId), identifier.ToString(), NumberConversions.ToInt(key), stateValue.ToString());

UO.WaitGump

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

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

void UO.WaitGump(object? value);
void UO.WaitGump(object? trigger1, object? trigger2);
void UO.WaitGump(object? trigger1, object? trigger2, object? trigger3);
void UO.WaitGump(object? trigger1, object? trigger2, object? trigger3, object? trigger4);
void UO.WaitGump(object? trigger1, object? trigger2, object? trigger3, object? trigger4, object? trigger5);
void UO.WaitGump(object? trigger1, object? trigger2, object? trigger3, object? trigger4, object? trigger5, object? trigger6);
void UO.WaitGump(object? trigger1, object? trigger2, object? trigger3, object? trigger4, object? trigger5, object? trigger6, object? trigger7);
void UO.WaitGump(object? trigger1, object? trigger2, object? trigger3, object? trigger4, object? trigger5, object? trigger6, object? trigger7, object? trigger8);
void UO.WaitGump(object? trigger1, object? trigger2, object? trigger3, object? trigger4, object? trigger5, object? trigger6, object? trigger7, object? trigger8, object? trigger9);
void UO.WaitGump(object? trigger1, object? trigger2, object? trigger3, object? trigger4, object? trigger5, object? trigger6, object? trigger7, object? trigger8, object? trigger9, object? trigger10);
void UO.WaitGump(object? trigger1, object? trigger2, object? trigger3, object? trigger4, object? trigger5, object? trigger6, object? trigger7, object? trigger8, object? trigger9, object? trigger10, object? trigger11);
void UO.WaitGump(object? trigger1, object? trigger2, object? trigger3, object? trigger4, object? trigger5, object? trigger6, object? trigger7, object? trigger8, object? trigger9, object? trigger10, object? trigger11, object? trigger12);
void UO.WaitGump(object? trigger1, object? trigger2, object? trigger3, object? trigger4, object? trigger5, object? trigger6, object? trigger7, object? trigger8, object? trigger9, object? trigger10, object? trigger11, object? trigger12, object? trigger13);
void UO.WaitGump(object? trigger1, object? trigger2, object? trigger3, object? trigger4, object? trigger5, object? trigger6, object? trigger7, object? trigger8, object? trigger9, object? trigger10, object? trigger11, object? trigger12, object? trigger13, object? trigger14);
void UO.WaitGump(object? trigger1, object? trigger2, object? trigger3, object? trigger4, object? trigger5, object? trigger6, object? trigger7, object? trigger8, object? trigger9, object? trigger10, object? trigger11, object? trigger12, object? trigger13, object? trigger14, object? trigger15);
void UO.WaitGump(object? trigger1, object? trigger2, object? trigger3, object? trigger4, object? trigger5, object? trigger6, object? trigger7, object? trigger8, object? trigger9, object? trigger10, object? trigger11, object? trigger12, object? trigger13, object? trigger14, object? trigger15, object? trigger16);

๋ฒ„ํŠผ์— ๋Œ€ํ•œ ์ผ๋ จ์˜ ์ผํšŒ์„ฑ ์‘๋‹ต์„ ๋“ฑ๋กํ•ฉ๋‹ˆ๋‹ค. ์Šคํฌ๋ฆฝํŠธ๋Š” ์ฆ‰์‹œ ๊ณ„์† ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค. ์ฐฝ์ด ์—†์–ด๋„ 30์ดˆ ์ง€์—ฐ์ด ๋ฐœ์ƒํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

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

  • value โ€” ์‹œํ€€์Šค ์š”์†Œ: int ButtonID, ์ˆซ์ž string, |/์‰ผํ‘œ๊ฐ€ ์žˆ๋Š” ๋ฌธ์ž์—ด ๋˜๋Š” ์ด๋Ÿฌํ•œ ์š”์†Œ์˜ ๋ฐฐ์—ด. ์ˆœ์„œ๋Š” ์™ผ์ชฝ์—์„œ ์˜ค๋ฅธ์ชฝ์ž…๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์ธ ๊ฒฝ๊ณ„ ๋ฐ ๊ทœ์น™ triggerId์ด ์ ์šฉ๋ฉ๋‹ˆ๋‹ค. ๊ฐ’์€ ๋ฐฐ์—ด๋„ ํ—ˆ์šฉํ•˜๋Š” object? ํ˜•์‹์˜ ์œ ์ผํ•œ ๋งค๊ฐœ๋ณ€์ˆ˜ ์ด๋ฆ„์ž…๋‹ˆ๋‹ค.
  • trigger1 โ€” ์‹œํ€€์Šค ์š”์†Œ: int ButtonID, ์ˆซ์ž string, |/์‰ผํ‘œ๊ฐ€ ์žˆ๋Š” ๋ฌธ์ž์—ด ๋˜๋Š” ์ด๋Ÿฌํ•œ ์š”์†Œ์˜ ๋ฐฐ์—ด. ์ˆœ์„œ๋Š” ์™ผ์ชฝ์—์„œ ์˜ค๋ฅธ์ชฝ์ž…๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์ธ ๊ฒฝ๊ณ„ ๋ฐ ๊ทœ์น™ triggerId์ด ์ ์šฉ๋ฉ๋‹ˆ๋‹ค. ๊ฐ’์€ ๋ฐฐ์—ด๋„ ํ—ˆ์šฉํ•˜๋Š” object? ํ˜•์‹์˜ ์œ ์ผํ•œ ๋งค๊ฐœ๋ณ€์ˆ˜ ์ด๋ฆ„์ž…๋‹ˆ๋‹ค.
  • trigger2 โ€” ์‹œํ€€์Šค ์š”์†Œ: int ButtonID, ์ˆซ์ž string, |/์‰ผํ‘œ๊ฐ€ ์žˆ๋Š” ๋ฌธ์ž์—ด ๋˜๋Š” ์ด๋Ÿฌํ•œ ์š”์†Œ์˜ ๋ฐฐ์—ด. ์ˆœ์„œ๋Š” ์™ผ์ชฝ์—์„œ ์˜ค๋ฅธ์ชฝ์ž…๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์ธ ๊ฒฝ๊ณ„ ๋ฐ ๊ทœ์น™ triggerId์ด ์ ์šฉ๋ฉ๋‹ˆ๋‹ค. ๊ฐ’์€ ๋ฐฐ์—ด๋„ ํ—ˆ์šฉํ•˜๋Š” object? ํ˜•์‹์˜ ์œ ์ผํ•œ ๋งค๊ฐœ๋ณ€์ˆ˜ ์ด๋ฆ„์ž…๋‹ˆ๋‹ค.
  • trigger3 โ€” ์‹œํ€€์Šค ์š”์†Œ: int ButtonID, ์ˆซ์ž string, |/์‰ผํ‘œ๊ฐ€ ์žˆ๋Š” ๋ฌธ์ž์—ด ๋˜๋Š” ์ด๋Ÿฌํ•œ ์š”์†Œ์˜ ๋ฐฐ์—ด. ์ˆœ์„œ๋Š” ์™ผ์ชฝ์—์„œ ์˜ค๋ฅธ์ชฝ์ž…๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์ธ ๊ฒฝ๊ณ„ ๋ฐ ๊ทœ์น™ triggerId์ด ์ ์šฉ๋ฉ๋‹ˆ๋‹ค. ๊ฐ’์€ ๋ฐฐ์—ด๋„ ํ—ˆ์šฉํ•˜๋Š” object? ํ˜•์‹์˜ ์œ ์ผํ•œ ๋งค๊ฐœ๋ณ€์ˆ˜ ์ด๋ฆ„์ž…๋‹ˆ๋‹ค.
  • trigger4 โ€” ์‹œํ€€์Šค ์š”์†Œ: int ButtonID, ์ˆซ์ž string, |/์‰ผํ‘œ๊ฐ€ ์žˆ๋Š” ๋ฌธ์ž์—ด ๋˜๋Š” ์ด๋Ÿฌํ•œ ์š”์†Œ์˜ ๋ฐฐ์—ด. ์ˆœ์„œ๋Š” ์™ผ์ชฝ์—์„œ ์˜ค๋ฅธ์ชฝ์ž…๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์ธ ๊ฒฝ๊ณ„ ๋ฐ ๊ทœ์น™ triggerId์ด ์ ์šฉ๋ฉ๋‹ˆ๋‹ค. ๊ฐ’์€ ๋ฐฐ์—ด๋„ ํ—ˆ์šฉํ•˜๋Š” object? ํ˜•์‹์˜ ์œ ์ผํ•œ ๋งค๊ฐœ๋ณ€์ˆ˜ ์ด๋ฆ„์ž…๋‹ˆ๋‹ค.
  • trigger5 โ€” ์‹œํ€€์Šค ์š”์†Œ: int ButtonID, ์ˆซ์ž string, |/์‰ผํ‘œ๊ฐ€ ์žˆ๋Š” ๋ฌธ์ž์—ด ๋˜๋Š” ์ด๋Ÿฌํ•œ ์š”์†Œ์˜ ๋ฐฐ์—ด. ์ˆœ์„œ๋Š” ์™ผ์ชฝ์—์„œ ์˜ค๋ฅธ์ชฝ์ž…๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์ธ ๊ฒฝ๊ณ„ ๋ฐ ๊ทœ์น™ triggerId์ด ์ ์šฉ๋ฉ๋‹ˆ๋‹ค. ๊ฐ’์€ ๋ฐฐ์—ด๋„ ํ—ˆ์šฉํ•˜๋Š” object? ํ˜•์‹์˜ ์œ ์ผํ•œ ๋งค๊ฐœ๋ณ€์ˆ˜ ์ด๋ฆ„์ž…๋‹ˆ๋‹ค.
  • trigger6 โ€” ์‹œํ€€์Šค ์š”์†Œ: int ButtonID, ์ˆซ์ž string, |/์‰ผํ‘œ๊ฐ€ ์žˆ๋Š” ๋ฌธ์ž์—ด ๋˜๋Š” ์ด๋Ÿฌํ•œ ์š”์†Œ์˜ ๋ฐฐ์—ด. ์ˆœ์„œ๋Š” ์™ผ์ชฝ์—์„œ ์˜ค๋ฅธ์ชฝ์ž…๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์ธ ๊ฒฝ๊ณ„ ๋ฐ ๊ทœ์น™ triggerId์ด ์ ์šฉ๋ฉ๋‹ˆ๋‹ค. ๊ฐ’์€ ๋ฐฐ์—ด๋„ ํ—ˆ์šฉํ•˜๋Š” object? ํ˜•์‹์˜ ์œ ์ผํ•œ ๋งค๊ฐœ๋ณ€์ˆ˜ ์ด๋ฆ„์ž…๋‹ˆ๋‹ค.
  • trigger7 โ€” ์‹œํ€€์Šค ์š”์†Œ: int ButtonID, ์ˆซ์ž string, |/์‰ผํ‘œ๊ฐ€ ์žˆ๋Š” ๋ฌธ์ž์—ด ๋˜๋Š” ์ด๋Ÿฌํ•œ ์š”์†Œ์˜ ๋ฐฐ์—ด. ์ˆœ์„œ๋Š” ์™ผ์ชฝ์—์„œ ์˜ค๋ฅธ์ชฝ์ž…๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์ธ ๊ฒฝ๊ณ„ ๋ฐ ๊ทœ์น™ triggerId์ด ์ ์šฉ๋ฉ๋‹ˆ๋‹ค. ๊ฐ’์€ ๋ฐฐ์—ด๋„ ํ—ˆ์šฉํ•˜๋Š” object? ํ˜•์‹์˜ ์œ ์ผํ•œ ๋งค๊ฐœ๋ณ€์ˆ˜ ์ด๋ฆ„์ž…๋‹ˆ๋‹ค.
  • trigger8 โ€” ์‹œํ€€์Šค ์š”์†Œ: int ButtonID, ์ˆซ์ž string, |/์‰ผํ‘œ๊ฐ€ ์žˆ๋Š” ๋ฌธ์ž์—ด ๋˜๋Š” ์ด๋Ÿฌํ•œ ์š”์†Œ์˜ ๋ฐฐ์—ด. ์ˆœ์„œ๋Š” ์™ผ์ชฝ์—์„œ ์˜ค๋ฅธ์ชฝ์ž…๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์ธ ๊ฒฝ๊ณ„ ๋ฐ ๊ทœ์น™ triggerId์ด ์ ์šฉ๋ฉ๋‹ˆ๋‹ค. ๊ฐ’์€ ๋ฐฐ์—ด๋„ ํ—ˆ์šฉํ•˜๋Š” object? ํ˜•์‹์˜ ์œ ์ผํ•œ ๋งค๊ฐœ๋ณ€์ˆ˜ ์ด๋ฆ„์ž…๋‹ˆ๋‹ค.
  • trigger9 โ€” ์‹œํ€€์Šค ์š”์†Œ: int ButtonID, ์ˆซ์ž string, |/์‰ผํ‘œ๊ฐ€ ์žˆ๋Š” ๋ฌธ์ž์—ด ๋˜๋Š” ์ด๋Ÿฌํ•œ ์š”์†Œ์˜ ๋ฐฐ์—ด. ์ˆœ์„œ๋Š” ์™ผ์ชฝ์—์„œ ์˜ค๋ฅธ์ชฝ์ž…๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์ธ ๊ฒฝ๊ณ„ ๋ฐ ๊ทœ์น™ triggerId์ด ์ ์šฉ๋ฉ๋‹ˆ๋‹ค. ๊ฐ’์€ ๋ฐฐ์—ด๋„ ํ—ˆ์šฉํ•˜๋Š” object? ํ˜•์‹์˜ ์œ ์ผํ•œ ๋งค๊ฐœ๋ณ€์ˆ˜ ์ด๋ฆ„์ž…๋‹ˆ๋‹ค.
  • trigger10 โ€” ์‹œํ€€์Šค ์š”์†Œ: int ButtonID, ์ˆซ์ž string, |/์‰ผํ‘œ๊ฐ€ ์žˆ๋Š” ๋ฌธ์ž์—ด ๋˜๋Š” ์ด๋Ÿฌํ•œ ์š”์†Œ์˜ ๋ฐฐ์—ด. ์ˆœ์„œ๋Š” ์™ผ์ชฝ์—์„œ ์˜ค๋ฅธ์ชฝ์ž…๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์ธ ๊ฒฝ๊ณ„ ๋ฐ ๊ทœ์น™ triggerId์ด ์ ์šฉ๋ฉ๋‹ˆ๋‹ค. ๊ฐ’์€ ๋ฐฐ์—ด๋„ ํ—ˆ์šฉํ•˜๋Š” object? ํ˜•์‹์˜ ์œ ์ผํ•œ ๋งค๊ฐœ๋ณ€์ˆ˜ ์ด๋ฆ„์ž…๋‹ˆ๋‹ค.
  • trigger11 โ€” ์‹œํ€€์Šค ์š”์†Œ: int ButtonID, ์ˆซ์ž string, |/์‰ผํ‘œ๊ฐ€ ์žˆ๋Š” ๋ฌธ์ž์—ด ๋˜๋Š” ์ด๋Ÿฌํ•œ ์š”์†Œ์˜ ๋ฐฐ์—ด. ์ˆœ์„œ๋Š” ์™ผ์ชฝ์—์„œ ์˜ค๋ฅธ์ชฝ์ž…๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์ธ ๊ฒฝ๊ณ„ ๋ฐ ๊ทœ์น™ triggerId์ด ์ ์šฉ๋ฉ๋‹ˆ๋‹ค. ๊ฐ’์€ ๋ฐฐ์—ด๋„ ํ—ˆ์šฉํ•˜๋Š” object? ํ˜•์‹์˜ ์œ ์ผํ•œ ๋งค๊ฐœ๋ณ€์ˆ˜ ์ด๋ฆ„์ž…๋‹ˆ๋‹ค.
  • trigger12 โ€” ์‹œํ€€์Šค ์š”์†Œ: int ButtonID, ์ˆซ์ž string, |/์‰ผํ‘œ๊ฐ€ ์žˆ๋Š” ๋ฌธ์ž์—ด ๋˜๋Š” ์ด๋Ÿฌํ•œ ์š”์†Œ์˜ ๋ฐฐ์—ด. ์ˆœ์„œ๋Š” ์™ผ์ชฝ์—์„œ ์˜ค๋ฅธ์ชฝ์ž…๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์ธ ๊ฒฝ๊ณ„ ๋ฐ ๊ทœ์น™ triggerId์ด ์ ์šฉ๋ฉ๋‹ˆ๋‹ค. ๊ฐ’์€ ๋ฐฐ์—ด๋„ ํ—ˆ์šฉํ•˜๋Š” object? ํ˜•์‹์˜ ์œ ์ผํ•œ ๋งค๊ฐœ๋ณ€์ˆ˜ ์ด๋ฆ„์ž…๋‹ˆ๋‹ค.
  • trigger13 โ€” ์‹œํ€€์Šค ์š”์†Œ: int ButtonID, ์ˆซ์ž string, |/์‰ผํ‘œ๊ฐ€ ์žˆ๋Š” ๋ฌธ์ž์—ด ๋˜๋Š” ์ด๋Ÿฌํ•œ ์š”์†Œ์˜ ๋ฐฐ์—ด. ์ˆœ์„œ๋Š” ์™ผ์ชฝ์—์„œ ์˜ค๋ฅธ์ชฝ์ž…๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์ธ ๊ฒฝ๊ณ„ ๋ฐ ๊ทœ์น™ triggerId์ด ์ ์šฉ๋ฉ๋‹ˆ๋‹ค. ๊ฐ’์€ ๋ฐฐ์—ด๋„ ํ—ˆ์šฉํ•˜๋Š” object? ํ˜•์‹์˜ ์œ ์ผํ•œ ๋งค๊ฐœ๋ณ€์ˆ˜ ์ด๋ฆ„์ž…๋‹ˆ๋‹ค.
  • trigger14 โ€” ์‹œํ€€์Šค ์š”์†Œ: int ButtonID, ์ˆซ์ž string, |/์‰ผํ‘œ๊ฐ€ ์žˆ๋Š” ๋ฌธ์ž์—ด ๋˜๋Š” ์ด๋Ÿฌํ•œ ์š”์†Œ์˜ ๋ฐฐ์—ด. ์ˆœ์„œ๋Š” ์™ผ์ชฝ์—์„œ ์˜ค๋ฅธ์ชฝ์ž…๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์ธ ๊ฒฝ๊ณ„ ๋ฐ ๊ทœ์น™ triggerId์ด ์ ์šฉ๋ฉ๋‹ˆ๋‹ค. ๊ฐ’์€ ๋ฐฐ์—ด๋„ ํ—ˆ์šฉํ•˜๋Š” object? ํ˜•์‹์˜ ์œ ์ผํ•œ ๋งค๊ฐœ๋ณ€์ˆ˜ ์ด๋ฆ„์ž…๋‹ˆ๋‹ค.
  • trigger15 โ€” ์‹œํ€€์Šค ์š”์†Œ: int ButtonID, ์ˆซ์ž string, |/์‰ผํ‘œ๊ฐ€ ์žˆ๋Š” ๋ฌธ์ž์—ด ๋˜๋Š” ์ด๋Ÿฌํ•œ ์š”์†Œ์˜ ๋ฐฐ์—ด. ์ˆœ์„œ๋Š” ์™ผ์ชฝ์—์„œ ์˜ค๋ฅธ์ชฝ์ž…๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์ธ ๊ฒฝ๊ณ„ ๋ฐ ๊ทœ์น™ triggerId์ด ์ ์šฉ๋ฉ๋‹ˆ๋‹ค. ๊ฐ’์€ ๋ฐฐ์—ด๋„ ํ—ˆ์šฉํ•˜๋Š” object? ํ˜•์‹์˜ ์œ ์ผํ•œ ๋งค๊ฐœ๋ณ€์ˆ˜ ์ด๋ฆ„์ž…๋‹ˆ๋‹ค.
  • trigger16 โ€” ์‹œํ€€์Šค ์š”์†Œ: int ButtonID, ์ˆซ์ž string, |/์‰ผํ‘œ๊ฐ€ ์žˆ๋Š” ๋ฌธ์ž์—ด ๋˜๋Š” ์ด๋Ÿฌํ•œ ์š”์†Œ์˜ ๋ฐฐ์—ด. ์ˆœ์„œ๋Š” ์™ผ์ชฝ์—์„œ ์˜ค๋ฅธ์ชฝ์ž…๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์ธ ๊ฒฝ๊ณ„ ๋ฐ ๊ทœ์น™ triggerId์ด ์ ์šฉ๋ฉ๋‹ˆ๋‹ค. ๊ฐ’์€ ๋ฐฐ์—ด๋„ ํ—ˆ์šฉํ•˜๋Š” object? ํ˜•์‹์˜ ์œ ์ผํ•œ ๋งค๊ฐœ๋ณ€์ˆ˜ ์ด๋ฆ„์ž…๋‹ˆ๋‹ค.

๋ฐ˜ํ™˜๊ฐ’

void - ์•„๋ฌด๊ฒƒ๋„ ๋ฐ˜ํ™˜ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์„ฑ๊ณต๋„, ์ƒˆ ๊ฐ’๋„, ์„œ๋ฒ„ ํ™•์ธ๋„ ๋ฐ˜ํ™˜๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋™์ž‘

  • ์›ํ•˜๋Š” ButtonID๊ฐ€ ์žˆ๋Š” ์‹ค์ œ ํ™œ์„ฑํ™” ๋ฒ„ํŠผ์„ ์ฐพ์Šต๋‹ˆ๋‹ค. ํ•„์ˆ˜ ๋ฒ„ํŠผ์ด ์—†๋Š” ํŽ˜์ด์ง€ ๋ฐ ์ฐฝ ์ „ํ™˜ ๋ฒ„ํŠผ์€ ๊ฑด๋„ˆ๋œ๋‹ˆ๋‹ค. ํ›„์† ID๋Š” ์ฒซ ๋ฒˆ์งธ ๋Œ€๊ธฐ๋ฅผ ์šฐํšŒํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ํ•˜๋‚˜์˜ ๋งˆํฌ์—… ์ „๋‹ฌ์˜ ๊ฒฝ์šฐ - ํ•˜๋‚˜์˜ ์ฐฝ์— ํ•˜๋‚˜ ์ด์ƒ์˜ ์‘๋‹ต์ด ์—†์Šต๋‹ˆ๋‹ค. ์—…๋ฐ์ดํŠธ๋œ ๋งˆํฌ์—…์€ ๋™์ผํ•œ ์ฐฝ ๊ฐœ์ฒด๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๋™์ผํ•œ ์Šคํฌ๋ฆฝํŠธ์˜ ๋‹ค์Œ WaitGump๋Š” ๋ณด๋ฅ˜ ์ค‘์ธ ์‹œํ€€์Šค๋ฅผ ์™„๋ฃŒํ•ฉ๋‹ˆ๋‹ค. ๊ฒ€์ƒ‰์€ GumpID์—๋งŒ ๊ตญํ•œ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ •ํ™•ํ•œ ์„ ํƒ์„ ์œ„ํ•ด NumGumpButton ๋˜๋Š” SendGumpSelect๋ฅผ ์‚ฌ์šฉํ•˜์„ธ์š”. ButtonID=0๋Š” ID 0์˜ ๊ธฐ์กด ํ™œ์„ฑํ™” ๋ฒ„ํŠผ์ด ์žˆ๋Š” ๊ฒฝ์šฐ์—๋งŒ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ๋ณดํŽธ์ ์ธ ํ์‡„๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค.
  • ์ ˆ์ฐจ๊ฐ€ ์ •์ƒ์ ์œผ๋กœ ์™„๋ฃŒ๋˜๋ฉด ๋Œ€๊ธฐ ์‹œ๊ฐ„์ด ์ ˆ์•ฝ๋ฉ๋‹ˆ๋‹ค. ์†Œ์œ ์ž๋ฅผ ์ทจ์†Œํ•˜๊ฑฐ๋‚˜ ๊ทธ์˜ ์ด๋ฆ„์œผ๋กœ Terminate์„ ์ž…๋ ฅํ•˜๋ฉด ๋Œ€๊ธฐ ์‹œ๊ฐ„์ด ์ œ๊ฑฐ๋ฉ๋‹ˆ๋‹ค. TerminateAll๋Š” ์ ˆ์ฐจ ์™„๋ฃŒ ํ›„ ๋‚จ์€ ๋‚ด์šฉ์„ ํฌํ•จํ•˜์—ฌ ๋ชจ๋“  ๋‚ด์šฉ์„ ์‚ญ์ œํ•ฉ๋‹ˆ๋‹ค. ์„ธ์ƒ์„ ๋ฐ”๊พธ๋ฉด ๋Œ€๊ธฐ์—ด์ด ์ง€์›Œ์ง‘๋‹ˆ๋‹ค. ๊ธฐ๋Œ€์น˜๋Š” ํ”„๋กœํ•„์— ์ €์žฅ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

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

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

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

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

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

UO.Print("Calling UO.WaitGump");
UO.WaitGump(100);

1. ํ•˜๋‚˜์˜ ๋‹ต๋ณ€ - ์ง์ ‘ ์Šคํฌ๋ฆฝํŠธ

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

  • 100 โ€” ์‘๋‹ต์˜ ButtonID์ž…๋‹ˆ๋‹ค. WaitGump๋Š” UseObject ์ด์ „์— ๋“ฑ๋กํ•ฉ๋‹ˆ๋‹ค. ์ถ”๊ฐ€ ์‹คํ–‰์ด ์„œ๋ฒ„๊ฐ€ ์ด๋ฏธ ์‘๋‹ต์„ ์ˆ˜๋ฝํ–ˆ๋‹ค๋Š” ์˜๋ฏธ๋Š” ์•„๋‹™๋‹ˆ๋‹ค.
UO.WaitGump(100);
UO.UseObject("0x40001234");

2. ์—ฌ๋Ÿฌ ๋‹จ๊ณ„ - ์Šคํฌ๋ฆฝํŠธ ๊ธฐ๋Šฅ

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

  • 7, 22 ๋ฐ 1๋Š” ์ˆœ์ฐจ ํ˜•์‹์˜ ButtonID์ž…๋‹ˆ๋‹ค. ID๋Š” ์ˆœ์„œ๋Œ€๋กœ ํ™•์ธ๋ฉ๋‹ˆ๋‹ค. ์ธ์ˆ˜ ์ˆ˜๋Š” ์ง€์—ฐ์„ ์ง€์ •ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ํ˜ธ์ถœ์€ ์ „์ฒด ์‹œํ€€์Šค๋ฅผ ๊ธฐ๋กํ•ฉ๋‹ˆ๋‹ค.
return  RunScenario();
 object? RunScenario()
{
    UO.WaitGump(7, 22, 1);
    UO.UseObject("0x40001234");
    return null;
}

3. ๊ธฐ๋Œ€ ์ทจ์†Œ - ์Šคํฌ๋ฆฝํŠธ ํด๋ž˜์Šค

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

  • 7|22|1 ์ค„์€ ๋™์ผํ•œ ์ˆœ์„œ๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค. TerminateAll ๊ทธ๋Ÿฐ ๋‹ค์Œ ๋ณด๋ฅ˜ ์ค‘์ธ ๋ชจ๋“  ๊ฒ€ํ”„๋ฅผ ์ง€์šฐ๊ณ  ๋ชจ๋“  ์ ˆ์ฐจ๋ฅผ ์ค‘์ง€ํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ์„ธ๊ณ„์ ์ธ ํ–‰๋™์ž…๋‹ˆ๋‹ค.
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.WaitGump("7|22|1");
        UO.TerminateAll();
        return null;
    }
}

๋ช…๋ น ๊ตฌํ˜„

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

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

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

๊ฒฐ๊ณผ: void / Unit.

ํ˜ธ์ถœ ์‹œ:

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

case "waitgump": CompactWaitGump(arguments); return InjectionValue.Unit;

UO.WaitGump(value) โ€” UO.WaitGump(Integer)

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

๊ฒฐ๊ณผ: void / Unit.

ํ˜ธ์ถœ ์‹œ:

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

public void WaitGump(int triggerId)

        {

            if (bridge is IApiGumpAutomation automation) automation.QueueGumpButtons(new[] { triggerId });

            else bridge.WaitGumpSelect(triggerId, 30_000);

        }

UO.WaitGump(value) โ€” UO.WaitGump(String)

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

๊ฒฐ๊ณผ: void / Unit.

ํ˜ธ์ถœ ์‹œ:

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

public void WaitGump(string triggerId)

        {

            string text = (triggerId ?? string.Empty).Trim();

            if (text.Contains('|') || text.Contains(','))

            {

                InjectionValue[] chain = text.Split(new[] { '|', ',' }, StringSplitOptions.RemoveEmptyEntries)

                    .Select(value => new InjectionValue(value.Trim())).ToArray();

                CompactWaitGump(chain);

                return;

            }

            WaitGump(NumberConversions.ToInt(triggerId));

        }

UO.WaitGump(trigger1, trigger2) โ€” UO.WaitGump(Any,Any)

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

๊ฒฐ๊ณผ: void / Unit.

ํ˜ธ์ถœ ์‹œ:

ํ˜ธ์ถœ ์‹œ ์ €์žฅ๋œ ์ฒ˜๋ฆฌ๊ธฐ delegate๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. ๋“ฑ๋ก ๋ฉ”์„œ๋“œ๋Š” API๋ฅผ ๊ตฌ์„ฑํ•  ๋•Œ ์ด delegate๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

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

values =>

                    {

                        CompactWaitGump(values);

                        return InjectionValue.Unit;

                    }

UO.WaitGump(trigger1, trigger2, trigger3) โ€” UO.WaitGump(Any,Any,Any)

๋งค๊ฐœ๋ณ€์ˆ˜: trigger1 (Any), trigger2 (Any), trigger3 (Any)

๊ฒฐ๊ณผ: void / Unit.

ํ˜ธ์ถœ ์‹œ:

ํ˜ธ์ถœ ์‹œ ์ €์žฅ๋œ ์ฒ˜๋ฆฌ๊ธฐ delegate๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. ๋“ฑ๋ก ๋ฉ”์„œ๋“œ๋Š” API๋ฅผ ๊ตฌ์„ฑํ•  ๋•Œ ์ด delegate๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

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

values =>

                    {

                        CompactWaitGump(values);

                        return InjectionValue.Unit;

                    }

UO.WaitGump(trigger1, trigger2, trigger3, trigger4) โ€” UO.WaitGump(Any,Any,Any,Any)

๋งค๊ฐœ๋ณ€์ˆ˜: trigger1 (Any), trigger2 (Any), trigger3 (Any), trigger4 (Any)

๊ฒฐ๊ณผ: void / Unit.

ํ˜ธ์ถœ ์‹œ:

ํ˜ธ์ถœ ์‹œ ์ €์žฅ๋œ ์ฒ˜๋ฆฌ๊ธฐ delegate๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. ๋“ฑ๋ก ๋ฉ”์„œ๋“œ๋Š” API๋ฅผ ๊ตฌ์„ฑํ•  ๋•Œ ์ด delegate๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

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

values =>

                    {

                        CompactWaitGump(values);

                        return InjectionValue.Unit;

                    }

UO.WaitGump(trigger1, trigger2, trigger3, trigger4, trigger5) โ€” UO.WaitGump(Any,Any,Any,Any,Any)

๋งค๊ฐœ๋ณ€์ˆ˜: trigger1 (Any), trigger2 (Any), trigger3 (Any), trigger4 (Any), trigger5 (Any)

๊ฒฐ๊ณผ: void / Unit.

ํ˜ธ์ถœ ์‹œ:

ํ˜ธ์ถœ ์‹œ ์ €์žฅ๋œ ์ฒ˜๋ฆฌ๊ธฐ delegate๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. ๋“ฑ๋ก ๋ฉ”์„œ๋“œ๋Š” API๋ฅผ ๊ตฌ์„ฑํ•  ๋•Œ ์ด delegate๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

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

values =>

                    {

                        CompactWaitGump(values);

                        return InjectionValue.Unit;

                    }

UO.WaitGump(trigger1, trigger2, trigger3, trigger4, trigger5, trigger6) โ€” UO.WaitGump(Any,Any,Any,Any,Any,Any)

๋งค๊ฐœ๋ณ€์ˆ˜: trigger1 (Any), trigger2 (Any), trigger3 (Any), trigger4 (Any), trigger5 (Any), trigger6 (Any)

๊ฒฐ๊ณผ: void / Unit.

ํ˜ธ์ถœ ์‹œ:

ํ˜ธ์ถœ ์‹œ ์ €์žฅ๋œ ์ฒ˜๋ฆฌ๊ธฐ delegate๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. ๋“ฑ๋ก ๋ฉ”์„œ๋“œ๋Š” API๋ฅผ ๊ตฌ์„ฑํ•  ๋•Œ ์ด delegate๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

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

values =>

                    {

                        CompactWaitGump(values);

                        return InjectionValue.Unit;

                    }

UO.WaitGump(trigger1, trigger2, trigger3, trigger4, trigger5, trigger6, trigger7) โ€” UO.WaitGump(Any,Any,Any,Any,Any,Any,Any)

๋งค๊ฐœ๋ณ€์ˆ˜: trigger1 (Any), trigger2 (Any), trigger3 (Any), trigger4 (Any), trigger5 (Any), trigger6 (Any), trigger7 (Any)

๊ฒฐ๊ณผ: void / Unit.

ํ˜ธ์ถœ ์‹œ:

ํ˜ธ์ถœ ์‹œ ์ €์žฅ๋œ ์ฒ˜๋ฆฌ๊ธฐ delegate๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. ๋“ฑ๋ก ๋ฉ”์„œ๋“œ๋Š” API๋ฅผ ๊ตฌ์„ฑํ•  ๋•Œ ์ด delegate๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

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

values =>

                    {

                        CompactWaitGump(values);

                        return InjectionValue.Unit;

                    }

UO.WaitGump(trigger1, trigger2, trigger3, trigger4, trigger5, trigger6, trigger7, trigger8) โ€” UO.WaitGump(Any,Any,Any,Any,Any,Any,Any,Any)

๋งค๊ฐœ๋ณ€์ˆ˜: trigger1 (Any), trigger2 (Any), trigger3 (Any), trigger4 (Any), trigger5 (Any), trigger6 (Any), trigger7 (Any), trigger8 (Any)

๊ฒฐ๊ณผ: void / Unit.

ํ˜ธ์ถœ ์‹œ:

ํ˜ธ์ถœ ์‹œ ์ €์žฅ๋œ ์ฒ˜๋ฆฌ๊ธฐ delegate๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. ๋“ฑ๋ก ๋ฉ”์„œ๋“œ๋Š” API๋ฅผ ๊ตฌ์„ฑํ•  ๋•Œ ์ด delegate๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

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

values =>

                    {

                        CompactWaitGump(values);

                        return InjectionValue.Unit;

                    }

UO.WaitGump(trigger1, trigger2, trigger3, trigger4, trigger5, trigger6, trigger7, trigger8, trigger9) โ€” UO.WaitGump(Any,Any,Any,Any,Any,Any,Any,Any,Any)

๋งค๊ฐœ๋ณ€์ˆ˜: trigger1 (Any), trigger2 (Any), trigger3 (Any), trigger4 (Any), trigger5 (Any), trigger6 (Any), trigger7 (Any), trigger8 (Any), trigger9 (Any)

๊ฒฐ๊ณผ: void / Unit.

ํ˜ธ์ถœ ์‹œ:

ํ˜ธ์ถœ ์‹œ ์ €์žฅ๋œ ์ฒ˜๋ฆฌ๊ธฐ delegate๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. ๋“ฑ๋ก ๋ฉ”์„œ๋“œ๋Š” API๋ฅผ ๊ตฌ์„ฑํ•  ๋•Œ ์ด delegate๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

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

values =>

                    {

                        CompactWaitGump(values);

                        return InjectionValue.Unit;

                    }

UO.WaitGump(trigger1, trigger2, trigger3, trigger4, trigger5, trigger6, trigger7, trigger8, trigger9, trigger10) โ€” UO.WaitGump(Any,Any,Any,Any,Any,Any,Any,Any,Any,Any)

๋งค๊ฐœ๋ณ€์ˆ˜: trigger1 (Any), trigger2 (Any), trigger3 (Any), trigger4 (Any), trigger5 (Any), trigger6 (Any), trigger7 (Any), trigger8 (Any), trigger9 (Any), trigger10 (Any)

๊ฒฐ๊ณผ: void / Unit.

ํ˜ธ์ถœ ์‹œ:

ํ˜ธ์ถœ ์‹œ ์ €์žฅ๋œ ์ฒ˜๋ฆฌ๊ธฐ delegate๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. ๋“ฑ๋ก ๋ฉ”์„œ๋“œ๋Š” API๋ฅผ ๊ตฌ์„ฑํ•  ๋•Œ ์ด delegate๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

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

values =>

                    {

                        CompactWaitGump(values);

                        return InjectionValue.Unit;

                    }

UO.WaitGump(trigger1, trigger2, trigger3, trigger4, trigger5, trigger6, trigger7, trigger8, trigger9, trigger10, trigger11) โ€” UO.WaitGump(Any,Any,Any,Any,Any,Any,Any,Any,Any,Any,Any)

๋งค๊ฐœ๋ณ€์ˆ˜: trigger1 (Any), trigger2 (Any), trigger3 (Any), trigger4 (Any), trigger5 (Any), trigger6 (Any), trigger7 (Any), trigger8 (Any), trigger9 (Any), trigger10 (Any), trigger11 (Any)

๊ฒฐ๊ณผ: void / Unit.

ํ˜ธ์ถœ ์‹œ:

ํ˜ธ์ถœ ์‹œ ์ €์žฅ๋œ ์ฒ˜๋ฆฌ๊ธฐ delegate๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. ๋“ฑ๋ก ๋ฉ”์„œ๋“œ๋Š” API๋ฅผ ๊ตฌ์„ฑํ•  ๋•Œ ์ด delegate๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

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

values =>

                    {

                        CompactWaitGump(values);

                        return InjectionValue.Unit;

                    }

UO.WaitGump(trigger1, trigger2, trigger3, trigger4, trigger5, trigger6, trigger7, trigger8, trigger9, trigger10, trigger11, trigger12) โ€” UO.WaitGump(Any,Any,Any,Any,Any,Any,Any,Any,Any,Any,Any,Any)

๋งค๊ฐœ๋ณ€์ˆ˜: trigger1 (Any), trigger2 (Any), trigger3 (Any), trigger4 (Any), trigger5 (Any), trigger6 (Any), trigger7 (Any), trigger8 (Any), trigger9 (Any), trigger10 (Any), trigger11 (Any), trigger12 (Any)

๊ฒฐ๊ณผ: void / Unit.

ํ˜ธ์ถœ ์‹œ:

ํ˜ธ์ถœ ์‹œ ์ €์žฅ๋œ ์ฒ˜๋ฆฌ๊ธฐ delegate๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. ๋“ฑ๋ก ๋ฉ”์„œ๋“œ๋Š” API๋ฅผ ๊ตฌ์„ฑํ•  ๋•Œ ์ด delegate๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

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

values =>

                    {

                        CompactWaitGump(values);

                        return InjectionValue.Unit;

                    }

UO.WaitGump(trigger1, trigger2, trigger3, trigger4, trigger5, trigger6, trigger7, trigger8, trigger9, trigger10, trigger11, trigger12, trigger13) โ€” UO.WaitGump(Any,Any,Any,Any,Any,Any,Any,Any,Any,Any,Any,Any,Any)

๋งค๊ฐœ๋ณ€์ˆ˜: trigger1 (Any), trigger2 (Any), trigger3 (Any), trigger4 (Any), trigger5 (Any), trigger6 (Any), trigger7 (Any), trigger8 (Any), trigger9 (Any), trigger10 (Any), trigger11 (Any), trigger12 (Any), trigger13 (Any)

๊ฒฐ๊ณผ: void / Unit.

ํ˜ธ์ถœ ์‹œ:

ํ˜ธ์ถœ ์‹œ ์ €์žฅ๋œ ์ฒ˜๋ฆฌ๊ธฐ delegate๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. ๋“ฑ๋ก ๋ฉ”์„œ๋“œ๋Š” API๋ฅผ ๊ตฌ์„ฑํ•  ๋•Œ ์ด delegate๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

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

values =>

                    {

                        CompactWaitGump(values);

                        return InjectionValue.Unit;

                    }

UO.WaitGump(trigger1, trigger2, trigger3, trigger4, trigger5, trigger6, trigger7, trigger8, trigger9, trigger10, trigger11, trigger12, trigger13, trigger14) โ€” UO.WaitGump(Any,Any,Any,Any,Any,Any,Any,Any,Any,Any,Any,Any,Any,Any)

๋งค๊ฐœ๋ณ€์ˆ˜: trigger1 (Any), trigger2 (Any), trigger3 (Any), trigger4 (Any), trigger5 (Any), trigger6 (Any), trigger7 (Any), trigger8 (Any), trigger9 (Any), trigger10 (Any), trigger11 (Any), trigger12 (Any), trigger13 (Any), trigger14 (Any)

๊ฒฐ๊ณผ: void / Unit.

ํ˜ธ์ถœ ์‹œ:

ํ˜ธ์ถœ ์‹œ ์ €์žฅ๋œ ์ฒ˜๋ฆฌ๊ธฐ delegate๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. ๋“ฑ๋ก ๋ฉ”์„œ๋“œ๋Š” API๋ฅผ ๊ตฌ์„ฑํ•  ๋•Œ ์ด delegate๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

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

values =>

                    {

                        CompactWaitGump(values);

                        return InjectionValue.Unit;

                    }

UO.WaitGump(trigger1, trigger2, trigger3, trigger4, trigger5, trigger6, trigger7, trigger8, trigger9, trigger10, trigger11, trigger12, trigger13, trigger14, trigger15) โ€” UO.WaitGump(Any,Any,Any,Any,Any,Any,Any,Any,Any,Any,Any,Any,Any,Any,Any)

๋งค๊ฐœ๋ณ€์ˆ˜: trigger1 (Any), trigger2 (Any), trigger3 (Any), trigger4 (Any), trigger5 (Any), trigger6 (Any), trigger7 (Any), trigger8 (Any), trigger9 (Any), trigger10 (Any), trigger11 (Any), trigger12 (Any), trigger13 (Any), trigger14 (Any), trigger15 (Any)

๊ฒฐ๊ณผ: void / Unit.

ํ˜ธ์ถœ ์‹œ:

ํ˜ธ์ถœ ์‹œ ์ €์žฅ๋œ ์ฒ˜๋ฆฌ๊ธฐ delegate๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. ๋“ฑ๋ก ๋ฉ”์„œ๋“œ๋Š” API๋ฅผ ๊ตฌ์„ฑํ•  ๋•Œ ์ด delegate๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

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

values =>

                    {

                        CompactWaitGump(values);

                        return InjectionValue.Unit;

                    }

UO.WaitGump(trigger1, trigger2, trigger3, trigger4, trigger5, trigger6, trigger7, trigger8, trigger9, trigger10, trigger11, trigger12, trigger13, trigger14, trigger15, trigger16) โ€” UO.WaitGump(Any,Any,Any,Any,Any,Any,Any,Any,Any,Any,Any,Any,Any,Any,Any,Any)

๋งค๊ฐœ๋ณ€์ˆ˜: trigger1 (Any), trigger2 (Any), trigger3 (Any), trigger4 (Any), trigger5 (Any), trigger6 (Any), trigger7 (Any), trigger8 (Any), trigger9 (Any), trigger10 (Any), trigger11 (Any), trigger12 (Any), trigger13 (Any), trigger14 (Any), trigger15 (Any), trigger16 (Any)

๊ฒฐ๊ณผ: void / Unit.

ํ˜ธ์ถœ ์‹œ:

ํ˜ธ์ถœ ์‹œ ์ €์žฅ๋œ ์ฒ˜๋ฆฌ๊ธฐ delegate๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. ๋“ฑ๋ก ๋ฉ”์„œ๋“œ๋Š” API๋ฅผ ๊ตฌ์„ฑํ•  ๋•Œ ์ด delegate๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

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

values =>

                    {

                        CompactWaitGump(values);

                        return InjectionValue.Unit;

                    }

UO.WaitGumpCheck

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

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

void UO.WaitGumpCheck(object? index, object? state);
void UO.WaitGumpCheck(object? index, object? state, object? index2, object? state2);
void UO.WaitGumpCheck(object? index, object? state, object? index2, object? state2, object? index3, object? state3);

ํ˜„์žฌ ๊ฒ€ํ”„์˜ ์ฒดํฌ๋ฐ•์Šค ํ•„๋“œ๋ฅผ ์ตœ๋Œ€ 3๊ฐœ๊นŒ์ง€ ๋ณ€๊ฒฝํ•ฉ๋‹ˆ๋‹ค.

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

  • index โ€” int ID ์š”์†Œ ๋˜๋Š” SetGump์™€ ๊ฐ™์€ 0 ์ธ๋ฑ์Šค์ž…๋‹ˆ๋‹ค. ์ธ์ˆ˜๋Š” ์„ ํƒ์ž, ๊ฐ’ ์Œ์œผ๋กœ ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค.
  • index2 โ€” int ID ์š”์†Œ ๋˜๋Š” SetGump์™€ ๊ฐ™์€ 0 ์ธ๋ฑ์Šค์ž…๋‹ˆ๋‹ค. ์ธ์ˆ˜๋Š” ์„ ํƒ์ž, ๊ฐ’ ์Œ์œผ๋กœ ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค.
  • index3 โ€” int ID ์š”์†Œ ๋˜๋Š” SetGump์™€ ๊ฐ™์€ 0 ์ธ๋ฑ์Šค์ž…๋‹ˆ๋‹ค. ์ธ์ˆ˜๋Š” ์„ ํƒ์ž, ๊ฐ’ ์Œ์œผ๋กœ ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค.
  • state โ€” ToString๊นŒ์ง€์˜ ํ•„๋“œ ๊ฐ’์ž…๋‹ˆ๋‹ค. ํ™•์ธ๋ž€์—๋Š” "์„ ํƒ๋จ"/"true"/0์ด ์•„๋‹Œ ์ˆซ์ž๊ฐ€ ํฌํ•จ๋ฉ๋‹ˆ๋‹ค. textentry๋Š” ํ…์ŠคํŠธ๋ฅผ ํ—ˆ์šฉํ•ฉ๋‹ˆ๋‹ค.
  • state2 โ€” ToString๊นŒ์ง€์˜ ํ•„๋“œ ๊ฐ’์ž…๋‹ˆ๋‹ค. ํ™•์ธ๋ž€์—๋Š” "์„ ํƒ๋จ"/"true"/0์ด ์•„๋‹Œ ์ˆซ์ž๊ฐ€ ํฌํ•จ๋ฉ๋‹ˆ๋‹ค. textentry๋Š” ํ…์ŠคํŠธ๋ฅผ ํ—ˆ์šฉํ•ฉ๋‹ˆ๋‹ค.
  • state3 โ€” ToString๊นŒ์ง€์˜ ํ•„๋“œ ๊ฐ’์ž…๋‹ˆ๋‹ค. ํ™•์ธ๋ž€์—๋Š” "์„ ํƒ๋จ"/"true"/0์ด ์•„๋‹Œ ์ˆซ์ž๊ฐ€ ํฌํ•จ๋ฉ๋‹ˆ๋‹ค. textentry๋Š” ํ…์ŠคํŠธ๋ฅผ ํ—ˆ์šฉํ•ฉ๋‹ˆ๋‹ค.

๋ฐ˜ํ™˜๊ฐ’

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

๋™์ž‘

  • ExecuteLegacyManualAlias๋Š” ์Œ์œผ๋กœ ์ธ์ˆ˜๋ฅผ ๊ฒ€ํ† ํ•˜๊ณ  ๊ฐ ์ธ์ˆ˜์— ๋Œ€ํ•ด SetGumpValue(-1, "checkbox", selector, value)๋ฅผ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค. ๋“ฑ๋ก๋œ ๋ชจ๋“  ์–‘์‹์€ 2, 4 ๋˜๋Š” 6 ์ธ์ˆ˜์ž…๋‹ˆ๋‹ค.
  • UO.Wait๋ผ๋Š” ์ด๋ฆ„์€ ๋Œ€๊ธฐ๋ฅผ ์˜๋ฏธํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ฐจ๋‹จ๋„ ์—†๊ณ  ํ–ฅํ›„ ๊ฒ€ํ”„๋ฅผ ์œ„ํ•œ ๋Œ€๊ธฐ์—ด๋„ ์—†์Šต๋‹ˆ๋‹ค. ํ•„๋“œ๊ฐ€ ๋ˆ„๋ฝ๋˜๋ฉด ์˜ค๋ฅ˜๊ฐ€ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. ๋ฒ„ํŠผ ์‘๋‹ต์ด ์ „์†ก๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

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

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

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

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

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

UO.Print("Calling UO.WaitGumpCheck");
UO.WaitGumpCheck(0, 1);

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

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

  • ํ˜„์žฌ ๊ฒ€ํ”„์˜ ์ฒดํฌ๋ฐ•์Šค ํ•„๋“œ๋ฅผ ์ตœ๋Œ€ 3๊ฐœ๊นŒ์ง€ ๋ณ€๊ฒฝํ•ฉ๋‹ˆ๋‹ค.
if (Truth(UO.GetGumpsCount() > 0))
{
    UO.WaitGumpCheck(0, 1);
}

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

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

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

  • ExecuteLegacyManualAlias๋Š” ์Œ์œผ๋กœ ์ธ์ˆ˜๋ฅผ ๊ฒ€ํ† ํ•˜๊ณ  ๊ฐ ์ธ์ˆ˜์— ๋Œ€ํ•ด SetGumpValue(-1, "checkbox", selector, value)๋ฅผ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค. ๋“ฑ๋ก๋œ ๋ชจ๋“  ์–‘์‹์€ 2, 4 ๋˜๋Š” 6 ์ธ์ˆ˜์ž…๋‹ˆ๋‹ค.
return  RunScenario();
 object? RunScenario()
{
    if (Truth(UO.GetGumpsCount() > 0))
    {
        UO.WaitGumpCheck(0, 1, 1, 0);
    }

    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. ์ „์ฒด ๋„์šฐ๋ฏธ ๊ธฐ๋Šฅ - ์Šคํฌ๋ฆฝํŠธ ํด๋ž˜์Šค

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

  • UO.Wait๋ผ๋Š” ์ด๋ฆ„์€ ๋Œ€๊ธฐ๋ฅผ ์˜๋ฏธํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ฐจ๋‹จ๋„ ์—†๊ณ  ํ–ฅํ›„ ๊ฒ€ํ”„๋ฅผ ์œ„ํ•œ ๋Œ€๊ธฐ์—ด๋„ ์—†์Šต๋‹ˆ๋‹ค. ํ•„๋“œ๊ฐ€ ๋ˆ„๋ฝ๋˜๋ฉด ์˜ค๋ฅ˜๊ฐ€ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. ๋ฒ„ํŠผ ์‘๋‹ต์ด ์ „์†ก๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
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()
    {
        if (Truth(UO.GetGumpsCount() > 0))
        {
            UO.WaitGumpCheck(0, 1, 1, 0, 2, 1);
        }

        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.WaitGumpCheck(index, state) โ€” UO.WaitGumpCheck(Any,Any)

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

๊ฒฐ๊ณผ: void / Unit.

ํ˜ธ์ถœ ์‹œ:

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

case "waitgumpcheck":

                    for (int index = 0; index + 1 < arguments.Length; index += 2)

                        bridge.SetGumpValue(-1, "checkbox", Arg(index), Text(index + 1));

                    break;

UO.WaitGumpCheck(index, state, index2, state2) โ€” UO.WaitGumpCheck(Any,Any,Any,Any)

๋งค๊ฐœ๋ณ€์ˆ˜: index (Any), state (Any), index2 (Any), state2 (Any)

๊ฒฐ๊ณผ: void / Unit.

ํ˜ธ์ถœ ์‹œ:

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

case "waitgumpcheck":

                    for (int index = 0; index + 1 < arguments.Length; index += 2)

                        bridge.SetGumpValue(-1, "checkbox", Arg(index), Text(index + 1));

                    break;

UO.WaitGumpCheck(index, state, index2, state2, index3, state3) โ€” UO.WaitGumpCheck(Any,Any,Any,Any,Any,Any)

๋งค๊ฐœ๋ณ€์ˆ˜: index (Any), state (Any), index2 (Any), state2 (Any), index3 (Any), state3 (Any)

๊ฒฐ๊ณผ: void / Unit.

ํ˜ธ์ถœ ์‹œ:

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

case "waitgumpcheck":

                    for (int index = 0; index + 1 < arguments.Length; index += 2)

                        bridge.SetGumpValue(-1, "checkbox", Arg(index), Text(index + 1));

                    break;

UO.WaitGumpEntry

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

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

void UO.WaitGumpEntry(object? index, object? text);
void UO.WaitGumpEntry(object? index, object? text, object? index2, object? text2);
void UO.WaitGumpEntry(object? index, object? text, object? index2, object? text2, object? index3, object? text3);

ํ˜„์žฌ ๊ฒ€ํ”„์˜ ํ…์ŠคํŠธ ์ž…๋ ฅ ํ•„๋“œ๋ฅผ ์ตœ๋Œ€ 3๊ฐœ๊นŒ์ง€ ๋ณ€๊ฒฝํ•ฉ๋‹ˆ๋‹ค.

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

  • index โ€” int ID ์š”์†Œ ๋˜๋Š” SetGump์™€ ๊ฐ™์€ 0 ์ธ๋ฑ์Šค์ž…๋‹ˆ๋‹ค. ์ธ์ˆ˜๋Š” ์„ ํƒ์ž, ๊ฐ’ ์Œ์œผ๋กœ ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค.
  • index2 โ€” int ID ์š”์†Œ ๋˜๋Š” SetGump์™€ ๊ฐ™์€ 0 ์ธ๋ฑ์Šค์ž…๋‹ˆ๋‹ค. ์ธ์ˆ˜๋Š” ์„ ํƒ์ž, ๊ฐ’ ์Œ์œผ๋กœ ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค.
  • index3 โ€” int ID ์š”์†Œ ๋˜๋Š” SetGump์™€ ๊ฐ™์€ 0 ์ธ๋ฑ์Šค์ž…๋‹ˆ๋‹ค. ์ธ์ˆ˜๋Š” ์„ ํƒ์ž, ๊ฐ’ ์Œ์œผ๋กœ ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค.
  • text โ€” ToString๊นŒ์ง€์˜ ํ•„๋“œ ๊ฐ’์ž…๋‹ˆ๋‹ค. ํ™•์ธ๋ž€์—๋Š” "์„ ํƒ๋จ"/"true"/0์ด ์•„๋‹Œ ์ˆซ์ž๊ฐ€ ํฌํ•จ๋ฉ๋‹ˆ๋‹ค. textentry๋Š” ํ…์ŠคํŠธ๋ฅผ ํ—ˆ์šฉํ•ฉ๋‹ˆ๋‹ค.
  • text2 โ€” ToString๊นŒ์ง€์˜ ํ•„๋“œ ๊ฐ’์ž…๋‹ˆ๋‹ค. ํ™•์ธ๋ž€์—๋Š” "์„ ํƒ๋จ"/"true"/0์ด ์•„๋‹Œ ์ˆซ์ž๊ฐ€ ํฌํ•จ๋ฉ๋‹ˆ๋‹ค. textentry๋Š” ํ…์ŠคํŠธ๋ฅผ ํ—ˆ์šฉํ•ฉ๋‹ˆ๋‹ค.
  • text3 โ€” ToString๊นŒ์ง€์˜ ํ•„๋“œ ๊ฐ’์ž…๋‹ˆ๋‹ค. ํ™•์ธ๋ž€์—๋Š” "์„ ํƒ๋จ"/"true"/0์ด ์•„๋‹Œ ์ˆซ์ž๊ฐ€ ํฌํ•จ๋ฉ๋‹ˆ๋‹ค. textentry๋Š” ํ…์ŠคํŠธ๋ฅผ ํ—ˆ์šฉํ•ฉ๋‹ˆ๋‹ค.

๋ฐ˜ํ™˜๊ฐ’

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

๋™์ž‘

  • ExecuteLegacyManualAlias๋Š” ์Œ์œผ๋กœ ์ธ์ˆ˜๋ฅผ ๊ฒ€ํ† ํ•˜๊ณ  ๊ฐ๊ฐ์— ๋Œ€ํ•ด SetGumpValue(-1, "textentry", selector, value)๋ฅผ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค. ๋“ฑ๋ก๋œ ๋ชจ๋“  ์–‘์‹์€ 2, 4 ๋˜๋Š” 6 ์ธ์ˆ˜์ž…๋‹ˆ๋‹ค.
  • UO.Wait๋ผ๋Š” ์ด๋ฆ„์€ ๋Œ€๊ธฐ๋ฅผ ์˜๋ฏธํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ฐจ๋‹จ๋„ ์—†๊ณ  ํ–ฅํ›„ ๊ฒ€ํ”„๋ฅผ ์œ„ํ•œ ๋Œ€๊ธฐ์—ด๋„ ์—†์Šต๋‹ˆ๋‹ค. ํ•„๋“œ๊ฐ€ ๋ˆ„๋ฝ๋˜๋ฉด ์˜ค๋ฅ˜๊ฐ€ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. ๋ฒ„ํŠผ ์‘๋‹ต์ด ์ „์†ก๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

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

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

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

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

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

UO.Print("Calling UO.WaitGumpEntry");
UO.WaitGumpEntry(0, "Example");

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

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

  • ํ˜„์žฌ ๊ฒ€ํ”„์˜ ํ…์ŠคํŠธ ์ž…๋ ฅ ํ•„๋“œ๋ฅผ ์ตœ๋Œ€ 3๊ฐœ๊นŒ์ง€ ๋ณ€๊ฒฝํ•ฉ๋‹ˆ๋‹ค.
if (Truth(UO.GetGumpsCount() > 0))
{
    UO.WaitGumpEntry(0, "Example");
}

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

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

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

  • ExecuteLegacyManualAlias๋Š” ์Œ์œผ๋กœ ์ธ์ˆ˜๋ฅผ ๊ฒ€ํ† ํ•˜๊ณ  ๊ฐ๊ฐ์— ๋Œ€ํ•ด SetGumpValue(-1, "textentry", selector, value)๋ฅผ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค. ๋“ฑ๋ก๋œ ๋ชจ๋“  ์–‘์‹์€ 2, 4 ๋˜๋Š” 6 ์ธ์ˆ˜์ž…๋‹ˆ๋‹ค.
return  RunScenario();
 object? RunScenario()
{
    if (Truth(UO.GetGumpsCount() > 0))
    {
        UO.WaitGumpEntry(0, "First", 1, "Second");
    }

    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. ์ „์ฒด ๋„์šฐ๋ฏธ ๊ธฐ๋Šฅ - ์Šคํฌ๋ฆฝํŠธ ํด๋ž˜์Šค

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

  • UO.Wait๋ผ๋Š” ์ด๋ฆ„์€ ๋Œ€๊ธฐ๋ฅผ ์˜๋ฏธํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ฐจ๋‹จ๋„ ์—†๊ณ  ํ–ฅํ›„ ๊ฒ€ํ”„๋ฅผ ์œ„ํ•œ ๋Œ€๊ธฐ์—ด๋„ ์—†์Šต๋‹ˆ๋‹ค. ํ•„๋“œ๊ฐ€ ๋ˆ„๋ฝ๋˜๋ฉด ์˜ค๋ฅ˜๊ฐ€ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. ๋ฒ„ํŠผ ์‘๋‹ต์ด ์ „์†ก๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
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()
    {
        if (Truth(UO.GetGumpsCount() > 0))
        {
            UO.WaitGumpEntry(0, "First", 1, "Second", 2, "Third");
        }

        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.WaitGumpEntry(index, text) โ€” UO.WaitGumpEntry(Any,Any)

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

๊ฒฐ๊ณผ: void / Unit.

ํ˜ธ์ถœ ์‹œ:

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

case "waitgumpentry":

                    for (int index = 0; index + 1 < arguments.Length; index += 2)

                        bridge.SetGumpValue(-1, "textentry", Arg(index), Text(index + 1));

                    break;

UO.WaitGumpEntry(index, text, index2, text2) โ€” UO.WaitGumpEntry(Any,Any,Any,Any)

๋งค๊ฐœ๋ณ€์ˆ˜: index (Any), text (Any), index2 (Any), text2 (Any)

๊ฒฐ๊ณผ: void / Unit.

ํ˜ธ์ถœ ์‹œ:

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

case "waitgumpentry":

                    for (int index = 0; index + 1 < arguments.Length; index += 2)

                        bridge.SetGumpValue(-1, "textentry", Arg(index), Text(index + 1));

                    break;

UO.WaitGumpEntry(index, text, index2, text2, index3, text3) โ€” UO.WaitGumpEntry(Any,Any,Any,Any,Any,Any)

๋งค๊ฐœ๋ณ€์ˆ˜: index (Any), text (Any), index2 (Any), text2 (Any), index3 (Any), text3 (Any)

๊ฒฐ๊ณผ: void / Unit.

ํ˜ธ์ถœ ์‹œ:

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

case "waitgumpentry":

                    for (int index = 0; index + 1 < arguments.Length; index += 2)

                        bridge.SetGumpValue(-1, "textentry", Arg(index), Text(index + 1));

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