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

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

ํ”„๋ก์‹œ

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

ํ”„๋ก์‹œ์— ๋Œ€ํ•ด ํ˜ธํ™˜ ๊ฐ€๋Šฅํ•œ ์ด๋ฆ„ API. ๋“ฑ๋ก๋ถ€์— ์ด๋ฆ„์ด ์žˆ๋‹ค๋Š” ๊ฒƒ๋งŒ์œผ๋กœ๋Š” ์šด์†ก ์ง€์›์„ ์ฆ๋ช…ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์‹ค์ œ ์ œํ•œ์‚ฌํ•ญ์€ ๊ฐ ์นด๋“œ์— ํ‘œ์‹œ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

์„น์…˜

์ฃผ์ œ ๋ช…๋ น ๋ฐ ์„ค๋ช…
UseProxy UO.UseProxy
ProxyIP UO.ProxyIP
ProxyPort UO.ProxyPort
Authentication UO.UseProxy

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

ํ”„๋ก์‹œ ๊ตฌ์„ฑ

UO.UseProxy ยท UO.ProxyIP ยท UO.ProxyPort

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

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

UO.ProxyIP

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

return UO.ProxyIP();

UO.ProxyPort

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

return UO.ProxyPort();

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


UO.ProxyIP

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

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

dynamic UO.ProxyIP();

์—ฐ๊ฒฐํ•˜๊ธฐ ์ „์— ํ˜„์žฌ ํ”„๋กœํ•„์˜ ํ”„๋ก์‹œ ์ฃผ์†Œ๋ฅผ ์ฝ์–ด ์„ ํƒํ•œ ๊ฒฝ๋กœ๋ฅผ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

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

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

๋ฐ˜ํ™˜๊ฐ’

string: ์ง€์ •๋œ IP ๋˜๋Š” DNS์€ ํ”„๋ก์‹œ ์ด๋ฆ„์ž…๋‹ˆ๋‹ค. ์ง์ ‘ ์กฐ์ธ์˜ ๊ฒฝ์šฐ ๋นˆ ๋ฌธ์ž์—ด์ž…๋‹ˆ๋‹ค. DNS-์ด๋ฆ„์€ ์—ฌ๊ธฐ์„œ IP๋กœ ๋ณ€ํ™˜๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ฒŒ์ž„ ์„œ๋ฒ„ ์ฃผ์†Œ๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค.

๋™์ž‘

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

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

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

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

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

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

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

1. UO.ProxyIP - 1 - ์ง์ ‘ ์Šคํฌ๋ฆฝํŠธ

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

  • Main์€ ํ˜„์žฌ ์„ค์ •์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. Proxy.example.invalid:1080์˜ ๊ฒฝ์šฐ ์ฃผ์†Œ๋Š” "proxy.example.invalid"์ด๊ณ  ํฌํŠธ๋Š” 1080, UseProxy == 1์ž…๋‹ˆ๋‹ค. ์ง์ ‘ ์—ฐ๊ฒฐ์˜ ๊ฒฝ์šฐ ๊ฐ๊ฐ "", 0, 0์ž…๋‹ˆ๋‹ค. ์˜ˆ์ œ ๋„๋ฉ”์ธ์€ ์ž‘๋™ ์ค‘์ธ ํ”„๋ก์‹œ๊ฐ€ ์•„๋‹Œ ์Šคํ…์ž…๋‹ˆ๋‹ค.
return UO.ProxyIP();

2. UO.ProxyIP โ€” 2 โ€” ์Šคํฌ๋ฆฝํŠธ ๊ธฐ๋Šฅ

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

  • ๋ฐฐ์—ด์—๋Š” ์ •ํ™•ํžˆ ์ผ์น˜ํ•˜๋Š” ๋‘ ๊ฐœ์˜ ํ™•์ธ๋œ ์ฃผ์†Œ๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฃจํ”„๋Š” UseProxy == 1์ธ ๊ฒฝ์šฐ์—๋งŒ ๊ตฌ์„ฑ๋œ ์ด๋ฆ„์„ ๋น„๊ตํ•˜๊ณ , ์ผ์น˜ํ•˜๋Š” ๊ฒƒ์ด ์žˆ์œผ๋ฉด 1๋ฅผ ๋ฐ˜ํ™˜ํ•˜๊ณ , ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด 0๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฆ„์„ ์ž์‹ ์˜ ์ด๋ฆ„์œผ๋กœ ๋ฐ”๊พธ์‹ญ์‹œ์˜ค. ์ด๋Š” ์›๊ฒฉ ํ”„๋ก์‹œ์˜ ์‹ ๋ขฐ์„ฑ์ด ์•„๋‹Œ ๊ตฌ์„ฑ ํ™•์ธ์ž…๋‹ˆ๋‹ค.
