KO UO Topic localization - LIHACHTETAN/ClassicUO-Bad-Newbie-CSharp-Scripts-IDE GitHub Wiki
ะฃะบัะฐัะฝััะบะฐ ยท ะ ัััะบะธะน ยท English ยท Deutsch ยท Franรงais ยท Italiano ยท Espaรฑol ยท ็น้ซไธญๆ ยท ๆฅๆฌ่ช ยท ํ๊ตญ์ด
ํ ยท C# ยท IDE ยท UO API ยท AโZ ยท ์ ยท ์ธ์ด
์ง์ญํ๋ cliloc ํ ์คํธ ๋ฐ ์ธ์ฝ๋ฉ ์ ๋ณด๋ฅผ ๊ฒ์ํฉ๋๋ค. ์ธ์ด๋ฅผ ๋ณ๊ฒฝํ ๋ ๋ช ๋ น ์ด๋ฆ API์ ๋ฒ์ญ๋์ง ์์ต๋๋ค.
| ์ฃผ์ | ๋ช ๋ น ๋ฐ ์ค๋ช |
|---|---|
| Cliloc | UO.GetCliloc |
| Cliloc by ID | UO.GetClilocByID |
| Codepage | UO.GetUserCodepage |
UO.GetCliloc ยท UO.GetClilocByID ยท UO.GetUserCodepage
๊ฐ ๋ช ๋ น ์นด๋์๋ ์ง์ ์ฝ๋, ํจ์ ๋ฐ ํด๋์ค ๋ฑ ์ฌ๋ฌ ๊ฐ์ง ๋ ๋ฆฝ์ ์ธ ์๋๋ฆฌ์ค๊ฐ ์์ต๋๋ค. ๋ค์์ ์ ํ๋ ์งง์ ์๋๋ฆฌ์ค์ ๋๋ค. ์ ํ์ฌํญ๊ณผ ์ ์ฒด ๋ถ์์ด ์นด๋์ ํฌํจ๋์ด ์์ต๋๋ค.
๋งค๊ฐ๋ณ์, ๊ฒฐ๊ณผ ๋ฐ ๋ชจ๋ ์๋๋ฆฌ์ค
var item = UO.FindType(0x0EED, -1, "backpack");
if (Truth(item != ""))
{
UO.Print(UO.GetCliloc(item));
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;๋งค๊ฐ๋ณ์, ๊ฒฐ๊ณผ ๋ฐ ๋ชจ๋ ์๋๋ฆฌ์ค
var text = UO.GetClilocByID(1042971, "");
UO.Print(text);ะฃะบัะฐัะฝััะบะฐ ยท ะ ัััะบะธะน ยท English ยท Deutsch ยท Franรงais ยท Italiano ยท Espaรฑol ยท ็น้ซไธญๆ ยท ๆฅๆฌ่ช ยท ํ๊ตญ์ด
dynamic UO.GetCliloc(object? objID);OPL์์ ์์ฑ๋ ๊ฐ์ฒด ์์ฑ ํ ์คํธ๋ฅผ ์ฝ์ต๋๋ค. GetTooltip ๋ฐ GetCliloc๋ ๋์์ด์ ๋๋ค.
-
objIDโ ํ์ serial/ID ๊ฐ์ฒด. type๋ ์๋๊ณ cliloc๋ ์๋๋๋ค. int, 10์ง์/16์ง์ ๋ฌธ์์ด, self, backpack, lasttarget, finditem ๋๋ ์ด๋ฆ AddObject๋ฅผ ํ์ฉํฉ๋๋ค. 0๋ ๊ฐ์ฒด๊ฐ ์์์ ์๋ฏธํฉ๋๋ค.
string โ ์์ฑ์ ์ด๋ฆ๊ณผ ํ ์คํธ๋ฅผ ์ค ๋ฐ๊ฟ์ผ๋ก ๊ตฌ๋ถํ๊ฑฐ๋ ๋น์ด ์์ง ์์ ๋ถ๋ถ๋ง ๊ตฌ๋ถํฉ๋๋ค. ObjID=0์ด๊ฑฐ๋ ์์ฑ์ด ์์ ๋์ง ์์ ๊ฒฝ์ฐ ๋น ๋ฌธ์์ด์ ๋๋ค. ์ด๊ฒ์ ์ด๋ฏธ ๋ง๋ค์ด์ง ํ ์คํธ์ ๋๋ค. ์ซ์ ID cliloc ๋ฐ ๋งค๊ฐ๋ณ์๋ GetTooltipRec์ ์ํด ๋ฐํ๋ฉ๋๋ค.
- ํญ๋ชฉ์ด OPL์ ์ด๋ฏธ ์กด์ฌํ๋ ๊ฒฝ์ฐ ํด๋น ํ ์คํธ๊ฐ ์ฆ์ ๋ฐํ๋ฉ๋๋ค. ํญ๋ชฉ์ด ์์ผ๋ฉด ์์ฑ ์์ฒญ์ด ์ ์ก๋๊ณ 10ms๋ง๋ค ํ์ธํ์ฌ ์ต๋ 200ms๊น์ง ์๋ต์ด ์์๋ฉ๋๋ค. ์ผ์ ์ค์ง๊ฐ ์๋ต์ ๋ณด์ฅํ์ง๋ ์์ต๋๋ค.
- ์ ๊ทผ ๊ฐ๋ฅํ ๊ฐ์ฒด์ ์๋ฒ์ ์์ฑ ์ง์์ด ํ์ํฉ๋๋ค. ๋น ๊ฒฐ๊ณผ๋ ๊ฐ์ฒด๊ฐ ์๋ค๋ ์ฆ๊ฑฐ๊ฐ ์๋๋๋ค. Exists๋ง ์ฌ์ฉํ์ธ์.
- ํ ์คํธ์๋ ์๋ฒ ๋งํฌ์ ์ด ํฌํจ๋ ์ ์์ต๋๋ค. ์ซ์ ์์ฑ์ ์ค ์์น๋ก ๊ตฌ๋ฌธ ๋ถ์ํ์ง ๋ง์ธ์. ์ด๋ฅผ ์ํด GetTooltipRec๋ฅผ ์ฌ์ฉํ์ธ์.
๊ฐ ์์ ๋ ๋ณ๋์ ํ์ผ .csx๋ก ์ ์ฅํ๊ณ IDE์์ ์คํํ ์ ์์ต๋๋ค. UO ๊ฐ์ฒด์ ๋๊ธฐ ๊ธฐ๋ฅ์ ํ์ฌ ๊ฒ์ ์ธ์
์ ํธ์คํธ๋ฅผ ์ ๊ณตํฉ๋๋ค. ๋ฐ๋ชจ serial ์ด๋ฆ, ์ขํ, ์ฃผ์๋ฅผ ์์ ์ ๊ฒ์ผ๋ก ๋ฐ๊พธ์ธ์.
์ด ์ฝ๋๋ฅผ ๋ณ๋์ .csx ํ์ผ๋ก ์คํํ์ธ์. ์ธ์๋ ํธ์ถ์ ์ง์ ํ์๋ฉ๋๋ค. ์์ ์ ์ด๋ฆ, serial, ์ฃผ์๋ฅผ ์์ ์ ๊ฐ์ผ๋ก ๋ฐ๊พธ์ธ์.
ํ ๋ฒ์ ํธ์ถ ๊ฒฐ๊ณผ๋ฅผ ์ ๋์ ํ์ํฉ๋๋ค. ์ซ์๋ฅผ bool๋ก ๋ณํํ์ง ์์ผ๋ฉฐ, ๋ฐฐ์ด์ด๋ฉด ์์ ์๋ฅผ ํ์ํฉ๋๋ค.
object? result = UO.GetCliloc("backpack");
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));๋งค๊ฐ๋ณ์์ ์คํ ํ๋ฆ:
- FindType: ๊ณจ๋ 0x0EED, ๋ชจ๋ hue=-1, ์ง์ ์ฝํ ์ธ backpack. ObjID=ํญ๋ชฉ - serial์ ์ฐพ์์ต๋๋ค.
- getter ๊ฒฐ๊ณผ๋ ๊ธ์ ์์ด ์๋๋ผ ํ ์คํธ์ ๋๋ค. ์๋์ FindCount(ํญ๋ชฉ)์ ์ฌ์ฉํ์ธ์.
var item = UO.FindType(0x0EED, -1, "backpack");
if (Truth(item != ""))
{
UO.Print(UO.GetCliloc(item));
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;๋งค๊ฐ๋ณ์์ ์คํ ํ๋ฆ:
- ObjID=lasttarget๋ ์ํ๋ ๊ฐ์ฒด๋ฅผ ๊ฐ๋ฆฌ์ผ์ผ ํฉ๋๋ค.
- ๋น ๋ฌธ์์ด์ ๋ณ๋๋ก ์ฒ๋ฆฌ๋ฉ๋๋ค. ๋ฌดํ ๋ฃจํ์์ ์์ฒญ์ ์๋์ผ๋ก ๋ฐ๋ณตํ ํ์๊ฐ ์์ต๋๋ค.
return RunScenario();
object? RunScenario()
{
var text = UO.GetCliloc("lasttarget");
if (Truth(text == ""))
{
UO.Print("No properties received");
}
else
{
UO.Print(text);
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;๋งค๊ฐ๋ณ์์ ์คํ ํ๋ฆ:
- id์ save๋ ๋ณ๋์ ๋ณ์์ ๋๋ค. ์ฆ, ๊ฐ์ฒด์ ๊ณ ์ ํ 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()
{
var id = UO.GetSerial("lasttarget");
var saved = UO.GetCliloc(id);
UO.Print("Object: 0x" + Hex(id));
UO.Print(saved);
return null;
}
string Hex(object? value) => Convert.ToInt64(value).ToString("X");
}C#์ ๋์๋ฌธ์๋ฅผ ๊ตฌ๋ถํฉ๋๋ค. ์ ํํ UO ์ด๋ฆ์ ์ฌ์ฉํ์ธ์. ์ซ์ ํ๋๊ทธ๋ 0๊ณผ ๋น๊ตํ๊ณ ๋ฐํ ํ์์ด bool์ผ ๋๋ง bool์ ์ฌ์ฉํ์ธ์.
๋งค๊ฐ๋ณ์: objID (Any)
๊ฒฐ๊ณผ: dynamic / Any.
ํธ์ถ ์:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetTooltip:bridge.GetTooltip(Arg(0)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0).
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
case "getcliloc":
case "gettooltip":
return new InjectionValue(bridge.GetTooltip(Arg(0)));ะฃะบัะฐัะฝััะบะฐ ยท ะ ัััะบะธะน ยท English ยท Deutsch ยท Franรงais ยท Italiano ยท Espaรฑol ยท ็น้ซไธญๆ ยท ๆฅๆฌ่ช ยท ํ๊ตญ์ด
dynamic UO.GetClilocByID(object? clilocID, object? @params);๊ฒ์ ํ์ผ์ cliloc ํ ํ๋ฆฟ์ ๋ณํํ๊ณ ์ ๋ฌ๋ ๋งค๊ฐ๋ณ์๋ฅผ ๋์ฒดํฉ๋๋ค.
-
clilocID- ํ์ int - ํ์งํ๋ ๋ฉ์์ง์ ID. ๊ฐ์ฒด์ serial๋ graphic๊ฐ ์๋๋๋ค. ์๋ฅผ ๋ค์ด ๊ฒฐ๊ณผ GetTooltipRec์ ํ[0]์ ์๋ ์ซ์์ ๋๋ค. -
paramsโ1_...,2_...์์๋ก ๋์ฒด ๋ฐฐ์ด์ด โโํ์์ ๋๋ค. ํ๋์ ์ค์นผ๋ผ ๊ฐ์ด ํ์ฉ๋ฉ๋๋ค. ์ด๋ ํ๋์ ๋ฌธ์์ด๋ก ๊ตฌ์ฑ๋ ๋ฐฐ์ด์ด ๋ฉ๋๋ค. ๋งค๊ฐ๋ณ์๊ฐ ์๋ ํ ํ๋ฆฟ์ ๊ฒฝ์ฐ ๋น ๋ฌธ์์ด์ ์ ๋ฌํ ์ ์์ต๋๋ค. #number ์์๋ ๋ค๋ฅธ cliloc์ ์ฐธ์กฐํฉ๋๋ค. ์์๋ ๋ฌธ์์ด๋ก ๋ณํ๋ฉ๋๋ค. ๋ฌธ์์ด์ ๋ช ์์ ์ผ๋ก ์ ๋ฌํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
string โ Params์ ๋์ฒด ํญ๋ชฉ์ผ๋ก ๋ฒ์ญ๋ ํ ํ๋ฆฟ์ ๋๋ค. cliloc ๋ก๋๊ฐ ์์ผ๋ฉด ๋น ๋ฌธ์์ด์ด ๋ฐํ๋ฉ๋๋ค. ID์ ์ ์ ์๋ ๊ฒฝ์ฐ ๋ก๋๋ ClilocLoader๋ ์ง๋จ ํ ์คํธ MegaCliloc๋ฅผ ๋ฐํํฉ๋๋ค. ์ด ์ซ์์ ๋์ฒด ๋งค๊ฐ๋ณ์๊ฐ ๋๋ฝ๋์์ต๋๋ค. cliloc ID ๋๋ ์ฑ๊ณต ๊ธฐํธ๋ฅผ ๋ฐํํ์ง ์์ต๋๋ค.
- ๊ฐ์ฒด ์์ฑ์ ๊ฒฝ์ฐ ๋จผ์ GetTooltipRec(ObjID): ๋ฉ์์ง ๋ฒํธ์ ๊ฐ์ฒด๊ฐ ๋ค๋ฆ ๋๋ค ID. ๋ชจ๋ ์์ฑ์ ๋ฏธ๋ฆฌ ๋ง๋ค์ด์ง ํ ์คํธ๋ฅผ ๋ณด๋ ค๋ฉด GetTooltip(ObjID)๋ฅผ ์ฌ์ฉํ์ธ์.
๊ฐ ์์ ๋ ๋ณ๋์ ํ์ผ .csx๋ก ์ ์ฅํ๊ณ IDE์์ ์คํํ ์ ์์ต๋๋ค. UO ๊ฐ์ฒด์ ๋๊ธฐ ๊ธฐ๋ฅ์ ํ์ฌ ๊ฒ์ ์ธ์
์ ํธ์คํธ๋ฅผ ์ ๊ณตํฉ๋๋ค. ๋ฐ๋ชจ serial ์ด๋ฆ, ์ขํ, ์ฃผ์๋ฅผ ์์ ์ ๊ฒ์ผ๋ก ๋ฐ๊พธ์ธ์.
์ด ์ฝ๋๋ฅผ ๋ณ๋์ .csx ํ์ผ๋ก ์คํํ์ธ์. ์ธ์๋ ํธ์ถ์ ์ง์ ํ์๋ฉ๋๋ค. ์์ ์ ์ด๋ฆ, serial, ์ฃผ์๋ฅผ ์์ ์ ๊ฐ์ผ๋ก ๋ฐ๊พธ์ธ์.
ํ ๋ฒ์ ํธ์ถ ๊ฒฐ๊ณผ๋ฅผ ์ ๋์ ํ์ํฉ๋๋ค. ์ซ์๋ฅผ bool๋ก ๋ณํํ์ง ์์ผ๋ฉฐ, ๋ฐฐ์ด์ด๋ฉด ์์ ์๋ฅผ ํ์ํฉ๋๋ค.
object? result = UO.GetClilocByID(1042971, "");
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));๋งค๊ฐ๋ณ์์ ์คํ ํ๋ฆ:
- ClilocID=1042971 โ ์์ ๋ฒํธ; ํ์ํ ๊ฒ์ผ๋ก ๊ต์ฒดํ์ญ์์ค. Params๋ ๋จ์ผ ๋น ๊ฐ์ผ๋ก ์ ๋ฌ๋ ๋น ๋ฌธ์์ด์ ๋๋ค.
- ์์ผ๋์นด๋ ํ์๊ฐ ์๋ ํจํด์ ๊ฒฝ์ฐ ๋น ๋งค๊ฐ๋ณ์๋ ํ ์คํธ๋ฅผ ๋ณ๊ฒฝํ์ง ์์ต๋๋ค. ํ ํ๋ฆฟ์ ๋ฐ์ดํฐ๊ฐ ํ์ํ ๊ฒฝ์ฐ ๋ค์ ์์ ๊ฐ์ด ๋ฐฐ์ด์ ์ ๋ฌํฉ๋๋ค.
var text = UO.GetClilocByID(1042971, "");
UO.Print(text);๋งค๊ฐ๋ณ์์ ์คํ ํ๋ฆ:
- ClilocID=1042971๋ ํ ํ๋ฆฟ์ ์์ ๋๋ค. args[0] ๋ฐ args[1]๋ ์ฒซ ๋ฒ์งธ ๋ฐ ๋ ๋ฒ์งธ ๋งค๊ฐ๋ณ์์ ์์น๋ฅผ โโ์ฐจ์งํฉ๋๋ค.
- ์ธ๋ฑ์ค ๋ณ์ ์ ์ธ[1]์ 0๋ถํฐ 1๊น์ง ๋ ๊ฐ์ง ์์๋ฅผ ์์ฑํฉ๋๋ค. ์ ์ ํ ๋งค๊ฐ๋ณ์๊ฐ ํ์ํ ID ํ ํ๋ฆฟ์ ์ฌ์ฉํ์ธ์.
return RunScenario();
object? RunScenario()
{
dynamic[] args = new dynamic[checked((int)(1) + 1)];
args[0] = "iron";
args[1] = "ingot";
UO.Print(UO.GetClilocByID(1042971, args));
return null;
}๋งค๊ฐ๋ณ์์ ์คํ ํ๋ฆ:
- ์ฒซ ๋ฒ์งธ ์ธ์๋ clilocID ์์ฑ์ ๋๋ค. ๋ ๋ฒ์งธ๋ ์ด๋ฏธ ๋ง๋ค์ด์ง Params ๋ฐฐ์ด์ ๋๋ค.
- ํ๋ ์ด์์ ๋ ์ฝ๋๊ฐ ์๋์ง ํ์ธ๋ฉ๋๋ค. ๋ชจ๋ ๋งค๊ฐ๋ณ์๋ ์๋ฒ๋ก๋ถํฐ ์์ ๋๋ฉฐ 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()
{
var rows = UO.GetTooltipRec("lasttarget");
if (Truth(ArrayLength(rows) > 0))
{
var row = rows[0];
UO.Print(UO.GetClilocByID(row[0], row[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;
}C#์ ๋์๋ฌธ์๋ฅผ ๊ตฌ๋ถํฉ๋๋ค. ์ ํํ UO ์ด๋ฆ์ ์ฌ์ฉํ์ธ์. ์ซ์ ํ๋๊ทธ๋ 0๊ณผ ๋น๊ตํ๊ณ ๋ฐํ ํ์์ด bool์ผ ๋๋ง bool์ ์ฌ์ฉํ์ธ์.
๋งค๊ฐ๋ณ์: clilocID (Any), params (Any)
๊ฒฐ๊ณผ: dynamic / Any.
ํธ์ถ ์:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetClilocById:bridge.GetClilocById(Arg(0), StringArrayArg(1)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::StringArrayArg:StringArrayArg(1).
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
case "getclilocbyid":
return new InjectionValue(bridge.GetClilocById(Arg(0), StringArrayArg(1)));ะฃะบัะฐัะฝััะบะฐ ยท ะ ัััะบะธะน ยท English ยท Deutsch ยท Franรงais ยท Italiano ยท Espaรฑol ยท ็น้ซไธญๆ ยท ๆฅๆฌ่ช ยท ํ๊ตญ์ด
int UO.GetUserCodepage();ํ๋กํ ์ค์ ์ ์ฝ์ง ์๊ณ Encoding.Default.CodePage๋ฅผ ๋ฐํํฉ๋๋ค.
๋งค๊ฐ๋ณ์๊ฐ ์์ต๋๋ค.
int โ ํ์ฌ ํ๋ก์ธ์ค์ Encoding.Default.CodePage ์ด๋ ์ ํํ ์์ฑ ์ธ์ฝ๋ฉ UO์ด ์๋ .NET ์ธ์ฝ๋ฉ์ ๋๋ค.
- ํ๋กํ ์ค์ ์ ์ฝ์ง ์๊ณ Encoding.Default.CodePage๋ฅผ ๋ฐํํฉ๋๋ค. ๊ฐ์ ํ๊ฒฝ์ ๋ฐ๋ผ ๋ค๋ฆ ๋๋ค.NET; Windows ANSI๋ ๋ณด์ฅ๋ ๊ฒ์ผ๋ก ๊ฐ์ฃผํ ์ ์์ต๋๋ค.
- ํ์ฌ ๋ก์ปฌ ์ํ๋ฅผ ์ฝ์ต๋๋ค. ํจํค์ง, ๋์ ๋๋ ์๋ ์ ๋ฐ์ดํธ๊ฐ ์์ต๋๋ค. ๊ฐ๋ณ ์ฝ๊ธฐ์์๋ ๋ค๋ฅธ ์ํ๊ฐ ๋ํ๋ ์ ์์ต๋๋ค.
๊ฐ ์์ ๋ ๋ณ๋์ ํ์ผ .csx๋ก ์ ์ฅํ๊ณ IDE์์ ์คํํ ์ ์์ต๋๋ค. UO ๊ฐ์ฒด์ ๋๊ธฐ ๊ธฐ๋ฅ์ ํ์ฌ ๊ฒ์ ์ธ์
์ ํธ์คํธ๋ฅผ ์ ๊ณตํฉ๋๋ค. ๋ฐ๋ชจ serial ์ด๋ฆ, ์ขํ, ์ฃผ์๋ฅผ ์์ ์ ๊ฒ์ผ๋ก ๋ฐ๊พธ์ธ์.
์ด ์ฝ๋๋ฅผ ๋ณ๋์ .csx ํ์ผ๋ก ์คํํ์ธ์. ์ธ์๋ ํธ์ถ์ ์ง์ ํ์๋ฉ๋๋ค. ์์ ์ ์ด๋ฆ, serial, ์ฃผ์๋ฅผ ์์ ์ ๊ฐ์ผ๋ก ๋ฐ๊พธ์ธ์.
ํ ๋ฒ์ ํธ์ถ ๊ฒฐ๊ณผ๋ฅผ ์ ๋์ ํ์ํฉ๋๋ค. ์ซ์๋ฅผ bool๋ก ๋ณํํ์ง ์์ผ๋ฉฐ, ๋ฐฐ์ด์ด๋ฉด ์์ ์๋ฅผ ํ์ํฉ๋๋ค.
var result = UO.GetUserCodepage();
UO.Print("GetUserCodepage: " + Convert.ToString(result));๋งค๊ฐ๋ณ์์ ์คํ ํ๋ฆ:
- ํ๋กํ ์ค์ ์ ์ฝ์ง ์๊ณ Encoding.Default.CodePage๋ฅผ ๋ฐํํฉ๋๋ค.
UO.Print(UO.GetUserCodepage());๋งค๊ฐ๋ณ์์ ์คํ ํ๋ฆ:
- ํ๋กํ ์ค์ ์ ์ฝ์ง ์๊ณ Encoding.Default.CodePage๋ฅผ ๋ฐํํฉ๋๋ค. ๊ฐ์ ํ๊ฒฝ์ ๋ฐ๋ผ ๋ค๋ฆ ๋๋ค.NET; Windows ANSI๋ ๋ณด์ฅ๋ ๊ฒ์ผ๋ก ๊ฐ์ฃผํ ์ ์์ต๋๋ค.
return RunScenario();
object? RunScenario()
{
var codepage = UO.GetUserCodepage();
if (Truth(codepage == 65001))
{
UO.Print("UTF-8");
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 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 before = UO.GetUserCodepage();
UO.Wait(500);
var after = UO.GetUserCodepage();
UO.Print(before);
UO.Print(after);
return null;
}
}C#์ ๋์๋ฌธ์๋ฅผ ๊ตฌ๋ถํฉ๋๋ค. ์ ํํ UO ์ด๋ฆ์ ์ฌ์ฉํ์ธ์. ์ซ์ ํ๋๊ทธ๋ 0๊ณผ ๋น๊ตํ๊ณ ๋ฐํ ํ์์ด bool์ผ ๋๋ง bool์ ์ฌ์ฉํ์ธ์.
๋งค๊ฐ๋ณ์: ๋งค๊ฐ๋ณ์๊ฐ ์์ต๋๋ค.
๊ฒฐ๊ณผ: int / Integer.
ํธ์ถ ์:
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
public int GetUserCodepage() => Encoding.Default.CodePage;