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

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

๋…น์Œ/์žฌ์ƒ

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

์ง€์›๋˜๋Š” ์ž‘์—…์„ ๊ธฐ๋กํ•˜๊ณ  ๋ฐ˜๋ณตํ•˜์„ธ์š”. ๋…น์Œ ๋ฐ ์žฌ์ƒ ์ œํ•œ์˜ ๊ตฌ์„ฑ์€ ๋ช…๋ น ๊ตฌํ˜„์— ๋”ฐ๋ผ ๊ฒฐ์ •๋ฉ๋‹ˆ๋‹ค.

์„น์…˜

์ฃผ์ œ ๋ช…๋ น ๋ฐ ์„ค๋ช…
SetRec UO.SetRec
UseRec UO.UseRec

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

๋…น์Œ

UO.SetRec ยท UO.UseRec

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

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

UO.SetRec

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

UO.SetRec();
UO.Light(15);

UO.UseRec

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

UO.SetRec();
UO.Light(15);
UO.UseRec();

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


UO.SetRec

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

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

void UO.SetRec();

๋‹ค์Œ ๋ ˆ๊ฑฐ์‹œ ๋ช…๋ น UO์˜ ๊ธฐ๋ก์„ ์ค€๋น„ํ•ฉ๋‹ˆ๋‹ค.

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

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

๋ฐ˜ํ™˜๊ฐ’

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