return  RunScenario();
 object? RunScenario()
{
    dynamic[] allowed = new dynamic[checked((int)(1) + 1)];
    allowed[0] = "proxy.example.invalid";
    allowed[1] = "127.0.0.1";
    if (Truth(UO.UseProxy()))
    {
        var index = 0;
        while (Truth(index < ArrayLength(allowed)))
        {
            if (Truth(UO.ProxyIP() == allowed[index]))
            {
                return 1;
            }

            index = index + 1;
        }
    }

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

3. UO.ProxyIP - 3 - ์‹œ๋‚˜๋ฆฌ์˜ค ์ˆ˜์—…

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

  • RequireRoute๋Š” ์ฃผ์†Œ="proxy.example.invalid", ํฌํŠธ=1080๋ฅผ ์ˆ˜์‹ ํ•ฉ๋‹ˆ๋‹ค. UO.Connect๊นŒ์ง€ ์„ธ ๊ฐ€์ง€ ์„ค์ •์„ ๋ชจ๋‘ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. ๋ถˆ์ผ์น˜๋Š” ์—ฐ๊ฒฐ ์—†์ด 0๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ๋งค์น˜์—์„œ ์—ฐ๊ฒฐ์„ ์š”์ฒญํ•˜๊ณ  1๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ์š”์ฒญ์ด์ง€ ๊ฒŒ์ž„ ์ง„์ž… ํ™•์ธ์ด ์•„๋‹™๋‹ˆ๋‹ค. ๋‘ ํ”Œ๋Ÿฌ๊ทธ๋ฅผ ๋ชจ๋‘ ๊ต์ฒดํ•˜์‹ญ์‹œ์˜ค. UO.Connected ๋”ฐ๋กœ ํ™•์ธํ•˜์„ธ์š”.
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()
    {
        return RequireRoute("proxy.example.invalid", 1080);
        return null;
    }

    dynamic RequireRoute(dynamic address, dynamic port)
    {
        if (!(Truth(UO.UseProxy())))
        {
            return 0;
        }

        if (Truth(UO.ProxyIP() != address) || Truth(UO.ProxyPort() != port))
        {
            return 0;
        }

        UO.Connect();
        return 1;
    }

    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.ProxyIP() โ€” UO.ProxyIP()

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

๊ฒฐ๊ณผ: dynamic / Any.

ํ˜ธ์ถœ ์‹œ:

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

case "proxyip": return new InjectionValue((bridge as IProxyMetadataBridge)?.ProxyAddress ?? string.Empty);

UO.ProxyPort

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

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

dynamic UO.ProxyPort();

ํ˜„์žฌ ํ”„๋กœํ•„์˜ ํ”„๋ก์‹œ ํฌํŠธ๋ฅผ ์ฝ์–ด ์ฃผ์†Œ/ํฌํŠธ ์Œ์„ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

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

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

๋ฐ˜ํ™˜๊ฐ’

int: 1..65535์— ๊ตฌ์„ฑ๋œ ํ”„๋ก์‹œ ํฌํŠธ; 0 ์ง์ ‘ ์—ฐ๊ฒฐ์šฉ. ์ด๊ฒƒ์€ ๊ฒŒ์ž„ ์„œ๋ฒ„ ํฌํŠธ๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค.

๋™์ž‘

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

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

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

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

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

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

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

1. UO.ProxyPort - 1 - ์ง์ ‘ ์Šคํฌ๋ฆฝํŠธ

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

  • Main์€ ํ˜„์žฌ ์„ค์ •์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. Proxy.example.invalid:1080์˜ ๊ฒฝ์šฐ ์ฃผ์†Œ๋Š” "proxy.example.invalid"์ด๊ณ  ํฌํŠธ๋Š” 1080, UseProxy == 1์ž…๋‹ˆ๋‹ค. ์ง์ ‘ ์—ฐ๊ฒฐ์˜ ๊ฒฝ์šฐ ๊ฐ๊ฐ "", 0, 0์ž…๋‹ˆ๋‹ค. ์˜ˆ์ œ ๋„๋ฉ”์ธ์€ ์ž‘๋™ ์ค‘์ธ ํ”„๋ก์‹œ๊ฐ€ ์•„๋‹Œ ์Šคํ…์ž…๋‹ˆ๋‹ค.
return UO.ProxyPort();

2. UO.ProxyPort โ€” 2 โ€” ์Šคํฌ๋ฆฝํŠธ ๊ธฐ๋Šฅ

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

