KO UO Topic sound visual environment - LIHACHTETAN/ClassicUO-Bad-Newbie-CSharp-Scripts-IDE GitHub Wiki
ะฃะบัะฐัะฝััะบะฐ ยท ะ ัััะบะธะน ยท English ยท Deutsch ยท Franรงais ยท Italiano ยท Espaรฑol ยท ็น้ซไธญๆ ยท ๆฅๆฌ่ช ยท ํ๊ตญ์ด
ํ ยท C# ยท IDE ยท UO API ยท AโZ ยท ์ ยท ์ธ์ด
์๋ฆฌ, ์กฐ๋ช , ๊ณ์ ๋ฐ ํด๋ผ์ด์ธํธ ๋ ์จ ํจ๊ณผ.
| ์ฃผ์ | ๋ช ๋ น ๋ฐ ์ค๋ช |
|---|---|
| Sound | UO.Sound |
| PlayWav | UO.PlayWav |
| Light | UO.Light |
| Season | UO.SetSeason |
| Weather Filter | UO.FilterWeather |
UO.Sound ยท UO.PlayWav ยท UO.Alarm ยท UO.Light ยท UO.SetSeason ยท UO.FilterWeather ยท UO.TicksAnim
๊ฐ ๋ช ๋ น ์นด๋์๋ ์ง์ ์ฝ๋, ํจ์ ๋ฐ ํด๋์ค ๋ฑ ์ฌ๋ฌ ๊ฐ์ง ๋ ๋ฆฝ์ ์ธ ์๋๋ฆฌ์ค๊ฐ ์์ต๋๋ค. ๋ค์์ ์ ํ๋ ์งง์ ์๋๋ฆฌ์ค์ ๋๋ค. ์ ํ์ฌํญ๊ณผ ์ ์ฒด ๋ถ์์ด ์นด๋์ ํฌํจ๋์ด ์์ต๋๋ค.
๋งค๊ฐ๋ณ์, ๊ฒฐ๊ณผ ๋ฐ ๋ชจ๋ ์๋๋ฆฌ์ค
UO.Print(UO.PlayWav("alert.wav"));๋งค๊ฐ๋ณ์, ๊ฒฐ๊ณผ ๋ฐ ๋ชจ๋ ์๋๋ฆฌ์ค
UO.Light();ะฃะบัะฐัะฝััะบะฐ ยท ะ ัััะบะธะน ยท English ยท Deutsch ยท Franรงais ยท Italiano ยท Espaรฑol ยท ็น้ซไธญๆ ยท ๆฅๆฌ่ช ยท ํ๊ตญ์ด
void UO.Alarm();Alarm๋ผ๋ ๋จ์ด๋ฅผ ๋ก์ปฌ syslog ClassicUO์ ์ธ์ํฉ๋๋ค. ์คํฌ๋ฆฝํธ์์ ์กฐ๊ฑด ๋ฐ์์ ๋ํ ์ฐธ๊ณ ์ฌํญ์ผ๋ก ์ฌ์ฉํฉ๋๋ค.
๋งค๊ฐ๋ณ์๊ฐ ์์ต๋๋ค.
void - ๊ฐ์ด ์์ต๋๋ค. ๋ณ๋์ ์ค์์ ์คํํฉ๋๋ค. ์ด๋ bool ๋๋ ์ฌ์ฉ์๊ฐ ๋ฉ์์ง๋ฅผ ๋ณด์๋ค๋ ํ์ธ์ด ์๋๋๋ค.
- ๋งค๊ฐ๋ณ์๊ฐ ์๋ UO.Alarm() ํ์๋ง ๋ฑ๋ก๋ฉ๋๋ค. ์์ ๋ง์ ํ ์คํธ๋ฅผ ์ ๋ ฅํ๋ ค๋ฉด UO.Print(text)์ ์ฌ์ฉํ์ธ์.
- ์ด ๋ช ๋ น์ ์๋ฆฌ๋ฅผ ์ฌ์ํ๊ฑฐ๋ ์์ด์ฝ์ ๊น๋ฐ์ด๊ฑฐ๋ ์ฐฝ์ ํ์ฑํํ์ง ์์ต๋๋ค. ๋ฉ์์ง๋ ๋ก์ปฌ๋ก ์ ์ง๋ฉ๋๋ค. ๊ฒ์ ์ฑํ ์ผ๋ก ์ ์ก๋์ง ์์ต๋๋ค.
๊ฐ ์์ ๋ ๋ณ๋์ ํ์ผ .csx๋ก ์ ์ฅํ๊ณ IDE์์ ์คํํ ์ ์์ต๋๋ค. UO ๊ฐ์ฒด์ ๋๊ธฐ ๊ธฐ๋ฅ์ ํ์ฌ ๊ฒ์ ์ธ์
์ ํธ์คํธ๋ฅผ ์ ๊ณตํฉ๋๋ค. ๋ฐ๋ชจ serial ์ด๋ฆ, ์ขํ, ์ฃผ์๋ฅผ ์์ ์ ๊ฒ์ผ๋ก ๋ฐ๊พธ์ธ์.
์ด ์ฝ๋๋ฅผ ๋ณ๋์ .csx ํ์ผ๋ก ์คํํ์ธ์. ์ธ์๋ ํธ์ถ์ ์ง์ ํ์๋ฉ๋๋ค. ์์ ์ ์ด๋ฆ, serial, ์ฃผ์๋ฅผ ์์ ์ ๊ฐ์ผ๋ก ๋ฐ๊พธ์ธ์.
๋ช ๋ น์ ๋ ๋ฆฝ๋ ๋ฌธ์ ๋๋ค. ์์ ๋ฉ์์ง๋ ํธ์ถ ์์์ ๋ํ๋ด๋ฉฐ ์๋ฒ ๋์์ ์๋ฃ๋ฅผ ํ์ธํ์ง ์์ต๋๋ค.
UO.Print("Calling UO.Alarm");
UO.Alarm();๋งค๊ฐ๋ณ์์ ์คํ ํ๋ฆ:
- ๋งค๊ฐ๋ณ์๊ฐ ์์ต๋๋ค. ์์คํ ๋ก๊ทธ์ Alarm๋ผ๋ ๋จ์ด๊ฐ ๋ํ๋ฉ๋๋ค.
UO.Alarm();๋งค๊ฐ๋ณ์์ ์คํ ํ๋ฆ:
- Alarm์๋ ํ ์คํธ ์ต์ ์ด ์์ต๋๋ค. Life๋ ์ซ์ HP๋ฅผ ๋ฐํํฉ๋๋ค. Print์๋ ์ด์ ์ ๋ํ ๋ช ํํ ์ค๋ช ์ด ์ถ๊ฐ๋ฉ๋๋ค.
return RunScenario();
object? RunScenario()
{
if (Truth(UO.Life() < 30))
{
UO.Alarm();
UO.Print("Health is below 30");
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;๋งค๊ฐ๋ณ์์ ์คํ ํ๋ฆ:
- 0x0EED - ๊ณจ๋ ํ์ , -1 - ๋ชจ๋ ์์, backpack - ๋ฐฑํฉ. Alarm์ 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()
{
var item = UO.FindType(0x0EED, -1, "backpack");
if (Truth(item != ""))
{
UO.Alarm();
UO.Print("Gold stack found: " + Convert.ToString(item));
}
else
{
UO.Print("No gold stack in the loaded backpack");
}
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์ ์ฌ์ฉํ์ธ์.
๋งค๊ฐ๋ณ์: ๋งค๊ฐ๋ณ์๊ฐ ์์ต๋๋ค.
๊ฒฐ๊ณผ: void / Unit.
ํธ์ถ ์:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
InjectionScript.Runtime.InjectionApiUO.SystemMessage:SystemMessage(arguments.Length > 0 ? Text(0) : "Alarm"). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Text:Text(0).
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
case "alarm":
SystemMessage(arguments.Length > 0 ? Text(0) : "Alarm"); return InjectionValue.Unit;ะฃะบัะฐัะฝััะบะฐ ยท ะ ัััะบะธะน ยท English ยท Deutsch ยท Franรงais ยท Italiano ยท Espaรฑol ยท ็น้ซไธญๆ ยท ๆฅๆฌ่ช ยท ํ๊ตญ์ด
void UO.FilterWeather();
void UO.FilterWeather(object? enabled);ํด๋ผ์ด์ธํธ ๋ ์จ ํํฐ๋ฅผ ํ์ฑํํ๊ฑฐ๋ ๋นํ์ฑํํฉ๋๋ค.
-
enabledโ ์ ํ ๊ฐ: ์ธ์๊ฐ ์์ผ๋ฉด ํํฐ๊ฐ ์ผ์ง๋๋ค. 0๊ฐ ๊บผ์ง๊ณ 0์ด ์๋ int๊ฐ ์ผ์ง๋๋ค.
void - ๋ฐํ ๊ฐ์ด ์์ต๋๋ค.
- ์ ๊ทํ๋ ํ๋๊ทธ๋ฅผ ๋ฐํ์ ์ํ์ ์ฐ๊ณ ์ด๋ฅผ ๊ด๋ฆฌ์์๊ฒ ์ ๋ฌํฉ๋๋ค. ํํฐ๋ ํด๋ผ์ด์ธํธ์ ์ฒ๋ฆฌ์ ์ํฅ์ ๋ฏธ์นฉ๋๋ค. ์๋ฒ ์ด๋ฒคํธ์ ๊ธฐํ ๋ก๊ทธ ์ค์ ์ ๋ณ๋๋ก ์ ์ง๋ฉ๋๋ค.
๊ฐ ์์ ๋ ๋ณ๋์ ํ์ผ .csx๋ก ์ ์ฅํ๊ณ IDE์์ ์คํํ ์ ์์ต๋๋ค. UO ๊ฐ์ฒด์ ๋๊ธฐ ๊ธฐ๋ฅ์ ํ์ฌ ๊ฒ์ ์ธ์
์ ํธ์คํธ๋ฅผ ์ ๊ณตํฉ๋๋ค. ๋ฐ๋ชจ serial ์ด๋ฆ, ์ขํ, ์ฃผ์๋ฅผ ์์ ์ ๊ฒ์ผ๋ก ๋ฐ๊พธ์ธ์.
์ด ์ฝ๋๋ฅผ ๋ณ๋์ .csx ํ์ผ๋ก ์คํํ์ธ์. ์ธ์๋ ํธ์ถ์ ์ง์ ํ์๋ฉ๋๋ค. ์์ ์ ์ด๋ฆ, serial, ์ฃผ์๋ฅผ ์์ ์ ๊ฐ์ผ๋ก ๋ฐ๊พธ์ธ์.
๋ช ๋ น์ ๋ ๋ฆฝ๋ ๋ฌธ์ ๋๋ค. ์์ ๋ฉ์์ง๋ ํธ์ถ ์์์ ๋ํ๋ด๋ฉฐ ์๋ฒ ๋์์ ์๋ฃ๋ฅผ ํ์ธํ์ง ์์ต๋๋ค.
UO.Print("Calling UO.FilterWeather");
UO.FilterWeather();๋งค๊ฐ๋ณ์์ ์คํ ํ๋ฆ:
- ์ธ์ ์๊ฐ 0์ด๋ฉด ์ฝ๊ธฐ๊ฐ ์๋ ํฌํจ์ ์๋ฏธํฉ๋๋ค.
UO.FilterWeather();๋งค๊ฐ๋ณ์์ ์คํ ํ๋ฆ:
- ๋ช ์์ ์ธ 0๋ ํด๋ผ์ด์ธํธ ํํฐ๋ฅผ ๋๋๋ค.
return RunScenario();
object? RunScenario()
{
UO.FilterWeather(0);
return null;
}๋งค๊ฐ๋ณ์์ ์คํ ํ๋ฆ:
- ํํฐ๊ฐ ์ผ์ง๊ณ ๋ช ํํ๊ฒ ๊บผ์ง ์ํ๋ก ๋์๊ฐ๋๋ค.
return new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
UO.FilterWeather(1);
UO.FilterWeather(0);
return null;
}
}C#์ ๋์๋ฌธ์๋ฅผ ๊ตฌ๋ถํฉ๋๋ค. ์ ํํ UO ์ด๋ฆ์ ์ฌ์ฉํ์ธ์. ์ซ์ ํ๋๊ทธ๋ 0๊ณผ ๋น๊ตํ๊ณ ๋ฐํ ํ์์ด bool์ผ ๋๋ง bool์ ์ฌ์ฉํ์ธ์.
๋งค๊ฐ๋ณ์: ๋งค๊ฐ๋ณ์๊ฐ ์์ต๋๋ค.
๊ฒฐ๊ณผ: void / Unit.
ํธ์ถ ์:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias. -
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias::Arg:Arg(0). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.SetWeatherFilter:bridge.SetWeatherFilter(state.WeatherFilter).
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
case "filterweather": state.WeatherFilter = arguments.Length == 0 || Arg(0) != 0 ? 1 : 0; bridge.SetWeatherFilter(state.WeatherFilter); break;๋งค๊ฐ๋ณ์: enabled (Any)
๊ฒฐ๊ณผ: void / Unit.
ํธ์ถ ์:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias. -
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias::Arg:Arg(0). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.SetWeatherFilter:bridge.SetWeatherFilter(state.WeatherFilter).
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
case "filterweather": state.WeatherFilter = arguments.Length == 0 || Arg(0) != 0 ? 1 : 0; bridge.SetWeatherFilter(state.WeatherFilter); break;ะฃะบัะฐัะฝััะบะฐ ยท ะ ัััะบะธะน ยท English ยท Deutsch ยท Franรงais ยท Italiano ยท Espaรฑol ยท ็น้ซไธญๆ ยท ๆฅๆฌ่ช ยท ํ๊ตญ์ด
void UO.Light();
void UO.Light(object? value);ํด๋ผ์ด์ธํธ์ ์ ์ฒด ์กฐ๋ช ์ ๋ก์ปฌ๋ก ์ค์ ํฉ๋๋ค.
-
valueโ ์ ํ์ ์ ์: 0..30, ์ด ๋ฒ์๋ก ์ ํ๋ฉ๋๋ค. ์ธ์ ์๋ ํ์์ 0๋ฅผ ์ฌ์ฉํฉ๋๋ค. ์ด๊ฒ์ ์ฝ๊ธฐ๊ฐ ์๋๋ผ ์ฐ๊ธฐ์ ๋๋ค.
void - ๊ฐ์ด ์์ต๋๋ค. ๋ณ๋์ ํ์ ์ผ๋ก ์ ํํ์ธ์. ์๋ฃ๋ ์๋ฒ์ ์์ ์ ํ์ธํ์ง ์์ต๋๋ค.
- ExecuteLegacyManualAlias๋ Arg(0)๋ฅผ ์ ๋ฌํฉ๋๋ค. ์ฌ๊ธฐ์ ๋๋ฝ๋ ์ธ์๋ 0์ ๋๋ค. SetLight๋ Light.Overall๊ณผ Light.RealOverall์ byte์ ์ ํ๋ ๊ฐ์ ํ ๋นํฉ๋๋ค.
- ๋ค๋ฅธ ํ๋ ์ด์ด์ ์กฐ๋ช ์ ๋ณ๊ฒฝํ์ง ์์ผ๋ฉฐ ์๋ฒ์ ์์ฒญํ์ง ์์ต๋๋ค. ๋ค์ ์กฐ๋ช ์๋ฒ ํจํค์ง๊ฐ ๊ฐ์ ๋์ฒดํ ์ ์์ต๋๋ค.
๊ฐ ์์ ๋ ๋ณ๋์ ํ์ผ .csx๋ก ์ ์ฅํ๊ณ IDE์์ ์คํํ ์ ์์ต๋๋ค. UO ๊ฐ์ฒด์ ๋๊ธฐ ๊ธฐ๋ฅ์ ํ์ฌ ๊ฒ์ ์ธ์
์ ํธ์คํธ๋ฅผ ์ ๊ณตํฉ๋๋ค. ๋ฐ๋ชจ serial ์ด๋ฆ, ์ขํ, ์ฃผ์๋ฅผ ์์ ์ ๊ฒ์ผ๋ก ๋ฐ๊พธ์ธ์.
์ด ์ฝ๋๋ฅผ ๋ณ๋์ .csx ํ์ผ๋ก ์คํํ์ธ์. ์ธ์๋ ํธ์ถ์ ์ง์ ํ์๋ฉ๋๋ค. ์์ ์ ์ด๋ฆ, serial, ์ฃผ์๋ฅผ ์์ ์ ๊ฐ์ผ๋ก ๋ฐ๊พธ์ธ์.
๋ช ๋ น์ ๋ ๋ฆฝ๋ ๋ฌธ์ ๋๋ค. ์์ ๋ฉ์์ง๋ ํธ์ถ ์์์ ๋ํ๋ด๋ฉฐ ์๋ฒ ๋์์ ์๋ฃ๋ฅผ ํ์ธํ์ง ์์ต๋๋ค.
UO.Print("Calling UO.Light");
UO.Light();๋งค๊ฐ๋ณ์์ ์คํ ํ๋ฆ:
- ํด๋ผ์ด์ธํธ์ ์ ์ฒด ์กฐ๋ช ์ ๋ก์ปฌ๋ก ์ค์ ํฉ๋๋ค.
UO.Light();๋งค๊ฐ๋ณ์์ ์คํ ํ๋ฆ:
- ExecuteLegacyManualAlias๋ Arg(0)๋ฅผ ์ ๋ฌํฉ๋๋ค. ์ฌ๊ธฐ์ ๋๋ฝ๋ ์ธ์๋ 0์ ๋๋ค. SetLight๋ Light.Overall๊ณผ Light.RealOverall์ byte์ ์ ํ๋ ๊ฐ์ ํ ๋นํฉ๋๋ค.
return RunScenario();
object? RunScenario()
{
UO.Light(15);
return null;
}๋งค๊ฐ๋ณ์์ ์คํ ํ๋ฆ:
- ๋ค๋ฅธ ํ๋ ์ด์ด์ ์กฐ๋ช ์ ๋ณ๊ฒฝํ์ง ์์ผ๋ฉฐ ์๋ฒ์ ์์ฒญํ์ง ์์ต๋๋ค. ๋ค์ ์กฐ๋ช ์๋ฒ ํจํค์ง๊ฐ ๊ฐ์ ๋์ฒดํ ์ ์์ต๋๋ค.
return new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
UO.Light(99);
UO.Print("Light clamped to 30");
return null;
}
}C#์ ๋์๋ฌธ์๋ฅผ ๊ตฌ๋ถํฉ๋๋ค. ์ ํํ UO ์ด๋ฆ์ ์ฌ์ฉํ์ธ์. ์ซ์ ํ๋๊ทธ๋ 0๊ณผ ๋น๊ตํ๊ณ ๋ฐํ ํ์์ด bool์ผ ๋๋ง bool์ ์ฌ์ฉํ์ธ์.
๋งค๊ฐ๋ณ์: ๋งค๊ฐ๋ณ์๊ฐ ์์ต๋๋ค.
๊ฒฐ๊ณผ: void / Unit.
ํธ์ถ ์:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.SetLight:bridge.SetLight(Arg(0)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias::Arg:Arg(0).
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
case "light": bridge.SetLight(Arg(0)); break;๋งค๊ฐ๋ณ์: value (Any)
๊ฒฐ๊ณผ: void / Unit.
ํธ์ถ ์:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.SetLight:bridge.SetLight(Arg(0)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias::Arg:Arg(0).
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
case "light": bridge.SetLight(Arg(0)); break;ะฃะบัะฐัะฝััะบะฐ ยท ะ ัััะบะธะน ยท English ยท Deutsch ยท Franรงais ยท Italiano ยท Espaรฑol ยท ็น้ซไธญๆ ยท ๆฅๆฌ่ช ยท ํ๊ตญ์ด
int UO.PlayWav(object? file);๋ก์ปฌ ์ค๋์ค ํ์ผ์ ์ฌ์ํฉ๋๋ค.
-
fileโ ์ค๋์ค ํ์ผ์ ๊ฒฝ๋ก์ ๋๋ค. ์ ๋ ๊ฒฝ๋ก๋ ์ ์ง๋๊ณ ์๋ ๊ฒฝ๋ก๋ CUOEEnviroment.ExecutablePath์์ ํ์ธ๋ฉ๋๋ค. ํ์ฅ์ ์์ฒด๋ ํ์ธ๋์ง ์์ต๋๋ค. ํ์ผ์ SoundEffect.FromStream๋ก ํ์๋ฉ๋๋ค.
์ซ์ ํ๋๊ทธ int: 1 - sound.Play() ํ์ฉ, 0 - ํ์ผ ์์, ์ฌ์ ์คํจ ๋๋ ์ค๋ฅ ๋ฐ์. ์ด๊ฒ์ด ์ฌ์์ ๋์ด ์๋๋๋ค.
- Bridge๋ ์ฝ๊ธฐ ์ํด ํ์ผ์ ์ด๊ณ , SoundEffect.FromStream๋ฅผ ๋์ฝ๋ฉํ๊ณ , ์์ ๋ ์ฌ์ด๋๋ฅผ ์ ํ๋ _sounds ๋ชฉ๋ก์ ์ ์ฅํ๊ณ , ์ ํ์ ๋๋ฌํ๋ฉด ์ค๋๋ ์ฌ์ด๋๋ฅผ ์ญ์ /ํ๊ธฐํฉ๋๋ค.
- ํ์ผ/์ค๋ฅ๊ฐ ์์ผ๋ฉด ๋ฉ์์ง๊ฐ ํ์๋๊ณ ๊ฒฐ๊ณผ๋ 0์ ๋๋ค. ์ด ๋ช ๋ น์ ์ฌ์ด๋๊ฐ ๋๋ ๋๊น์ง ๊ธฐ๋ค๋ฆฌ์ง ์์ผ๋ฉฐ ํ์ผ์ ์๋ฒ๋ก ์ ์กํ์ง ์์ต๋๋ค.
๊ฐ ์์ ๋ ๋ณ๋์ ํ์ผ .csx๋ก ์ ์ฅํ๊ณ IDE์์ ์คํํ ์ ์์ต๋๋ค. UO ๊ฐ์ฒด์ ๋๊ธฐ ๊ธฐ๋ฅ์ ํ์ฌ ๊ฒ์ ์ธ์
์ ํธ์คํธ๋ฅผ ์ ๊ณตํฉ๋๋ค. ๋ฐ๋ชจ serial ์ด๋ฆ, ์ขํ, ์ฃผ์๋ฅผ ์์ ์ ๊ฒ์ผ๋ก ๋ฐ๊พธ์ธ์.
์ด ์ฝ๋๋ฅผ ๋ณ๋์ .csx ํ์ผ๋ก ์คํํ์ธ์. ์ธ์๋ ํธ์ถ์ ์ง์ ํ์๋ฉ๋๋ค. ์์ ์ ์ด๋ฆ, serial, ์ฃผ์๋ฅผ ์์ ์ ๊ฐ์ผ๋ก ๋ฐ๊พธ์ธ์.
ํ ๋ฒ์ ํธ์ถ ๊ฒฐ๊ณผ๋ฅผ ์ ๋์ ํ์ํฉ๋๋ค. ์ซ์๋ฅผ bool๋ก ๋ณํํ์ง ์์ผ๋ฉฐ, ๋ฐฐ์ด์ด๋ฉด ์์ ์๋ฅผ ํ์ํฉ๋๋ค.
var result = UO.PlayWav("alert.wav");
UO.Print("PlayWav: " + Convert.ToString(result));๋งค๊ฐ๋ณ์์ ์คํ ํ๋ฆ:
- ๋ก์ปฌ ์ค๋์ค ํ์ผ์ ์ฌ์ํฉ๋๋ค.
UO.Print(UO.PlayWav("alert.wav"));๋งค๊ฐ๋ณ์์ ์คํ ํ๋ฆ:
- Bridge๋ ์ฝ๊ธฐ ์ํด ํ์ผ์ ์ด๊ณ , SoundEffect.FromStream๋ฅผ ๋์ฝ๋ฉํ๊ณ , ์์ ๋ ์ฌ์ด๋๋ฅผ ์ ํ๋ _sounds ๋ชฉ๋ก์ ์ ์ฅํ๊ณ , ์ ํ์ ๋๋ฌํ๋ฉด ์ค๋๋ ์ฌ์ด๋๋ฅผ ์ญ์ /ํ๊ธฐํฉ๋๋ค.
return RunScenario();
object? RunScenario()
{
UO.Print(UO.PlayWav("C:\\UO Sounds\\alert.wav"));
return null;
}๋งค๊ฐ๋ณ์์ ์คํ ํ๋ฆ:
- ํ์ผ/์ค๋ฅ๊ฐ ์์ผ๋ฉด ๋ฉ์์ง๊ฐ ํ์๋๊ณ ๊ฒฐ๊ณผ๋ 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 accepted = UO.PlayWav("alert.wav");
if (Truth(accepted == 0))
{
UO.Print("Audio file could not be played");
}
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์ ์ฌ์ฉํ์ธ์.
๋งค๊ฐ๋ณ์: file (Any/String)
๊ฒฐ๊ณผ: int / Any.
ํธ์ถ ์:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.PlayWav:bridge.PlayWav(Text(0)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Text:Text(0).
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
case "playwav": return new InjectionValue(bridge.PlayWav(Text(0)));๋งค๊ฐ๋ณ์: file (Any/String)
๊ฒฐ๊ณผ: int / Integer.
ํธ์ถ ์:
-
InjectionScript.Runtime.InjectionApiUO.PlayWav. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.PlayWav:bridge.PlayWav(file).
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
public int PlayWav(string file) => bridge.PlayWav(file);ะฃะบัะฐัะฝััะบะฐ ยท ะ ัััะบะธะน ยท English ยท Deutsch ยท Franรงais ยท Italiano ยท Espaรฑol ยท ็น้ซไธญๆ ยท ๆฅๆฌ่ช ยท ํ๊ตญ์ด
void UO.SetSeason(object? season);ํ์๋ ๊ณ์ ์ ๋ก์ปฌ์์ ๋ณ๊ฒฝํฉ๋๋ค.
-
season- int: 0..4; 0/์ 4 ์๋์ ๊ฐ์ ๊ฐ์ฅ ๊ฐ๊น์ด ๊ฒฝ๊ณ๋ก ์ ํ๋ฉ๋๋ค. ์ซ์๋ ํด๋ผ์ด์ธํธ์ ์ด๊ฑฐํ ์์ฆ์ ํด๋นํฉ๋๋ค.
void - ๊ฐ์ด ์์ต๋๋ค. ๋ณ๋์ ํ์ ์ผ๋ก ์ ํํ์ธ์. ์๋ฃ๋ ์๋ฒ์ ์์ ์ ํ์ธํ์ง ์์ต๋๋ค.
- Bridge.SetSeason๋ _world.ChangeSeason((Season)clamp(season,0,4), -1)๋ฅผ ํธ์ถํฉ๋๋ค. ์ด๊ฒ์ ํด๋ผ์ด์ธํธ์ ์ธ๊ณ๋ฅผ ๋ณด์ฌ์ฃผ๋ ๊ฒ์ด์ง, ์๋ฒ ์์ฆ์ ๋ณ๊ฒฝํ๋ผ๋ ์์ฒญ์ด ์๋๋๋ค.
- ์๋ฒ ๋ฐ์ดํฐ๋ก ์ธํด ๋์ค์ ์์ฆ์ด ๋ค์ ๋ณ๊ฒฝ๋ ์ ์์ต๋๋ค. ์ด ๋ช ๋ น์ ์ง๋, ์๋ฒ ๋ ์จ ๋๋ ๋ฌ๋ ฅ ๋ ์ง๋ฅผ ๋ณ๊ฒฝํ์ง ์์ต๋๋ค.
๊ฐ ์์ ๋ ๋ณ๋์ ํ์ผ .csx๋ก ์ ์ฅํ๊ณ IDE์์ ์คํํ ์ ์์ต๋๋ค. UO ๊ฐ์ฒด์ ๋๊ธฐ ๊ธฐ๋ฅ์ ํ์ฌ ๊ฒ์ ์ธ์
์ ํธ์คํธ๋ฅผ ์ ๊ณตํฉ๋๋ค. ๋ฐ๋ชจ serial ์ด๋ฆ, ์ขํ, ์ฃผ์๋ฅผ ์์ ์ ๊ฒ์ผ๋ก ๋ฐ๊พธ์ธ์.
์ด ์ฝ๋๋ฅผ ๋ณ๋์ .csx ํ์ผ๋ก ์คํํ์ธ์. ์ธ์๋ ํธ์ถ์ ์ง์ ํ์๋ฉ๋๋ค. ์์ ์ ์ด๋ฆ, serial, ์ฃผ์๋ฅผ ์์ ์ ๊ฐ์ผ๋ก ๋ฐ๊พธ์ธ์.
๋ช ๋ น์ ๋ ๋ฆฝ๋ ๋ฌธ์ ๋๋ค. ์์ ๋ฉ์์ง๋ ํธ์ถ ์์์ ๋ํ๋ด๋ฉฐ ์๋ฒ ๋์์ ์๋ฃ๋ฅผ ํ์ธํ์ง ์์ต๋๋ค.
UO.Print("Calling UO.SetSeason");
UO.SetSeason(0);๋งค๊ฐ๋ณ์์ ์คํ ํ๋ฆ:
- ํ์๋ ๊ณ์ ์ ๋ก์ปฌ์์ ๋ณ๊ฒฝํฉ๋๋ค.
UO.SetSeason(0);๋งค๊ฐ๋ณ์์ ์คํ ํ๋ฆ:
- Bridge.SetSeason๋ _world.ChangeSeason((Season)clamp(season,0,4), -1)๋ฅผ ํธ์ถํฉ๋๋ค. ์ด๊ฒ์ ํด๋ผ์ด์ธํธ์ ์ธ๊ณ๋ฅผ ๋ณด์ฌ์ฃผ๋ ๊ฒ์ด์ง, ์๋ฒ ์์ฆ์ ๋ณ๊ฒฝํ๋ผ๋ ์์ฒญ์ด ์๋๋๋ค.
return RunScenario();
object? RunScenario()
{
UO.SetSeason(4);
return null;
}๋งค๊ฐ๋ณ์์ ์คํ ํ๋ฆ:
- ์๋ฒ ๋ฐ์ดํฐ๋ก ์ธํด ๋์ค์ ์์ฆ์ด ๋ค์ ๋ณ๊ฒฝ๋ ์ ์์ต๋๋ค. ์ด ๋ช ๋ น์ ์ง๋, ์๋ฒ ๋ ์จ ๋๋ ๋ฌ๋ ฅ ๋ ์ง๋ฅผ ๋ณ๊ฒฝํ์ง ์์ต๋๋ค.
return new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
UO.SetSeason(99);
UO.Print("Season clamped to 4");
return null;
}
}C#์ ๋์๋ฌธ์๋ฅผ ๊ตฌ๋ถํฉ๋๋ค. ์ ํํ UO ์ด๋ฆ์ ์ฌ์ฉํ์ธ์. ์ซ์ ํ๋๊ทธ๋ 0๊ณผ ๋น๊ตํ๊ณ ๋ฐํ ํ์์ด bool์ผ ๋๋ง bool์ ์ฌ์ฉํ์ธ์.
๋งค๊ฐ๋ณ์: season (Any)
๊ฒฐ๊ณผ: void / Unit.
ํธ์ถ ์:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.SetSeason:bridge.SetSeason(Arg(0)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias::Arg:Arg(0).
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
case "setseason": bridge.SetSeason(Arg(0)); break;ะฃะบัะฐัะฝััะบะฐ ยท ะ ัััะบะธะน ยท English ยท Deutsch ยท Franรงais ยท Italiano ยท Espaรฑol ยท ็น้ซไธญๆ ยท ๆฅๆฌ่ช ยท ํ๊ตญ์ด
void UO.Sound(object? soundId);ํด๋ผ์ด์ธํธ ๋ฆฌ์์ค์ ID์์ ์ฌ์ด๋๋ฅผ ์ฌ์ํฉ๋๋ค.
-
soundId- int ID ์์ UO; WAV๋ก์ ๊ฒฝ๋ก๋ ๊ธฐ๊ฐ์ด ์๋๋๋ค.
void - ๊ฐ์ด ์์ต๋๋ค. ๋ณ๋์ ํ์ ์ผ๋ก ์ ํํ์ธ์. ์๋ฃ๋ ์๋ฒ์ ์์ ์ ํ์ธํ์ง ์์ต๋๋ค.
- ExecuteLegacyManualAlias๋ bridge.PlaySound๋ฅผ ํธ์ถํฉ๋๋ค. ์ฌ๊ธฐ์ RequireGameView("PlaySound").Audio.PlaySound(sound)๋ ๊ฒ์ ์ค๋ ๋์์ ์คํ๋ฉ๋๋ค.
- ์ค๋์ค๊ฐ ํฌํจ๋ ์ด๋ฆฐ ๊ทธ๋ํฝ ์ฐฝ์ด ํ์ํฉ๋๋ค. ๋๋ฝ๋ ์ค๋ฅ GUI๋ก ์ธํด ํตํ๊ฐ ์ข ๋ฃ๋ ์ ์์ต๋๋ค. ์ด void ๋ช ๋ น์ ์ฌ์ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํ์ง ์์ต๋๋ค. ๋ก์ปฌ ํ์ผ์ ๊ฒฝ์ฐ PlayWav์ ์ฌ์ฉํ์ธ์.
๊ฐ ์์ ๋ ๋ณ๋์ ํ์ผ .csx๋ก ์ ์ฅํ๊ณ IDE์์ ์คํํ ์ ์์ต๋๋ค. UO ๊ฐ์ฒด์ ๋๊ธฐ ๊ธฐ๋ฅ์ ํ์ฌ ๊ฒ์ ์ธ์
์ ํธ์คํธ๋ฅผ ์ ๊ณตํฉ๋๋ค. ๋ฐ๋ชจ serial ์ด๋ฆ, ์ขํ, ์ฃผ์๋ฅผ ์์ ์ ๊ฒ์ผ๋ก ๋ฐ๊พธ์ธ์.
์ด ์ฝ๋๋ฅผ ๋ณ๋์ .csx ํ์ผ๋ก ์คํํ์ธ์. ์ธ์๋ ํธ์ถ์ ์ง์ ํ์๋ฉ๋๋ค. ์์ ์ ์ด๋ฆ, serial, ์ฃผ์๋ฅผ ์์ ์ ๊ฐ์ผ๋ก ๋ฐ๊พธ์ธ์.
๋ช ๋ น์ ๋ ๋ฆฝ๋ ๋ฌธ์ ๋๋ค. ์์ ๋ฉ์์ง๋ ํธ์ถ ์์์ ๋ํ๋ด๋ฉฐ ์๋ฒ ๋์์ ์๋ฃ๋ฅผ ํ์ธํ์ง ์์ต๋๋ค.
UO.Print("Calling UO.Sound");
UO.Sound(0x0040);๋งค๊ฐ๋ณ์์ ์คํ ํ๋ฆ:
- ํด๋ผ์ด์ธํธ ๋ฆฌ์์ค์ ID์์ ์ฌ์ด๋๋ฅผ ์ฌ์ํฉ๋๋ค.
UO.Sound(0x0040);๋งค๊ฐ๋ณ์์ ์คํ ํ๋ฆ:
- ExecuteLegacyManualAlias๋ bridge.PlaySound๋ฅผ ํธ์ถํฉ๋๋ค. ์ฌ๊ธฐ์ RequireGameView("PlaySound").Audio.PlaySound(sound)๋ ๊ฒ์ ์ค๋ ๋์์ ์คํ๋ฉ๋๋ค.
return RunScenario();
object? RunScenario()
{
var soundId = 0x0040;
UO.Sound(soundId);
return null;
}๋งค๊ฐ๋ณ์์ ์คํ ํ๋ฆ:
- ์ค๋์ค๊ฐ ํฌํจ๋ ์ด๋ฆฐ ๊ทธ๋ํฝ ์ฐฝ์ด ํ์ํฉ๋๋ค. ๋๋ฝ๋ ์ค๋ฅ GUI๋ก ์ธํด ํตํ๊ฐ ์ข ๋ฃ๋ ์ ์์ต๋๋ค. ์ด ๋จ์ ๋ช ๋ น์ ์ฌ์ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํ์ง ์์ต๋๋ค. ๋ก์ปฌ ํ์ผ์ ๊ฒฝ์ฐ PlayWav์ ์ฌ์ฉํ์ธ์.
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.Sound(0x0040);
UO.Wait(250);
UO.Print("Sound request made");
return null;
}
}C#์ ๋์๋ฌธ์๋ฅผ ๊ตฌ๋ถํฉ๋๋ค. ์ ํํ UO ์ด๋ฆ์ ์ฌ์ฉํ์ธ์. ์ซ์ ํ๋๊ทธ๋ 0๊ณผ ๋น๊ตํ๊ณ ๋ฐํ ํ์์ด bool์ผ ๋๋ง bool์ ์ฌ์ฉํ์ธ์.
๋งค๊ฐ๋ณ์: soundId (Any)
๊ฒฐ๊ณผ: void / Unit.
ํธ์ถ ์:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.PlaySound:bridge.PlaySound(Arg(0)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias::Arg:Arg(0).
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
case "sound": bridge.PlaySound(Arg(0)); break;ะฃะบัะฐัะฝััะบะฐ ยท ะ ัััะบะธะน ยท English ยท Deutsch ยท Franรงais ยท Italiano ยท Espaรฑol ยท ็น้ซไธญๆ ยท ๆฅๆฌ่ช ยท ํ๊ตญ์ด
int UO.TicksAnim();์ ์ฅ๋ ๋งํฌ TicksAnim๋ฅผ ์ฝ์ต๋๋ค.
๋งค๊ฐ๋ณ์๊ฐ ์์ต๋๋ค.
int โ ๋ฐํ์ ์์๋ถํฐ 10๋ถ์ 1์ด ์์ UO.Timer๋ฅผ ํ์ํฉ๋๋ค. 0 - ๋งํฌ๊ฐ ์์ง ์ค์ ๋์ง ์์๊ฑฐ๋ ์ฒ์ 10๋ถ์ 1์ด์ ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ์ต๋๋ค. ๋ฐ๋ฆฌ์ด๋ ๋ฌ๋ ฅ ์๊ฐ์ด ์๋๋๋ค.
- ticksAnim ํ๋๋ฅผ ๋ฐํํฉ๋๋ค. Morph ๋๋ 0์ด ์๋ ๊ฒฐ๊ณผ Move์ ์ํด ์ ๋ฐ์ดํธ๋ฉ๋๋ค. ๋ชจ๋ ์๋/์๋ฒ ํ๋์ ์๋์ผ๋ก ๊ด์ฐฐํ๋ ๊ฒ์ ์๋๋๋ค. ๋ช ๋ น ์์ฒด๋ ํ์๋ฅผ ๋ณ๊ฒฝํ์ง ์์ต๋๋ค.
- UO.Timer() - ์ด ํ์๋ 10๋ถ์ 1์ด ๋จ์๋ก ๋์ด๋ฅผ ๊ณ์ฐํฉ๋๋ค. ๋งํฌ๋ ์๋ก ๋ค๋ฅธ ๋ฐํ์ ๊ฐ์ ๋น๊ต๋์ง ์์ต๋๋ค.
๊ฐ ์์ ๋ ๋ณ๋์ ํ์ผ .csx๋ก ์ ์ฅํ๊ณ IDE์์ ์คํํ ์ ์์ต๋๋ค. UO ๊ฐ์ฒด์ ๋๊ธฐ ๊ธฐ๋ฅ์ ํ์ฌ ๊ฒ์ ์ธ์
์ ํธ์คํธ๋ฅผ ์ ๊ณตํฉ๋๋ค. ๋ฐ๋ชจ serial ์ด๋ฆ, ์ขํ, ์ฃผ์๋ฅผ ์์ ์ ๊ฒ์ผ๋ก ๋ฐ๊พธ์ธ์.
์ด ์ฝ๋๋ฅผ ๋ณ๋์ .csx ํ์ผ๋ก ์คํํ์ธ์. ์ธ์๋ ํธ์ถ์ ์ง์ ํ์๋ฉ๋๋ค. ์์ ์ ์ด๋ฆ, serial, ์ฃผ์๋ฅผ ์์ ์ ๊ฐ์ผ๋ก ๋ฐ๊พธ์ธ์.
ํ ๋ฒ์ ํธ์ถ ๊ฒฐ๊ณผ๋ฅผ ์ ๋์ ํ์ํฉ๋๋ค. ์ซ์๋ฅผ bool๋ก ๋ณํํ์ง ์์ผ๋ฉฐ, ๋ฐฐ์ด์ด๋ฉด ์์ ์๋ฅผ ํ์ํฉ๋๋ค.
var result = UO.TicksAnim();
UO.Print("TicksAnim: " + Convert.ToString(result));๋งค๊ฐ๋ณ์์ ์คํ ํ๋ฆ:
- ์ ์ฅ๋ ๋งํฌ TicksAnim๋ฅผ ์ฝ์ต๋๋ค.
var stamp = UO.TicksAnim();
UO.Print(stamp);๋งค๊ฐ๋ณ์์ ์คํ ํ๋ฆ:
- ticksAnim ํ๋๋ฅผ ๋ฐํํฉ๋๋ค. Morph ๋๋ 0์ด ์๋ ๊ฒฐ๊ณผ Move์ ์ํด ์ ๋ฐ์ดํธ๋ฉ๋๋ค. ๋ชจ๋ ์๋/์๋ฒ ํ๋์ ์๋์ผ๋ก ๊ด์ฐฐํ๋ ๊ฒ์ ์๋๋๋ค. ๋ช ๋ น ์์ฒด๋ ํ์๋ฅผ ๋ณ๊ฒฝํ์ง ์์ต๋๋ค.
return RunScenario();
object? RunScenario()
{
var stamp = UO.TicksAnim();
var ageTenths = UO.Timer() - stamp;
UO.Print(ageTenths);
return null;
}๋งค๊ฐ๋ณ์์ ์คํ ํ๋ฆ:
- UO.Timer() - ์ด ํ์๋ 10๋ถ์ 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 before = UO.TicksAnim();
UO.Wait(250);
var after = UO.TicksAnim();
UO.Print(before = after);
return null;
}
}C#์ ๋์๋ฌธ์๋ฅผ ๊ตฌ๋ถํฉ๋๋ค. ์ ํํ UO ์ด๋ฆ์ ์ฌ์ฉํ์ธ์. ์ซ์ ํ๋๊ทธ๋ 0๊ณผ ๋น๊ตํ๊ณ ๋ฐํ ํ์์ด bool์ผ ๋๋ง bool์ ์ฌ์ฉํ์ธ์.
๋งค๊ฐ๋ณ์: ๋งค๊ฐ๋ณ์๊ฐ ์์ต๋๋ค.
๊ฒฐ๊ณผ: int / Integer.
ํธ์ถ ์:
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
public int TicksAnim() => ticksAnim;