๋™์ž‘

  • ExecuteLegacyManualAlias ์ƒํƒœ๋ฅผ ์ง€์›๋‹ˆ๋‹ค. RecordedAction ๋ฐ recordNextLegacyAction=true๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. SetRec/UseRec๋ฅผ ์ œ์™ธํ•˜๊ณ  ๋™์ผํ•œ ๋ ˆ๊ฑฐ์‹œ ๋””์ŠคํŒจ์ฒ˜์— ๋Œ€ํ•œ ๋‹ค์Œ ํ˜ธ์ถœ์—์„œ๋Š” ๋ช…๋ น์„ ์‹คํ–‰ํ•˜๊ธฐ ์ „์— ์ด๋ฆ„๊ณผ ์ธ์ˆ˜๋ฅผ ์ง๋ ฌํ™”ํ•œ ๋‹ค์Œ ํ”Œ๋ž˜๊ทธ๋ฅผ ์ง€์›๋‹ˆ๋‹ค.
  • ์ด๊ฒƒ์€ ๋ชจ๋“  ๋งˆ์šฐ์Šค ๋™์ž‘, UO getter ๋˜๋Š” ์„œ๋ฒ„ ์ด๋ฒคํŠธ๋ฅผ ๊ธฐ๋กํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ง€์›๋˜๋Š” ๋ ˆ๊ฑฐ์‹œ ๋””์ŠคํŒจ์ฒ˜์—์„œ ํ•˜๋‚˜์˜ ๋ช…๋ น๋งŒ ๋ฐ˜๋ณตํ•ฉ๋‹ˆ๋‹ค. ์ด์ „ ์ €์žฅ์€ ์ฆ‰์‹œ ์‚ญ์ œ๋ฉ๋‹ˆ๋‹ค.
  • ์ผ๋ฐ˜ ํด๋ผ์ด์–ธํŠธ ํ˜ธ์ŠคํŠธ์—์„œ ์ด ์ƒํƒœ ๋ฐ์ดํ„ฐ๋Š” GetPersistentState ๊ด€๋ฆฌ์ž์—์„œ ๊ฐ€์ ธ์˜ค๋ฉฐ ๋™์ผํ•œ ์›”๋“œ/ํ”„๋กœํ•„์˜ ์Šคํฌ๋ฆฝํŠธ/์ฑ„ํŒ…/๋งคํฌ๋กœ์— ๊ณตํ†ต๋˜๋ฉฐ ํ•˜๋‚˜์˜ ์Šคํฌ๋ฆฝํŠธ์— ์†ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค ๋˜๋Š” ๋ช…๋ฐฑํžˆ ๋ณ„๋„์˜ InjectionRuntimeState๊ฐ€ ๋‹ค๋ฅธ ์ƒํƒœ๋ฅผ ๊ฐ–์Šต๋‹ˆ๋‹ค. ํ”„๋กœํ•„์„ ๋กœ๋“œ/์‚ญ์ œํ•˜๋ฉด ํ”„๋กœํ•„์„ ๋Œ€์ฒดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ €์žฅ๋œ serial๋Š” ์—ฌ์ „ํžˆ ๋กœ๋“œ๋œ ์„ธ๊ณ„์™€ ๋น„๊ตํ•˜์—ฌ ํ™•์ธ๋ฉ๋‹ˆ๋‹ค.
  • ํ•ญ๋ชฉ์€ int, double, string, recursive Array ๋ฐ void ์ธ์ˆ˜ ์œ ํ˜•์„ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ๊ฐœ์ฒด๋Š” ํ…์ŠคํŠธ ToString๋กœ ์ž‘์„ฑ๋ฉ๋‹ˆ๋‹ค. ๋ฐ˜๋ณตํ•ด๋„ ๋ผ์ด๋ธŒ ๊ฐœ์ฒด/ํ•ธ๋“ค์ด ๋ณต์›๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • RecordedAction๋Š” ํ”„๋กœํ•„์˜ ์ผ๋ฐ˜์ ์ธ ์ƒํƒœ์ด๊ณ , recordNextLegacyAction/replayingLegacyAction๋Š” ์ด InjectionApiUO์˜ ๋น„๊ณต๊ฐœ ํ•„๋“œ์ž…๋‹ˆ๋‹ค. ์ด ์ธ์Šคํ„ด์Šค๋งŒ ๋‹ค์Œ ๋ ˆ๊ฑฐ์‹œ ํ˜ธ์ถœ์„ ๋…น์Œํ•ฉ๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ์Šคํฌ๋ฆฝํŠธ๋Š” ๊ณต์œ  ์“ฐ๊ธฐ๋ฅผ ์ง€์šฐ๊ฑฐ๋‚˜ ๋‹ค์‹œ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ํ•ด๋‹น ์ธ์Šคํ„ด์Šค์˜ ์“ฐ๊ธฐ ๋Œ€๊ธฐ ํ”Œ๋ž˜๊ทธ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • ์—„๊ฒฉํ•˜๊ฒŒ ์ธ์ˆ˜ ์—†์ด SetRec()๋งŒ ๋“ฑ๋ก๋ฉ๋‹ˆ๋‹ค. RecordedAction์€ ์ฆ‰์‹œ ์ง€์›Œ์ง€๋ฏ€๋กœ, ํ•ด๋‹น ์ธ์Šคํ„ด์Šค๊ฐ€ ํ›„์† ๋ ˆ๊ฑฐ์‹œ ์ž‘์—…์„ ์ž‘์„ฑํ•˜๊ธฐ ์ „์— stay()๋Š” 0๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ์“ฐ๊ธฐ ๋Œ€๊ธฐ๋ฅผ ํ™œ์„ฑํ™”ํ•œ๋‹ค๊ณ  ํ•ด์„œ ์ €์žฅ๋œ ์ž‘์—…์ด ์ƒ์„ฑ๋˜๋Š” ๊ฒƒ์€ ์•„๋‹™๋‹ˆ๋‹ค. stay()๋Š” ์ฝ๊ธฐ๋งŒ ํ•˜๊ณ  ๋Œ€๊ธฐ ํ”Œ๋ž˜๊ทธ๋ฅผ ์†Œ๋น„ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

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

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

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

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

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

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

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

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

  • ๋‹ค์Œ ๋ ˆ๊ฑฐ์‹œ ๋ช…๋ น UO์˜ ๊ธฐ๋ก์„ ์ค€๋น„ํ•ฉ๋‹ˆ๋‹ค.
UO.SetRec();
UO.Light(15);

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

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

  • ExecuteLegacyManualAlias ์ƒํƒœ๋ฅผ ์ง€์›๋‹ˆ๋‹ค. RecordedAction ๋ฐ recordNextLegacyAction=true๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. SetRec/UseRec๋ฅผ ์ œ์™ธํ•˜๊ณ  ๋™์ผํ•œ ๋ ˆ๊ฑฐ์‹œ ๋””์ŠคํŒจ์ฒ˜์— ๋Œ€ํ•œ ๋‹ค์Œ ํ˜ธ์ถœ์—์„œ๋Š” ๋ช…๋ น์„ ์‹คํ–‰ํ•˜๊ธฐ ์ „์— ์ด๋ฆ„๊ณผ ์ธ์ˆ˜๋ฅผ ์ง๋ ฌํ™”ํ•œ ๋‹ค์Œ ํ”Œ๋ž˜๊ทธ๋ฅผ ์ง€์›๋‹ˆ๋‹ค.