  • RouteLabel๋Š” ๊ตฌ์„ฑ๋œ ๊ฒฝ๋กœ์˜ ์„œ๋ช…(์ฃผ์†Œ:ํฌํŠธ ๋˜๋Š” ์ง์ ‘ ์—ฐ๊ฒฐ์„ ์œ„ํ•œ "์ง์ ‘")์„ ๊ตฌ์ถ•ํ•ฉ๋‹ˆ๋‹ค. ๋กœ๊ทธ์ธ ๋ฐ ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์ฝ์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
return  RunScenario();
 object? RunScenario()
{
    return RouteLabel();
    return null;
}

dynamic RouteLabel()
{
    if (Truth(UO.UseProxy()))
    {
        return UO.ProxyIP() + ":" + Convert.ToString(UO.ProxyPort());
    }

    return "direct";
}

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

3. UO.ProxyPort - 3 - ์‹œ๋‚˜๋ฆฌ์˜ค ์ˆ˜์—…

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

  • RequireRoute๋Š” ์ฃผ์†Œ="proxy.example.invalid", ํฌํŠธ=1080๋ฅผ ์ˆ˜์‹ ํ•ฉ๋‹ˆ๋‹ค. UO.Connect๊นŒ์ง€ ์„ธ ๊ฐ€์ง€ ์„ค์ •์„ ๋ชจ๋‘ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. ๋ถˆ์ผ์น˜๋Š” ์—ฐ๊ฒฐ ์—†์ด 0๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ๋งค์น˜์—์„œ ์—ฐ๊ฒฐ์„ ์š”์ฒญํ•˜๊ณ  1๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ์š”์ฒญ์ด์ง€ ๊ฒŒ์ž„ ์ง„์ž… ํ™•์ธ์ด ์•„๋‹™๋‹ˆ๋‹ค. ๋‘ ํ”Œ๋Ÿฌ๊ทธ๋ฅผ ๋ชจ๋‘ ๊ต์ฒดํ•˜์‹ญ์‹œ์˜ค. UO.Connected ๋”ฐ๋กœ ํ™•์ธํ•˜์„ธ์š”.
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()
    {
        return RequireRoute("proxy.example.invalid", 1080);
        return null;
    }

    dynamic RequireRoute(dynamic address, dynamic port)
    {
        if (!(Truth(UO.UseProxy())))
        {
            return 0;
        }

        if (Truth(UO.ProxyIP() != address) || Truth(UO.ProxyPort() != port))
        {
            return 0;
        }

        UO.Connect();
        return 1;
    }

    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.ProxyPort() โ€” UO.ProxyPort()

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

๊ฒฐ๊ณผ: dynamic / Any.

ํ˜ธ์ถœ ์‹œ:

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

case "proxyport": return new InjectionValue((bridge as IProxyMetadataBridge)?.ProxyPort ?? 0);

UO.UseProxy

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

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

dynamic UO.UseProxy();

์ด ์„ธ์…˜์ด ํ”„๋ก์‹œ๋ฅผ ํ†ตํ•ด ์—ฐ๊ฒฐ๋˜๋„๋ก ๊ตฌ์„ฑ๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

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

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

๋ฐ˜ํ™˜๊ฐ’

ํ”„๋ก์‹œ๊ฐ€ ๊ตฌ์„ฑ๋œ ๊ฒฝ์šฐ int 1 (true), ๊ทธ๋ ‡์ง€ ์•Š์€ ๊ฒฝ์šฐ 0 (false). C#์—์„œ (๊ฒฐ๊ณผ != 0) ๋˜๋Š” if (๊ฒฐ๊ณผ == 1)๋ฅผ ํ™•์ธํ•˜์„ธ์š”. ๊ฒฐ๊ณผ๋Š” int ์œ ํ˜•์ด๋ฏ€๋กœ if (๊ฒฐ๊ณผ) ๋ฐ true์™€์˜ ๋น„๊ต๋Š” ํ—ˆ์šฉ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์žฅ์น˜๋Š” ํ”„๋ก์‹œ ๊ฐ€์šฉ์„ฑ์ด๋‚˜ ์„ฑ๊ณต์ ์ธ ์Šน์ธ์„ ํ™•์ธํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋™์ž‘

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

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

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

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

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

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

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

1. UO.UseProxy - 1 - ์ง์ ‘ ์Šคํฌ๋ฆฝํŠธ

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

