KO UO Topic boats - LIHACHTETAN/ClassicUO-Bad-Newbie-CSharp-Scripts-IDE GitHub Wiki
ะฃะบัะฐัะฝััะบะฐ ยท ะ ัััะบะธะน ยท English ยท Deutsch ยท Franรงais ยท Italiano ยท Espaรฑol ยท ็น้ซไธญๆ ยท ๆฅๆฌ่ช ยท ํ๊ตญ์ด
ํ ยท C# ยท IDE ยท UO API ยท AโZ ยท ์ ยท ์ธ์ด
๋ณดํธ์ ์ด๋ ๋ฐ ์ ์ง๋ฅผ ์ ์ดํฉ๋๋ค. ํ ๊ฐ์ฉ์ฑ์ ํ์ฌ ๋ณดํธ์ ์๋ฒ์ ๋ฐ๋ผ ๊ฒฐ์ ๋ฉ๋๋ค.
| ์ฃผ์ | ๋ช ๋ น ๋ฐ ์ค๋ช |
|---|---|
| MoveBoat | UO.MoveBoat |
| StopBoat | UO.StopBoat |
๊ฐ ๋ช ๋ น ์นด๋์๋ ์ง์ ์ฝ๋, ํจ์ ๋ฐ ํด๋์ค ๋ฑ ์ฌ๋ฌ ๊ฐ์ง ๋ ๋ฆฝ์ ์ธ ์๋๋ฆฌ์ค๊ฐ ์์ต๋๋ค. ๋ค์์ ์ ํ๋ ์งง์ ์๋๋ฆฌ์ค์ ๋๋ค. ์ ํ์ฌํญ๊ณผ ์ ์ฒด ๋ถ์์ด ์นด๋์ ํฌํจ๋์ด ์์ต๋๋ค.
๋งค๊ฐ๋ณ์, ๊ฒฐ๊ณผ ๋ฐ ๋ชจ๋ ์๋๋ฆฌ์ค
UO.MoveBoat(0, 1);๋งค๊ฐ๋ณ์, ๊ฒฐ๊ณผ ๋ฐ ๋ชจ๋ ์๋๋ฆฌ์ค
UO.StopBoat();ะฃะบัะฐัะฝััะบะฐ ยท ะ ัััะบะธะน ยท English ยท Deutsch ยท Franรงais ยท Italiano ยท Espaรฑol ยท ็น้ซไธญๆ ยท ๆฅๆฌ่ช ยท ํ๊ตญ์ด
void UO.MoveBoat(object? direction, object? speed);๋ณดํธ์ ๋ฐฉํฅ๊ณผ ์๋๋ฅผ ์์ฒญํฉ๋๋ค.
-
direction- int, ๋ฎ์ 3 ๋นํธ๋ ๋ฐฉํฅ์ ์ค์ ํฉ๋๋ค. 0..7: N,NE,E,SE,S,SW,W,NW. -
speed- int, 0..255๋ก ์ ํ๋๊ณ byte๋ก ์ถ์๋ฉ๋๋ค. 0โ์ค์ง ์์ฒญ. ์ /์ด ๋จ์์ ์๋๊ฐ ์๋ ํ๋กํ ์ฝ ์ฝ๋์ ๋๋ค.
void - ๊ฐ์ด ์์ต๋๋ค. ๋ณ๋์ ํ์ ์ผ๋ก ์ ํํ์ธ์. ์๋ฃ๋ ์๋ฒ์ ์์ ์ ํ์ธํ์ง ์์ต๋๋ค.
- Bridge.MoveBoat๋ BoatMovingManager.MoveRequest((Direction)(๋ฐฉํฅ&7), ํด๋จํ(์๋,0,255))๋ฅผ ํธ์ถํฉ๋๋ค. ํ์ฌ ๋ณดํธ ๋ฐ ์ ์ด ๊ถํ์ ํด๋ผ์ด์ธํธ/์๋ฒ์ ์ํด ๊ฒฐ์ ๋ฉ๋๋ค.
- ํจ์คํ์ธ๋๋ฅผ ํตํด ์บ๋ฆญํฐ๋ฅผ ์ด๋ํ์ง ์๊ณ , ๋ฐ๊ฑธ์์ ๊ธฐ๋ค๋ฆฌ์ง ์์ผ๋ฉฐ, ๋ณดํธ ์ขํ๋ฅผ ๋ฐํํ์ง ์์ต๋๋ค. ์๋ฒ๊ฐ ์์ฒญ์ ๊ฑฐ๋ถํ ์ ์์ต๋๋ค.
๊ฐ ์์ ๋ ๋ณ๋์ ํ์ผ .csx๋ก ์ ์ฅํ๊ณ IDE์์ ์คํํ ์ ์์ต๋๋ค. UO ๊ฐ์ฒด์ ๋๊ธฐ ๊ธฐ๋ฅ์ ํ์ฌ ๊ฒ์ ์ธ์
์ ํธ์คํธ๋ฅผ ์ ๊ณตํฉ๋๋ค. ๋ฐ๋ชจ serial ์ด๋ฆ, ์ขํ, ์ฃผ์๋ฅผ ์์ ์ ๊ฒ์ผ๋ก ๋ฐ๊พธ์ธ์.
์ด ์ฝ๋๋ฅผ ๋ณ๋์ .csx ํ์ผ๋ก ์คํํ์ธ์. ์ธ์๋ ํธ์ถ์ ์ง์ ํ์๋ฉ๋๋ค. ์์ ์ ์ด๋ฆ, serial, ์ฃผ์๋ฅผ ์์ ์ ๊ฐ์ผ๋ก ๋ฐ๊พธ์ธ์.
๋ช ๋ น์ ๋ ๋ฆฝ๋ ๋ฌธ์ ๋๋ค. ์์ ๋ฉ์์ง๋ ํธ์ถ ์์์ ๋ํ๋ด๋ฉฐ ์๋ฒ ๋์์ ์๋ฃ๋ฅผ ํ์ธํ์ง ์์ต๋๋ค.
UO.Print("Calling UO.MoveBoat");
UO.MoveBoat(0, 1);๋งค๊ฐ๋ณ์์ ์คํ ํ๋ฆ:
- ๋ณดํธ์ ๋ฐฉํฅ๊ณผ ์๋๋ฅผ ์์ฒญํฉ๋๋ค.
UO.MoveBoat(0, 1);๋งค๊ฐ๋ณ์์ ์คํ ํ๋ฆ:
- Bridge.MoveBoat๋ BoatMovingManager.MoveRequest((Direction)(๋ฐฉํฅ&7), ํด๋จํ(์๋,0,255))๋ฅผ ํธ์ถํฉ๋๋ค. ํ์ฌ ๋ณดํธ ๋ฐ ์ ์ด ๊ถํ์ ํด๋ผ์ด์ธํธ/์๋ฒ์ ์ํด ๊ฒฐ์ ๋ฉ๋๋ค.
return RunScenario();
object? RunScenario()
{
UO.MoveBoat(2, 1);
UO.Wait(500);
UO.StopBoat();
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.MoveBoat(0, 0);
return null;
}
}C#์ ๋์๋ฌธ์๋ฅผ ๊ตฌ๋ถํฉ๋๋ค. ์ ํํ UO ์ด๋ฆ์ ์ฌ์ฉํ์ธ์. ์ซ์ ํ๋๊ทธ๋ 0๊ณผ ๋น๊ตํ๊ณ ๋ฐํ ํ์์ด bool์ผ ๋๋ง bool์ ์ฌ์ฉํ์ธ์.
๋งค๊ฐ๋ณ์: direction (Any), speed (Any)
๊ฒฐ๊ณผ: void / Unit.
ํธ์ถ ์:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.MoveBoat:bridge.MoveBoat(Arg(0), Arg(1)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0).
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
case "moveboat": bridge.MoveBoat(Arg(0), Arg(1)); return InjectionValue.Unit;ะฃะบัะฐัะฝััะบะฐ ยท ะ ัััะบะธะน ยท English ยท Deutsch ยท Franรงais ยท Italiano ยท Espaรฑol ยท ็น้ซไธญๆ ยท ๆฅๆฌ่ช ยท ํ๊ตญ์ด
void UO.StopBoat();๋ณดํธ์ ์ด๋์ ์ค์งํ๋๋ก ์์ฒญํฉ๋๋ค.
๋งค๊ฐ๋ณ์๊ฐ ์์ต๋๋ค.
void - ๊ฐ์ด ์์ต๋๋ค. ๋ณ๋์ ํ์ ์ผ๋ก ์ ํํ์ธ์. ์๋ฃ๋ ์๋ฒ์ ์์ ์ ํ์ธํ์ง ์์ต๋๋ค.
- StopBoat๋ Player.Direction(๋๋ ํ๋ ์ด์ด๊ฐ ์๋ ๋ถ์ชฝ) ๋ฐ ์๋=0๋ฅผ ์ฌ์ฉํ์ฌ BoatMovingManager.MoveRequest๋ฅผ ํธ์ถํฉ๋๋ค. ์์ฒญ์ ๋ณดํธ์ ์๋ฒ ์์น๋ฅผ ๋ฐํํ์ง ์์ต๋๋ค.
- ์์ ์์ UO.Wait๋ ์คํฌ๋ฆฝํธ ์ผ์ ์ค์ง๋ง ์ง์ ํฉ๋๋ค. ์ผ์ ์ค์ง๊ฐ ๋๋ฌ๋ค๊ณ ํด์ ์๋ฒ๊ฐ ์์ฒญ์ ์๋ฃํ์์ ์ฆ๋ช ํ๋ ๊ฒ์ ์๋๋๋ค.
๊ฐ ์์ ๋ ๋ณ๋์ ํ์ผ .csx๋ก ์ ์ฅํ๊ณ IDE์์ ์คํํ ์ ์์ต๋๋ค. UO ๊ฐ์ฒด์ ๋๊ธฐ ๊ธฐ๋ฅ์ ํ์ฌ ๊ฒ์ ์ธ์
์ ํธ์คํธ๋ฅผ ์ ๊ณตํฉ๋๋ค. ๋ฐ๋ชจ serial ์ด๋ฆ, ์ขํ, ์ฃผ์๋ฅผ ์์ ์ ๊ฒ์ผ๋ก ๋ฐ๊พธ์ธ์.
์ด ์ฝ๋๋ฅผ ๋ณ๋์ .csx ํ์ผ๋ก ์คํํ์ธ์. ์ธ์๋ ํธ์ถ์ ์ง์ ํ์๋ฉ๋๋ค. ์์ ์ ์ด๋ฆ, serial, ์ฃผ์๋ฅผ ์์ ์ ๊ฐ์ผ๋ก ๋ฐ๊พธ์ธ์.
๋ช ๋ น์ ๋ ๋ฆฝ๋ ๋ฌธ์ ๋๋ค. ์์ ๋ฉ์์ง๋ ํธ์ถ ์์์ ๋ํ๋ด๋ฉฐ ์๋ฒ ๋์์ ์๋ฃ๋ฅผ ํ์ธํ์ง ์์ต๋๋ค.
UO.Print("Calling UO.StopBoat");
UO.StopBoat();๋งค๊ฐ๋ณ์์ ์คํ ํ๋ฆ:
- ๋ณดํธ์ ์ด๋์ ์ค์งํ๋๋ก ์์ฒญํฉ๋๋ค.
UO.StopBoat();๋งค๊ฐ๋ณ์์ ์คํ ํ๋ฆ:
- StopBoat๋ Player.Direction(๋๋ ํ๋ ์ด์ด๊ฐ ์๋ ๋ถ์ชฝ) ๋ฐ ์๋=0๋ฅผ ์ฌ์ฉํ์ฌ BoatMovingManager.MoveRequest๋ฅผ ํธ์ถํฉ๋๋ค. ์์ฒญ์ ๋ณดํธ์ ์๋ฒ ์์น๋ฅผ ๋ฐํํ์ง ์์ต๋๋ค.
return RunScenario();
object? RunScenario()
{
if (Truth(UO.IsOnline()))
{
UO.StopBoat();
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;๋งค๊ฐ๋ณ์์ ์คํ ํ๋ฆ:
- ์์ ์์ 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()
{
UO.StopBoat();
UO.Wait(250);
UO.Print(UO.GetX());
return null;
}
}C#์ ๋์๋ฌธ์๋ฅผ ๊ตฌ๋ถํฉ๋๋ค. ์ ํํ UO ์ด๋ฆ์ ์ฌ์ฉํ์ธ์. ์ซ์ ํ๋๊ทธ๋ 0๊ณผ ๋น๊ตํ๊ณ ๋ฐํ ํ์์ด bool์ผ ๋๋ง bool์ ์ฌ์ฉํ์ธ์.
๋งค๊ฐ๋ณ์: ๋งค๊ฐ๋ณ์๊ฐ ์์ต๋๋ค.
๊ฒฐ๊ณผ: void / Unit.
ํธ์ถ ์:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.StopBoat:bridge.StopBoat().
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
case "stopboat": bridge.StopBoat(); return InjectionValue.Unit;