KO UO Topic mouse keyboard - LIHACHTETAN/ClassicUO-Bad-Newbie-CSharp-Scripts-IDE GitHub Wiki
ะฃะบัะฐัะฝััะบะฐ ยท ะ ัััะบะธะน ยท English ยท Deutsch ยท Franรงais ยท Italiano ยท Espaรฑol ยท ็น้ซไธญๆ ยท ๆฅๆฌ่ช ยท ํ๊ตญ์ด
ํ ยท C# ยท IDE ยท UO API ยท AโZ ยท ์ ยท ์ธ์ด
๋ง์ฐ์ค ๋ฐ ํค๋ณด๋ ์ ๋ ฅ. ํ๋ฉด ์ขํ, ์๋ ์ , ๊ฒํ ๋ด๋ถ ์ขํ๋ ์๋ก ๋ค๋ฅธ ์๋ฏธ๋ฅผ ๊ฐ์ต๋๋ค.
| ์ฃผ์ | ๋ช ๋ น ๋ฐ ์ค๋ช |
|---|---|
| Click | UO.Click |
| LClick | UO.LClick |
| RClick | UO.RClick |
| DoubleClick | UO.LDblClick ยท UO.RDblClick |
| KeyPress | UO.KeyPress |
| Press | UO.Press |
UO.Click ยท UO.LClick ยท UO.RClick ยท UO.LDblClick ยท UO.RDblClick ยท UO.KeyPress ยท UO.Press
๊ฐ ๋ช ๋ น ์นด๋์๋ ์ง์ ์ฝ๋, ํจ์ ๋ฐ ํด๋์ค ๋ฑ ์ฌ๋ฌ ๊ฐ์ง ๋ ๋ฆฝ์ ์ธ ์๋๋ฆฌ์ค๊ฐ ์์ต๋๋ค. ๋ค์์ ์ ํ๋ ์งง์ ์๋๋ฆฌ์ค์ ๋๋ค. ์ ํ์ฌํญ๊ณผ ์ ์ฒด ๋ถ์์ด ์นด๋์ ํฌํจ๋์ด ์์ต๋๋ค.
๋งค๊ฐ๋ณ์, ๊ฒฐ๊ณผ ๋ฐ ๋ชจ๋ ์๋๋ฆฌ์ค
UO.LClick(100, 100);๋งค๊ฐ๋ณ์, ๊ฒฐ๊ณผ ๋ฐ ๋ชจ๋ ์๋๋ฆฌ์ค
UO.KeyPress(0x70);ะฃะบัะฐัะฝััะบะฐ ยท ะ ัััะบะธะน ยท English ยท Deutsch ยท Franรงais ยท Italiano ยท Espaรฑol ยท ็น้ซไธญๆ ยท ๆฅๆฌ่ช ยท ํ๊ตญ์ด
void UO.Click(object? name);GameActions.SingleClick๋ฅผ ํตํด ๊ฐ์ฒด์ ๋ํ ๋จ์ผ ํด๋ฆญ์ ๋ณด๋ ๋๋ค.
-
nameโ self/backpack/lasttarget/์ ์ฅ๋ ๊ฐ์ฒด์ ๊ฐ์ฒด ์ผ๋ จ๋ฒํธ ๋๋ ์ง์๋๋ ์ด๋ฆ์ ๋๋ค. ์ซ์ ๋ฌธ์์ด๊ณผ 0x ๋ฌธ์์ด์ ๋ฐํ์์ ์ํด ํด๊ฒฐ๋ฉ๋๋ค.
void - ๋ฐํ ๊ฐ์ด ์์ต๋๋ค.
- Click๋ ObjectChecked๋ฅผ ํตํด ๋งํฌ๋ฅผ ํด๊ฒฐํฉ๋๋ค. ClickOnObject๋ ๋จผ์ serial์ Arg๋ฅผ ์ฌ์ฉํ๊ณ Click(int)๋ฅผ ํธ์ถํฉ๋๋ค. ์ด๋ DoubleClick ๋๋ ์์ดํ ์ฌ์ฉ์ด ์๋ ์์ดํ ์ ์๋ช /์ ๋ณด์ ๋ํ ์์ฒญ์ ๋๋ค. ์๋ฒ ์๋ต์ ๋น๋๊ธฐ์ ์ผ๋ก ์ ๊ณต๋ฉ๋๋ค.
๊ฐ ์์ ๋ ๋ณ๋์ ํ์ผ .csx๋ก ์ ์ฅํ๊ณ IDE์์ ์คํํ ์ ์์ต๋๋ค. UO ๊ฐ์ฒด์ ๋๊ธฐ ๊ธฐ๋ฅ์ ํ์ฌ ๊ฒ์ ์ธ์
์ ํธ์คํธ๋ฅผ ์ ๊ณตํฉ๋๋ค. ๋ฐ๋ชจ serial ์ด๋ฆ, ์ขํ, ์ฃผ์๋ฅผ ์์ ์ ๊ฒ์ผ๋ก ๋ฐ๊พธ์ธ์.
์ด ์ฝ๋๋ฅผ ๋ณ๋์ .csx ํ์ผ๋ก ์คํํ์ธ์. ์ธ์๋ ํธ์ถ์ ์ง์ ํ์๋ฉ๋๋ค. ์์ ์ ์ด๋ฆ, serial, ์ฃผ์๋ฅผ ์์ ์ ๊ฐ์ผ๋ก ๋ฐ๊พธ์ธ์.
๋ช ๋ น์ ๋ ๋ฆฝ๋ ๋ฌธ์ ๋๋ค. ์์ ๋ฉ์์ง๋ ํธ์ถ ์์์ ๋ํ๋ด๋ฉฐ ์๋ฒ ๋์์ ์๋ฃ๋ฅผ ํ์ธํ์ง ์์ต๋๋ค.
UO.Print("Calling UO.Click");
UO.Click("self");๋งค๊ฐ๋ณ์์ ์คํ ํ๋ฆ:
- ํ ๋ฒ์ ํด๋ฆญ์ self๋ก ์ ์ก๋ฉ๋๋ค.
UO.Click("self");๋งค๊ฐ๋ณ์์ ์คํ ํ๋ฆ:
- ์ ์กํ๊ธฐ ์ ์ ๋์์ ๋ก์ปฌ ์กด์ฌ ์ฌ๋ถ๋ฅผ ํ์ธํฉ๋๋ค.
return RunScenario();
object? RunScenario()
{
var target = UO.LastTarget();
if (Truth(UO.Exists(target)))
{
UO.Click(target);
}
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 bag = UO.Backpack();
if (Truth(bag != 0))
{
UO.Click(bag);
}
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์ ์ฌ์ฉํ์ธ์.
๋งค๊ฐ๋ณ์: name (Any)
๊ฒฐ๊ณผ: void / Unit.
ํธ์ถ ์:
-
InjectionScript.Runtime.InjectionApiUO.Click. -
InjectionScript.Runtime.InjectionApiUO.ObjectChecked:ObjectChecked(name, id => Click(id)). -
InjectionScript.Runtime.InjectionApiUO.Click:Click(id).
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
public void Click(InjectionValue name) => ObjectChecked(name, id => Click(id));ะฃะบัะฐัะฝััะบะฐ ยท ะ ัััะบะธะน ยท English ยท Deutsch ยท Franรงais ยท Italiano ยท Espaรฑol ยท ็น้ซไธญๆ ยท ๆฅๆฌ่ช ยท ํ๊ตญ์ด
void UO.KeyPress(object? key);
void UO.KeyPress(object? key, object? count);
void UO.KeyPress(object? key, object? count, object? delay);ํ๋ ์ด์์ ๊ฐ์ ํค ๋๋ฅด๊ธฐ๋ฅผ ํฉ์ฑํฉ๋๋ค.
-
key- int ๊ฐ์ ํค Windows, byte๋ก ์ถ์๋์์ต๋๋ค. ๋ฌธ์์ด๋ ์๋๊ณ ID ๋์๋ ์๋๋๋ค. -
countโ ์ ํ์ ๋ฐ๋ณต ํ์, ๊ธฐ๋ณธ๊ฐ 1. 0/์์ - ๋๋ฅด๊ฑฐ๋ ๊ธฐ๋ค๋ฆฌ์ง ์์ต๋๋ค. -
delay- ๋ง์ง๋ง ๋ฒํผ์ ํฌํจํ์ฌ ๊ฐ ๋ฒํผ์ ๋๋ฅธ ํ ๋ฐ๋ฆฌ์ด ๋์ ์ผ์ ์ค์งํ ์ ์์ต๋๋ค. ๊ธฐ๋ณธ๊ฐ์ 105์ ๋๋ค. ๋ธ๋ฆฌ์ง๋ฅผ ํตํด ์ ์ก๋ฉ๋๋ค.Wait ์ด ๊ธฐ๋ฅ์ ์ํ ์ถ๊ฐ ์ ํ์ ์์ต๋๋ค.
void - ๊ฐ์ด ์์ต๋๋ค. ๋ณ๋์ ํ์ ์ผ๋ก ์ ํํ์ธ์. ์๋ฃ๋ ์๋ฒ์ ์์ ์ ํ์ธํ์ง ์์ต๋๋ค.
- Press๋ ๋ชจ๋ ์์์ KeyPress๋ก ์ ๋ฌํฉ๋๋ค. KeyPress ๋ฃจํ ์นด์ดํธ ์คํ>0: ๋ธ๋ฆฌ์ง.KeyPress(ํค), ๋ธ๋ฆฌ์ง.Wait(์ง์ฐ), ์นด์ดํธ--. Bridge๋ user32 keybd_event๋ฅผ ๋ค์ด/์ ์ผ๋ก ๋ณด๋ ๋๋ค.
- ์ ๋ ฅ ํฌ์ปค์ค๊ฐ ์๋ ๊ฐ๋ฐฉํ ๊ทธ๋ํฝ ClassicUO์ด ํ์ํฉ๋๋ค. ๊ทธ๋ ์ง ์์ผ๋ฉด RequireGameInput์์ ์ค๋ฅ๊ฐ ๋ฐ์ํฉ๋๋ค. ํด๋ฆญ์ ํ์ฌ ์ธํฐํ์ด์ค/๋งคํฌ๋ก๋ฅผ ์ฒ๋ฆฌํ๋ฉฐ ์๋ฒ ๋ช ๋ น์ ๊ฒฐ๊ณผ๋ ๋ฐํ๋์ง ์์ต๋๋ค.
๊ฐ ์์ ๋ ๋ณ๋์ ํ์ผ .csx๋ก ์ ์ฅํ๊ณ IDE์์ ์คํํ ์ ์์ต๋๋ค. UO ๊ฐ์ฒด์ ๋๊ธฐ ๊ธฐ๋ฅ์ ํ์ฌ ๊ฒ์ ์ธ์
์ ํธ์คํธ๋ฅผ ์ ๊ณตํฉ๋๋ค. ๋ฐ๋ชจ serial ์ด๋ฆ, ์ขํ, ์ฃผ์๋ฅผ ์์ ์ ๊ฒ์ผ๋ก ๋ฐ๊พธ์ธ์.
์ด ์ฝ๋๋ฅผ ๋ณ๋์ .csx ํ์ผ๋ก ์คํํ์ธ์. ์ธ์๋ ํธ์ถ์ ์ง์ ํ์๋ฉ๋๋ค. ์์ ์ ์ด๋ฆ, serial, ์ฃผ์๋ฅผ ์์ ์ ๊ฐ์ผ๋ก ๋ฐ๊พธ์ธ์.
๋ช ๋ น์ ๋ ๋ฆฝ๋ ๋ฌธ์ ๋๋ค. ์์ ๋ฉ์์ง๋ ํธ์ถ ์์์ ๋ํ๋ด๋ฉฐ ์๋ฒ ๋์์ ์๋ฃ๋ฅผ ํ์ธํ์ง ์์ต๋๋ค.
UO.Print("Calling UO.KeyPress");
UO.KeyPress(0x70);๋งค๊ฐ๋ณ์์ ์คํ ํ๋ฆ:
- ํ๋ ์ด์์ ๊ฐ์ ํค ๋๋ฅด๊ธฐ๋ฅผ ํฉ์ฑํฉ๋๋ค.
UO.KeyPress(0x70);๋งค๊ฐ๋ณ์์ ์คํ ํ๋ฆ:
- Press๋ ๋ชจ๋ ์์์ KeyPress๋ก ์ ๋ฌํฉ๋๋ค. KeyPress ๋ฃจํ ์นด์ดํธ ์คํ>0: ๋ธ๋ฆฌ์ง.KeyPress(ํค), ๋ธ๋ฆฌ์ง.Wait(์ง์ฐ), ์นด์ดํธ--. Bridge๋ user32 keybd_event๋ฅผ ๋ค์ด/์ ์ผ๋ก ๋ณด๋ ๋๋ค.
return RunScenario();
object? RunScenario()
{
UO.KeyPress(0x70, 2, 250);
return null;
}๋งค๊ฐ๋ณ์์ ์คํ ํ๋ฆ:
- ์ ๋ ฅ ํฌ์ปค์ค๊ฐ ์๋ ๊ฐ๋ฐฉํ ๊ทธ๋ํฝ ClassicUO์ด ํ์ํฉ๋๋ค. ๊ทธ๋ ์ง ์์ผ๋ฉด RequireGameInput์์ ์ค๋ฅ๊ฐ ๋ฐ์ํฉ๋๋ค. ํด๋ฆญ์ ํ์ฌ ์ธํฐํ์ด์ค/๋งคํฌ๋ก๋ฅผ ์ฒ๋ฆฌํ๋ฉฐ ์๋ฒ ๋ช ๋ น์ ๊ฒฐ๊ณผ๋ ๋ฐํ๋์ง ์์ต๋๋ค.
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.KeyPress(0x70, 0);
UO.Print("Zero count sends no key");
return null;
}
}C#์ ๋์๋ฌธ์๋ฅผ ๊ตฌ๋ถํฉ๋๋ค. ์ ํํ UO ์ด๋ฆ์ ์ฌ์ฉํ์ธ์. ์ซ์ ํ๋๊ทธ๋ 0๊ณผ ๋น๊ตํ๊ณ ๋ฐํ ํ์์ด bool์ผ ๋๋ง bool์ ์ฌ์ฉํ์ธ์.
๋งค๊ฐ๋ณ์: key (Integer)
๊ฒฐ๊ณผ: void / Unit.
ํธ์ถ ์:
-
InjectionScript.Runtime.InjectionApiUO.KeyPress. -
InjectionScript.Runtime.InjectionApiUO.KeyPress:KeyPress(key, 1).
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
public void KeyPress(int key) => KeyPress(key, 1);๋งค๊ฐ๋ณ์: key (Integer), count (Integer)
๊ฒฐ๊ณผ: void / Unit.
ํธ์ถ ์:
-
InjectionScript.Runtime.InjectionApiUO.KeyPress. -
InjectionScript.Runtime.InjectionApiUO.KeyPress:KeyPress(key, count, 105).
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
public void KeyPress(int key, int count) => KeyPress(key, count, 105);๋งค๊ฐ๋ณ์: key (Integer), count (Integer), delay (Integer)
๊ฒฐ๊ณผ: void / Unit.
ํธ์ถ ์:
-
InjectionScript.Runtime.InjectionApiUO.KeyPress. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.KeyPress:bridge.KeyPress(key). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Wait:bridge.Wait(delay).
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
public void KeyPress(int key, int count, int delay)
{
while (count > 0)
{
bridge.KeyPress(key);
bridge.Wait(delay);
count--;
}
}ะฃะบัะฐัะฝััะบะฐ ยท ะ ัััะบะธะน ยท English ยท Deutsch ยท Franรงais ยท Italiano ยท Espaรฑol ยท ็น้ซไธญๆ ยท ๆฅๆฌ่ช ยท ํ๊ตญ์ด
void UO.LClick(object? x, object? y);๋จ์ผ ๋ง์ฐ์ค ํด๋ฆญ์ ํฉ์ฑํฉ๋๋ค: ์ผ์ชฝ ๋ฒํผ.
-
x- int X ์ฐฝ ํฝ์ ClassicUO, ์ธ๊ณ ์ขํ ์๋. -
y- int Y ์ฐฝ ํฝ์ ClassicUO, ์ธ๊ณ ์ขํ ์๋.
void - ๊ฐ์ด ์์ต๋๋ค. ๋ณ๋์ ํ์ ์ผ๋ก ์ ํํ์ธ์. ์๋ฃ๋ ์๋ฒ์ ์์ ์ ํ์ธํ์ง ์์ต๋๋ค.
- ๋ธ๋ฆฌ์ง๋ WarpMouse(x,y)๋ฅผ ํธ์ถํ๊ณ Mouse.Position ๋ฐ SDL_WarpMouseInWindow๋ฅผ ์ ๋ฐ์ดํธํ ๋ค์ MouseButton ์๋/์๋ก ํ ๋ฒ ์คํํฉ๋๋ค. ๋ ๋ฒ ํด๋ฆญ ์ฌ์ด์๋ ์ผ์ ์ค์ง๊ฐ ์์ต๋๋ค.
- ์ ๋ ฅ ํฌ์ปค์ค๊ฐ ์๋ ์ด๋ฆฐ ClassicUO ๊ทธ๋ํฝ ์ฐฝ์ด ํ์ํฉ๋๋ค. ๊ทธ๋ ์ง ์์ผ๋ฉด RequireGameInput๊ฐ InvalidOperationException์ ๋์ง๋๋ค. user32 mouse_event๋ Windows์์ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์ ์๋์ ๋ฒํผ/๊ฐ์ฒด๋ ํ์ฌ ์ธํฐํ์ด์ค์ ๋ฐ๋ผ ๋ค๋ฆ ๋๋ค.
๊ฐ ์์ ๋ ๋ณ๋์ ํ์ผ .csx๋ก ์ ์ฅํ๊ณ IDE์์ ์คํํ ์ ์์ต๋๋ค. UO ๊ฐ์ฒด์ ๋๊ธฐ ๊ธฐ๋ฅ์ ํ์ฌ ๊ฒ์ ์ธ์
์ ํธ์คํธ๋ฅผ ์ ๊ณตํฉ๋๋ค. ๋ฐ๋ชจ serial ์ด๋ฆ, ์ขํ, ์ฃผ์๋ฅผ ์์ ์ ๊ฒ์ผ๋ก ๋ฐ๊พธ์ธ์.
์ด ์ฝ๋๋ฅผ ๋ณ๋์ .csx ํ์ผ๋ก ์คํํ์ธ์. ์ธ์๋ ํธ์ถ์ ์ง์ ํ์๋ฉ๋๋ค. ์์ ์ ์ด๋ฆ, serial, ์ฃผ์๋ฅผ ์์ ์ ๊ฐ์ผ๋ก ๋ฐ๊พธ์ธ์.
๋ช ๋ น์ ๋ ๋ฆฝ๋ ๋ฌธ์ ๋๋ค. ์์ ๋ฉ์์ง๋ ํธ์ถ ์์์ ๋ํ๋ด๋ฉฐ ์๋ฒ ๋์์ ์๋ฃ๋ฅผ ํ์ธํ์ง ์์ต๋๋ค.
UO.Print("Calling UO.LClick");
UO.LClick(100, 100);๋งค๊ฐ๋ณ์์ ์คํ ํ๋ฆ:
- ๋จ์ผ ๋ง์ฐ์ค ํด๋ฆญ์ ํฉ์ฑํฉ๋๋ค: ์ผ์ชฝ ๋ฒํผ.
UO.LClick(100, 100);๋งค๊ฐ๋ณ์์ ์คํ ํ๋ฆ:
- ๋ธ๋ฆฌ์ง๋ WarpMouse(x,y)๋ฅผ ํธ์ถํ๊ณ Mouse.Position ๋ฐ SDL_WarpMouseInWindow๋ฅผ ์ ๋ฐ์ดํธํ ๋ค์ MouseButton ์๋/์๋ก ํ ๋ฒ ์คํํฉ๋๋ค. ๋ ๋ฒ ํด๋ฆญ ์ฌ์ด์๋ ์ผ์ ์ค์ง๊ฐ ์์ต๋๋ค.
return RunScenario();
object? RunScenario()
{
var x = 120;
var y = 140;
UO.LClick(x, y);
return null;
}๋งค๊ฐ๋ณ์์ ์คํ ํ๋ฆ:
- ์ ๋ ฅ ํฌ์ปค์ค๊ฐ ์๋ ์ด๋ฆฐ ClassicUO ๊ทธ๋ํฝ ์ฐฝ์ด ํ์ํฉ๋๋ค. ๊ทธ๋ ์ง ์์ผ๋ฉด RequireGameInput๊ฐ InvalidOperationException์ ๋์ง๋๋ค. user32 mouse_event๋ Windows์์ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์ ์๋์ ๋ฒํผ/๊ฐ์ฒด๋ ํ์ฌ ์ธํฐํ์ด์ค์ ๋ฐ๋ผ ๋ค๋ฆ ๋๋ค.
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()
{
ClickAt(100, 100);
return null;
}
void ClickAt(dynamic x, dynamic y)
{
UO.LClick(x, y);
}
}C#์ ๋์๋ฌธ์๋ฅผ ๊ตฌ๋ถํฉ๋๋ค. ์ ํํ UO ์ด๋ฆ์ ์ฌ์ฉํ์ธ์. ์ซ์ ํ๋๊ทธ๋ 0๊ณผ ๋น๊ตํ๊ณ ๋ฐํ ํ์์ด bool์ผ ๋๋ง bool์ ์ฌ์ฉํ์ธ์.
๋งค๊ฐ๋ณ์: x (Integer), y (Integer)
๊ฒฐ๊ณผ: void / Unit.
ํธ์ถ ์:
-
InjectionScript.Runtime.InjectionApiUO.LClick. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.LClick:bridge.LClick(x, y).
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
public void LClick(int x, int y) => bridge.LClick(x, y);ะฃะบัะฐัะฝััะบะฐ ยท ะ ัััะบะธะน ยท English ยท Deutsch ยท Franรงais ยท Italiano ยท Espaรฑol ยท ็น้ซไธญๆ ยท ๆฅๆฌ่ช ยท ํ๊ตญ์ด
void UO.LDblClick(object? x, object? y);๋๋ธ ๋ง์ฐ์ค ํด๋ฆญ์ ํฉ์ฑํฉ๋๋ค: ์ผ์ชฝ ๋ฒํผ.
-
x- int X ์ฐฝ ํฝ์ ClassicUO, ์ธ๊ณ ์ขํ ์๋. -
y- int Y ์ฐฝ ํฝ์ ClassicUO, ์ธ๊ณ ์ขํ ์๋.
void - ๊ฐ์ด ์์ต๋๋ค. ๋ณ๋์ ํ์ ์ผ๋ก ์ ํํ์ธ์. ์๋ฃ๋ ์๋ฒ์ ์์ ์ ํ์ธํ์ง ์์ต๋๋ค.
- ๋ธ๋ฆฌ์ง๋ WarpMouse(x,y)๋ฅผ ํธ์ถํ๊ณ Mouse.Position ๋ฐ SDL_WarpMouseInWindow๋ฅผ ์ ๋ฐ์ดํธํ ๋ค์ MouseButton ์๋/์๋ฅผ ๋ ๋ฒ ์ ๋ฐ์ดํธํฉ๋๋ค. ๋ ๋ฒ ํด๋ฆญ ์ฌ์ด์๋ ์ผ์ ์ค์ง๊ฐ ์์ต๋๋ค.
- ์ ๋ ฅ ํฌ์ปค์ค๊ฐ ์๋ ์ด๋ฆฐ ClassicUO ๊ทธ๋ํฝ ์ฐฝ์ด ํ์ํฉ๋๋ค. ๊ทธ๋ ์ง ์์ผ๋ฉด RequireGameInput๊ฐ InvalidOperationException์ ๋์ง๋๋ค. user32 mouse_event๋ Windows์์ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์ ์๋์ ๋ฒํผ/๊ฐ์ฒด๋ ํ์ฌ ์ธํฐํ์ด์ค์ ๋ฐ๋ผ ๋ค๋ฆ ๋๋ค.
๊ฐ ์์ ๋ ๋ณ๋์ ํ์ผ .csx๋ก ์ ์ฅํ๊ณ IDE์์ ์คํํ ์ ์์ต๋๋ค. UO ๊ฐ์ฒด์ ๋๊ธฐ ๊ธฐ๋ฅ์ ํ์ฌ ๊ฒ์ ์ธ์
์ ํธ์คํธ๋ฅผ ์ ๊ณตํฉ๋๋ค. ๋ฐ๋ชจ serial ์ด๋ฆ, ์ขํ, ์ฃผ์๋ฅผ ์์ ์ ๊ฒ์ผ๋ก ๋ฐ๊พธ์ธ์.
์ด ์ฝ๋๋ฅผ ๋ณ๋์ .csx ํ์ผ๋ก ์คํํ์ธ์. ์ธ์๋ ํธ์ถ์ ์ง์ ํ์๋ฉ๋๋ค. ์์ ์ ์ด๋ฆ, serial, ์ฃผ์๋ฅผ ์์ ์ ๊ฐ์ผ๋ก ๋ฐ๊พธ์ธ์.
๋ช ๋ น์ ๋ ๋ฆฝ๋ ๋ฌธ์ ๋๋ค. ์์ ๋ฉ์์ง๋ ํธ์ถ ์์์ ๋ํ๋ด๋ฉฐ ์๋ฒ ๋์์ ์๋ฃ๋ฅผ ํ์ธํ์ง ์์ต๋๋ค.
UO.Print("Calling UO.LDblClick");
UO.LDblClick(100, 100);๋งค๊ฐ๋ณ์์ ์คํ ํ๋ฆ:
- ๋๋ธ ๋ง์ฐ์ค ํด๋ฆญ์ ํฉ์ฑํฉ๋๋ค: ์ผ์ชฝ ๋ฒํผ.
UO.LDblClick(100, 100);๋งค๊ฐ๋ณ์์ ์คํ ํ๋ฆ:
- ๋ธ๋ฆฌ์ง๋ WarpMouse(x,y)๋ฅผ ํธ์ถํ๊ณ Mouse.Position ๋ฐ SDL_WarpMouseInWindow๋ฅผ ์ ๋ฐ์ดํธํ ๋ค์ MouseButton ์๋/์๋ฅผ ๋ ๋ฒ ์ ๋ฐ์ดํธํฉ๋๋ค. ๋ ๋ฒ ํด๋ฆญ ์ฌ์ด์๋ ์ผ์ ์ค์ง๊ฐ ์์ต๋๋ค.
return RunScenario();
object? RunScenario()
{
var x = 120;
var y = 140;
UO.LDblClick(x, y);
return null;
}๋งค๊ฐ๋ณ์์ ์คํ ํ๋ฆ:
- ์ ๋ ฅ ํฌ์ปค์ค๊ฐ ์๋ ์ด๋ฆฐ ClassicUO ๊ทธ๋ํฝ ์ฐฝ์ด ํ์ํฉ๋๋ค. ๊ทธ๋ ์ง ์์ผ๋ฉด RequireGameInput๊ฐ InvalidOperationException์ ๋์ง๋๋ค. user32 mouse_event๋ Windows์์ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์ ์๋์ ๋ฒํผ/๊ฐ์ฒด๋ ํ์ฌ ์ธํฐํ์ด์ค์ ๋ฐ๋ผ ๋ค๋ฆ ๋๋ค.
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()
{
ClickAt(100, 100);
return null;
}
void ClickAt(dynamic x, dynamic y)
{
UO.LDblClick(x, y);
}
}C#์ ๋์๋ฌธ์๋ฅผ ๊ตฌ๋ถํฉ๋๋ค. ์ ํํ UO ์ด๋ฆ์ ์ฌ์ฉํ์ธ์. ์ซ์ ํ๋๊ทธ๋ 0๊ณผ ๋น๊ตํ๊ณ ๋ฐํ ํ์์ด bool์ผ ๋๋ง bool์ ์ฌ์ฉํ์ธ์.
๋งค๊ฐ๋ณ์: x (Integer), y (Integer)
๊ฒฐ๊ณผ: void / Unit.
ํธ์ถ ์:
-
InjectionScript.Runtime.InjectionApiUO.LDblClick. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.LDblClick:bridge.LDblClick(x, y).
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
public void LDblClick(int x, int y) => bridge.LDblClick(x, y);ะฃะบัะฐัะฝััะบะฐ ยท ะ ัััะบะธะน ยท English ยท Deutsch ยท Franรงais ยท Italiano ยท Espaรฑol ยท ็น้ซไธญๆ ยท ๆฅๆฌ่ช ยท ํ๊ตญ์ด
void UO.Press(object? key);
void UO.Press(object? key, object? count);
void UO.Press(object? key, object? count, object? delay);ํ๋ ์ด์์ ๊ฐ์ ํค ๋๋ฅด๊ธฐ๋ฅผ ํฉ์ฑํฉ๋๋ค.
-
key- int ๊ฐ์ ํค Windows, byte๋ก ์ถ์๋์์ต๋๋ค. ๋ฌธ์์ด๋ ์๋๊ณ ID ๋์๋ ์๋๋๋ค. -
countโ ์ ํ์ ๋ฐ๋ณต ํ์, ๊ธฐ๋ณธ๊ฐ 1. 0/์์ - ๋๋ฅด๊ฑฐ๋ ๊ธฐ๋ค๋ฆฌ์ง ์์ต๋๋ค. -
delay- ๋ง์ง๋ง ๋ฒํผ์ ํฌํจํ์ฌ ๊ฐ ๋ฒํผ์ ๋๋ฅธ ํ ๋ฐ๋ฆฌ์ด ๋์ ์ผ์ ์ค์งํ ์ ์์ต๋๋ค. ๊ธฐ๋ณธ๊ฐ์ 105์ ๋๋ค. ๋ธ๋ฆฌ์ง๋ฅผ ํตํด ์ ์ก๋ฉ๋๋ค.Wait ์ด ๊ธฐ๋ฅ์ ์ํ ์ถ๊ฐ ์ ํ์ ์์ต๋๋ค.
void - ๊ฐ์ด ์์ต๋๋ค. ๋ณ๋์ ํ์ ์ผ๋ก ์ ํํ์ธ์. ์๋ฃ๋ ์๋ฒ์ ์์ ์ ํ์ธํ์ง ์์ต๋๋ค.
- Press๋ ๋ชจ๋ ์์์ KeyPress๋ก ์ ๋ฌํฉ๋๋ค. KeyPress ๋ฃจํ ์นด์ดํธ ์คํ>0: ๋ธ๋ฆฌ์ง.KeyPress(ํค), ๋ธ๋ฆฌ์ง.Wait(์ง์ฐ), ์นด์ดํธ--. Bridge๋ user32 keybd_event๋ฅผ ๋ค์ด/์ ์ผ๋ก ๋ณด๋ ๋๋ค.
- ์ ๋ ฅ ํฌ์ปค์ค๊ฐ ์๋ ๊ฐ๋ฐฉํ ๊ทธ๋ํฝ ClassicUO์ด ํ์ํฉ๋๋ค. ๊ทธ๋ ์ง ์์ผ๋ฉด RequireGameInput์์ ์ค๋ฅ๊ฐ ๋ฐ์ํฉ๋๋ค. ํด๋ฆญ์ ํ์ฌ ์ธํฐํ์ด์ค/๋งคํฌ๋ก๋ฅผ ์ฒ๋ฆฌํ๋ฉฐ ์๋ฒ ๋ช ๋ น์ ๊ฒฐ๊ณผ๋ ๋ฐํ๋์ง ์์ต๋๋ค.
๊ฐ ์์ ๋ ๋ณ๋์ ํ์ผ .csx๋ก ์ ์ฅํ๊ณ IDE์์ ์คํํ ์ ์์ต๋๋ค. UO ๊ฐ์ฒด์ ๋๊ธฐ ๊ธฐ๋ฅ์ ํ์ฌ ๊ฒ์ ์ธ์
์ ํธ์คํธ๋ฅผ ์ ๊ณตํฉ๋๋ค. ๋ฐ๋ชจ serial ์ด๋ฆ, ์ขํ, ์ฃผ์๋ฅผ ์์ ์ ๊ฒ์ผ๋ก ๋ฐ๊พธ์ธ์.
์ด ์ฝ๋๋ฅผ ๋ณ๋์ .csx ํ์ผ๋ก ์คํํ์ธ์. ์ธ์๋ ํธ์ถ์ ์ง์ ํ์๋ฉ๋๋ค. ์์ ์ ์ด๋ฆ, serial, ์ฃผ์๋ฅผ ์์ ์ ๊ฐ์ผ๋ก ๋ฐ๊พธ์ธ์.
๋ช ๋ น์ ๋ ๋ฆฝ๋ ๋ฌธ์ ๋๋ค. ์์ ๋ฉ์์ง๋ ํธ์ถ ์์์ ๋ํ๋ด๋ฉฐ ์๋ฒ ๋์์ ์๋ฃ๋ฅผ ํ์ธํ์ง ์์ต๋๋ค.
UO.Print("Calling UO.Press");
UO.Press(0x70);๋งค๊ฐ๋ณ์์ ์คํ ํ๋ฆ:
- ํ๋ ์ด์์ ๊ฐ์ ํค ๋๋ฅด๊ธฐ๋ฅผ ํฉ์ฑํฉ๋๋ค.
UO.Press(0x70);๋งค๊ฐ๋ณ์์ ์คํ ํ๋ฆ:
- Press๋ ๋ชจ๋ ์์์ KeyPress๋ก ์ ๋ฌํฉ๋๋ค. KeyPress ๋ฃจํ ์นด์ดํธ ์คํ>0: ๋ธ๋ฆฌ์ง.KeyPress(ํค), ๋ธ๋ฆฌ์ง.Wait(์ง์ฐ), ์นด์ดํธ--. Bridge๋ user32 keybd_event๋ฅผ ๋ค์ด/์ ์ผ๋ก ๋ณด๋ ๋๋ค.
return RunScenario();
object? RunScenario()
{
UO.Press(0x70, 2, 250);
return null;
}๋งค๊ฐ๋ณ์์ ์คํ ํ๋ฆ:
- ์ ๋ ฅ ํฌ์ปค์ค๊ฐ ์๋ ๊ฐ๋ฐฉํ ๊ทธ๋ํฝ ClassicUO์ด ํ์ํฉ๋๋ค. ๊ทธ๋ ์ง ์์ผ๋ฉด RequireGameInput์์ ์ค๋ฅ๊ฐ ๋ฐ์ํฉ๋๋ค. ํด๋ฆญ์ ํ์ฌ ์ธํฐํ์ด์ค/๋งคํฌ๋ก๋ฅผ ์ฒ๋ฆฌํ๋ฉฐ ์๋ฒ ๋ช ๋ น์ ๊ฒฐ๊ณผ๋ ๋ฐํ๋์ง ์์ต๋๋ค.
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.Press(0x70, 0);
UO.Print("Zero count sends no key");
return null;
}
}C#์ ๋์๋ฌธ์๋ฅผ ๊ตฌ๋ถํฉ๋๋ค. ์ ํํ UO ์ด๋ฆ์ ์ฌ์ฉํ์ธ์. ์ซ์ ํ๋๊ทธ๋ 0๊ณผ ๋น๊ตํ๊ณ ๋ฐํ ํ์์ด bool์ผ ๋๋ง bool์ ์ฌ์ฉํ์ธ์.
๋งค๊ฐ๋ณ์: key (Integer)
๊ฒฐ๊ณผ: void / Unit.
ํธ์ถ ์:
-
InjectionScript.Runtime.InjectionApiUO.Press. -
InjectionScript.Runtime.InjectionApiUO.KeyPress:KeyPress(key).
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
public void Press(int key) => KeyPress(key);๋งค๊ฐ๋ณ์: key (Integer), count (Integer)
๊ฒฐ๊ณผ: void / Unit.
ํธ์ถ ์:
-
InjectionScript.Runtime.InjectionApiUO.Press. -
InjectionScript.Runtime.InjectionApiUO.KeyPress:KeyPress(key, count).
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
public void Press(int key, int count) => KeyPress(key, count);๋งค๊ฐ๋ณ์: key (Integer), count (Integer), delay (Integer)
๊ฒฐ๊ณผ: void / Unit.
ํธ์ถ ์:
-
InjectionScript.Runtime.InjectionApiUO.Press. -
InjectionScript.Runtime.InjectionApiUO.KeyPress:KeyPress(key, count, delay).
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
public void Press(int key, int count, int delay) => KeyPress(key, count, delay);ะฃะบัะฐัะฝััะบะฐ ยท ะ ัััะบะธะน ยท English ยท Deutsch ยท Franรงais ยท Italiano ยท Espaรฑol ยท ็น้ซไธญๆ ยท ๆฅๆฌ่ช ยท ํ๊ตญ์ด
void UO.RClick(object? x, object? y);๋จ์ผ ๋ง์ฐ์ค ํด๋ฆญ์ ํฉ์ฑํฉ๋๋ค: ์ค๋ฅธ์ชฝ ๋ฒํผ.
-
x- int X ์ฐฝ ํฝ์ ClassicUO, ์ธ๊ณ ์ขํ ์๋. -
y- int Y ์ฐฝ ํฝ์ ClassicUO, ์ธ๊ณ ์ขํ ์๋.
void - ๊ฐ์ด ์์ต๋๋ค. ๋ณ๋์ ํ์ ์ผ๋ก ์ ํํ์ธ์. ์๋ฃ๋ ์๋ฒ์ ์์ ์ ํ์ธํ์ง ์์ต๋๋ค.
- ๋ธ๋ฆฌ์ง๋ WarpMouse(x,y)๋ฅผ ํธ์ถํ๊ณ Mouse.Position ๋ฐ SDL_WarpMouseInWindow๋ฅผ ์ ๋ฐ์ดํธํ ๋ค์ MouseButton ์๋/์๋ก ํ ๋ฒ ์คํํฉ๋๋ค. ๋ ๋ฒ ํด๋ฆญ ์ฌ์ด์๋ ์ผ์ ์ค์ง๊ฐ ์์ต๋๋ค.
- ์ ๋ ฅ ํฌ์ปค์ค๊ฐ ์๋ ์ด๋ฆฐ ClassicUO ๊ทธ๋ํฝ ์ฐฝ์ด ํ์ํฉ๋๋ค. ๊ทธ๋ ์ง ์์ผ๋ฉด RequireGameInput๊ฐ InvalidOperationException์ ๋์ง๋๋ค. user32 mouse_event๋ Windows์์ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์ ์๋์ ๋ฒํผ/๊ฐ์ฒด๋ ํ์ฌ ์ธํฐํ์ด์ค์ ๋ฐ๋ผ ๋ค๋ฆ ๋๋ค.
๊ฐ ์์ ๋ ๋ณ๋์ ํ์ผ .csx๋ก ์ ์ฅํ๊ณ IDE์์ ์คํํ ์ ์์ต๋๋ค. UO ๊ฐ์ฒด์ ๋๊ธฐ ๊ธฐ๋ฅ์ ํ์ฌ ๊ฒ์ ์ธ์
์ ํธ์คํธ๋ฅผ ์ ๊ณตํฉ๋๋ค. ๋ฐ๋ชจ serial ์ด๋ฆ, ์ขํ, ์ฃผ์๋ฅผ ์์ ์ ๊ฒ์ผ๋ก ๋ฐ๊พธ์ธ์.
์ด ์ฝ๋๋ฅผ ๋ณ๋์ .csx ํ์ผ๋ก ์คํํ์ธ์. ์ธ์๋ ํธ์ถ์ ์ง์ ํ์๋ฉ๋๋ค. ์์ ์ ์ด๋ฆ, serial, ์ฃผ์๋ฅผ ์์ ์ ๊ฐ์ผ๋ก ๋ฐ๊พธ์ธ์.
๋ช ๋ น์ ๋ ๋ฆฝ๋ ๋ฌธ์ ๋๋ค. ์์ ๋ฉ์์ง๋ ํธ์ถ ์์์ ๋ํ๋ด๋ฉฐ ์๋ฒ ๋์์ ์๋ฃ๋ฅผ ํ์ธํ์ง ์์ต๋๋ค.
UO.Print("Calling UO.RClick");
UO.RClick(100, 100);๋งค๊ฐ๋ณ์์ ์คํ ํ๋ฆ:
- ๋จ์ผ ๋ง์ฐ์ค ํด๋ฆญ์ ํฉ์ฑํฉ๋๋ค: ์ค๋ฅธ์ชฝ ๋ฒํผ.
UO.RClick(100, 100);๋งค๊ฐ๋ณ์์ ์คํ ํ๋ฆ:
- ๋ธ๋ฆฌ์ง๋ WarpMouse(x,y)๋ฅผ ํธ์ถํ๊ณ Mouse.Position ๋ฐ SDL_WarpMouseInWindow๋ฅผ ์ ๋ฐ์ดํธํ ๋ค์ MouseButton ์๋/์๋ก ํ ๋ฒ ์คํํฉ๋๋ค. ๋ ๋ฒ ํด๋ฆญ ์ฌ์ด์๋ ์ผ์ ์ค์ง๊ฐ ์์ต๋๋ค.
return RunScenario();
object? RunScenario()
{
var x = 120;
var y = 140;
UO.RClick(x, y);
return null;
}๋งค๊ฐ๋ณ์์ ์คํ ํ๋ฆ:
- ์ ๋ ฅ ํฌ์ปค์ค๊ฐ ์๋ ์ด๋ฆฐ ClassicUO ๊ทธ๋ํฝ ์ฐฝ์ด ํ์ํฉ๋๋ค. ๊ทธ๋ ์ง ์์ผ๋ฉด RequireGameInput๊ฐ InvalidOperationException์ ๋์ง๋๋ค. user32 mouse_event๋ Windows์์ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์ ์๋์ ๋ฒํผ/๊ฐ์ฒด๋ ํ์ฌ ์ธํฐํ์ด์ค์ ๋ฐ๋ผ ๋ค๋ฆ ๋๋ค.
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()
{
ClickAt(100, 100);
return null;
}
void ClickAt(dynamic x, dynamic y)
{
UO.RClick(x, y);
}
}C#์ ๋์๋ฌธ์๋ฅผ ๊ตฌ๋ถํฉ๋๋ค. ์ ํํ UO ์ด๋ฆ์ ์ฌ์ฉํ์ธ์. ์ซ์ ํ๋๊ทธ๋ 0๊ณผ ๋น๊ตํ๊ณ ๋ฐํ ํ์์ด bool์ผ ๋๋ง bool์ ์ฌ์ฉํ์ธ์.
๋งค๊ฐ๋ณ์: x (Integer), y (Integer)
๊ฒฐ๊ณผ: void / Unit.
ํธ์ถ ์:
-
InjectionScript.Runtime.InjectionApiUO.RClick. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.RClick:bridge.RClick(x, y).
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
public void RClick(int x, int y) => bridge.RClick(x, y);ะฃะบัะฐัะฝััะบะฐ ยท ะ ัััะบะธะน ยท English ยท Deutsch ยท Franรงais ยท Italiano ยท Espaรฑol ยท ็น้ซไธญๆ ยท ๆฅๆฌ่ช ยท ํ๊ตญ์ด
void UO.RDblClick(object? x, object? y);๋๋ธ ๋ง์ฐ์ค ํด๋ฆญ์ ํฉ์ฑํฉ๋๋ค: ์ค๋ฅธ์ชฝ ๋ฒํผ.
-
x- int X ์ฐฝ ํฝ์ ClassicUO, ์ธ๊ณ ์ขํ ์๋. -
y- int Y ์ฐฝ ํฝ์ ClassicUO, ์ธ๊ณ ์ขํ ์๋.
void - ๊ฐ์ด ์์ต๋๋ค. ๋ณ๋์ ํ์ ์ผ๋ก ์ ํํ์ธ์. ์๋ฃ๋ ์๋ฒ์ ์์ ์ ํ์ธํ์ง ์์ต๋๋ค.
- ๋ธ๋ฆฌ์ง๋ WarpMouse(x,y)๋ฅผ ํธ์ถํ๊ณ Mouse.Position ๋ฐ SDL_WarpMouseInWindow๋ฅผ ์ ๋ฐ์ดํธํ ๋ค์ MouseButton ์๋/์๋ฅผ ๋ ๋ฒ ์ ๋ฐ์ดํธํฉ๋๋ค. ๋ ๋ฒ ํด๋ฆญ ์ฌ์ด์๋ ์ผ์ ์ค์ง๊ฐ ์์ต๋๋ค.
- ์ ๋ ฅ ํฌ์ปค์ค๊ฐ ์๋ ์ด๋ฆฐ ClassicUO ๊ทธ๋ํฝ ์ฐฝ์ด ํ์ํฉ๋๋ค. ๊ทธ๋ ์ง ์์ผ๋ฉด RequireGameInput๊ฐ InvalidOperationException์ ๋์ง๋๋ค. user32 mouse_event๋ Windows์์ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์ ์๋์ ๋ฒํผ/๊ฐ์ฒด๋ ํ์ฌ ์ธํฐํ์ด์ค์ ๋ฐ๋ผ ๋ค๋ฆ ๋๋ค.
๊ฐ ์์ ๋ ๋ณ๋์ ํ์ผ .csx๋ก ์ ์ฅํ๊ณ IDE์์ ์คํํ ์ ์์ต๋๋ค. UO ๊ฐ์ฒด์ ๋๊ธฐ ๊ธฐ๋ฅ์ ํ์ฌ ๊ฒ์ ์ธ์
์ ํธ์คํธ๋ฅผ ์ ๊ณตํฉ๋๋ค. ๋ฐ๋ชจ serial ์ด๋ฆ, ์ขํ, ์ฃผ์๋ฅผ ์์ ์ ๊ฒ์ผ๋ก ๋ฐ๊พธ์ธ์.
์ด ์ฝ๋๋ฅผ ๋ณ๋์ .csx ํ์ผ๋ก ์คํํ์ธ์. ์ธ์๋ ํธ์ถ์ ์ง์ ํ์๋ฉ๋๋ค. ์์ ์ ์ด๋ฆ, serial, ์ฃผ์๋ฅผ ์์ ์ ๊ฐ์ผ๋ก ๋ฐ๊พธ์ธ์.
๋ช ๋ น์ ๋ ๋ฆฝ๋ ๋ฌธ์ ๋๋ค. ์์ ๋ฉ์์ง๋ ํธ์ถ ์์์ ๋ํ๋ด๋ฉฐ ์๋ฒ ๋์์ ์๋ฃ๋ฅผ ํ์ธํ์ง ์์ต๋๋ค.
UO.Print("Calling UO.RDblClick");
UO.RDblClick(100, 100);๋งค๊ฐ๋ณ์์ ์คํ ํ๋ฆ:
- ๋๋ธ ๋ง์ฐ์ค ํด๋ฆญ์ ํฉ์ฑํฉ๋๋ค: ์ค๋ฅธ์ชฝ ๋ฒํผ.
UO.RDblClick(100, 100);๋งค๊ฐ๋ณ์์ ์คํ ํ๋ฆ:
- ๋ธ๋ฆฌ์ง๋ WarpMouse(x,y)๋ฅผ ํธ์ถํ๊ณ Mouse.Position ๋ฐ SDL_WarpMouseInWindow๋ฅผ ์ ๋ฐ์ดํธํ ๋ค์ MouseButton ์๋/์๋ฅผ ๋ ๋ฒ ์ ๋ฐ์ดํธํฉ๋๋ค. ๋ ๋ฒ ํด๋ฆญ ์ฌ์ด์๋ ์ผ์ ์ค์ง๊ฐ ์์ต๋๋ค.
return RunScenario();
object? RunScenario()
{
var x = 120;
var y = 140;
UO.RDblClick(x, y);
return null;
}๋งค๊ฐ๋ณ์์ ์คํ ํ๋ฆ:
- ์ ๋ ฅ ํฌ์ปค์ค๊ฐ ์๋ ์ด๋ฆฐ ClassicUO ๊ทธ๋ํฝ ์ฐฝ์ด ํ์ํฉ๋๋ค. ๊ทธ๋ ์ง ์์ผ๋ฉด RequireGameInput๊ฐ InvalidOperationException์ ๋์ง๋๋ค. user32 mouse_event๋ Windows์์ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์ ์๋์ ๋ฒํผ/๊ฐ์ฒด๋ ํ์ฌ ์ธํฐํ์ด์ค์ ๋ฐ๋ผ ๋ค๋ฆ ๋๋ค.
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()
{
ClickAt(100, 100);
return null;
}
void ClickAt(dynamic x, dynamic y)
{
UO.RDblClick(x, y);
}
}C#์ ๋์๋ฌธ์๋ฅผ ๊ตฌ๋ถํฉ๋๋ค. ์ ํํ UO ์ด๋ฆ์ ์ฌ์ฉํ์ธ์. ์ซ์ ํ๋๊ทธ๋ 0๊ณผ ๋น๊ตํ๊ณ ๋ฐํ ํ์์ด bool์ผ ๋๋ง bool์ ์ฌ์ฉํ์ธ์.
๋งค๊ฐ๋ณ์: x (Integer), y (Integer)
๊ฒฐ๊ณผ: void / Unit.
ํธ์ถ ์:
-
InjectionScript.Runtime.InjectionApiUO.RDblClick. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.RDblClick:bridge.RDblClick(x, y).
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
public void RDblClick(int x, int y) => bridge.RDblClick(x, y);