  • Main์€ ํ˜„์žฌ ์„ค์ •์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. Proxy.example.invalid:1080์˜ ๊ฒฝ์šฐ ์ฃผ์†Œ๋Š” "proxy.example.invalid"์ด๊ณ  ํฌํŠธ๋Š” 1080, UseProxy == 1์ž…๋‹ˆ๋‹ค. ์ง์ ‘ ์—ฐ๊ฒฐ์˜ ๊ฒฝ์šฐ ๊ฐ๊ฐ "", 0, 0์ž…๋‹ˆ๋‹ค. ์˜ˆ์ œ ๋„๋ฉ”์ธ์€ ์ž‘๋™ ์ค‘์ธ ํ”„๋ก์‹œ๊ฐ€ ์•„๋‹Œ ์Šคํ…์ž…๋‹ˆ๋‹ค.
return UO.UseProxy();

2. UO.UseProxy โ€” 2 โ€” ์Šคํฌ๋ฆฝํŠธ ๊ธฐ๋Šฅ

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

  • RouteLabel๋Š” ๊ตฌ์„ฑ๋œ ๊ฒฝ๋กœ์˜ ์„œ๋ช…(์ฃผ์†Œ:ํฌํŠธ ๋˜๋Š” ์ง์ ‘ ์—ฐ๊ฒฐ์„ ์œ„ํ•œ "์ง์ ‘")์„ ๊ตฌ์ถ•ํ•ฉ๋‹ˆ๋‹ค. ๋กœ๊ทธ์ธ ๋ฐ ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์ฝ์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
return  RunScenario();
 object? RunScenario()
{
    return RouteLabel();
    return null;
}

dynamic RouteLabel()
{
    if (Truth(UO.UseProxy()))
    {
        return UO.ProxyIP() + ":" + Convert.ToString(UO.ProxyPort());
    }

    return "direct";
}

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

3. UO.UseProxy - 3 - ์‹œ๋‚˜๋ฆฌ์˜ค ์ˆ˜์—…

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

  • RequireRoute๋Š” ์ฃผ์†Œ="proxy.example.invalid", ํฌํŠธ=1080๋ฅผ ์ˆ˜์‹ ํ•ฉ๋‹ˆ๋‹ค. UO.Connect๊นŒ์ง€ ์„ธ ๊ฐ€์ง€ ์„ค์ •์„ ๋ชจ๋‘ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. ๋ถˆ์ผ์น˜๋Š” ์—ฐ๊ฒฐ ์—†์ด 0๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ๋งค์น˜์—์„œ ์—ฐ๊ฒฐ์„ ์š”์ฒญํ•˜๊ณ  1๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ์š”์ฒญ์ด์ง€ ๊ฒŒ์ž„ ์ง„์ž… ํ™•์ธ์ด ์•„๋‹™๋‹ˆ๋‹ค. ๋‘ ํ”Œ๋Ÿฌ๊ทธ๋ฅผ ๋ชจ๋‘ ๊ต์ฒดํ•˜์‹ญ์‹œ์˜ค. UO.Connected ๋”ฐ๋กœ ํ™•์ธํ•˜์„ธ์š”.
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()
    {
        return RequireRoute("proxy.example.invalid", 1080);
        return null;
    }

    dynamic RequireRoute(dynamic address, dynamic port)
    {
        if (!(Truth(UO.UseProxy())))
        {
            return 0;
        }

        if (Truth(UO.ProxyIP() != address) || Truth(UO.ProxyPort() != port))
        {
            return 0;
        }

        UO.Connect();
        return 1;
    }

    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.UseProxy() โ€” UO.UseProxy()

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

๊ฒฐ๊ณผ: dynamic / Any.

ํ˜ธ์ถœ ์‹œ:

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

case "useproxy": return new InjectionValue((bridge as IProxyMetadataBridge)?.UsesProxy == true ? 1 : 0);
โš ๏ธ **GitHub.com Fallback** โš ๏ธ