return  RunScenario();
 object? RunScenario()
{
    UO.SetRec();
    UO.Sound(0x0040);
    UO.UseRec();
    return null;
}

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

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

  • ์ด๊ฒƒ์€ ๋ชจ๋“  ๋งˆ์šฐ์Šค ๋™์ž‘, UO getter ๋˜๋Š” ์„œ๋ฒ„ ์ด๋ฒคํŠธ๋ฅผ ๊ธฐ๋กํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ง€์›๋˜๋Š” ๋ ˆ๊ฑฐ์‹œ ๋””์ŠคํŒจ์ฒ˜์—์„œ ํ•˜๋‚˜์˜ ๋ช…๋ น๋งŒ ๋ฐ˜๋ณตํ•ฉ๋‹ˆ๋‹ค. ์ด์ „ ์ €์žฅ์€ ์ฆ‰์‹œ ์‚ญ์ œ๋ฉ๋‹ˆ๋‹ค.
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.SetRec();
        UO.TextPrint("This is not a legacy recording route");
        UO.Light(15);
        UO.UseRec();
        return null;
    }
}

๋ช…๋ น ๊ตฌํ˜„

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

UO.SetRec() โ€” UO.SetRec()

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

๊ฒฐ๊ณผ: void / Unit.

ํ˜ธ์ถœ ์‹œ:

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

case "setrec":

                    state.RecordedAction = string.Empty;

                    recordNextLegacyAction = true;

                    break;

UO.UseRec

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

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

void UO.UseRec();

์ €์žฅ๋œ ๋ ˆ๊ฑฐ์‹œ ๋ช…๋ น UO์„ ๋ฐ˜๋ณตํ•ฉ๋‹ˆ๋‹ค.

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

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

๋ฐ˜ํ™˜๊ฐ’

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

๋™์ž‘

  • TryDeserializeRecordedLegacyAction๋Š” YOKOREC1 ์ ‘๋‘์‚ฌ์™€ ์ž…๋ ฅ๋œ ์ธ์ˆ˜๋ฅผ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. ํ•ญ๋ชฉ ์—†์Œ/์ž˜๋ชป๋œ ํ•ญ๋ชฉ - ๋กœ์ปฌ ๋ฉ”์‹œ์ง€, ์ž‘์—… ์—†์Œ. ์œ ํšจํ•œ ํ•ญ๋ชฉ์€ ์ €์žฅ๋œ ์ด๋ฆ„๊ณผ ์ธ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ExecuteLegacyManualAlias์„ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค.
  • replayingLegacyAction ํ”Œ๋ž˜๊ทธ๋Š” ์žฌ์ƒ ์ž์ฒด๊ฐ€ ์ž‘์„ฑ๋˜์ง€ ์•Š๋„๋ก ๋ณดํ˜ธํ•˜๊ณ  ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๋”๋ผ๋„ finally๊ฐ€ ์ง€์›Œ์ง‘๋‹ˆ๋‹ค. ๋ฐ˜๋ณต ํ›„์—๋„ ํ•ญ๋ชฉ์ด ์‚ญ์ œ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. UseRec๋ฅผ ๋‹ค์‹œ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฆ„/serial์€ ์ €์žฅ๋œ ์œ ํ˜•๊ณผ ํ˜„์žฌ ์„ธ๊ณ„์— ๋”ฐ๋ผ ๊ฒฐ์ •๋ฉ๋‹ˆ๋‹ค.
  • ์ผ๋ฐ˜ ํด๋ผ์ด์–ธํŠธ ํ˜ธ์ŠคํŠธ์—์„œ ์ด ์ƒํƒœ ๋ฐ์ดํ„ฐ๋Š” GetPersistentState ๊ด€๋ฆฌ์ž์—์„œ ๊ฐ€์ ธ์˜ค๋ฉฐ ๋™์ผํ•œ ์›”๋“œ/ํ”„๋กœํ•„์˜ ์Šคํฌ๋ฆฝํŠธ/์ฑ„ํŒ…/๋งคํฌ๋กœ์— ๊ณตํ†ต๋˜๋ฉฐ ํ•˜๋‚˜์˜ ์Šคํฌ๋ฆฝํŠธ์— ์†ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค ๋˜๋Š” ๋ช…๋ฐฑํžˆ ๋ณ„๋„์˜ InjectionRuntimeState๊ฐ€ ๋‹ค๋ฅธ ์ƒํƒœ๋ฅผ ๊ฐ–์Šต๋‹ˆ๋‹ค. ํ”„๋กœํ•„์„ ๋กœ๋“œ/์‚ญ์ œํ•˜๋ฉด ํ”„๋กœํ•„์„ ๋Œ€์ฒดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ €์žฅ๋œ serial๋Š” ์—ฌ์ „ํžˆ ๋กœ๋“œ๋œ ์„ธ๊ณ„์™€ ๋น„๊ตํ•˜์—ฌ ํ™•์ธ๋ฉ๋‹ˆ๋‹ค.
  • ํ•ญ๋ชฉ์€ int, double, string, recursive Array ๋ฐ void ์ธ์ˆ˜ ์œ ํ˜•์„ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ๊ฐœ์ฒด๋Š” ํ…์ŠคํŠธ ToString๋กœ ์ž‘์„ฑ๋ฉ๋‹ˆ๋‹ค. ๋ฐ˜๋ณตํ•ด๋„ ๋ผ์ด๋ธŒ ๊ฐœ์ฒด/ํ•ธ๋“ค์ด ๋ณต์›๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • RecordedAction๋Š” ํ”„๋กœํ•„์˜ ์ผ๋ฐ˜์ ์ธ ์ƒํƒœ์ด๊ณ , recordNextLegacyAction/replayingLegacyAction๋Š” ์ด InjectionApiUO์˜ ๋น„๊ณต๊ฐœ ํ•„๋“œ์ž…๋‹ˆ๋‹ค. ์ด ์ธ์Šคํ„ด์Šค๋งŒ ๋‹ค์Œ ๋ ˆ๊ฑฐ์‹œ ํ˜ธ์ถœ์„ ๋…น์Œํ•ฉ๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ์Šคํฌ๋ฆฝํŠธ๋Š” ๊ณต์œ  ์“ฐ๊ธฐ๋ฅผ ์ง€์šฐ๊ฑฐ๋‚˜ ๋‹ค์‹œ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ํ•ด๋‹น ์ธ์Šคํ„ด์Šค์˜ ์“ฐ๊ธฐ ๋Œ€๊ธฐ ํ”Œ๋ž˜๊ทธ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

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

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

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

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

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

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

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

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

  • ์ €์žฅ๋œ ๋ ˆ๊ฑฐ์‹œ ๋ช…๋ น UO์„ ๋ฐ˜๋ณตํ•ฉ๋‹ˆ๋‹ค.
UO.SetRec();
UO.Light(15);
UO.UseRec();

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

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

  • TryDeserializeRecordedLegacyAction๋Š” YOKOREC1 ์ ‘๋‘์‚ฌ์™€ ์ž…๋ ฅ๋œ ์ธ์ˆ˜๋ฅผ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. ํ•ญ๋ชฉ ์—†์Œ/์ž˜๋ชป๋œ ํ•ญ๋ชฉ - ๋กœ์ปฌ ๋ฉ”์‹œ์ง€, ์ž‘์—… ์—†์Œ. ์œ ํšจํ•œ ํ•ญ๋ชฉ์€ ์ €์žฅ๋œ ์ด๋ฆ„๊ณผ ์ธ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ExecuteLegacyManualAlias์„ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค.
return  RunScenario();
 object? RunScenario()
{
    UO.SetRec();
    UO.Sound(0x0040);
    UO.Wait(250);
    UO.UseRec();
    return null;
}

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

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

  • replayingLegacyAction ํ”Œ๋ž˜๊ทธ๋Š” ์žฌ์ƒ ์ž์ฒด๊ฐ€ ์ž‘์„ฑ๋˜์ง€ ์•Š๋„๋ก ๋ณดํ˜ธํ•˜๊ณ  ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๋”๋ผ๋„ finally๊ฐ€ ์ง€์›Œ์ง‘๋‹ˆ๋‹ค. ๋ฐ˜๋ณต ํ›„์—๋„ ํ•ญ๋ชฉ์ด ์‚ญ์ œ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. UseRec๋ฅผ ๋‹ค์‹œ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฆ„/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.SetRec();
        UO.Light(15);
        UO.UseRec();
        UO.Wait(250);
        UO.UseRec();
        return null;
    }
}

๋ช…๋ น ๊ตฌํ˜„

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

UO.UseRec() โ€” UO.UseRec()

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

๊ฒฐ๊ณผ: void / Unit.

ํ˜ธ์ถœ ์‹œ:

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

case "userec":

                    if (!TryDeserializeRecordedLegacyAction(state.RecordedAction, out string recordedName, out InjectionValue[] recordedArguments))

                    {

                        if (bridge != null) SystemMessage("UseRec: no recorded UO action is available. Call UO.SetRec() before the action to record.");

                        break;

                    }

                    replayingLegacyAction = true;

                    try

                    {

                        ExecuteLegacyManualAlias(recordedName, recordedArguments);

                    }

                    finally

                    {

                        replayingLegacyAction = false;

                    }

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