KO UO Topic gumps - LIHACHTETAN/ClassicUO-Bad-Newbie-CSharp-Scripts-IDE GitHub Wiki
ะฃะบัะฐัะฝััะบะฐ ยท ะ ัััะบะธะน ยท English ยท Deutsch ยท Franรงais ยท Italiano ยท Espaรฑol ยท ็น้ซไธญๆ ยท ๆฅๆฌ่ช ยท ํ๊ตญ์ด
ํ ยท C# ยท IDE ยท UO API ยท AโZ ยท ์ ยท ์ธ์ด
์๋ฒ ์ฐฝ ์ฝ๊ธฐ ๋ฐ ์๋ต ๋ณด๋ด๊ธฐ: ๋ฒํผ, ํ์ธ๋, ๋ผ๋์ค ๋ฒํผ ๋ฐ ํ๋. ID ์ฐฝ, serial ์์ ์์ ์ด๋ฆฐ ์ฐฝ ์ธ๋ฑ์ค๋ ์๋ก ๋ฐ๋ ์ ์์ต๋๋ค.
| ์ฃผ์ | ๋ช ๋ น ๋ฐ ์ค๋ช |
|---|---|
| GetGump | UO.GetGump |
| GetGumpInfo | UO.GetGumpInfo |
| Gump ID / Serial | UO.GetGumpID ยท UO.GetGumpSerial |
| Text Lines | UO.GetGumpTextLines ยท UO.GetGumpFullLines ยท UO.GetGumpShortLines |
| Buttons | UO.GetGumpButtonsDescription ยท UO.NumGumpButton |
| CheckBox | UO.NumGumpCheckBox ยท UO.GumpAutoCheckBox |
| RadioButton | UO.NumGumpRadiobutton ยท UO.GumpAutoRadiobutton |
| TextEntry | UO.NumGumpTextEntry ยท UO.GumpAutoTextEntry |
| WaitGump | UO.WaitGump |
| SelectGump | UO.SelectGump |
| SendGumpSelect | UO.SendGumpSelect |
| Ignore ๊ฒ์ค | UO.AddGumpIgnoreByID ยท UO.AddGumpIgnoreBySerial ยท UO.ClearGumpsIgnore |
| Close Gump | UO.IsGumpCanBeClosed ยท UO.CloseClientGump ยท UO.CancelGump |
UO.GetGump ยท UO.GetGumpID ยท UO.GetGumpSerial ยท UO.GetGumpCount ยท UO.GetGumpsCount ยท UO.GetGumpInfo ยท UO.GetGumpButtonsDescription ยท UO.GetGumpFullLines ยท UO.GetGumpShortLines ยท UO.GetGumpTextLines ยท UO.GumpObject ยท UO.LastGump ยท UO.IsGump ยท UO.GumpExists ยท UO.IsGumpCanBeClosed
UO.NumGumpButton ยท UO.NumGumpCheckBox ยท UO.NumGumpRadiobutton ยท UO.NumGumpTextEntry ยท UO.GumpAutoCheckBox ยท UO.GumpAutoRadiobutton ยท UO.GumpAutoTextEntry ยท UO.WaitGump ยท UO.WaitGumpCheck ยท UO.WaitGumpEntry ยท UO.SelectGump ยท UO.SendGumpSelect ยท UO.SetGump
UO.AddGumpIgnoreByID ยท UO.AddGumpIgnoreBySerial ยท UO.ClearGumpsIgnore ยท UO.CancelGump ยท UO.CloseClientGump
๊ฐ ๋ช ๋ น ์นด๋์๋ ์ง์ ์ฝ๋, ํจ์ ๋ฐ ํด๋์ค ๋ฑ ์ฌ๋ฌ ๊ฐ์ง ๋ ๋ฆฝ์ ์ธ ์๋๋ฆฌ์ค๊ฐ ์์ต๋๋ค. ๋ค์์ ์ ํ๋ ์งง์ ์๋๋ฆฌ์ค์ ๋๋ค. ์ ํ์ฌํญ๊ณผ ์ ์ฒด ๋ถ์์ด ์นด๋์ ํฌํจ๋์ด ์์ต๋๋ค.
๋งค๊ฐ๋ณ์, ๊ฒฐ๊ณผ ๋ฐ ๋ชจ๋ ์๋๋ฆฌ์ค
var info = UO.GetGumpInfo(0);
if (Truth(ArrayLength(info) == 5))
{
UO.Print("Serial=" + Hex(info[0]));
UO.Print("GumpID=" + Hex(info[1]));
}
int ArrayLength(object? value) => value is System.Array array ? array.Length : 0;
string Hex(object? value) => Convert.ToInt64(value).ToString("X");
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;๋งค๊ฐ๋ณ์, ๊ฒฐ๊ณผ ๋ฐ ๋ชจ๋ ์๋๋ฆฌ์ค
UO.WaitGump(100);
UO.UseObject("0x40001234");ะฃะบัะฐัะฝััะบะฐ ยท ะ ัััะบะธะน ยท English ยท Deutsch ยท Franรงais ยท Italiano ยท Espaรฑol ยท ็น้ซไธญๆ ยท ๆฅๆฌ่ช ยท ํ๊ตญ์ด
void UO.AddGumpIgnoreByID(object? id);UO.GetGumpInfo์์ ์ฌ์ฉํ๋ ๋ก์ปฌ ์์ธ ๋ชฉ๋ก์ ์ซ์ ID gump๋ฅผ ์ถ๊ฐํฉ๋๋ค.
-
id๋UO.GetGumpInfo์ ๋ฐํํ๋ ์ซ์ ID ๊ฒํ์ ๋๋ค.
void. ID์ ์ถ๊ฐํด๋ ์ฐฝ์ด ๋ซํ๊ฑฐ๋ ์๋ฒ๊ฐ ์ฒ๋ฆฌํ๋์ง ํ์ธํ์ง ์์ต๋๋ค.
๊ฐ ์์ ๋ ๋ณ๋์ ํ์ผ .csx๋ก ์ ์ฅํ๊ณ IDE์์ ์คํํ ์ ์์ต๋๋ค. UO ๊ฐ์ฒด์ ๋๊ธฐ ๊ธฐ๋ฅ์ ํ์ฌ ๊ฒ์ ์ธ์
์ ํธ์คํธ๋ฅผ ์ ๊ณตํฉ๋๋ค. ๋ฐ๋ชจ serial ์ด๋ฆ, ์ขํ, ์ฃผ์๋ฅผ ์์ ์ ๊ฒ์ผ๋ก ๋ฐ๊พธ์ธ์.
์ด ์ฝ๋๋ฅผ ๋ณ๋์ .csx ํ์ผ๋ก ์คํํ์ธ์. ์ธ์๋ ํธ์ถ์ ์ง์ ํ์๋ฉ๋๋ค. ์์ ์ ์ด๋ฆ, serial, ์ฃผ์๋ฅผ ์์ ์ ๊ฐ์ผ๋ก ๋ฐ๊พธ์ธ์.
๋ช ๋ น์ ๋ ๋ฆฝ๋ ๋ฌธ์ ๋๋ค. ์์ ๋ฉ์์ง๋ ํธ์ถ ์์์ ๋ํ๋ด๋ฉฐ ์๋ฒ ๋์์ ์๋ฃ๋ฅผ ํ์ธํ์ง ์์ต๋๋ค.
UO.Print("Calling UO.AddGumpIgnoreByID");
UO.AddGumpIgnoreByID(123);๋งค๊ฐ๋ณ์์ ์คํ ํ๋ฆ:
- UO.GetGumpInfo ๊ฒฐ๊ณผ์์ ID 123๋ก ๊ฒํ๋ฅผ ์ ๊ฑฐํฉ๋๋ค.
UO.AddGumpIgnoreByID(123);๋งค๊ฐ๋ณ์์ ์คํ ํ๋ฆ:
- ์์ธ๋ฅผ ๋ฐ์์ํค๊ธฐ ์ ์ ID๋ฅผ ๋ณ์์ ์ ์ฅํ์ธ์.
return RunScenario();
object? RunScenario()
{
var ignoredId = 123;
UO.AddGumpIgnoreByID(ignoredId);
return null;
}3. ID๋ฅผ ์ถ๊ฐํ์ธ์. ๊ฐ ์์ธ๋ GetGumpInfo์ ์ํฅ์ ๋ฏธ์นฉ๋๋ค. - ์คํฌ๋ฆฝํธ ํด๋์ค
๋งค๊ฐ๋ณ์์ ์คํ ํ๋ฆ:
- ID๋ฅผ ์ถ๊ฐํ์ธ์. ๊ฐ ์์ธ๋ GetGumpInfo์ ์ํฅ์ ๋ฏธ์นฉ๋๋ค.
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.AddGumpIgnoreByID(123);
UO.AddGumpIgnoreByID(456);
return null;
}
}C#์ ๋์๋ฌธ์๋ฅผ ๊ตฌ๋ถํฉ๋๋ค. ์ ํํ UO ์ด๋ฆ์ ์ฌ์ฉํ์ธ์. ์ซ์ ํ๋๊ทธ๋ 0๊ณผ ๋น๊ตํ๊ณ ๋ฐํ ํ์์ด bool์ผ ๋๋ง bool์ ์ฌ์ฉํ์ธ์.
๋งค๊ฐ๋ณ์: id (Any)
๊ฒฐ๊ณผ: void / Unit.
ํธ์ถ ์:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0).
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
case "addgumpignorebyid": state.IgnoredGumpIds.Add(Arg(0)); return InjectionValue.Unit;ะฃะบัะฐัะฝััะบะฐ ยท ะ ัััะบะธะน ยท English ยท Deutsch ยท Franรงais ยท Italiano ยท Espaรฑol ยท ็น้ซไธญๆ ยท ๆฅๆฌ่ช ยท ํ๊ตญ์ด
void UO.AddGumpIgnoreBySerial(object? serial);UO.GetGumpInfo์์ ์ฌ์ฉํ๋ ๋ก์ปฌ ์์ธ ๋ชฉ๋ก์ serial gump๋ฅผ ์ถ๊ฐํฉ๋๋ค.
-
serial๋UO.GetGumpInfo์ ๋ฐํํ๋ ์ซ์ serial ๊ฒํ์ ๋๋ค.
void. serial์ ์ถ๊ฐํด๋ ์ฐฝ์ด ๋ซํ๊ฑฐ๋ ์๋ฒ๊ฐ ์ฒ๋ฆฌํ๋์ง ํ์ธํ์ง ์์ต๋๋ค.
๊ฐ ์์ ๋ ๋ณ๋์ ํ์ผ .csx๋ก ์ ์ฅํ๊ณ IDE์์ ์คํํ ์ ์์ต๋๋ค. UO ๊ฐ์ฒด์ ๋๊ธฐ ๊ธฐ๋ฅ์ ํ์ฌ ๊ฒ์ ์ธ์
์ ํธ์คํธ๋ฅผ ์ ๊ณตํฉ๋๋ค. ๋ฐ๋ชจ serial ์ด๋ฆ, ์ขํ, ์ฃผ์๋ฅผ ์์ ์ ๊ฒ์ผ๋ก ๋ฐ๊พธ์ธ์.
์ด ์ฝ๋๋ฅผ ๋ณ๋์ .csx ํ์ผ๋ก ์คํํ์ธ์. ์ธ์๋ ํธ์ถ์ ์ง์ ํ์๋ฉ๋๋ค. ์์ ์ ์ด๋ฆ, serial, ์ฃผ์๋ฅผ ์์ ์ ๊ฐ์ผ๋ก ๋ฐ๊พธ์ธ์.
๋ช ๋ น์ ๋ ๋ฆฝ๋ ๋ฌธ์ ๋๋ค. ์์ ๋ฉ์์ง๋ ํธ์ถ ์์์ ๋ํ๋ด๋ฉฐ ์๋ฒ ๋์์ ์๋ฃ๋ฅผ ํ์ธํ์ง ์์ต๋๋ค.
UO.Print("Calling UO.AddGumpIgnoreBySerial");
UO.AddGumpIgnoreBySerial(1073741824);1. ๊ฒฐ๊ณผ UO.GetGumpInfo์์ serial 1073741824๋ก ๊ฒํ๋ฅผ ์ ๊ฑฐํฉ๋๋ค. - ์ง์ ์คํฌ๋ฆฝํธ
๋งค๊ฐ๋ณ์์ ์คํ ํ๋ฆ:
- ๊ฒฐ๊ณผ UO.GetGumpInfo์์ serial 1073741824๋ก ๊ฒํ๋ฅผ ์ ๊ฑฐํฉ๋๋ค.
UO.AddGumpIgnoreBySerial(1073741824);๋งค๊ฐ๋ณ์์ ์คํ ํ๋ฆ:
- ๋ณ์์์ serial๋ฅผ ์ ๋ฌํฉ๋๋ค.
return RunScenario();
object? RunScenario()
{
var ignoredSerial = 1073741824;
UO.AddGumpIgnoreBySerial(ignoredSerial);
return null;
}3. GetGumpInfo ์ถ๋ ฅ์์ โโ๋ ๊ฐ์ serial ๋ฉ์ด๋ฆฌ๋ฅผ ์ ๊ฑฐํฉ๋๋ค. - ์คํฌ๋ฆฝํธ ํด๋์ค
๋งค๊ฐ๋ณ์์ ์คํ ํ๋ฆ:
- GetGumpInfo ์ถ๋ ฅ์์ โโ๋ ๊ฐ์ 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()
{
UO.AddGumpIgnoreBySerial(1073741824);
UO.AddGumpIgnoreBySerial(1073741825);
return null;
}
}C#์ ๋์๋ฌธ์๋ฅผ ๊ตฌ๋ถํฉ๋๋ค. ์ ํํ UO ์ด๋ฆ์ ์ฌ์ฉํ์ธ์. ์ซ์ ํ๋๊ทธ๋ 0๊ณผ ๋น๊ตํ๊ณ ๋ฐํ ํ์์ด bool์ผ ๋๋ง bool์ ์ฌ์ฉํ์ธ์.
๋งค๊ฐ๋ณ์: serial (Any)
๊ฒฐ๊ณผ: void / Unit.
ํธ์ถ ์:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0).
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
case "addgumpignorebyserial": state.IgnoredGumpSerials.Add(Arg(0)); return InjectionValue.Unit;ะฃะบัะฐัะฝััะบะฐ ยท ะ ัััะบะธะน ยท English ยท Deutsch ยท Franรงais ยท Italiano ยท Espaรฑol ยท ็น้ซไธญๆ ยท ๆฅๆฌ่ช ยท ํ๊ตญ์ด
void UO.CancelGump();
void UO.CancelGump(object? gumpId);ํธํ ๊ฐ๋ฅํ ๋ฆฌ์กธ๋ฒ CloseSimpleGump๋ฅผ ํตํด ์ ํํ ์๋ฒ Gump๋ฅผ ๋ซ์ต๋๋ค.
-
gumpId- ์ ํ์ฌํญ int/์ซ์ ๊ฐ. ๋ฆฌ์กธ๋ฒ๋ ๋จผ์ ์ผ์นํ๋ ์๋ฒ/๋ก์ปฌ serial๋ฅผ ์ฐพ์ ๋ค์ ์๋ฒ ๊ฒํ ์ธ๋ฑ์ค๋ฅผ ์ฐพ์ต๋๋ค. ์ธ์๊ฐ ์์ผ๋ฉด -1๊ฐ ์ ๋ฌ๋๊ณ ๋ง์ง๋ง ๊ฒํ๊ฐ ์ ํ๋ฉ๋๋ค.
void - ๋ฐํ ๊ฐ์ด ์์ต๋๋ค.
- gumpId๋ผ๋ ์ธ์๋ ID๋ง ๊ฒ์ํ๋ค๊ณ ๋ณด์ฅํ์ง ์์ต๋๋ค. CloseGumpUnsafe ์๋ฒ ๊ฒํ์ ๊ฒฝ์ฐ 0 ๋ฒํผ์ ๋ณด๋ธ ๋ค์ ๋ก์ปฌ ์ฐฝ์ ์ญ์ ํฉ๋๋ค. Gump๊ฐ ๋ฐ๊ฒฌ๋์ง ์์ผ๋ฉด ์๋ฌด๋ฐ ์กฐ์น๋ ์ทจํ์ง ์์ต๋๋ค. ์ด๋ CancelMenu๋ ์๋๊ณ ๋ณด๋ฅ ์ค์ธ WaitGump๋ฅผ ์ง์ฐ๋ ๊ฒ๋ ์๋๋๋ค.
๊ฐ ์์ ๋ ๋ณ๋์ ํ์ผ .csx๋ก ์ ์ฅํ๊ณ IDE์์ ์คํํ ์ ์์ต๋๋ค. UO ๊ฐ์ฒด์ ๋๊ธฐ ๊ธฐ๋ฅ์ ํ์ฌ ๊ฒ์ ์ธ์
์ ํธ์คํธ๋ฅผ ์ ๊ณตํฉ๋๋ค. ๋ฐ๋ชจ serial ์ด๋ฆ, ์ขํ, ์ฃผ์๋ฅผ ์์ ์ ๊ฒ์ผ๋ก ๋ฐ๊พธ์ธ์.
์ด ์ฝ๋๋ฅผ ๋ณ๋์ .csx ํ์ผ๋ก ์คํํ์ธ์. ์ธ์๋ ํธ์ถ์ ์ง์ ํ์๋ฉ๋๋ค. ์์ ์ ์ด๋ฆ, serial, ์ฃผ์๋ฅผ ์์ ์ ๊ฐ์ผ๋ก ๋ฐ๊พธ์ธ์.
๋ช ๋ น์ ๋ ๋ฆฝ๋ ๋ฌธ์ ๋๋ค. ์์ ๋ฉ์์ง๋ ํธ์ถ ์์์ ๋ํ๋ด๋ฉฐ ์๋ฒ ๋์์ ์๋ฃ๋ฅผ ํ์ธํ์ง ์์ต๋๋ค.
UO.Print("Calling UO.CancelGump");
UO.CancelGump();๋งค๊ฐ๋ณ์์ ์คํ ํ๋ฆ:
- ์ธ์๊ฐ ์๋ ์์์ ์ฌ์ฉ ๊ฐ๋ฅํ ์ต์ ์๋ฒ ๊ฒํ๋ฅผ ์ ํํฉ๋๋ค.
UO.CancelGump();๋งค๊ฐ๋ณ์์ ์คํ ํ๋ฆ:
- ์ฒซ ๋ฒ์งธ ๊ฒํ์ ์ค์ ID๊ฐ ์ฌ์ฉ๋ฉ๋๋ค. ๋ชฉ๋ก์ ํตํ ๊ฐ์ ๋ณ๊ฒฝ๋ ์ ์์ต๋๋ค.
return RunScenario();
object? RunScenario()
{
var id = UO.GetGumpID(0);
if (Truth(id != 0))
{
UO.CancelGump(id);
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;๋งค๊ฐ๋ณ์์ ์คํ ํ๋ฆ:
- -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()
{
UO.CancelGump(-1);
return null;
}
}C#์ ๋์๋ฌธ์๋ฅผ ๊ตฌ๋ถํฉ๋๋ค. ์ ํํ UO ์ด๋ฆ์ ์ฌ์ฉํ์ธ์. ์ซ์ ํ๋๊ทธ๋ 0๊ณผ ๋น๊ตํ๊ณ ๋ฐํ ํ์์ด bool์ผ ๋๋ง bool์ ์ฌ์ฉํ์ธ์.
๋งค๊ฐ๋ณ์: ๋งค๊ฐ๋ณ์๊ฐ ์์ต๋๋ค.
๊ฒฐ๊ณผ: void / Unit.
ํธ์ถ ์:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.CloseSimpleGump:bridge.CloseSimpleGump(arguments.Length > 0 ? Arg(0) : -1). -
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias::Arg:Arg(0).
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
case "cancelgump": bridge.CloseSimpleGump(arguments.Length > 0 ? Arg(0) : -1); break;๋งค๊ฐ๋ณ์: gumpId (Any)
๊ฒฐ๊ณผ: void / Unit.
ํธ์ถ ์:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.CloseSimpleGump:bridge.CloseSimpleGump(arguments.Length > 0 ? Arg(0) : -1). -
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias::Arg:Arg(0).
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
case "cancelgump": bridge.CloseSimpleGump(arguments.Length > 0 ? Arg(0) : -1); break;ะฃะบัะฐัะฝััะบะฐ ยท ะ ัััะบะธะน ยท English ยท Deutsch ยท Franรงais ยท Italiano ยท Espaรฑol ยท ็น้ซไธญๆ ยท ๆฅๆฌ่ช ยท ํ๊ตญ์ด
void UO.ClearGumpsIgnore();๋ฌด์๋ gump ID ๋ฐ gump serial ๋ฐํ์ ์ธํธ๋ฅผ ๋ชจ๋ ์ง์๋๋ค.
๋งค๊ฐ๋ณ์๊ฐ ์์ต๋๋ค.
void - ๋ฐํ ๊ฐ์ด ์์ต๋๋ค.
- ์ฐฝ๋ฌธ์ ๋ซ์ง ์์ต๋๋ค. ์ผ๋จ ์ง์์ง๋ฉด GetGumpInfo๋ ์ด์ ์ ๋ฌด์ํ๋ ๊ฒํ์ ์ค๋ ์ท์ ๋ค์ ๋ฐํํ ์ ์์ต๋๋ค.
๊ฐ ์์ ๋ ๋ณ๋์ ํ์ผ .csx๋ก ์ ์ฅํ๊ณ IDE์์ ์คํํ ์ ์์ต๋๋ค. UO ๊ฐ์ฒด์ ๋๊ธฐ ๊ธฐ๋ฅ์ ํ์ฌ ๊ฒ์ ์ธ์
์ ํธ์คํธ๋ฅผ ์ ๊ณตํฉ๋๋ค. ๋ฐ๋ชจ serial ์ด๋ฆ, ์ขํ, ์ฃผ์๋ฅผ ์์ ์ ๊ฒ์ผ๋ก ๋ฐ๊พธ์ธ์.
์ด ์ฝ๋๋ฅผ ๋ณ๋์ .csx ํ์ผ๋ก ์คํํ์ธ์. ์ธ์๋ ํธ์ถ์ ์ง์ ํ์๋ฉ๋๋ค. ์์ ์ ์ด๋ฆ, serial, ์ฃผ์๋ฅผ ์์ ์ ๊ฐ์ผ๋ก ๋ฐ๊พธ์ธ์.
๋ช ๋ น์ ๋ ๋ฆฝ๋ ๋ฌธ์ ๋๋ค. ์์ ๋ฉ์์ง๋ ํธ์ถ ์์์ ๋ํ๋ด๋ฉฐ ์๋ฒ ๋์์ ์๋ฃ๋ฅผ ํ์ธํ์ง ์์ต๋๋ค.
UO.Print("Calling UO.ClearGumpsIgnore");
UO.ClearGumpsIgnore();๋งค๊ฐ๋ณ์์ ์คํ ํ๋ฆ:
- ๋ฌด์๋ gump ID ๋ฐ gump serial ๋ฐํ์ ์ธํธ๋ฅผ ๋ชจ๋ ์ง์๋๋ค.
UO.ClearGumpsIgnore();๋งค๊ฐ๋ณ์์ ์คํ ํ๋ฆ:
- ์ถ๊ฐ๋ ๋ฌด์ ๊ท์น์ ์ ๊ฑฐํฉ๋๋ค.
return RunScenario();
object? RunScenario()
{
UO.AddGumpIgnoreByID(0x1234);
UO.ClearGumpsIgnore();
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.ClearGumpsIgnore();
UO.ClearGumpsIgnore();
return null;
}
}C#์ ๋์๋ฌธ์๋ฅผ ๊ตฌ๋ถํฉ๋๋ค. ์ ํํ UO ์ด๋ฆ์ ์ฌ์ฉํ์ธ์. ์ซ์ ํ๋๊ทธ๋ 0๊ณผ ๋น๊ตํ๊ณ ๋ฐํ ํ์์ด bool์ผ ๋๋ง bool์ ์ฌ์ฉํ์ธ์.
๋งค๊ฐ๋ณ์: ๋งค๊ฐ๋ณ์๊ฐ ์์ต๋๋ค.
๊ฒฐ๊ณผ: void / Unit.
ํธ์ถ ์:
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
case "cleargumpsignore":
state.IgnoredGumpIds.Clear(); state.IgnoredGumpSerials.Clear(); return InjectionValue.Unit;ะฃะบัะฐัะฝััะบะฐ ยท ะ ัััะบะธะน ยท English ยท Deutsch ยท Franรงais ยท Italiano ยท Espaรฑol ยท ็น้ซไธญๆ ยท ๆฅๆฌ่ช ยท ํ๊ตญ์ด
void UO.CloseClientGump(object? id);ServerSerial๊ฐ ์ ๋ฌ๋ ID์ ์ผ์นํ๋ ๋ก์ปฌ ์๋ฒ ๊ฒํ๋ฅผ ์ ๊ฑฐํฉ๋๋ค.
-
id- int/์ซ์ ID ServerSerial์ ๋น๊ตํด ๋ณผ ๋. ์ด๊ฒ์ ๋ชฉ๋ก ์์ธ๋ ์๋๊ณ ๋ก์ปฌ serial๋ ์๋๋๋ค.
void - ๋ฐํ ๊ฐ์ด ์์ต๋๋ค.
- ServerGumpsUnsafe๋ฅผ ๋ฐ๋ณตํ๊ณ ๋ชจ๋ ์ผ์น ํญ๋ชฉ์ ์ค๋ ์ท์ ์์ฑํ๊ณ Dispose๋ฅผ ํธ์ถํฉ๋๋ค. 0 ๋ฒํผ์ด๋ ์์ ๊ฒฐ๊ณผ๋ฅผ ์๋ฒ๋ก ๋ณด๋ด์ง ์์ต๋๋ค. ์ผ์นํ๋ ํญ๋ชฉ์ด ์์ผ๋ฉด ์๋ฌด๊ฒ๋ ๋ณ๊ฒฝ๋์ง ์์ต๋๋ค.
๊ฐ ์์ ๋ ๋ณ๋์ ํ์ผ .csx๋ก ์ ์ฅํ๊ณ IDE์์ ์คํํ ์ ์์ต๋๋ค. UO ๊ฐ์ฒด์ ๋๊ธฐ ๊ธฐ๋ฅ์ ํ์ฌ ๊ฒ์ ์ธ์
์ ํธ์คํธ๋ฅผ ์ ๊ณตํฉ๋๋ค. ๋ฐ๋ชจ serial ์ด๋ฆ, ์ขํ, ์ฃผ์๋ฅผ ์์ ์ ๊ฒ์ผ๋ก ๋ฐ๊พธ์ธ์.
์ด ์ฝ๋๋ฅผ ๋ณ๋์ .csx ํ์ผ๋ก ์คํํ์ธ์. ์ธ์๋ ํธ์ถ์ ์ง์ ํ์๋ฉ๋๋ค. ์์ ์ ์ด๋ฆ, serial, ์ฃผ์๋ฅผ ์์ ์ ๊ฐ์ผ๋ก ๋ฐ๊พธ์ธ์.
๋ช ๋ น์ ๋ ๋ฆฝ๋ ๋ฌธ์ ๋๋ค. ์์ ๋ฉ์์ง๋ ํธ์ถ ์์์ ๋ํ๋ด๋ฉฐ ์๋ฒ ๋์์ ์๋ฃ๋ฅผ ํ์ธํ์ง ์์ต๋๋ค.
UO.Print("Calling UO.CloseClientGump");
UO.CloseClientGump(UO.GetGumpID(0));๋งค๊ฐ๋ณ์์ ์คํ ํ๋ฆ:
- GetGumpID๋ ์๋ฒ ID๋ฅผ ์ ๊ณตํฉ๋๋ค. CloseClientGump๋ ์ผ์นํ๋ ๋ก์ปฌ ์ฐฝ์ ์ ๊ฑฐํฉ๋๋ค.
if (Truth(UO.GetGumpsCount() > 0))
{
var id = UO.GetGumpID(0);
UO.CloseClientGump(id);
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;๋งค๊ฐ๋ณ์์ ์คํ ํ๋ฆ:
- ์ํ๋ ์๋ฒ ๊ฒํ์ ID๋ฅผ ์ง์ ํ์ธ์. ์ผ์นํ๋ ํญ๋ชฉ์ด ํ์ฉ๋์ง ์์ต๋๋ค.
return RunScenario();
object? RunScenario()
{
var id = 0x12345678;
UO.CloseClientGump(id);
return null;
}๋งค๊ฐ๋ณ์์ ์คํ ํ๋ฆ:
- ์ฒซ ๋ฒ์งธ Dispose ํ ๋ ๋ฒ์งธ ๋ซ๊ธฐ๋ ์ผ๋ฐ์ ์ผ๋ก ๋ ์ด์ ์ฐฝ์ ์ฐพ์ง ์์ต๋๋ค.
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.GetGumpID(0);
if (Truth(id != 0))
{
UO.CloseClientGump(id);
UO.CloseClientGump(id);
}
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์ ์ฌ์ฉํ์ธ์.
๋งค๊ฐ๋ณ์: id (Any)
๊ฒฐ๊ณผ: void / Unit.
ํธ์ถ ์:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.CloseClientGump:bridge.CloseClientGump(Arg(0)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0).
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
case "closeclientgump": bridge.CloseClientGump(Arg(0)); return InjectionValue.Unit;ะฃะบัะฐัะฝััะบะฐ ยท ะ ัััะบะธะน ยท English ยท Deutsch ยท Franรงais ยท Italiano ยท Espaรฑol ยท ็น้ซไธญๆ ยท ๆฅๆฌ่ช ยท ํ๊ตญ์ด
dynamic UO.GetGump(object? identifier);
dynamic UO.GetGump(object? gumpId, object? identifier);
dynamic UO.GetGump(object? gumpId, object? identifier, object? key);์ ํํ ์๋ฒ Gump์ ํ ํ๋๋ฅผ ์ฝ์ต๋๋ค. ์ฐฝ ์ ํ๊ธฐ๋ฅผ ๋ช ์์ ์ผ๋ก ์ค์ ํ ์ ์์ต๋๋ค.
-
gumpId- (gumpId,์๋ณ์) โโ๋ฐ (gumpId,์๋ณ์, ํค) ํ์์ ์ฒซ ๋ฒ์งธ int ์ ํ ์ฌํญ์ ๋๋ค. int ๋๋ ์ซ์ ๋ฌธ์์ด: ๋จผ์ ์ ํํ GumpID/serial ์ผ์น๋ฅผ ์ฐพ์ ๋ค์ 0๋ก ์์ธ์ ์ฐพ์ต๋๋ค. -1์ ์ด ์คํฌ๋ฆฝํธ์์ ์ ํํ Gump์ด๊ณ , ์์ผ๋ฉด ํ์ฌ ๋ชฉ๋ก์ ๋ง์ง๋ง Gump์ ๋๋ค. ๋ค๋ฅธ ๋ถ์ ์ ์ธ int๋ 32๋นํธ ID๋ฅผ ์ ์งํฉ๋๋ค. ์ด๋ NumGump*์ ์๊ฒฉํ GumpIndex์ ๋ฐ๋๋๋ ์ ํ๊ธฐ์ ๋๋ค. -
identifier- string ๋์๋ฌธ์๋ฅผ ๊ตฌ๋ถํ์ง ์์ต๋๋ค. ์ง์๋๋ ๋ชจ๋ ๊ฐ๊ณผ ๊ฒฐ๊ณผ ์ ํ์ ๋ฐํ ์น์ ์ ๋์ด๋์ด ์์ต๋๋ค. ์ ์ ์๋ ์ด๋ฆ์ ๋น ๋ฌธ์์ด์ ๋ฐํํฉ๋๋ค. -
key- ์ ํ ์ฌํญ int, ๊ธฐ๋ณธ๊ฐ - 1. ๋ฒํผ/ํ ์คํธ/object/๋ช ๋ น์ ๊ฒฝ์ฐ 0๋ก ์์ธ์ ์์ฑํ์ธ์. ์ด๊ฒ์ ID ์ ์ด๊ฐ ์๋๋๋ค. ์์ ์ธ๋ฑ์ค์ ๋ฒ์๋ฅผ ๋ฒ์ด๋๋ฉด ๋ฒํผ์ ๊ฒฝ์ฐ 0์ด ๋๊ณ ํ ์คํธ ํ๋์ ๊ฒฝ์ฐ ๋น ๋ฌธ์์ด์ด ํ์๋ฉ๋๋ค. ๋ค๋ฅธ ์๋ณ์๋ ํค๋ฅผ ์ฌ์ฉํ์ง ์์ต๋๋ค.
๊ฒฐ๊ณผ ์ ํ์ ์๋ณ์์ ๋ฐ๋ผ ๋ค๋ฆ ๋๋ค. int: Buttonlen โ ์ผ๋ฐ ๋ฒํผ ์; ๋ฒํผ โ ์ธ๋ฑ์ค ํค๋ณ ButtonID์ ๋๋ค. textlen โ ์ฌ์ฉ ๊ฐ๋ฅํ ํ ์คํธ ์์ ์; injid โ ํ์ฌ ์ฐฝ ์ธ๋ฑ์ค; ํ์ โ 0 (์๋ต ๋ด์ญ์ ์ ์ฅ๋์ง ์์ต๋๋ค); inclient โ ๋ฐ๊ฒฌ๋ ๋ผ์ด๋ธ ์ฐฝ์ ๊ฒฝ์ฐ 1, ์๋ ๊ฒฝ์ฐ 0; objectcount - ์ค์ฒฉ๋ ์ปจํธ๋กค์ ํฌํจํ ๋ผ์ด๋ธ ์ปจํธ๋กค์ ์์ ๋๋ค. string: serial ๋ฐ gumpid - 16์ง์ ๋ฌธ์์ด 0xXXXXXXXX; text โ ์ธ๋ฑ์ค ํค์ ์์ ํ ์คํธ์ ๋๋ค. object โ ์ปจํธ๋กค ์ ํ ์ด๋ฆ; ๋ช ๋ น โ ์ปจํธ๋กค์ ๋ํ ์ค๋ช (์ ํ, ํ์ด์ง, ID, ์ขํ, ํฌ๊ธฐ ๋ฐ ์ง์๋๋ ํ๋) ์ฐฝ์ด ์์ผ๋ฉด ์ซ์ ์๋ณ์๋ 0๋ฅผ ์ ๊ณตํ๊ณ ๋ฌธ์์ด ์๋ณ์๋ ๋น ๋ฌธ์์ด์ ์ ๊ณตํฉ๋๋ค. injid=0๋ ์ ํจํ ์ฒซ ๋ฒ์งธ ์์ธ์ ๋๋ค. 0 ์์ฒด๋ง์ผ๋ก๋ ์ฐฝ์ด ์์์ ์ฆ๋ช ํ์ง ์์ต๋๋ค. ์ด๊ฒ์ Array๋ Pascal TGumpInfo๊ฐ ์๋๋๋ค.
- ํ์ฑ ์๋ฒ ๊ฒํ์ ํจ๊ป ์๋ํฉ๋๋ค. ๋ฐฐ๋ญ, ์ง๋, ์ค์ ๋ฐ ๊ธฐํ ๋ก์ปฌ ์ฐฝ์ ์ด ๋ชฉ๋ก์ ํฌํจ๋์ง ์์ต๋๋ค. ํ ๋ฒ์ ํธ์ถ์ ๊ฒ์ ์ค๋ ๋์ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ต๋๋ค. ํตํ๋ง๋ค ๋ชฉ๋ก์ ์ํ๊ฐ ๋ค๋ฅผ ์ ์์ต๋๋ค.
- SelectGump/InfoGump๋ ํ์ฌ ๋ฐํ์์์๋ง ์ ํํ ์ฐฝ์ ์ง์ ํฉ๋๋ค. ์ ํํ ์ฐฝ์ด ๋ซํ๋ฉด ํ์ฌ ๋ชฉ๋ก์ ๋ง์ง๋ง ํญ๋ชฉ์ด ์ฌ์ฉ๋ฉ๋๋ค. ์ด๋ ๋ฐ๋์ ๊ฐ์ฅ ์ต๊ทผ ํญ๋ชฉ์ผ ํ์๋ ์์ต๋๋ค.
- textlen/text๋ ์๋ฒ ํจํค์ง์ ์๋ ๋ฌธ์์ด ํ์ด ์๋ ์ฌ์ฉ ๊ฐ๋ฅํ ํ ์คํธ ์ปจํธ๋กค์ ์ฐธ์กฐํฉ๋๋ค. object/command๋ ๋ผ์ด๋ธ ์ปจํธ๋กค์ ์ ์ฒด ํธ๋ฆฌ๋ฅผ ๋ํ๋ ๋๋ค. ๋ค๋ฅธ ๋ชฉ๋ก์ ์ธ๋ฑ์ค๋ ํผํฉ๋ ์ ์์ต๋๋ค.
- ๊ฐ ํธ์ถ์ ํ์ฌ ์ํ๋ฅผ ๊ฐ๋ณ์ ์ผ๋ก ์ฝ์ต๋๋ค. ์ผ์นํ๋ serial, GumpID ๋ฐ ๋ชฉ๋ก์ ๊ฒฝ์ฐ GetGumpInfo๋ฅผ ์ฌ์ฉํ์ธ์.
๊ฐ ์์ ๋ ๋ณ๋์ ํ์ผ .csx๋ก ์ ์ฅํ๊ณ IDE์์ ์คํํ ์ ์์ต๋๋ค. UO ๊ฐ์ฒด์ ๋๊ธฐ ๊ธฐ๋ฅ์ ํ์ฌ ๊ฒ์ ์ธ์
์ ํธ์คํธ๋ฅผ ์ ๊ณตํฉ๋๋ค. ๋ฐ๋ชจ serial ์ด๋ฆ, ์ขํ, ์ฃผ์๋ฅผ ์์ ์ ๊ฒ์ผ๋ก ๋ฐ๊พธ์ธ์.
์ด ์ฝ๋๋ฅผ ๋ณ๋์ .csx ํ์ผ๋ก ์คํํ์ธ์. ์ธ์๋ ํธ์ถ์ ์ง์ ํ์๋ฉ๋๋ค. ์์ ์ ์ด๋ฆ, serial, ์ฃผ์๋ฅผ ์์ ์ ๊ฐ์ผ๋ก ๋ฐ๊พธ์ธ์.
ํ ๋ฒ์ ํธ์ถ ๊ฒฐ๊ณผ๋ฅผ ์ ๋์ ํ์ํฉ๋๋ค. ์ซ์๋ฅผ bool๋ก ๋ณํํ์ง ์์ผ๋ฉฐ, ๋ฐฐ์ด์ด๋ฉด ์์ ์๋ฅผ ํ์ํฉ๋๋ค.
object? result = UO.GetGump("gumpid");
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));๋งค๊ฐ๋ณ์์ ์คํ ํ๋ฆ:
- gumpid ๋ฐ serial๋ ์ด๋ฏธ 16์ง์๋ก ํ์ํ๋ ๋ฌธ์์ด์ ๋ฐํํฉ๋๋ค. ์ถ๊ฐ 16์ง์๊ฐ ํ์ํ์ง ์์ต๋๋ค. ๋น ์ค์ ์ฝ์ ๋ ์ฐฝ์ด ์์์ ์๋ฏธํฉ๋๋ค.
var id = UO.GetGump("gumpid");
var serial = UO.GetGump("serial");
UO.Print(id + " / " + serial);๋งค๊ฐ๋ณ์์ ์คํ ํ๋ฆ:
- Buttonlen โ ๋ฒํผ ์; i๋ 0๋ถํฐ count-1๊น์ง์ ํ ์ธ๋ฑ์ค์ ๋๋ค. ๋ฒํผ - ๊ทธ๋ํฝ์ด๋ ์์ธ์ด ์๋ ๋ต๋ณ์ฉ ID์ ๋๋ค. ์ฐฝ์ ๋ณ๊ฒฝํ ๋ ๋ชฉ๋ก์ ๋ค์ ์ฝ์ผ์ญ์์ค.
return RunScenario();
object? RunScenario()
{
var count = UO.GetGump("buttonlen");
var i = 0;
while (Truth(i < count))
{
var button = UO.GetGump("button", i);
UO.Print(Convert.ToString(button));
i = i + 1;
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;๋งค๊ฐ๋ณ์์ ์คํ ํ๋ฆ:
- 0x12345678๋ GumpID/serial์ ์์ ๋๋ค. ID๋ฅผ ์ํ๋ ํ์์ผ๋ก ๋ฐ๊พธ์ธ์. key=0์ธ ํ ์คํธ๋ ์ฌ์ฉ ๊ฐ๋ฅํ ์ฒซ ๋ฒ์งธ ํ ์คํธ ์ปจํธ๋กค์ ์ฝ์ต๋๋ค. ์ด๊ฒ์ ๋ฒํผ๊ณผ ๋ค๋ฅธ ๋ชฉ๋ก์ ๋๋ค.
- SelectGump๋ ์ง์ ๋ ์ฐฝ์ด ์๋ค๊ณ ๋ณด๊ณ ํ์ง๋ง ํ์ ์ฝ๊ธฐ๋ฅผ ์ฐจ๋จํ์ง ์์ต๋๋ค. ํ์ํ ๊ฒฝ์ฐ ๋ฐํ๋ gumpid๋ฅผ ๋ณ๋๋ก ํ์ธํ์ธ์.
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.SelectGump(0x12345678);
if (Truth(UO.GetGump("inclient")))
{
var count = UO.GetGump("textlen");
if (Truth(count > 0))
{
UO.Print(UO.GetGump("text", 0));
}
}
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์ ์ฌ์ฉํ์ธ์.
๋งค๊ฐ๋ณ์: identifier (String)
๊ฒฐ๊ณผ: dynamic / Any.
ํธ์ถ ์:
-
InjectionScript.Runtime.InjectionApiUO.GetGump. -
InjectionScript.Runtime.InjectionApiUO.LastGump:LastGump(identifier, -1).
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
public InjectionValue GetGump(string identifier) => LastGump(identifier, -1);๋งค๊ฐ๋ณ์: gumpId (Integer/String), identifier (String/Integer)
๊ฒฐ๊ณผ: dynamic / Any.
ํธ์ถ ์:
-
InjectionScript.Runtime.InjectionApiUO.GetGump. -
InjectionScript.Runtime.InjectionApiUO.GetGump:GetGump(gumpId, identifier, -1).
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
public InjectionValue GetGump(int gumpId, string identifier) => GetGump(gumpId, identifier, -1);๋งค๊ฐ๋ณ์: gumpId (Integer/String), identifier (String/Integer)
๊ฒฐ๊ณผ: dynamic / Any.
ํธ์ถ ์:
-
InjectionScript.Runtime.InjectionApiUO.GetGump. -
InjectionScript.Runtime.InjectionApiUO.LastGump:LastGump(identifier, key).
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
public InjectionValue GetGump(string identifier, int key) => LastGump(identifier, key);๋งค๊ฐ๋ณ์: gumpId (Integer), identifier (String), key (Integer)
๊ฒฐ๊ณผ: dynamic / Any.
ํธ์ถ ์:
-
InjectionScript.Runtime.InjectionApiUO.GetGump. -
InjectionScript.Runtime.InjectionApiUO.ConvertGumpValue:ConvertGumpValue(identifier, bridge.GetGumpValue(gumpId, identifier, key)). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetGumpValue:bridge.GetGumpValue(gumpId, identifier, key).
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
public InjectionValue GetGump(int gumpId, string identifier, int key)
=> ConvertGumpValue(identifier, bridge.GetGumpValue(gumpId, identifier, key));ะฃะบัะฐัะฝััะบะฐ ยท ะ ัััะบะธะน ยท English ยท Deutsch ยท Franรงais ยท Italiano ยท Espaรฑol ยท ็น้ซไธญๆ ยท ๆฅๆฌ่ช ยท ํ๊ตญ์ด
dynamic UO.GetGumpButtonsDescription(object? gumpIndex);์ผ๋ฐ ์๋ฒ ๊ฒํ ๋ฒํผ์ ๋ํ ์ค๋ช ์ ๋ฐํํฉ๋๋ค.
-
gumpIndexโ ํ์ int โ 0๋ถํฐ GetGumpsCount()-1๊น์ง ํ์ฑ ์๋ฒ ๊ฒํ์ ์ธ๋ฑ์ค์ ๋๋ค. GumpID/serial๊ฐ ์๋๋๋ค. ๋ชฉ๋ก ์ธ๋ถ์ ์์์ ์ธ๋ฑ์ค๋ ์ ํจํ์ง ์์ต๋๋ค. ์ฐฝ์ ์ด๊ณ ๋ซ๊ณ ์ฌ์ ๋ ฌํ๋ฉด ์์ธ์ด ๋ณ๊ฒฝ๋ ์ ์์ต๋๋ค. ํ๋ํ๊ธฐ ์ ์ GetGumpID/GetGumpSerial๋ฅผ ํ์ธํ์ธ์.
Array - ์ผ๋ฐ ๋ฒํผ์ ๋ํ ์ค๋ช ์ ๋๋ค. [] - ์ธ๋ฑ์ค๊ฐ ์๋ชป๋์๊ฑฐ๋ ์ผ์นํ๋ ์์๊ฐ ์์ต๋๋ค. ํ ์ธ๋ฑ์ค๋ 0๋ก ์์ํฉ๋๋ค. ID ์ปจํธ๋กค์ด ์๋๋๋ค.
- ํ์ฑ ์๋ฒ ๊ฒํ์ ํจ๊ป ์๋ํฉ๋๋ค. ๋ฐฐ๋ญ, ์ง๋, ์ค์ ๋ฐ ๊ธฐํ ๋ก์ปฌ ์ฐฝ์ ์ด ๋ชฉ๋ก์ ํฌํจ๋์ง ์์ต๋๋ค. ํ ๋ฒ์ ํธ์ถ์ ๊ฒ์ ์ค๋ ๋์ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ต๋๋ค. ํตํ๋ง๋ค ๋ชฉ๋ก์ ์ํ๊ฐ ๋ค๋ฅผ ์ ์์ต๋๋ค.
- ๊ฐ ์ค์๋ ButtonID, ์์ , toPage ๋ฐ ๊ทธ๋ํฝ์ด ํฌํจ๋ฉ๋๋ค. ๋ผ๋์ค ๋ฒํผ์ ์ผ๋ฐ ์๋ต ๋ฒํผ์ด ์๋๋๋ค.
- SilentMode=0์ด๋ฉด ๋น์ด ์์ง ์์ ๊ฒฐ๊ณผ๋ ํ ์คํธ ์ฐฝ์ ์ถ๊ฐ๋์ด ์ด๋ฆฝ๋๋ค. SetSilentMode(1)๋ ๋ฐฐ์ด๋ง ๋ฐํํฉ๋๋ค.
๊ฐ ์์ ๋ ๋ณ๋์ ํ์ผ .csx๋ก ์ ์ฅํ๊ณ IDE์์ ์คํํ ์ ์์ต๋๋ค. UO ๊ฐ์ฒด์ ๋๊ธฐ ๊ธฐ๋ฅ์ ํ์ฌ ๊ฒ์ ์ธ์
์ ํธ์คํธ๋ฅผ ์ ๊ณตํฉ๋๋ค. ๋ฐ๋ชจ serial ์ด๋ฆ, ์ขํ, ์ฃผ์๋ฅผ ์์ ์ ๊ฒ์ผ๋ก ๋ฐ๊พธ์ธ์.
์ด ์ฝ๋๋ฅผ ๋ณ๋์ .csx ํ์ผ๋ก ์คํํ์ธ์. ์ธ์๋ ํธ์ถ์ ์ง์ ํ์๋ฉ๋๋ค. ์์ ์ ์ด๋ฆ, serial, ์ฃผ์๋ฅผ ์์ ์ ๊ฐ์ผ๋ก ๋ฐ๊พธ์ธ์.
ํ ๋ฒ์ ํธ์ถ ๊ฒฐ๊ณผ๋ฅผ ์ ๋์ ํ์ํฉ๋๋ค. ์ซ์๋ฅผ bool๋ก ๋ณํํ์ง ์์ผ๋ฉฐ, ๋ฐฐ์ด์ด๋ฉด ์์ ์๋ฅผ ํ์ํฉ๋๋ค.
object? result = UO.GetGumpButtonsDescription(0);
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));๋งค๊ฐ๋ณ์์ ์คํ ํ๋ฆ:
- 0 โ ์ฐฝ ์์ธ. ArrayLength๋ ๋ผ์ธ[0]์ ํธ์ถํ๊ธฐ ์ ์ ๋ผ์ธ์ด ์๋์ง ํ์ธํฉ๋๋ค.
var lines = UO.GetGumpButtonsDescription(0);
if (Truth(ArrayLength(lines) > 0))
{
UO.Print(lines[0]);
}
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;๋งค๊ฐ๋ณ์์ ์คํ ํ๋ฆ:
- SetSilentMode(1)๋ ์ถ๊ฐ ํ ์คํธ ์ฐฝ์ ๋นํ์ฑํํฉ๋๋ค. ์์ ์์ ๋ช ์์ ์ธ Print๋ ์ฌ์ ํ ํด๋น ํ์ ์ถ๋ ฅํฉ๋๋ค.
- i๋ ๋ฐฐ์ด ์ธ๋ฑ์ค์ ๋๋ค. ํด๋น ์ค๋ช ์์ ์ํ๋ ๋ฒํผ/์ค์์น์ ID๋ฅผ ์ ํํ์ธ์.
return RunScenario();
object? RunScenario()
{
UO.SetSilentMode(1);
var lines = UO.GetGumpButtonsDescription(0);
var i = 0;
while (Truth(i < ArrayLength(lines)))
{
UO.Print(lines[i]);
i = i + 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;๋งค๊ฐ๋ณ์์ ์คํ ํ๋ฆ:
- ๊ฐ์๋ ๋ง์ง๋ง ์ฐฝ์ ์ธ๋ฑ์ค๋ก ๋ณํ๋ฉ๋๋ค. ๋ก๋๋ ์๋ฒ Gump์์ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ต๋๋ค. ๋ก์ปฌ ์ฐฝ์ ์ฌ๊ธฐ์ ํฌํจ๋์ง ์์ต๋๋ค.
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()
{
int count = UO.GetGumpsCount();
if (count == 0)
return null;
int index = count - 1;
var lines = UO.GetGumpButtonsDescription(index);
foreach (object? line in (object? [])lines)
UO.Print(Convert.ToString(line) ?? "");
return null;
}
}C#์ ๋์๋ฌธ์๋ฅผ ๊ตฌ๋ถํฉ๋๋ค. ์ ํํ UO ์ด๋ฆ์ ์ฌ์ฉํ์ธ์. ์ซ์ ํ๋๊ทธ๋ 0๊ณผ ๋น๊ตํ๊ณ ๋ฐํ ํ์์ด bool์ผ ๋๋ง bool์ ์ฌ์ฉํ์ธ์.
๋งค๊ฐ๋ณ์: gumpIndex (Any)
๊ฒฐ๊ณผ: dynamic / Array.
ํธ์ถ ์:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
InjectionScript.Runtime.InjectionApiUO.GumpLinesResult:GumpLinesResult(bridge.GetGumpButtonsDescription(Arg(0))). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetGumpButtonsDescription:bridge.GetGumpButtonsDescription(Arg(0)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0).
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
case "getgumpbuttonsdescription": return GumpLinesResult(bridge.GetGumpButtonsDescription(Arg(0)));ะฃะบัะฐัะฝััะบะฐ ยท ะ ัััะบะธะน ยท English ยท Deutsch ยท Franรงais ยท Italiano ยท Espaรฑol ยท ็น้ซไธญๆ ยท ๆฅๆฌ่ช ยท ํ๊ตญ์ด
int UO.GetGumpCount();์งง์ ๋ฒ์ GetGumpsCount: ํ์ฑ ์๋ฒ ๊ฒํ ์.
๋งค๊ฐ๋ณ์๊ฐ ์์ต๋๋ค.
int >= 0 โ ๋ง์ง๋ง ์ฐฝ์ ์ธ๋ฑ์ค๊ฐ ์๋ ์ฐฝ ์์ ๋๋ค. 0 โ ๋ชฉ๋ก์ด ๋น์ด ์์ต๋๋ค.
- ํ์ฑ ์๋ฒ ๊ฒํ์ ํจ๊ป ์๋ํฉ๋๋ค. ๋ฐฐ๋ญ, ์ง๋, ์ค์ ๋ฐ ๊ธฐํ ๋ก์ปฌ ์ฐฝ์ ์ด ๋ชฉ๋ก์ ํฌํจ๋์ง ์์ต๋๋ค. ํ ๋ฒ์ ํธ์ถ์ ๊ฒ์ ์ค๋ ๋์ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ต๋๋ค. ํตํ๋ง๋ค ๋ชฉ๋ก์ ์ํ๊ฐ ๋ค๋ฅผ ์ ์์ต๋๋ค.
๊ฐ ์์ ๋ ๋ณ๋์ ํ์ผ .csx๋ก ์ ์ฅํ๊ณ IDE์์ ์คํํ ์ ์์ต๋๋ค. UO ๊ฐ์ฒด์ ๋๊ธฐ ๊ธฐ๋ฅ์ ํ์ฌ ๊ฒ์ ์ธ์
์ ํธ์คํธ๋ฅผ ์ ๊ณตํฉ๋๋ค. ๋ฐ๋ชจ serial ์ด๋ฆ, ์ขํ, ์ฃผ์๋ฅผ ์์ ์ ๊ฒ์ผ๋ก ๋ฐ๊พธ์ธ์.
์ด ์ฝ๋๋ฅผ ๋ณ๋์ .csx ํ์ผ๋ก ์คํํ์ธ์. ์ธ์๋ ํธ์ถ์ ์ง์ ํ์๋ฉ๋๋ค. ์์ ์ ์ด๋ฆ, serial, ์ฃผ์๋ฅผ ์์ ์ ๊ฐ์ผ๋ก ๋ฐ๊พธ์ธ์.
ํ ๋ฒ์ ํธ์ถ ๊ฒฐ๊ณผ๋ฅผ ์ ๋์ ํ์ํฉ๋๋ค. ์ซ์๋ฅผ bool๋ก ๋ณํํ์ง ์์ผ๋ฉฐ, ๋ฐฐ์ด์ด๋ฉด ์์ ์๋ฅผ ํ์ํฉ๋๋ค.
var result = UO.GetGumpCount();
UO.Print("GetGumpCount: " + Convert.ToString(result));๋งค๊ฐ๋ณ์์ ์คํ ํ๋ฆ:
- ์ด๋ ์ฐฝ ์ธ๋ฑ์ค๊ฐ ์๋ ์๋ฒ ๊ฒํ ์์ ๋๋ค. ํ์ง ๋ฐฐ๋ญ๊ณผ ์ง๋๋ ์ฌ๊ธฐ์ ํฌํจ๋์ด ์์ง ์์ต๋๋ค.
int count = UO.GetGumpCount();
UO.Print($"Active server gumps: {count}");๋งค๊ฐ๋ณ์์ ์คํ ํ๋ฆ:
- ์ธ๋ฑ์ค๋ 0๋ถํฐ ์์ํฉ๋๋ค. ํตํ๋ง๋ค ๋ชฉ๋ก์ด ๋ฐ๋ ์ ์์ผ๋ฏ๋ก ์ฝ๊ธฐ ์ ์ ํ์ฌ ์๋์ ํ์ธํ์ธ์.
return RunScenario();
object? RunScenario()
{
int count = UO.GetGumpCount();
for (int index = 0; index < count; index++)
{
if (index >= UO.GetGumpCount())
break;
UO.Print($"Gump {index}: ID={UO.GetGumpID(index)}, serial={UO.GetGumpSerial(index)}");
}
return null;
}๋งค๊ฐ๋ณ์์ ์คํ ํ๋ฆ:
- ๋๊ธฐ ์๊ฐ์ ์๊ฐ ์ด๊ณผ๋ก ์ ํ๋ฉ๋๋ค. ๋จ์ง ์ฐฝ๋ฌธ์ด ์กด์ฌํ๋ค๊ณ ํด์ ์ด๊ฒ์ด ๊ผญ ํ์ํ ๊ฒํ๋ผ๋ ๊ฒ์ ์ฆ๋ช ํ๋ ๊ฒ์ ์๋๋๋ค. ์ ํํ๋ ค๋ฉด ํ์ธํ์ธ์ ID.
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
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;
}
async public Task<object?> RunScenarioAsync()
{
bool appeared = await WaitForGump(3000);
UO.Print(appeared ? "A server gump appeared" : "No server gump within the timeout");
return null;
}
async Task<bool> WaitForGump(int timeoutMs)
{
var timer = System.Diagnostics.Stopwatch.StartNew();
while (timer.ElapsedMilliseconds < timeoutMs)
{
if (UO.GetGumpCount() > 0)
return true;
await WaitAsync(50);
}
return false;
}
}C#์ ๋์๋ฌธ์๋ฅผ ๊ตฌ๋ถํฉ๋๋ค. ์ ํํ UO ์ด๋ฆ์ ์ฌ์ฉํ์ธ์. ์ซ์ ํ๋๊ทธ๋ 0๊ณผ ๋น๊ตํ๊ณ ๋ฐํ ํ์์ด bool์ผ ๋๋ง bool์ ์ฌ์ฉํ์ธ์.
๋งค๊ฐ๋ณ์: ๋งค๊ฐ๋ณ์๊ฐ ์์ต๋๋ค.
๊ฒฐ๊ณผ: int / Integer.
ํธ์ถ ์:
-
InjectionScript.Runtime.InjectionApiUO.GetGumpCount. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetGumpCount:bridge.GetGumpCount().
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
public int GetGumpCount() => bridge.GetGumpCount();ะฃะบัะฐัะฝััะบะฐ ยท ะ ัััะบะธะน ยท English ยท Deutsch ยท Franรงais ยท Italiano ยท Espaรฑol ยท ็น้ซไธญๆ ยท ๆฅๆฌ่ช ยท ํ๊ตญ์ด
dynamic UO.GetGumpFullLines(object? gumpIndex);์ค์ฒฉ๋ ์๋ฒ ๊ฒํ๋ฅผ ํฌํจํ์ฌ ๋ชจ๋ ์ด์์๋ ์์์ ๋ํ ์ค๋ช ์ ๋ฐํํฉ๋๋ค.
-
gumpIndexโ ํ์ int โ 0๋ถํฐ GetGumpsCount()-1๊น์ง ํ์ฑ ์๋ฒ ๊ฒํ์ ์ธ๋ฑ์ค์ ๋๋ค. GumpID/serial๊ฐ ์๋๋๋ค. ๋ชฉ๋ก ์ธ๋ถ์ ์์์ ์ธ๋ฑ์ค๋ ์ ํจํ์ง ์์ต๋๋ค. ์ฐฝ์ ์ด๊ณ ๋ซ๊ณ ์ฌ์ ๋ ฌํ๋ฉด ์์ธ์ด ๋ณ๊ฒฝ๋ ์ ์์ต๋๋ค. ํ๋ํ๊ธฐ ์ ์ GetGumpID/GetGumpSerial๋ฅผ ํ์ธํ์ธ์.
Array - ์ค์ฒฉ๋ ์์๋ฅผ ํฌํจํ์ฌ ๋ชจ๋ ์ด์์๋ ์์์ ๋ํ ์ค๋ช ์ ๋๋ค. [] - ์ธ๋ฑ์ค๊ฐ ์๋ชป๋์๊ฑฐ๋ ์ผ์นํ๋ ์์๊ฐ ์์ต๋๋ค. ํ ์ธ๋ฑ์ค๋ 0๋ก ์์ํฉ๋๋ค. ID ์ปจํธ๋กค์ด ์๋๋๋ค.
- ํ์ฑ ์๋ฒ ๊ฒํ์ ํจ๊ป ์๋ํฉ๋๋ค. ๋ฐฐ๋ญ, ์ง๋, ์ค์ ๋ฐ ๊ธฐํ ๋ก์ปฌ ์ฐฝ์ ์ด ๋ชฉ๋ก์ ํฌํจ๋์ง ์์ต๋๋ค. ํ ๋ฒ์ ํธ์ถ์ ๊ฒ์ ์ค๋ ๋์ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ต๋๋ค. ํตํ๋ง๋ค ๋ชฉ๋ก์ ์ํ๊ฐ ๋ค๋ฅผ ์ ์์ต๋๋ค.
- ํ์ฌ ์ ์ด ํธ๋ฆฌ์ ๋ํ ์ค๋ช : ์ ํ, ํ์ด์ง, ID, X/Y, ํฌ๊ธฐ ๋ฐ ์ง์๋๋ ํ๋. ์ด๊ฒ์ ์์ ์๋ฒ ๋งํฌ์ ํจํค์ง๊ฐ ์๋๋๋ค.
- SilentMode=0์ด๋ฉด ๋น์ด ์์ง ์์ ๊ฒฐ๊ณผ๋ ํ ์คํธ ์ฐฝ์ ์ถ๊ฐ๋์ด ์ด๋ฆฝ๋๋ค. SetSilentMode(1)๋ ๋ฐฐ์ด๋ง ๋ฐํํฉ๋๋ค.
๊ฐ ์์ ๋ ๋ณ๋์ ํ์ผ .csx๋ก ์ ์ฅํ๊ณ IDE์์ ์คํํ ์ ์์ต๋๋ค. UO ๊ฐ์ฒด์ ๋๊ธฐ ๊ธฐ๋ฅ์ ํ์ฌ ๊ฒ์ ์ธ์
์ ํธ์คํธ๋ฅผ ์ ๊ณตํฉ๋๋ค. ๋ฐ๋ชจ serial ์ด๋ฆ, ์ขํ, ์ฃผ์๋ฅผ ์์ ์ ๊ฒ์ผ๋ก ๋ฐ๊พธ์ธ์.
์ด ์ฝ๋๋ฅผ ๋ณ๋์ .csx ํ์ผ๋ก ์คํํ์ธ์. ์ธ์๋ ํธ์ถ์ ์ง์ ํ์๋ฉ๋๋ค. ์์ ์ ์ด๋ฆ, serial, ์ฃผ์๋ฅผ ์์ ์ ๊ฐ์ผ๋ก ๋ฐ๊พธ์ธ์.
ํ ๋ฒ์ ํธ์ถ ๊ฒฐ๊ณผ๋ฅผ ์ ๋์ ํ์ํฉ๋๋ค. ์ซ์๋ฅผ bool๋ก ๋ณํํ์ง ์์ผ๋ฉฐ, ๋ฐฐ์ด์ด๋ฉด ์์ ์๋ฅผ ํ์ํฉ๋๋ค.
object? result = UO.GetGumpFullLines(0);
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));๋งค๊ฐ๋ณ์์ ์คํ ํ๋ฆ:
- 0 โ ์ฐฝ ์์ธ. ArrayLength๋ ๋ผ์ธ[0]์ ํธ์ถํ๊ธฐ ์ ์ ๋ผ์ธ์ด ์๋์ง ํ์ธํฉ๋๋ค.
var lines = UO.GetGumpFullLines(0);
if (Truth(ArrayLength(lines) > 0))
{
UO.Print(lines[0]);
}
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;๋งค๊ฐ๋ณ์์ ์คํ ํ๋ฆ:
- SetSilentMode(1)๋ ์ถ๊ฐ ํ ์คํธ ์ฐฝ์ ๋นํ์ฑํํฉ๋๋ค. ์์ ์์ ๋ช ์์ ์ธ Print๋ ์ฌ์ ํ ํด๋น ํ์ ์ถ๋ ฅํฉ๋๋ค.
- i๋ ๋ฐฐ์ด ์ธ๋ฑ์ค์ ๋๋ค. ํด๋น ์ค๋ช ์์ ์ํ๋ ๋ฒํผ/์ค์์น์ ID๋ฅผ ์ ํํ์ธ์.
return RunScenario();
object? RunScenario()
{
UO.SetSilentMode(1);
var lines = UO.GetGumpFullLines(0);
var i = 0;
while (Truth(i < ArrayLength(lines)))
{
UO.Print(lines[i]);
i = i + 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;๋งค๊ฐ๋ณ์์ ์คํ ํ๋ฆ:
- ๊ฐ์๋ ๋ง์ง๋ง ์ฐฝ์ ์ธ๋ฑ์ค๋ก ๋ณํ๋ฉ๋๋ค. ๋ก๋๋ ์๋ฒ Gump์์ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ต๋๋ค. ๋ก์ปฌ ์ฐฝ์ ์ฌ๊ธฐ์ ํฌํจ๋์ง ์์ต๋๋ค.
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()
{
int count = UO.GetGumpsCount();
if (count == 0)
return null;
int index = count - 1;
var lines = UO.GetGumpFullLines(index);
foreach (object? line in (object? [])lines)
UO.Print(Convert.ToString(line) ?? "");
return null;
}
}C#์ ๋์๋ฌธ์๋ฅผ ๊ตฌ๋ถํฉ๋๋ค. ์ ํํ UO ์ด๋ฆ์ ์ฌ์ฉํ์ธ์. ์ซ์ ํ๋๊ทธ๋ 0๊ณผ ๋น๊ตํ๊ณ ๋ฐํ ํ์์ด bool์ผ ๋๋ง bool์ ์ฌ์ฉํ์ธ์.
๋งค๊ฐ๋ณ์: gumpIndex (Any)
๊ฒฐ๊ณผ: dynamic / Array.
ํธ์ถ ์:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
InjectionScript.Runtime.InjectionApiUO.GumpLinesResult:GumpLinesResult(bridge.GetGumpFullLines(Arg(0))). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetGumpFullLines:bridge.GetGumpFullLines(Arg(0)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0).
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
case "getgumpfulllines": return GumpLinesResult(bridge.GetGumpFullLines(Arg(0)));ะฃะบัะฐัะฝััะบะฐ ยท ะ ัััะบะธะน ยท English ยท Deutsch ยท Franรงais ยท Italiano ยท Espaรฑol ยท ็น้ซไธญๆ ยท ๆฅๆฌ่ช ยท ํ๊ตญ์ด
int UO.GetGumpID(object? gumpIndex);์๋ฒ ๊ฒํ ์ธ๋ฑ์ค์์ GumpID ์ฐฝ ์ ํ ID๋ฅผ ์ฝ์ต๋๋ค.
-
gumpIndexโ ํ์ int โ 0๋ถํฐ GetGumpsCount()-1๊น์ง ํ์ฑ ์๋ฒ ๊ฒํ์ ์ธ๋ฑ์ค์ ๋๋ค. GumpID/serial๊ฐ ์๋๋๋ค. ๋ชฉ๋ก ์ธ๋ถ์ ์์์ ์ธ๋ฑ์ค๋ ์ ํจํ์ง ์์ต๋๋ค. ์ฐฝ์ ์ด๊ณ ๋ซ๊ณ ์ฌ์ ๋ ฌํ๋ฉด ์์ธ์ด ๋ณ๊ฒฝ๋ ์ ์์ต๋๋ค. ํ๋ํ๊ธฐ ์ ์ GetGumpID/GetGumpSerial๋ฅผ ํ์ธํ์ธ์.
int โ 32 ๋นํธ ์ฐฝ ์ ํ ์๋ณ์ GumpID. 0๋ ์๋ชป๋ ์์ธ์ ๋๋ค(serial=0๊ฐ ์ฐฝ ์์ฒด์ ์์ ์๋ ์์). ์ต์์ ๋นํธ๊ฐ ์ค์ ๋๋ฉด int๋ ์์์ ๋๋ค. Hex(๊ฐ)์ ์ฌ์ฉํ์ฌ ํ์ํฉ๋๋ค. ์ด๊ฒ์ ์ฃผ์ ์ type ๋๋ ์์ธ์ด ์๋๋๋ค.
- ํ์ฑ ์๋ฒ ๊ฒํ์ ํจ๊ป ์๋ํฉ๋๋ค. ๋ฐฐ๋ญ, ์ง๋, ์ค์ ๋ฐ ๊ธฐํ ๋ก์ปฌ ์ฐฝ์ ์ด ๋ชฉ๋ก์ ํฌํจ๋์ง ์์ต๋๋ค. ํ ๋ฒ์ ํธ์ถ์ ๊ฒ์ ์ค๋ ๋์ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ต๋๋ค. ํตํ๋ง๋ค ๋ชฉ๋ก์ ์ํ๊ฐ ๋ค๋ฅผ ์ ์์ต๋๋ค.
- ์ผ์นํ๋ serial/GumpID ์์ ๊ฒฝ์ฐ ํ๋์ GetGumpInfo(info[0] ๋ฐ info[1] ํ๋)๋ฅผ ์ฌ์ฉํ์ธ์.
๊ฐ ์์ ๋ ๋ณ๋์ ํ์ผ .csx๋ก ์ ์ฅํ๊ณ IDE์์ ์คํํ ์ ์์ต๋๋ค. UO ๊ฐ์ฒด์ ๋๊ธฐ ๊ธฐ๋ฅ์ ํ์ฌ ๊ฒ์ ์ธ์
์ ํธ์คํธ๋ฅผ ์ ๊ณตํฉ๋๋ค. ๋ฐ๋ชจ serial ์ด๋ฆ, ์ขํ, ์ฃผ์๋ฅผ ์์ ์ ๊ฒ์ผ๋ก ๋ฐ๊พธ์ธ์.
์ด ์ฝ๋๋ฅผ ๋ณ๋์ .csx ํ์ผ๋ก ์คํํ์ธ์. ์ธ์๋ ํธ์ถ์ ์ง์ ํ์๋ฉ๋๋ค. ์์ ์ ์ด๋ฆ, serial, ์ฃผ์๋ฅผ ์์ ์ ๊ฐ์ผ๋ก ๋ฐ๊พธ์ธ์.
ํ ๋ฒ์ ํธ์ถ ๊ฒฐ๊ณผ๋ฅผ ์ ๋์ ํ์ํฉ๋๋ค. ์ซ์๋ฅผ bool๋ก ๋ณํํ์ง ์์ผ๋ฉฐ, ๋ฐฐ์ด์ด๋ฉด ์์ ์๋ฅผ ํ์ํฉ๋๋ค.
var result = UO.GetGumpID(0);
UO.Print("GetGumpID: " + Convert.ToString(result));๋งค๊ฐ๋ณ์์ ์คํ ํ๋ฆ:
- 0์ ์๋ฒ ๋ชฉ๋ก์ ์ฒซ ๋ฒ์งธ ์์ธ์ ๋๋ค. 16์ง์๋ ์์ int์ ๋นํธ ํํ์ ์ ์ฅํฉ๋๋ค.
var value = UO.GetGumpID(0);
UO.Print(Hex(value));
string Hex(object? value) => Convert.ToInt64(value).ToString("X");๋งค๊ฐ๋ณ์์ ์คํ ํ๋ฆ:
- ๋ณ๊ฒฝํ ์ ์๋ ๋ชฉ๋ก์ ๊ฒฝ์ฐ ๊ฐ์๋ ๋ง์ง๋ง ์ธ๋ฑ์ค ์ดํ์ด๋ฏ๋ก ๋๋ฝ=0์ ๋๋ค. ๋ง์ง๋ง ์ ํจํ ์ธ๋ฑ์ค๋ count-1์ ๋๋ค.
return RunScenario();
object? RunScenario()
{
var count = UO.GetGumpsCount();
var missing = UO.GetGumpID(count);
UO.Print(Hex(missing));
return null;
}
string Hex(object? value) => Convert.ToInt64(value).ToString("X");๋งค๊ฐ๋ณ์์ ์คํ ํ๋ฆ:
- 0x999๋ ID์ ์์ ๋๋ค. ์ํ๋ ์ฐฝ์ ์ค์ ID๋ก ๋ฐ๊พธ์ธ์. Index, ID ๋ฐ 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()
{
int wantedId = 0x00000999;
int count = UO.GetGumpsCount();
for (int index = 0; index < count; index++)
{
if (index >= UO.GetGumpsCount())
break;
if (UO.GetGumpID(index) == wantedId)
{
UO.Print($"Gump index {index}, serial {UO.GetGumpSerial(index)}");
return index;
}
}
return -1;
return null;
}
}C#์ ๋์๋ฌธ์๋ฅผ ๊ตฌ๋ถํฉ๋๋ค. ์ ํํ UO ์ด๋ฆ์ ์ฌ์ฉํ์ธ์. ์ซ์ ํ๋๊ทธ๋ 0๊ณผ ๋น๊ตํ๊ณ ๋ฐํ ํ์์ด bool์ผ ๋๋ง bool์ ์ฌ์ฉํ์ธ์.
๋งค๊ฐ๋ณ์: gumpIndex (Any)
๊ฒฐ๊ณผ: int / Integer.
ํธ์ถ ์:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetGumpId:bridge.GetGumpId(Arg(0)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0).
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
case "getgumpid": return new InjectionValue(bridge.GetGumpId(Arg(0)));ะฃะบัะฐัะฝััะบะฐ ยท ะ ัััะบะธะน ยท English ยท Deutsch ยท Franรงais ยท Italiano ยท Espaรฑol ยท ็น้ซไธญๆ ยท ๆฅๆฌ่ช ยท ํ๊ตญ์ด
dynamic UO.GetGumpInfo(object? gumpIndex);๋จ์ผ ์๋ฒ Gump์ ์๋ณ์ ๋ฐ ์์์ ๋ํ ์ผ๊ด๋ ์ค๋ ์ท์ ๋ฐํํฉ๋๋ค.
-
gumpIndexโ ํ์ int โ 0๋ถํฐ GetGumpsCount()-1๊น์ง ํ์ฑ ์๋ฒ ๊ฒํ์ ์ธ๋ฑ์ค์ ๋๋ค. GumpID/serial๊ฐ ์๋๋๋ค. ๋ชฉ๋ก ์ธ๋ถ์ ์์์ ์ธ๋ฑ์ค๋ ์ ํจํ์ง ์์ต๋๋ค. ์ฐฝ์ ์ด๊ณ ๋ซ๊ณ ์ฌ์ ๋ ฌํ๋ฉด ์์ธ์ด ๋ณ๊ฒฝ๋ ์ ์์ต๋๋ค. ํ๋ํ๊ธฐ ์ ์ GetGumpID/GetGumpSerial๋ฅผ ํ์ธํ์ธ์.
๋ฐฐ์ด - ์ ํํ 5๊ฐ์ ์์: [0] int serial; [1] int GumpID; [2] ๋น์ด ์์ง ์์ ํ ์คํธ ๋ฐฐ์ด; [3] ์ผ๋ฐ ๋ฒํผ์ ๋ฐฐ์ด ์ค๋ช ; [4] ์ค์ฒฉ๋ ์์๋ฅผ ํฌํจํ์ฌ ๋ชจ๋ ์ด์์๋ ์์์ ๋ํ ๋ฐฐ์ด ์ค๋ช ์ ๋๋ค. ์ด ์คํฌ๋ฆฝํธ์ ์ํด ์ ํจํ์ง ์๊ฑฐ๋ ๋ซํ๊ฑฐ๋ ๋ฌด์๋ ๊ฒํ๋ ๋น ๋ฐฐ์ด []์ ์์ฑํฉ๋๋ค. ์ต์์ ๋นํธ๊ฐ ์๋ ID๋ ์์ int๋ก ํ์๋ฉ๋๋ค. ๋น ํ ์คํธ ๋ฐฐ์ด ์์ฒด๊ฐ ์ฐฝ์ด ์๋ค๋ ์๋ฏธ๋ ์๋๋๋ค.
- ํ์ฑ ์๋ฒ ๊ฒํ์ ํจ๊ป ์๋ํฉ๋๋ค. ๋ฐฐ๋ญ, ์ง๋, ์ค์ ๋ฐ ๊ธฐํ ๋ก์ปฌ ์ฐฝ์ ์ด ๋ชฉ๋ก์ ํฌํจ๋์ง ์์ต๋๋ค. ํ ๋ฒ์ ํธ์ถ์ ๊ฒ์ ์ค๋ ๋์ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ต๋๋ค. ํตํ๋ง๋ค ๋ชฉ๋ก์ ์ํ๊ฐ ๋ค๋ฅผ ์ ์์ต๋๋ค.
- ์ ์ฒด ์ค๋ ์ท์ ํ๋์ ๊ฒ์ ์ค๋ ๋ ์์ฒญ์ผ๋ก ๋ณต์ฌ๋ฉ๋๋ค. ๋ฐํ ํ ์ฐฝ์ ๋ณ๊ฒฝ/๋ซ์๋ ์ ์ฅ๋ ๋ฐฐ์ด์ ๋ณ๊ฒฝ๋์ง ์์ต๋๋ค.
- ์ปจํธ๋กค ์ค๋ช ์ ์ ํ, ํ์ด์ง, ID, X/Y, ํฌ๊ธฐ๋ฅผ ๋ํ๋ ๋๋ค. ๋ฒํผ์๋ ButtonID, ์์ , toPage ๋ฐ graphic๊ฐ ์ถ๊ฐ๋ก ํฌํจ๋ฉ๋๋ค. ์ค์์น - ID, ์ ํ๋จ, ๋นํ์ฑ/ํ์ฑ. ํ ์คํธ์๋ ๊ณต๋ฐฑ๊ณผ =๊ฐ ํฌํจ๋ ์ ์์ต๋๋ค. ๋ฌธ์์ด์ ๋ฌด์กฐ๊ฑด ๊ณต๋ฐฑ์ผ๋ก ๊ตฌ๋ฌธ ๋ถ์ํ ์ ์์ต๋๋ค.
- AddGumpIgnoreByID/AddGumpIgnoreBySerial ํ์ฌ ์คํฌ๋ฆฝํธ์์ ์ด ์ฝ๊ธฐ ๊ฒฐ๊ณผ๋ง ์จ๊น๋๋ค. ClearGumpsIgnore๋ ์ด๋ฌํ ํํฐ๋ฅผ ์ ๊ฑฐํฉ๋๋ค. GetGumpsCount๋ ๊ฐ์ํ์ง ์์ต๋๋ค.
๊ฐ ์์ ๋ ๋ณ๋์ ํ์ผ .csx๋ก ์ ์ฅํ๊ณ IDE์์ ์คํํ ์ ์์ต๋๋ค. UO ๊ฐ์ฒด์ ๋๊ธฐ ๊ธฐ๋ฅ์ ํ์ฌ ๊ฒ์ ์ธ์
์ ํธ์คํธ๋ฅผ ์ ๊ณตํฉ๋๋ค. ๋ฐ๋ชจ serial ์ด๋ฆ, ์ขํ, ์ฃผ์๋ฅผ ์์ ์ ๊ฒ์ผ๋ก ๋ฐ๊พธ์ธ์.
์ด ์ฝ๋๋ฅผ ๋ณ๋์ .csx ํ์ผ๋ก ์คํํ์ธ์. ์ธ์๋ ํธ์ถ์ ์ง์ ํ์๋ฉ๋๋ค. ์์ ์ ์ด๋ฆ, serial, ์ฃผ์๋ฅผ ์์ ์ ๊ฐ์ผ๋ก ๋ฐ๊พธ์ธ์.
ํ ๋ฒ์ ํธ์ถ ๊ฒฐ๊ณผ๋ฅผ ์ ๋์ ํ์ํฉ๋๋ค. ์ซ์๋ฅผ bool๋ก ๋ณํํ์ง ์์ผ๋ฉฐ, ๋ฐฐ์ด์ด๋ฉด ์์ ์๋ฅผ ํ์ํฉ๋๋ค.
object? result = UO.GetGumpInfo(0);
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));๋งค๊ฐ๋ณ์์ ์คํ ํ๋ฆ:
- GumpIndex=0 โ ์ฒซ ๋ฒ์งธ ์๋ฒ ๊ฒํ. ๊ธธ์ด ๊ฒ์ฌ๋ ๋๋ฝ๋ ์ฐฝ ํ๋์ ๋ํ ์ก์ธ์ค๋ฅผ ๋ณดํธํฉ๋๋ค.
- info[0] โ serial, info[1] โ GumpID; ๋ ๋ค ๋์ผํ ๋ น์์ ์ํฉ๋๋ค.
var info = UO.GetGumpInfo(0);
if (Truth(ArrayLength(info) == 5))
{
UO.Print("Serial=" + Hex(info[0]));
UO.Print("GumpID=" + Hex(info[1]));
}
int ArrayLength(object? value) => value is System.Array array ? array.Length : 0;
string Hex(object? value) => Convert.ToInt64(value).ToString("X");
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;๋งค๊ฐ๋ณ์์ ์คํ ํ๋ฆ:
- info[3] โ ๋ฒํผ ์ค๋ช ๋ฐฐ์ด; ํด๋น ์ค์ ButtonID ํ๋๋ ์๋ต์ ๋ํด ID๋ฅผ ์ง์ ํฉ๋๋ค. i๋ ButtonID๊ฐ ์๋ ํ ์ธ๋ฑ์ค์ผ ๋ฟ์ ๋๋ค.
- ๋ผ๋์ค ๋ฒํผ์ ๋ผ๋์ค ๋ฒํผ์ด๋ฉฐ ์ผ๋ฐ ๋ฒํผ ๋ชฉ๋ก์ด ์๋ ์ ๋ณด[4]์ ๋ํ๋ฉ๋๋ค.
return RunScenario();
object? RunScenario()
{
var info = UO.GetGumpInfo(0);
if (Truth(ArrayLength(info) == 5))
{
var buttons = info[3];
var i = 0;
while (Truth(i < ArrayLength(buttons)))
{
UO.Print(buttons[i]);
i = i + 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;๋งค๊ฐ๋ณ์์ ์คํ ํ๋ฆ:
- info[2] - ํ ์คํธ ์ฌ๋ณธ. ๋ซ๋ ๊ฒ์ ๊ธ์ง๋์ง ์์ ์ฐฝ NoClose์๋ง ํ์ฉ๋ฉ๋๋ค.
- ๋ซ์๋ ์ ์ฅ๋ ํ ์คํธ๋ ์ง์์ง์ง ์์ต๋๋ค. ๊ธฐ์กด ์ฐฝ์๋ ๋น ํ ์คํธ ๋ฐฐ์ด๋ ํ์ฉ๋ฉ๋๋ค.
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 info = UO.GetGumpInfo(0);
if (Truth(ArrayLength(info) == 5))
{
var texts = info[2];
UO.CloseSimpleGump(0);
if (Truth(ArrayLength(texts) > 0))
{
UO.Print(texts[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;
}C#์ ๋์๋ฌธ์๋ฅผ ๊ตฌ๋ถํฉ๋๋ค. ์ ํํ UO ์ด๋ฆ์ ์ฌ์ฉํ์ธ์. ์ซ์ ํ๋๊ทธ๋ 0๊ณผ ๋น๊ตํ๊ณ ๋ฐํ ํ์์ด bool์ผ ๋๋ง bool์ ์ฌ์ฉํ์ธ์.
๋งค๊ฐ๋ณ์: gumpIndex (Any)
๊ฒฐ๊ณผ: dynamic / Array.
ํธ์ถ ์:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetGumpId:bridge.GetGumpId(index). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetGumpSerial:bridge.GetGumpSerial(index). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetGumpTextLines:bridge.GetGumpTextLines(index). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetGumpButtonsDescription:bridge.GetGumpButtonsDescription(index). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetGumpFullLines:bridge.GetGumpFullLines(index). -
InjectionScript.Runtime.InjectionApiUO.StringArray:StringArray(snapshot.Text).
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
case "getgumpinfo":
{
int index = Arg(0);
GumpSnapshot snapshot;
if (bridge is IApiGumpAccess reader)
snapshot = reader.ReadGump(index);
else
{
int id = bridge.GetGumpId(index);
snapshot = id == 0 ? null : new GumpSnapshot(bridge.GetGumpSerial(index), id,
bridge.GetGumpTextLines(index), bridge.GetGumpButtonsDescription(index), bridge.GetGumpFullLines(index));
}
if (snapshot == null || state.IgnoredGumpIds.Contains(snapshot.Id)
|| state.IgnoredGumpSerials.Contains(snapshot.Serial))
return new InjectionValue(Array.Empty<InjectionValue>());
return new InjectionValue(new[]
{
new InjectionValue(snapshot.Serial), new InjectionValue(snapshot.Id), StringArray(snapshot.Text),
StringArray(snapshot.Buttons), StringArray(snapshot.Controls)
});
}ะฃะบัะฐัะฝััะบะฐ ยท ะ ัััะบะธะน ยท English ยท Deutsch ยท Franรงais ยท Italiano ยท Espaรฑol ยท ็น้ซไธญๆ ยท ๆฅๆฌ่ช ยท ํ๊ตญ์ด
int UO.GetGumpSerial(object? gumpIndex);์๋ฒ ๊ฒํ ์ธ๋ฑ์ค๋ก serial ์ธ์คํด์ค/์ฐฝ ์์ ์๋ฅผ ์ฝ์ต๋๋ค.
-
gumpIndexโ ํ์ int โ 0๋ถํฐ GetGumpsCount()-1๊น์ง ํ์ฑ ์๋ฒ ๊ฒํ์ ์ธ๋ฑ์ค์ ๋๋ค. GumpID/serial๊ฐ ์๋๋๋ค. ๋ชฉ๋ก ์ธ๋ถ์ ์์์ ์ธ๋ฑ์ค๋ ์ ํจํ์ง ์์ต๋๋ค. ์ฐฝ์ ์ด๊ณ ๋ซ๊ณ ์ฌ์ ๋ ฌํ๋ฉด ์์ธ์ด ๋ณ๊ฒฝ๋ ์ ์์ต๋๋ค. ํ๋ํ๊ธฐ ์ ์ GetGumpID/GetGumpSerial๋ฅผ ํ์ธํ์ธ์.
int๋ ์ฐฝ ์ธ์คํด์ค/์์ ์์ 32๋นํธ serial์ ๋๋ค. 0๋ ์๋ชป๋ ์์ธ์ ๋๋ค(serial=0๊ฐ ์ฐฝ ์์ฒด์ ์์ ์๋ ์์). ์ต์์ ๋นํธ๊ฐ ์ค์ ๋๋ฉด int๋ ์์์ ๋๋ค. Hex(๊ฐ)์ ์ฌ์ฉํ์ฌ ํ์ํฉ๋๋ค. ์ด๊ฒ์ ์ฃผ์ ์ type๋ ์๋๊ณ ์์ธ๋ ์๋๋๋ค.
- ํ์ฑ ์๋ฒ ๊ฒํ์ ํจ๊ป ์๋ํฉ๋๋ค. ๋ฐฐ๋ญ, ์ง๋, ์ค์ ๋ฐ ๊ธฐํ ๋ก์ปฌ ์ฐฝ์ ์ด ๋ชฉ๋ก์ ํฌํจ๋์ง ์์ต๋๋ค. ํ ๋ฒ์ ํธ์ถ์ ๊ฒ์ ์ค๋ ๋์ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ต๋๋ค. ํตํ๋ง๋ค ๋ชฉ๋ก์ ์ํ๊ฐ ๋ค๋ฅผ ์ ์์ต๋๋ค.
- ์ผ์นํ๋ serial/GumpID ์์ ๊ฒฝ์ฐ ํ๋์ GetGumpInfo(info[0] ๋ฐ info[1] ํ๋)๋ฅผ ์ฌ์ฉํ์ธ์.
๊ฐ ์์ ๋ ๋ณ๋์ ํ์ผ .csx๋ก ์ ์ฅํ๊ณ IDE์์ ์คํํ ์ ์์ต๋๋ค. UO ๊ฐ์ฒด์ ๋๊ธฐ ๊ธฐ๋ฅ์ ํ์ฌ ๊ฒ์ ์ธ์
์ ํธ์คํธ๋ฅผ ์ ๊ณตํฉ๋๋ค. ๋ฐ๋ชจ serial ์ด๋ฆ, ์ขํ, ์ฃผ์๋ฅผ ์์ ์ ๊ฒ์ผ๋ก ๋ฐ๊พธ์ธ์.
์ด ์ฝ๋๋ฅผ ๋ณ๋์ .csx ํ์ผ๋ก ์คํํ์ธ์. ์ธ์๋ ํธ์ถ์ ์ง์ ํ์๋ฉ๋๋ค. ์์ ์ ์ด๋ฆ, serial, ์ฃผ์๋ฅผ ์์ ์ ๊ฐ์ผ๋ก ๋ฐ๊พธ์ธ์.
ํ ๋ฒ์ ํธ์ถ ๊ฒฐ๊ณผ๋ฅผ ์ ๋์ ํ์ํฉ๋๋ค. ์ซ์๋ฅผ bool๋ก ๋ณํํ์ง ์์ผ๋ฉฐ, ๋ฐฐ์ด์ด๋ฉด ์์ ์๋ฅผ ํ์ํฉ๋๋ค.
var result = UO.GetGumpSerial(0);
UO.Print("GetGumpSerial: " + Convert.ToString(result));๋งค๊ฐ๋ณ์์ ์คํ ํ๋ฆ:
- 0์ ์๋ฒ ๋ชฉ๋ก์ ์ฒซ ๋ฒ์งธ ์์ธ์ ๋๋ค. 16์ง์๋ ์์ int์ ๋นํธ ํํ์ ์ ์ฅํฉ๋๋ค.
var value = UO.GetGumpSerial(0);
UO.Print(Hex(value));
string Hex(object? value) => Convert.ToInt64(value).ToString("X");๋งค๊ฐ๋ณ์์ ์คํ ํ๋ฆ:
- ๋ณ๊ฒฝํ ์ ์๋ ๋ชฉ๋ก์ ๊ฒฝ์ฐ ๊ฐ์๋ ๋ง์ง๋ง ์ธ๋ฑ์ค ์ดํ์ด๋ฏ๋ก ๋๋ฝ=0์ ๋๋ค. ๋ง์ง๋ง ์ ํจํ ์ธ๋ฑ์ค๋ count-1์ ๋๋ค.
return RunScenario();
object? RunScenario()
{
var count = UO.GetGumpsCount();
var missing = UO.GetGumpSerial(count);
UO.Print(Hex(missing));
return null;
}
string Hex(object? value) => Convert.ToInt64(value).ToString("X");๋งค๊ฐ๋ณ์์ ์คํ ํ๋ฆ:
- 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()
{
int count = UO.GetGumpsCount();
for (int index = 0; index < count; index++)
{
if (index >= UO.GetGumpsCount())
break;
int serial = UO.GetGumpSerial(index);
UO.Print($"Window {index}: serial={UO.Int2Hex(serial)}, ID={UO.GetGumpID(index)}");
}
return null;
}
}C#์ ๋์๋ฌธ์๋ฅผ ๊ตฌ๋ถํฉ๋๋ค. ์ ํํ UO ์ด๋ฆ์ ์ฌ์ฉํ์ธ์. ์ซ์ ํ๋๊ทธ๋ 0๊ณผ ๋น๊ตํ๊ณ ๋ฐํ ํ์์ด bool์ผ ๋๋ง bool์ ์ฌ์ฉํ์ธ์.
๋งค๊ฐ๋ณ์: gumpIndex (Any)
๊ฒฐ๊ณผ: int / Integer.
ํธ์ถ ์:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetGumpSerial:bridge.GetGumpSerial(Arg(0)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0).
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
case "getgumpserial": return new InjectionValue(bridge.GetGumpSerial(Arg(0)));ะฃะบัะฐัะฝััะบะฐ ยท ะ ัััะบะธะน ยท English ยท Deutsch ยท Franรงais ยท Italiano ยท Espaรฑol ยท ็น้ซไธญๆ ยท ๆฅๆฌ่ช ยท ํ๊ตญ์ด
dynamic UO.GetGumpShortLines(object? gumpIndex);์๋ฒ Gump์ ํ ์คํธ ์์ ๋ฐ ๋ฒํผ์ ๋ํ ์ค๋ช ์ ๋ฐํํฉ๋๋ค.
-
gumpIndexโ ํ์ int โ 0๋ถํฐ GetGumpsCount()-1๊น์ง ํ์ฑ ์๋ฒ ๊ฒํ์ ์ธ๋ฑ์ค์ ๋๋ค. GumpID/serial๊ฐ ์๋๋๋ค. ๋ชฉ๋ก ์ธ๋ถ์ ์์์ ์ธ๋ฑ์ค๋ ์ ํจํ์ง ์์ต๋๋ค. ์ฐฝ์ ์ด๊ณ ๋ซ๊ณ ์ฌ์ ๋ ฌํ๋ฉด ์์ธ์ด ๋ณ๊ฒฝ๋ ์ ์์ต๋๋ค. ํ๋ํ๊ธฐ ์ ์ GetGumpID/GetGumpSerial๋ฅผ ํ์ธํ์ธ์.
Array - ํ ์คํธ ์์ ๋ฐ ๋ฒํผ์ ๋ํ ์ค๋ช ์ ๋๋ค. [] - ์ธ๋ฑ์ค๊ฐ ์๋ชป๋์๊ฑฐ๋ ์ผ์นํ๋ ์์๊ฐ ์์ต๋๋ค. ํ ์ธ๋ฑ์ค๋ 0๋ก ์์ํฉ๋๋ค. ID ์ปจํธ๋กค์ด ์๋๋๋ค.
- ํ์ฑ ์๋ฒ ๊ฒํ์ ํจ๊ป ์๋ํฉ๋๋ค. ๋ฐฐ๋ญ, ์ง๋, ์ค์ ๋ฐ ๊ธฐํ ๋ก์ปฌ ์ฐฝ์ ์ด ๋ชฉ๋ก์ ํฌํจ๋์ง ์์ต๋๋ค. ํ ๋ฒ์ ํธ์ถ์ ๊ฒ์ ์ค๋ ๋์ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ต๋๋ค. ํตํ๋ง๋ค ๋ชฉ๋ก์ ์ํ๊ฐ ๋ค๋ฅผ ์ ์์ต๋๋ค.
- ์งง์ ๋ชฉ๋ก์๋ ํ ์คํธ๊ฐ ์๊ณ ๋ฒํผ ์ ํ์ด ์๋ ์ฅ์์ด ์ ์ธ๋ฉ๋๋ค. ๋ผ๋์ค ๋ฒํผ์ด ํฌํจ๋์ด ์์ต๋๋ค.
- SilentMode=0์ด๋ฉด ๋น์ด ์์ง ์์ ๊ฒฐ๊ณผ๋ ํ ์คํธ ์ฐฝ์ ์ถ๊ฐ๋์ด ์ด๋ฆฝ๋๋ค. SetSilentMode(1)๋ ๋ฐฐ์ด๋ง ๋ฐํํฉ๋๋ค.
๊ฐ ์์ ๋ ๋ณ๋์ ํ์ผ .csx๋ก ์ ์ฅํ๊ณ IDE์์ ์คํํ ์ ์์ต๋๋ค. UO ๊ฐ์ฒด์ ๋๊ธฐ ๊ธฐ๋ฅ์ ํ์ฌ ๊ฒ์ ์ธ์
์ ํธ์คํธ๋ฅผ ์ ๊ณตํฉ๋๋ค. ๋ฐ๋ชจ serial ์ด๋ฆ, ์ขํ, ์ฃผ์๋ฅผ ์์ ์ ๊ฒ์ผ๋ก ๋ฐ๊พธ์ธ์.
์ด ์ฝ๋๋ฅผ ๋ณ๋์ .csx ํ์ผ๋ก ์คํํ์ธ์. ์ธ์๋ ํธ์ถ์ ์ง์ ํ์๋ฉ๋๋ค. ์์ ์ ์ด๋ฆ, serial, ์ฃผ์๋ฅผ ์์ ์ ๊ฐ์ผ๋ก ๋ฐ๊พธ์ธ์.
ํ ๋ฒ์ ํธ์ถ ๊ฒฐ๊ณผ๋ฅผ ์ ๋์ ํ์ํฉ๋๋ค. ์ซ์๋ฅผ bool๋ก ๋ณํํ์ง ์์ผ๋ฉฐ, ๋ฐฐ์ด์ด๋ฉด ์์ ์๋ฅผ ํ์ํฉ๋๋ค.
object? result = UO.GetGumpShortLines(0);
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));๋งค๊ฐ๋ณ์์ ์คํ ํ๋ฆ:
- 0 โ ์ฐฝ ์์ธ. ArrayLength๋ ๋ผ์ธ[0]์ ํธ์ถํ๊ธฐ ์ ์ ๋ผ์ธ์ด ์๋์ง ํ์ธํฉ๋๋ค.
var lines = UO.GetGumpShortLines(0);
if (Truth(ArrayLength(lines) > 0))
{
UO.Print(lines[0]);
}
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;๋งค๊ฐ๋ณ์์ ์คํ ํ๋ฆ:
- SetSilentMode(1)๋ ์ถ๊ฐ ํ ์คํธ ์ฐฝ์ ๋นํ์ฑํํฉ๋๋ค. ์์ ์์ ๋ช ์์ ์ธ Print๋ ์ฌ์ ํ ํด๋น ํ์ ์ถ๋ ฅํฉ๋๋ค.
- i๋ ๋ฐฐ์ด ์ธ๋ฑ์ค์ ๋๋ค. ํด๋น ์ค๋ช ์์ ์ํ๋ ๋ฒํผ/์ค์์น์ ID๋ฅผ ์ ํํ์ธ์.
return RunScenario();
object? RunScenario()
{
UO.SetSilentMode(1);
var lines = UO.GetGumpShortLines(0);
var i = 0;
while (Truth(i < ArrayLength(lines)))
{
UO.Print(lines[i]);
i = i + 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;๋งค๊ฐ๋ณ์์ ์คํ ํ๋ฆ:
- ๊ฐ์๋ ๋ง์ง๋ง ์ฐฝ์ ์ธ๋ฑ์ค๋ก ๋ณํ๋ฉ๋๋ค. ๋ก๋๋ ์๋ฒ Gump์์ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ต๋๋ค. ๋ก์ปฌ ์ฐฝ์ ์ฌ๊ธฐ์ ํฌํจ๋์ง ์์ต๋๋ค.
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()
{
int count = UO.GetGumpsCount();
if (count == 0)
return null;
int index = count - 1;
var lines = UO.GetGumpShortLines(index);
foreach (object? line in (object? [])lines)
UO.Print(Convert.ToString(line) ?? "");
return null;
}
}C#์ ๋์๋ฌธ์๋ฅผ ๊ตฌ๋ถํฉ๋๋ค. ์ ํํ UO ์ด๋ฆ์ ์ฌ์ฉํ์ธ์. ์ซ์ ํ๋๊ทธ๋ 0๊ณผ ๋น๊ตํ๊ณ ๋ฐํ ํ์์ด bool์ผ ๋๋ง bool์ ์ฌ์ฉํ์ธ์.
๋งค๊ฐ๋ณ์: gumpIndex (Any)
๊ฒฐ๊ณผ: dynamic / Array.
ํธ์ถ ์:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
InjectionScript.Runtime.InjectionApiUO.GumpLinesResult:GumpLinesResult(bridge.GetGumpShortLines(Arg(0))). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetGumpShortLines:bridge.GetGumpShortLines(Arg(0)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0).
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
case "getgumpshortlines": return GumpLinesResult(bridge.GetGumpShortLines(Arg(0)));ะฃะบัะฐัะฝััะบะฐ ยท ะ ัััะบะธะน ยท English ยท Deutsch ยท Franรงais ยท Italiano ยท Espaรฑol ยท ็น้ซไธญๆ ยท ๆฅๆฌ่ช ยท ํ๊ตญ์ด
dynamic UO.GetGumpTextLines(object? gumpIndex);๋ ์ด๋ธ, HTML, ์ ๋ ฅ ํ๋ ๋ฐ ์๋ฒ ๊ฒํ ์ค์์น ๋ ์ด๋ธ์ ๋น์ด ์์ง ์์ ํ ์คํธ๋ฅผ ๋ฐํํฉ๋๋ค.
-
gumpIndexโ ํ์ int โ 0๋ถํฐ GetGumpsCount()-1๊น์ง ํ์ฑ ์๋ฒ ๊ฒํ์ ์ธ๋ฑ์ค์ ๋๋ค. GumpID/serial๊ฐ ์๋๋๋ค. ๋ชฉ๋ก ์ธ๋ถ์ ์์์ ์ธ๋ฑ์ค๋ ์ ํจํ์ง ์์ต๋๋ค. ์ฐฝ์ ์ด๊ณ ๋ซ๊ณ ์ฌ์ ๋ ฌํ๋ฉด ์์ธ์ด ๋ณ๊ฒฝ๋ ์ ์์ต๋๋ค. ํ๋ํ๊ธฐ ์ ์ GetGumpID/GetGumpSerial๋ฅผ ํ์ธํ์ธ์.
Array โ ๋ผ๋ฒจ, HTML, ์ ๋ ฅ ํ๋ ๋ฐ ์ค์์น ๋ผ๋ฒจ์ ๋น์ด ์์ง ์์ ํ ์คํธ์ ๋๋ค. [] - ์ธ๋ฑ์ค๊ฐ ์๋ชป๋์๊ฑฐ๋ ์ผ์นํ๋ ์์๊ฐ ์์ต๋๋ค. ํ ์ธ๋ฑ์ค๋ 0๋ก ์์ํฉ๋๋ค. ID ์ ์ด๊ฐ ์๋๋๋ค.
- ํ์ฑ ์๋ฒ ๊ฒํ์ ํจ๊ป ์๋ํฉ๋๋ค. ๋ฐฐ๋ญ, ์ง๋, ์ค์ ๋ฐ ๊ธฐํ ๋ก์ปฌ ์ฐฝ์ ์ด ๋ชฉ๋ก์ ํฌํจ๋์ง ์์ต๋๋ค. ํ ๋ฒ์ ํธ์ถ์ ๊ฒ์ ์ค๋ ๋์ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ต๋๋ค. ํตํ๋ง๋ค ๋ชฉ๋ก์ ์ํ๊ฐ ๋ค๋ฅผ ์ ์์ต๋๋ค.
- ํ ์คํธ๋ง; ButtonID, ํฌ๊ธฐ ๋ฐ ๊ตฌ์กฐ๋ ํฌํจ๋์ง ์์ต๋๋ค. ์ถ๊ฐ๋ก ์๋ฌด๊ฒ๋ ์ธ์ํ์ง ์์ต๋๋ค.
- GetGumpTextLines๋ ํ ์คํธ ์ฐฝ์ ์ด์ง ์์ต๋๋ค.
๊ฐ ์์ ๋ ๋ณ๋์ ํ์ผ .csx๋ก ์ ์ฅํ๊ณ IDE์์ ์คํํ ์ ์์ต๋๋ค. UO ๊ฐ์ฒด์ ๋๊ธฐ ๊ธฐ๋ฅ์ ํ์ฌ ๊ฒ์ ์ธ์
์ ํธ์คํธ๋ฅผ ์ ๊ณตํฉ๋๋ค. ๋ฐ๋ชจ serial ์ด๋ฆ, ์ขํ, ์ฃผ์๋ฅผ ์์ ์ ๊ฒ์ผ๋ก ๋ฐ๊พธ์ธ์.
์ด ์ฝ๋๋ฅผ ๋ณ๋์ .csx ํ์ผ๋ก ์คํํ์ธ์. ์ธ์๋ ํธ์ถ์ ์ง์ ํ์๋ฉ๋๋ค. ์์ ์ ์ด๋ฆ, serial, ์ฃผ์๋ฅผ ์์ ์ ๊ฐ์ผ๋ก ๋ฐ๊พธ์ธ์.
ํ ๋ฒ์ ํธ์ถ ๊ฒฐ๊ณผ๋ฅผ ์ ๋์ ํ์ํฉ๋๋ค. ์ซ์๋ฅผ bool๋ก ๋ณํํ์ง ์์ผ๋ฉฐ, ๋ฐฐ์ด์ด๋ฉด ์์ ์๋ฅผ ํ์ํฉ๋๋ค.
object? result = UO.GetGumpTextLines(0);
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));๋งค๊ฐ๋ณ์์ ์คํ ํ๋ฆ:
- 0 โ ์ฐฝ ์์ธ. ArrayLength๋ ๋ผ์ธ[0]์ ํธ์ถํ๊ธฐ ์ ์ ๋ผ์ธ์ด ์๋์ง ํ์ธํฉ๋๋ค.
var lines = UO.GetGumpTextLines(0);
if (Truth(ArrayLength(lines) > 0))
{
UO.Print(lines[0]);
}
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;๋งค๊ฐ๋ณ์์ ์คํ ํ๋ฆ:
- SetSilentMode(1)๋ ์ถ๊ฐ ํ ์คํธ ์ฐฝ์ ๋นํ์ฑํํฉ๋๋ค. ์์ ์์ ๋ช ์์ ์ธ Print๋ ์ฌ์ ํ ํด๋น ํ์ ์ถ๋ ฅํฉ๋๋ค.
- i๋ ๋ฐฐ์ด ์ธ๋ฑ์ค์ ๋๋ค. ํด๋น ์ค๋ช ์์ ์ํ๋ ๋ฒํผ/์ค์์น์ ID๋ฅผ ์ ํํ์ธ์.
return RunScenario();
object? RunScenario()
{
UO.SetSilentMode(1);
var lines = UO.GetGumpTextLines(0);
var i = 0;
while (Truth(i < ArrayLength(lines)))
{
UO.Print(lines[i]);
i = i + 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;๋งค๊ฐ๋ณ์์ ์คํ ํ๋ฆ:
- ๊ฐ์๋ ๋ง์ง๋ง ์ฐฝ์ ์ธ๋ฑ์ค๋ก ๋ณํ๋ฉ๋๋ค. ๋ก๋๋ ์๋ฒ Gump์์ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ต๋๋ค. ๋ก์ปฌ ์ฐฝ์ ์ฌ๊ธฐ์ ํฌํจ๋์ง ์์ต๋๋ค.
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()
{
int count = UO.GetGumpsCount();
if (count == 0)
return null;
int index = count - 1;
var lines = UO.GetGumpTextLines(index);
foreach (object? line in (object? [])lines)
UO.Print(Convert.ToString(line) ?? "");
return null;
}
}C#์ ๋์๋ฌธ์๋ฅผ ๊ตฌ๋ถํฉ๋๋ค. ์ ํํ UO ์ด๋ฆ์ ์ฌ์ฉํ์ธ์. ์ซ์ ํ๋๊ทธ๋ 0๊ณผ ๋น๊ตํ๊ณ ๋ฐํ ํ์์ด bool์ผ ๋๋ง bool์ ์ฌ์ฉํ์ธ์.
๋งค๊ฐ๋ณ์: gumpIndex (Any)
๊ฒฐ๊ณผ: dynamic / Array.
ํธ์ถ ์:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
InjectionScript.Runtime.InjectionApiUO.StringArray:StringArray(bridge.GetGumpTextLines(Arg(0))). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetGumpTextLines:bridge.GetGumpTextLines(Arg(0)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0).
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
case "getgumptextlines": return StringArray(bridge.GetGumpTextLines(Arg(0)));ะฃะบัะฐัะฝััะบะฐ ยท ะ ัััะบะธะน ยท English ยท Deutsch ยท Franรงais ยท Italiano ยท Espaรฑol ยท ็น้ซไธญๆ ยท ๆฅๆฌ่ช ยท ํ๊ตญ์ด
int UO.GetGumpsCount();ํ์ฑ ์๋ฒ ๊ฒํ ์๋ฅผ ๋ฐํํฉ๋๋ค.
๋งค๊ฐ๋ณ์๊ฐ ์์ต๋๋ค.
int >= 0 โ ๋ง์ง๋ง ์ฐฝ์ ์ธ๋ฑ์ค๊ฐ ์๋ ์ฐฝ ์์ ๋๋ค. 0 โ ๋ชฉ๋ก์ด ๋น์ด ์์ต๋๋ค.
- ํ์ฑ ์๋ฒ ๊ฒํ์ ํจ๊ป ์๋ํฉ๋๋ค. ๋ฐฐ๋ญ, ์ง๋, ์ค์ ๋ฐ ๊ธฐํ ๋ก์ปฌ ์ฐฝ์ ์ด ๋ชฉ๋ก์ ํฌํจ๋์ง ์์ต๋๋ค. ํ ๋ฒ์ ํธ์ถ์ ๊ฒ์ ์ค๋ ๋์ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ต๋๋ค. ํตํ๋ง๋ค ๋ชฉ๋ก์ ์ํ๊ฐ ๋ค๋ฅผ ์ ์์ต๋๋ค.
๊ฐ ์์ ๋ ๋ณ๋์ ํ์ผ .csx๋ก ์ ์ฅํ๊ณ IDE์์ ์คํํ ์ ์์ต๋๋ค. UO ๊ฐ์ฒด์ ๋๊ธฐ ๊ธฐ๋ฅ์ ํ์ฌ ๊ฒ์ ์ธ์
์ ํธ์คํธ๋ฅผ ์ ๊ณตํฉ๋๋ค. ๋ฐ๋ชจ serial ์ด๋ฆ, ์ขํ, ์ฃผ์๋ฅผ ์์ ์ ๊ฒ์ผ๋ก ๋ฐ๊พธ์ธ์.
์ด ์ฝ๋๋ฅผ ๋ณ๋์ .csx ํ์ผ๋ก ์คํํ์ธ์. ์ธ์๋ ํธ์ถ์ ์ง์ ํ์๋ฉ๋๋ค. ์์ ์ ์ด๋ฆ, serial, ์ฃผ์๋ฅผ ์์ ์ ๊ฐ์ผ๋ก ๋ฐ๊พธ์ธ์.
ํ ๋ฒ์ ํธ์ถ ๊ฒฐ๊ณผ๋ฅผ ์ ๋์ ํ์ํฉ๋๋ค. ์ซ์๋ฅผ bool๋ก ๋ณํํ์ง ์์ผ๋ฉฐ, ๋ฐฐ์ด์ด๋ฉด ์์ ์๋ฅผ ํ์ํฉ๋๋ค.
var result = UO.GetGumpsCount();
UO.Print("GetGumpsCount: " + Convert.ToString(result));๋งค๊ฐ๋ณ์์ ์คํ ํ๋ฆ:
- ๋ ผ์์ด ์์ต๋๋ค. count=0๋ ํ์ฌ ๋ชฉ๋ก์ ์๋ฒ ์ฐฝ์ด ์์์ ์๋ฏธํฉ๋๋ค.
var count = UO.GetGumpsCount();
if (Truth(count == 0))
{
UO.Print("No server gumps");
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;๋งค๊ฐ๋ณ์์ ์คํ ํ๋ฆ:
- i๋ 0์ ์์ธ์ ๋๋ค. ๊ฒฐ๊ณผ ID๋ ๋ชฉ๋ก์ ์์น๊ฐ ์๋ ์ฐฝ ์ ํ์ ์๋ณํฉ๋๋ค.
- ์ด๋ ์ค์ ์ฐฝ์ด ๋ณ๊ฒฝ๋๋ฉด ๋ชฉ๋ก์ ๋ค์ ์ฝ์ด์ผ ํฉ๋๋ค. count๋ ์ธํฐํ์ด์ค๋ฅผ ์ฐจ๋จํ์ง ์์ต๋๋ค.
return RunScenario();
object? RunScenario()
{
var count = UO.GetGumpsCount();
var i = 0;
while (Truth(i < count))
{
UO.Print(Hex(UO.GetGumpID(i)));
i = i + 1;
}
return null;
}
string Hex(object? value) => Convert.ToInt64(value).ToString("X");
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;๋งค๊ฐ๋ณ์์ ์คํ ํ๋ฆ:
- count-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 count = UO.GetGumpsCount();
if (Truth(count > 0))
{
var info = UO.GetGumpInfo(count - 1);
UO.Print(ArrayLength(info));
}
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์ ์ฌ์ฉํ์ธ์.
๋งค๊ฐ๋ณ์: ๋งค๊ฐ๋ณ์๊ฐ ์์ต๋๋ค.
๊ฒฐ๊ณผ: int / Integer.
ํธ์ถ ์:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetGumpCount:bridge.GetGumpCount().
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
case "getgumpscount": return new InjectionValue(bridge.GetGumpCount());ะฃะบัะฐัะฝััะบะฐ ยท ะ ัััะบะธะน ยท English ยท Deutsch ยท Franรงais ยท Italiano ยท Espaรฑol ยท ็น้ซไธญๆ ยท ๆฅๆฌ่ช ยท ํ๊ตญ์ด
void UO.GumpAutoCheckBox(object? checkBoxID, object? value);์ฒซ ๋ฒ์งธ ์ ํฉํ ์๋ฒ ๊ฒํ์์ ์์์ ๊ฐ์ ํ ๋ฒ ์ค์ ํฉ๋๋ค. ์์๊ฐ ์์ง ์กด์ฌํ์ง ์์ผ๋ฉด ๋๊ธฐ ์๊ฐ์ ์ ์ฅํฉ๋๋ค.
-
checkBoxID- int - ํด๋น ์ ํ ์์์ ์ ํํ ID. ์ด๊ฒ์ ์ธ๋ฑ์ค๋ ์๋๊ณ GumpID๋ ์๋๊ณ serial ์ฐฝ์ด ์๋๋๋ค. 0๋ ์ฒซ ๋ฒ์งธ ์์๋ฅผ ๋์ฒดํ์ง ์๋ ์ผ๋ฐ์ ์ธ ID์ ๋๋ค. -
value- int - 1 ํ์ฑํ, 0 ๋นํ์ฑํ. 0์ด ์๋ ์ซ์ ๊ฐ๋ ํฌํจ๋ฉ๋๋ค. 0/1๋ฅผ ๊ถ์ฅํฉ๋๋ค. ๋ผ๋์ค ๋ฒํผ์ ์ ํํ๋ฉด ํด๋น ๊ทธ๋ฃน์ ์ธ์ ํ ๋ผ๋์ค ๋ฒํผ์ด ์ ํ ์ทจ์๋ฉ๋๋ค.
void - ์๋ฌด๊ฒ๋ ๋ฐํํ์ง ์์ต๋๋ค. ์ฑ๊ณต๋, ์ ๊ฐ๋, ์๋ฒ ํ์ธ๋ ๋ฐํ๋์ง ์์ต๋๋ค.
- ๋จผ์ ํ์ฌ ์ธํฐํ์ด์ค ์์๋ก ๊ธฐ์กด ์ฐฝ์ ํ์ธํ ๋ค์ ์๋กญ๊ฑฐ๋ ์ ๋ฐ์ดํธ๋ ์๋ฒ ๋ ์ด์์์ ํ์ธํฉ๋๋ค. ์ ํ๊ณผ ID์ ์ฒซ ๋ฒ์งธ ์ผ์น์์ ํ ๋ฒ ์คํ๋ฉ๋๋ค. ํน์ ์ฐฝ์ ๊ฒฝ์ฐ ์์ธ๊ณผ ํจ๊ป NumGump*๋ฅผ ์ฌ์ฉํ์ธ์.
- ๋ณด๋ฅ ์ค์ธ ๋ชจ๋ ํ๋๋ ์๋ ๋ฒํผ ์๋ต ์ ์ ์ ์ฉ๋ฉ๋๋ค. ํ๋์ ์คํฌ๋ฆฝํธ์์ ๋์ผํ ์ ํ๊ณผ ID๋ฅผ ๋ฐ๋ณตํ๋ฉด ์์ง ์คํ๋์ง ์์ ๊ฐ์ ๋์ฒดํฉ๋๋ค. ์ ํ โ 1024 ๋ณด๋ฅ ์ค์ธ ํด๋ผ์ด์ธํธ ํ๋; ์ด๊ณผํ๋ฉด ์คํฌ๋ฆฝํธ ์ค๋ฅ๊ฐ ๋ฐ์ํฉ๋๋ค.
- ์ ์ฐจ๊ฐ ์ ์์ ์ผ๋ก ์๋ฃ๋๋ฉด ๋๊ธฐ ์๊ฐ์ด ์ ์ฝ๋ฉ๋๋ค. ์์ ์๋ฅผ ์ทจ์ํ๊ฑฐ๋ ๊ทธ์ ์ด๋ฆ์ผ๋ก Terminate์ ์ ๋ ฅํ๋ฉด ๋๊ธฐ ์๊ฐ์ด ์ ๊ฑฐ๋ฉ๋๋ค. TerminateAll๋ ์ ์ฐจ ์๋ฃ ํ ๋จ์ ๋ด์ฉ์ ํฌํจํ์ฌ ๋ชจ๋ ๋ด์ฉ์ ์ญ์ ํฉ๋๋ค. ์ธ์์ ๋ฐ๊พธ๋ฉด ๋๊ธฐ์ด์ด ์ง์์ง๋๋ค. ๊ธฐ๋์น๋ ํ๋กํ์ ์ ์ฅ๋์ง ์์ต๋๋ค.
๊ฐ ์์ ๋ ๋ณ๋์ ํ์ผ .csx๋ก ์ ์ฅํ๊ณ IDE์์ ์คํํ ์ ์์ต๋๋ค. UO ๊ฐ์ฒด์ ๋๊ธฐ ๊ธฐ๋ฅ์ ํ์ฌ ๊ฒ์ ์ธ์
์ ํธ์คํธ๋ฅผ ์ ๊ณตํฉ๋๋ค. ๋ฐ๋ชจ serial ์ด๋ฆ, ์ขํ, ์ฃผ์๋ฅผ ์์ ์ ๊ฒ์ผ๋ก ๋ฐ๊พธ์ธ์.
์ด ์ฝ๋๋ฅผ ๋ณ๋์ .csx ํ์ผ๋ก ์คํํ์ธ์. ์ธ์๋ ํธ์ถ์ ์ง์ ํ์๋ฉ๋๋ค. ์์ ์ ์ด๋ฆ, serial, ์ฃผ์๋ฅผ ์์ ์ ๊ฐ์ผ๋ก ๋ฐ๊พธ์ธ์.
๋ช ๋ น์ ๋ ๋ฆฝ๋ ๋ฌธ์ ๋๋ค. ์์ ๋ฉ์์ง๋ ํธ์ถ ์์์ ๋ํ๋ด๋ฉฐ ์๋ฒ ๋์์ ์๋ฃ๋ฅผ ํ์ธํ์ง ์์ต๋๋ค.
UO.Print("Calling UO.GumpAutoCheckBox");
UO.GumpAutoCheckBox(33, 1);๋งค๊ฐ๋ณ์์ ์คํ ํ๋ฆ:
- ์ฒซ ๋ฒ์งธ ๋งค๊ฐ๋ณ์ 33๋ ์ํ๋ ์์์ ์์ ID์ ๋๋ค. InfoGump์ ์ค์ ID๋ก ๋ฐ๊พธ์ธ์. ๋ ๋ฒ์งธ๋ ์ค์ ํ ๊ฐ์ ๋๋ค. ์์๊ฐ ์์ผ๋ฉด ์์ ์ ๋ณด๋ฅ ์ํ๋ก ์ ์ง๋ฉ๋๋ค.
UO.GumpAutoCheckBox(33, 1);๋งค๊ฐ๋ณ์์ ์คํ ํ๋ฆ:
- 33๋ ์์์ ID์ด๊ณ , 100๋ ํ์ธ ButtonID์ ์์ด๋ฉฐ, 0x40001234๋ ์์์ ์ฌ๋ ๊ฐ์ฒด์ serial์ ๋๋ค. ์ธ ๊ฐ์ง ๊ฐ์ ๋ชจ๋ ์์ ์ ๊ฐ์ผ๋ก ๋ฐ๊พธ์ญ์์ค. ์ฐฝ์ด ๋์ค์ ๋์ฐฉํ ๊ฒฝ์ฐ์๋ ๋ต๋ณ ์ ์ ํ๋๊ฐ ์ฑ์์ง๋๋ค.
return RunScenario();
object? RunScenario()
{
UO.GumpAutoCheckBox(33, 1);
UO.WaitGump(100);
UO.UseObject("0x40001234");
return null;
}๋งค๊ฐ๋ณ์์ ์คํ ํ๋ฆ:
- ๋ ํธ์ถ ๋ชจ๋ ID 33๋ฅผ ์ฌ์ฉํฉ๋๋ค. ์์๊ฐ ์์ง ๋ํ๋์ง ์์ ๊ฒฝ์ฐ ๋ง์ง๋ง ๊ฐ์ด ์ ์ฉ๋ฉ๋๋ค. ์ฐฝ์ด ์ด๋ฏธ ์ด๋ ค ์์ผ๋ฉด ๋ ๋ณ๊ฒฝ ์ฌํญ์ด ๋ชจ๋ ์์๋๋ก ์ฆ์ ์ํ๋ฉ๋๋ค.
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.GumpAutoCheckBox(33, 1);
UO.GumpAutoCheckBox(33, 0);
return null;
}
}C#์ ๋์๋ฌธ์๋ฅผ ๊ตฌ๋ถํฉ๋๋ค. ์ ํํ UO ์ด๋ฆ์ ์ฌ์ฉํ์ธ์. ์ซ์ ํ๋๊ทธ๋ 0๊ณผ ๋น๊ตํ๊ณ ๋ฐํ ํ์์ด bool์ผ ๋๋ง bool์ ์ฌ์ฉํ์ธ์.
๋งค๊ฐ๋ณ์: checkBoxID (Any), value (Any)
๊ฒฐ๊ณผ: void / Unit.
ํธ์ถ ์:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
InjectionScript.Runtime.InjectionApiUO.QueueGumpControl:QueueGumpControl("checkbox", Arg(0), Text(1)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Text:Text(1).
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
case "gumpautocheckbox": QueueGumpControl("checkbox", Arg(0), Text(1)); return InjectionValue.Unit;ะฃะบัะฐัะฝััะบะฐ ยท ะ ัััะบะธะน ยท English ยท Deutsch ยท Franรงais ยท Italiano ยท Espaรฑol ยท ็น้ซไธญๆ ยท ๆฅๆฌ่ช ยท ํ๊ตญ์ด
void UO.GumpAutoRadiobutton(object? radiobuttonID, object? value);์ฒซ ๋ฒ์งธ ์ ํฉํ ์๋ฒ ๊ฒํ์์ ์์์ ๊ฐ์ ํ ๋ฒ ์ค์ ํฉ๋๋ค. ์์๊ฐ ์์ง ์กด์ฌํ์ง ์์ผ๋ฉด ๋๊ธฐ ์๊ฐ์ ์ ์ฅํฉ๋๋ค.
-
radiobuttonID- int - ํด๋น ์ ํ ์์์ ์ ํํ ID. ์ด๊ฒ์ ์ธ๋ฑ์ค๋ ์๋๊ณ GumpID๋ ์๋๊ณ serial ์ฐฝ์ด ์๋๋๋ค. 0๋ ์ฒซ ๋ฒ์งธ ์์๋ฅผ ๋์ฒดํ์ง ์๋ ์ผ๋ฐ์ ์ธ ID์ ๋๋ค. -
value- int - 1 ํ์ฑํ, 0 ๋นํ์ฑํ. 0์ด ์๋ ์ซ์ ๊ฐ๋ ํฌํจ๋ฉ๋๋ค. 0/1๋ฅผ ๊ถ์ฅํฉ๋๋ค. ๋ผ๋์ค ๋ฒํผ์ ์ ํํ๋ฉด ํด๋น ๊ทธ๋ฃน์ ์ธ์ ํ ๋ผ๋์ค ๋ฒํผ์ด ์ ํ ์ทจ์๋ฉ๋๋ค.
void - ์๋ฌด๊ฒ๋ ๋ฐํํ์ง ์์ต๋๋ค. ์ฑ๊ณต๋, ์ ๊ฐ๋, ์๋ฒ ํ์ธ๋ ๋ฐํ๋์ง ์์ต๋๋ค.
- ๋จผ์ ํ์ฌ ์ธํฐํ์ด์ค ์์๋ก ๊ธฐ์กด ์ฐฝ์ ํ์ธํ ๋ค์ ์๋กญ๊ฑฐ๋ ์ ๋ฐ์ดํธ๋ ์๋ฒ ๋ ์ด์์์ ํ์ธํฉ๋๋ค. ์ ํ๊ณผ ID์ ์ฒซ ๋ฒ์งธ ์ผ์น์์ ํ ๋ฒ ์คํ๋ฉ๋๋ค. ํน์ ์ฐฝ์ ๊ฒฝ์ฐ ์์ธ๊ณผ ํจ๊ป NumGump*๋ฅผ ์ฌ์ฉํ์ธ์.
- ๋ณด๋ฅ ์ค์ธ ๋ชจ๋ ํ๋๋ ์๋ ๋ฒํผ ์๋ต ์ ์ ์ ์ฉ๋ฉ๋๋ค. ํ๋์ ์คํฌ๋ฆฝํธ์์ ๋์ผํ ์ ํ๊ณผ ID๋ฅผ ๋ฐ๋ณตํ๋ฉด ์์ง ์คํ๋์ง ์์ ๊ฐ์ ๋์ฒดํฉ๋๋ค. ์ ํ โ 1024 ๋ณด๋ฅ ์ค์ธ ํด๋ผ์ด์ธํธ ํ๋; ์ด๊ณผํ๋ฉด ์คํฌ๋ฆฝํธ ์ค๋ฅ๊ฐ ๋ฐ์ํฉ๋๋ค.
- ์ ์ฐจ๊ฐ ์ ์์ ์ผ๋ก ์๋ฃ๋๋ฉด ๋๊ธฐ ์๊ฐ์ด ์ ์ฝ๋ฉ๋๋ค. ์์ ์๋ฅผ ์ทจ์ํ๊ฑฐ๋ ๊ทธ์ ์ด๋ฆ์ผ๋ก Terminate์ ์ ๋ ฅํ๋ฉด ๋๊ธฐ ์๊ฐ์ด ์ ๊ฑฐ๋ฉ๋๋ค. TerminateAll๋ ์ ์ฐจ ์๋ฃ ํ ๋จ์ ๋ด์ฉ์ ํฌํจํ์ฌ ๋ชจ๋ ๋ด์ฉ์ ์ญ์ ํฉ๋๋ค. ์ธ์์ ๋ฐ๊พธ๋ฉด ๋๊ธฐ์ด์ด ์ง์์ง๋๋ค. ๊ธฐ๋์น๋ ํ๋กํ์ ์ ์ฅ๋์ง ์์ต๋๋ค.
๊ฐ ์์ ๋ ๋ณ๋์ ํ์ผ .csx๋ก ์ ์ฅํ๊ณ IDE์์ ์คํํ ์ ์์ต๋๋ค. UO ๊ฐ์ฒด์ ๋๊ธฐ ๊ธฐ๋ฅ์ ํ์ฌ ๊ฒ์ ์ธ์
์ ํธ์คํธ๋ฅผ ์ ๊ณตํฉ๋๋ค. ๋ฐ๋ชจ serial ์ด๋ฆ, ์ขํ, ์ฃผ์๋ฅผ ์์ ์ ๊ฒ์ผ๋ก ๋ฐ๊พธ์ธ์.
์ด ์ฝ๋๋ฅผ ๋ณ๋์ .csx ํ์ผ๋ก ์คํํ์ธ์. ์ธ์๋ ํธ์ถ์ ์ง์ ํ์๋ฉ๋๋ค. ์์ ์ ์ด๋ฆ, serial, ์ฃผ์๋ฅผ ์์ ์ ๊ฐ์ผ๋ก ๋ฐ๊พธ์ธ์.
๋ช ๋ น์ ๋ ๋ฆฝ๋ ๋ฌธ์ ๋๋ค. ์์ ๋ฉ์์ง๋ ํธ์ถ ์์์ ๋ํ๋ด๋ฉฐ ์๋ฒ ๋์์ ์๋ฃ๋ฅผ ํ์ธํ์ง ์์ต๋๋ค.
UO.Print("Calling UO.GumpAutoRadiobutton");
UO.GumpAutoRadiobutton(33, 1);๋งค๊ฐ๋ณ์์ ์คํ ํ๋ฆ:
- ์ฒซ ๋ฒ์งธ ๋งค๊ฐ๋ณ์ 33๋ ์ํ๋ ์์์ ์์ ID์ ๋๋ค. InfoGump์ ์ค์ ID๋ก ๋ฐ๊พธ์ธ์. ๋ ๋ฒ์งธ๋ ์ค์ ํ ๊ฐ์ ๋๋ค. ์์๊ฐ ์์ผ๋ฉด ์์ ์ ๋ณด๋ฅ ์ํ๋ก ์ ์ง๋ฉ๋๋ค.
UO.GumpAutoRadiobutton(33, 1);๋งค๊ฐ๋ณ์์ ์คํ ํ๋ฆ:
- 33๋ ์์์ ID์ด๊ณ , 100๋ ํ์ธ ButtonID์ ์์ด๋ฉฐ, 0x40001234๋ ์์์ ์ฌ๋ ๊ฐ์ฒด์ serial์ ๋๋ค. ์ธ ๊ฐ์ง ๊ฐ์ ๋ชจ๋ ์์ ์ ๊ฐ์ผ๋ก ๋ฐ๊พธ์ญ์์ค. ์ฐฝ์ด ๋์ค์ ๋์ฐฉํ ๊ฒฝ์ฐ์๋ ๋ต๋ณ ์ ์ ํ๋๊ฐ ์ฑ์์ง๋๋ค.
return RunScenario();
object? RunScenario()
{
UO.GumpAutoRadiobutton(33, 1);
UO.WaitGump(100);
UO.UseObject("0x40001234");
return null;
}๋งค๊ฐ๋ณ์์ ์คํ ํ๋ฆ:
- ๋ ํธ์ถ ๋ชจ๋ ID 33๋ฅผ ์ฌ์ฉํฉ๋๋ค. ์์๊ฐ ์์ง ๋ํ๋์ง ์์ ๊ฒฝ์ฐ ๋ง์ง๋ง ๊ฐ์ด ์ ์ฉ๋ฉ๋๋ค. ์ฐฝ์ด ์ด๋ฏธ ์ด๋ ค ์์ผ๋ฉด ๋ ๋ณ๊ฒฝ ์ฌํญ์ด ๋ชจ๋ ์์๋๋ก ์ฆ์ ์ํ๋ฉ๋๋ค.
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.GumpAutoRadiobutton(33, 1);
UO.GumpAutoRadiobutton(33, 0);
return null;
}
}C#์ ๋์๋ฌธ์๋ฅผ ๊ตฌ๋ถํฉ๋๋ค. ์ ํํ UO ์ด๋ฆ์ ์ฌ์ฉํ์ธ์. ์ซ์ ํ๋๊ทธ๋ 0๊ณผ ๋น๊ตํ๊ณ ๋ฐํ ํ์์ด bool์ผ ๋๋ง bool์ ์ฌ์ฉํ์ธ์.
๋งค๊ฐ๋ณ์: radiobuttonID (Any), value (Any)
๊ฒฐ๊ณผ: void / Unit.
ํธ์ถ ์:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
InjectionScript.Runtime.InjectionApiUO.QueueGumpControl:QueueGumpControl("radio", Arg(0), Text(1)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Text:Text(1).
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
case "gumpautoradiobutton": QueueGumpControl("radio", Arg(0), Text(1)); return InjectionValue.Unit;ะฃะบัะฐัะฝััะบะฐ ยท ะ ัััะบะธะน ยท English ยท Deutsch ยท Franรงais ยท Italiano ยท Espaรฑol ยท ็น้ซไธญๆ ยท ๆฅๆฌ่ช ยท ํ๊ตญ์ด
void UO.GumpAutoTextEntry(object? textEntryID, object? value);์ฒซ ๋ฒ์งธ ์ ํฉํ ์๋ฒ ๊ฒํ์์ ์์์ ๊ฐ์ ํ ๋ฒ ์ค์ ํฉ๋๋ค. ์์๊ฐ ์์ง ์กด์ฌํ์ง ์์ผ๋ฉด ๋๊ธฐ ์๊ฐ์ ์ ์ฅํฉ๋๋ค.
-
textEntryID- int - ํด๋น ์ ํ ์์์ ์ ํํ ID. ์ด๊ฒ์ ์ธ๋ฑ์ค๋ ์๋๊ณ GumpID๋ ์๋๊ณ serial ์ฐฝ์ด ์๋๋๋ค. 0๋ ์ฒซ ๋ฒ์งธ ์์๋ฅผ ๋์ฒดํ์ง ์๋ ์ผ๋ฐ์ ์ธ ID์ ๋๋ค. -
value- string - ์ง์ฐ๊ธฐ ์ํ ๋น ์ค์ ํฌํจํ ํ๋ ํ ์คํธ์ ๋๋ค. ํ๋ ์์ฒด์ ๊ธธ์ด ๋ฐ ํ์ฉ๋๋ ๋ฌธ์์ ๋ํ ์ ํ์ ์ ์ง๋ฉ๋๋ค.
void - ์๋ฌด๊ฒ๋ ๋ฐํํ์ง ์์ต๋๋ค. ์ฑ๊ณต๋, ์ ๊ฐ๋, ์๋ฒ ํ์ธ๋ ๋ฐํ๋์ง ์์ต๋๋ค.
- ๋จผ์ ํ์ฌ ์ธํฐํ์ด์ค ์์๋ก ๊ธฐ์กด ์ฐฝ์ ํ์ธํ ๋ค์ ์๋กญ๊ฑฐ๋ ์ ๋ฐ์ดํธ๋ ์๋ฒ ๋ ์ด์์์ ํ์ธํฉ๋๋ค. ์ ํ๊ณผ ID์ ์ฒซ ๋ฒ์งธ ์ผ์น์์ ํ ๋ฒ ์คํ๋ฉ๋๋ค. ํน์ ์ฐฝ์ ๊ฒฝ์ฐ ์์ธ๊ณผ ํจ๊ป NumGump*๋ฅผ ์ฌ์ฉํ์ธ์.
- ๋ณด๋ฅ ์ค์ธ ๋ชจ๋ ํ๋๋ ์๋ ๋ฒํผ ์๋ต ์ ์ ์ ์ฉ๋ฉ๋๋ค. ํ๋์ ์คํฌ๋ฆฝํธ์์ ๋์ผํ ์ ํ๊ณผ ID๋ฅผ ๋ฐ๋ณตํ๋ฉด ์์ง ์คํ๋์ง ์์ ๊ฐ์ ๋์ฒดํฉ๋๋ค. ์ ํ โ 1024 ๋ณด๋ฅ ์ค์ธ ํด๋ผ์ด์ธํธ ํ๋; ์ด๊ณผํ๋ฉด ์คํฌ๋ฆฝํธ ์ค๋ฅ๊ฐ ๋ฐ์ํฉ๋๋ค.
- ์ ์ฐจ๊ฐ ์ ์์ ์ผ๋ก ์๋ฃ๋๋ฉด ๋๊ธฐ ์๊ฐ์ด ์ ์ฝ๋ฉ๋๋ค. ์์ ์๋ฅผ ์ทจ์ํ๊ฑฐ๋ ๊ทธ์ ์ด๋ฆ์ผ๋ก Terminate์ ์ ๋ ฅํ๋ฉด ๋๊ธฐ ์๊ฐ์ด ์ ๊ฑฐ๋ฉ๋๋ค. TerminateAll๋ ์ ์ฐจ ์๋ฃ ํ ๋จ์ ๋ด์ฉ์ ํฌํจํ์ฌ ๋ชจ๋ ๋ด์ฉ์ ์ญ์ ํฉ๋๋ค. ์ธ์์ ๋ฐ๊พธ๋ฉด ๋๊ธฐ์ด์ด ์ง์์ง๋๋ค. ๊ธฐ๋์น๋ ํ๋กํ์ ์ ์ฅ๋์ง ์์ต๋๋ค.
- ํ๋๋ก ์ ํ๋ ํ ์คํธ๋ ๋จ์ถ๋๊ฑฐ๋ ๊ฑฐ๋ถ๋ ์ ์์ต๋๋ค. ๋ฐ๊ฒฌ๋ ์์๋ ์ฌ์ ํ ์ผํ์ฑ ์์ ์ ์ฌ์ฉํฉ๋๋ค. ์ด ๋ช ๋ น์ ๋ฒํผ ์๋ต์ ๋ณด๋ด์ง ์์ผ๋ฉฐ ์๋ฒ๋ฅผ ๊ธฐ๋ค๋ฆฌ์ง ์์ต๋๋ค. ํ์ธํ๋ ค๋ฉด GetGumpInfo/NumGumpTextEntry๋ฅผ ์ฌ์ฉํ์ธ์.
๊ฐ ์์ ๋ ๋ณ๋์ ํ์ผ .csx๋ก ์ ์ฅํ๊ณ IDE์์ ์คํํ ์ ์์ต๋๋ค. UO ๊ฐ์ฒด์ ๋๊ธฐ ๊ธฐ๋ฅ์ ํ์ฌ ๊ฒ์ ์ธ์
์ ํธ์คํธ๋ฅผ ์ ๊ณตํฉ๋๋ค. ๋ฐ๋ชจ serial ์ด๋ฆ, ์ขํ, ์ฃผ์๋ฅผ ์์ ์ ๊ฒ์ผ๋ก ๋ฐ๊พธ์ธ์.
์ด ์ฝ๋๋ฅผ ๋ณ๋์ .csx ํ์ผ๋ก ์คํํ์ธ์. ์ธ์๋ ํธ์ถ์ ์ง์ ํ์๋ฉ๋๋ค. ์์ ์ ์ด๋ฆ, serial, ์ฃผ์๋ฅผ ์์ ์ ๊ฐ์ผ๋ก ๋ฐ๊พธ์ธ์.
๋ช ๋ น์ ๋ ๋ฆฝ๋ ๋ฌธ์ ๋๋ค. ์์ ๋ฉ์์ง๋ ํธ์ถ ์์์ ๋ํ๋ด๋ฉฐ ์๋ฒ ๋์์ ์๋ฃ๋ฅผ ํ์ธํ์ง ์์ต๋๋ค.
UO.Print("Calling UO.GumpAutoTextEntry");
UO.GumpAutoTextEntry(33, "500");๋งค๊ฐ๋ณ์์ ์คํ ํ๋ฆ:
- ์ฒซ ๋ฒ์งธ ๋งค๊ฐ๋ณ์ 33๋ ์ํ๋ ์์์ ์์ ID์ ๋๋ค. InfoGump์ ์ค์ ID๋ก ๋ฐ๊พธ์ธ์. ๋ ๋ฒ์งธ๋ ์ค์ ํ ๊ฐ์ ๋๋ค. ์์๊ฐ ์์ผ๋ฉด ์์ ์ ๋ณด๋ฅ ์ํ๋ก ์ ์ง๋ฉ๋๋ค.
UO.GumpAutoTextEntry(33, "500");๋งค๊ฐ๋ณ์์ ์คํ ํ๋ฆ:
- 33๋ ์์์ ID์ด๊ณ , 100๋ ํ์ธ ButtonID์ ์์ด๋ฉฐ, 0x40001234๋ ์์์ ์ฌ๋ ๊ฐ์ฒด์ serial์ ๋๋ค. ์ธ ๊ฐ์ง ๊ฐ์ ๋ชจ๋ ์์ ์ ๊ฐ์ผ๋ก ๋ฐ๊พธ์ญ์์ค. ์ฐฝ์ด ๋์ค์ ๋์ฐฉํ ๊ฒฝ์ฐ์๋ ๋ต๋ณ ์ ์ ํ๋๊ฐ ์ฑ์์ง๋๋ค.
return RunScenario();
object? RunScenario()
{
UO.GumpAutoTextEntry(33, "500");
UO.WaitGump(100);
UO.UseObject("0x40001234");
return null;
}๋งค๊ฐ๋ณ์์ ์คํ ํ๋ฆ:
- ๋ ํธ์ถ ๋ชจ๋ ID 33๋ฅผ ์ฌ์ฉํฉ๋๋ค. ์์๊ฐ ์์ง ๋ํ๋์ง ์์ ๊ฒฝ์ฐ ๋ง์ง๋ง ๊ฐ์ด ์ ์ฉ๋ฉ๋๋ค. ์ฐฝ์ด ์ด๋ฏธ ์ด๋ ค ์์ผ๋ฉด ๋ ๋ณ๊ฒฝ ์ฌํญ์ด ๋ชจ๋ ์์๋๋ก ์ฆ์ ์ํ๋ฉ๋๋ค.
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.GumpAutoTextEntry(33, "500");
UO.GumpAutoTextEntry(33, "");
return null;
}
}C#์ ๋์๋ฌธ์๋ฅผ ๊ตฌ๋ถํฉ๋๋ค. ์ ํํ UO ์ด๋ฆ์ ์ฌ์ฉํ์ธ์. ์ซ์ ํ๋๊ทธ๋ 0๊ณผ ๋น๊ตํ๊ณ ๋ฐํ ํ์์ด bool์ผ ๋๋ง bool์ ์ฌ์ฉํ์ธ์.
๋งค๊ฐ๋ณ์: textEntryID (Any), value (Any)
๊ฒฐ๊ณผ: void / Unit.
ํธ์ถ ์:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
InjectionScript.Runtime.InjectionApiUO.QueueGumpControl:QueueGumpControl("textentry", Arg(0), Text(1)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Text:Text(1).
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
case "gumpautotextentry": QueueGumpControl("textentry", Arg(0), Text(1)); return InjectionValue.Unit;ะฃะบัะฐัะฝััะบะฐ ยท ะ ัััะบะธะน ยท English ยท Deutsch ยท Franรงais ยท Italiano ยท Espaรฑol ยท ็น้ซไธญๆ ยท ๆฅๆฌ่ช ยท ํ๊ตญ์ด
int UO.GumpExists(object? id);
int UO.GumpExists(object? firstId, object? secondId);ํ๋์ ์ ํ๊ธฐ ๋๋ ์ ํํ ์ serial/GumpID๋ฅผ ์ฌ์ฉํ์ฌ ์๋ฒ Gump๊ฐ ์๋์ง ํ์ธํฉ๋๋ค.
-
idโ ๋จ์ผ ์ธ์ ํ์: ์ซ์ serial, GumpID ๋๋ 0๊ฐ ํฌํจ๋ ์ธ๋ฑ์ค. -1๋ ์ฌ๊ธฐ์ ๋ง์ง๋ง ๊ฒํ๋ฅผ ์ ํํ์ง ์์ต๋๋ค. -
firstIdโ 2๊ฐ ์ธ์ ํ์: ์ซ์ 32๋นํธ serial(์ต์์ ๋นํธ๊ฐ ์๋ ์์ int ํฌํจ). -
secondIdโ 2์ธ์ ํ์: ์ ํํ 32๋นํธ GumpID. 0๋ ์์ผ๋์นด๋๊ฐ ์๋ ์ ํํ ์ซ์์ ๋๋ค. -1๋ง serial/GumpID/index๋ก firstId์ ๋จ์ผ ์ธ์ ํ์ธ์ผ๋ก ๋ค์ ์ ํ๋ฉ๋๋ค.
int - 1, ํด๋น ์ฐฝ์ด ํ์ฌ ์กด์ฌํ๋ ๊ฒฝ์ฐ; 0 ๊ทธ๋ ์ง ์์ผ๋ฉด. ์์ธ, serial ๋๋ ์ผ์น ํญ๋ชฉ ์๋ฅผ ๋ฐํํ์ง ์์ต๋๋ค.
- ํ์ฑ ์๋ฒ ๊ฒํ์ ํจ๊ป ์๋ํฉ๋๋ค. ๋ฐฐ๋ญ, ์ง๋, ์ค์ ๋ฐ ๊ธฐํ ๋ก์ปฌ ์ฐฝ์ ์ด ๋ชฉ๋ก์ ํฌํจ๋์ง ์์ต๋๋ค. ํ ๋ฒ์ ํธ์ถ์ ๊ฒ์ ์ค๋ ๋์ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ต๋๋ค. ํตํ๋ง๋ค ๋ชฉ๋ก์ ์ํ๊ฐ ๋ค๋ฅผ ์ ์์ต๋๋ค.
- ์ํ๋ ์ฐฝ์ ์ ํํ์ง ์์ผ๋ฉฐ ์์ฝํ์ง๋ ์์ต๋๋ค. ID ์์ด ์ ์ฒด์ ์ผ๋ก ํ์ธ๋ฉ๋๋ค. ์ต์์ ๋นํธ๊ฐ ์๋ ID์ ํํฐ๋ฅผ ๋นํ์ฑํํ์ง ์์ต๋๋ค.
๊ฐ ์์ ๋ ๋ณ๋์ ํ์ผ .csx๋ก ์ ์ฅํ๊ณ IDE์์ ์คํํ ์ ์์ต๋๋ค. UO ๊ฐ์ฒด์ ๋๊ธฐ ๊ธฐ๋ฅ์ ํ์ฌ ๊ฒ์ ์ธ์
์ ํธ์คํธ๋ฅผ ์ ๊ณตํฉ๋๋ค. ๋ฐ๋ชจ serial ์ด๋ฆ, ์ขํ, ์ฃผ์๋ฅผ ์์ ์ ๊ฒ์ผ๋ก ๋ฐ๊พธ์ธ์.
์ด ์ฝ๋๋ฅผ ๋ณ๋์ .csx ํ์ผ๋ก ์คํํ์ธ์. ์ธ์๋ ํธ์ถ์ ์ง์ ํ์๋ฉ๋๋ค. ์์ ์ ์ด๋ฆ, serial, ์ฃผ์๋ฅผ ์์ ์ ๊ฐ์ผ๋ก ๋ฐ๊พธ์ธ์.
ํ ๋ฒ์ ํธ์ถ ๊ฒฐ๊ณผ๋ฅผ ์ ๋์ ํ์ํฉ๋๋ค. ์ซ์๋ฅผ bool๋ก ๋ณํํ์ง ์์ผ๋ฉฐ, ๋ฐฐ์ด์ด๋ฉด ์์ ์๋ฅผ ํ์ํฉ๋๋ค.
var result = UO.GumpExists(0x87654321);
UO.Print("GumpExists: " + Convert.ToString(result));๋งค๊ฐ๋ณ์์ ์คํ ํ๋ฆ:
- 0x87654321 โ ์ํ๋ GumpID ๋๋ serial. ํ๋์ ์ธ์๋ ์ด๋ฌํ ๊ณต๋ฐฑ ID์ ๊ตฌ๋ณํ์ง ์์ต๋๋ค.
var exists = UO.GumpExists(0x87654321);
UO.Print(Convert.ToString(exists));๋งค๊ฐ๋ณ์์ ์คํ ํ๋ฆ:
- ์ฒซ ๋ฒ์งธ ์ซ์๋ serial์ด๊ณ ๋ ๋ฒ์งธ ์ซ์๋ GumpID์ ๋๋ค. ๋ ๋ค ๋ถํธ ์๋ int์์๋ ์์์ด์ง๋ง ๋น๊ต์์๋ ๋ชจ๋ 32 ๋นํธ๊ฐ ์ ์ง๋ฉ๋๋ค.
return RunScenario();
object? RunScenario()
{
var exists = UO.GumpExists(0x87654321, 0x98765432);
if (Truth(exists))
{
UO.Print("Matching pair exists");
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;๋งค๊ฐ๋ณ์์ ์คํ ํ๋ฆ:
- info[0]/info[1]๋ ๋์ผํ ์ด๋ฏธ์ง์ ์ํฉ๋๋ค. ์กด์ฌ=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 info = UO.GetGumpInfo(0);
if (Truth(ArrayLength(info) == 5))
{
var exists = UO.GumpExists(info[0], info[1]);
UO.Print(Convert.ToString(exists));
}
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์ ์ฌ์ฉํ์ธ์.
๋งค๊ฐ๋ณ์: id (Any)
๊ฒฐ๊ณผ: int / Integer.
ํธ์ถ ์:
-
InjectionScript.Runtime.InjectionApiUO.GumpExists. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GumpExists:bridge.GumpExists(NumberConversions.ToInt(id), -1). -
InjectionScript.Runtime.NumberConversions.ToInt:NumberConversions.ToInt(id).
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
public int GumpExists(InjectionValue id) => bridge.GumpExists(NumberConversions.ToInt(id), -1);๋งค๊ฐ๋ณ์: firstId (Any), secondId (Any)
๊ฒฐ๊ณผ: int / Integer.
ํธ์ถ ์:
-
InjectionScript.Runtime.InjectionApiUO.GumpExists. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GumpExists:bridge.GumpExists(NumberConversions.ToInt(firstId), NumberConversions.ToInt(secondId)). -
InjectionScript.Runtime.NumberConversions.ToInt:NumberConversions.ToInt(firstId).
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
public int GumpExists(InjectionValue firstId, InjectionValue secondId)
=> bridge.GumpExists(NumberConversions.ToInt(firstId), NumberConversions.ToInt(secondId));ะฃะบัะฐัะฝััะบะฐ ยท ะ ัััะบะธะน ยท English ยท Deutsch ยท Franรงais ยท Italiano ยท Espaรฑol ยท ็น้ซไธญๆ ยท ๆฅๆฌ่ช ยท ํ๊ตญ์ด
void UO.GumpObject(object? gumpId);ํ์ ํธ์ถ์ ์ํด ๊ธฐ์กด ์๋ฒ Gump๋ฅผ ์ ํํฉ๋๋ค.
-
gumpId- int: LocalSerial ๋๋ ServerSerial๋ฅผ ๋จผ์ ์ผ์น์ํจ ๋ค์ ํ์ฌ ๊ฒํ ๋ชฉ๋ก์์ ์ธ๋ฑ์ค 0์ ์ฐพ์ต๋๋ค. ID ๋ฒํผ์ด ์๋๋๋ค.
void - ๊ฐ์ด ์์ต๋๋ค. ๋ณ๋์ ํ์ ์ผ๋ก ์ ํํ์ธ์. ์๋ฃ๋ ์๋ฒ์ ์์ ์ ํ์ธํ์ง ์์ต๋๋ค.
- Bridge.SelectGump๋ _selectedServerGump๋ฅผ ์ ์ฅํฉ๋๋ค. serial์ด ์ผ์นํ์ง ์์ผ๋ฉด 0..count-1 ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํฉ๋๋ค. ์ฐพ์ ์ ์์ - ์ ํํ ๊ฒํ๊ฐ null๊ฐ ๋๊ณ ๋ฉ์์ง๊ฐ ํ์๋ฉ๋๋ค.
- Gump๊ฐ ์ด๋ฆฌ์ง ์๊ณ ์๋ฒ์ ์๋ต์ด ์ ์ก๋์ง ์์ต๋๋ค. ์ฐฝ์ด ์ด๋ฆฌ๊ฑฐ๋ ๋ซํ ๋ ์ธ๋ฑ์ค๊ฐ ๋ณ๊ฒฝ๋ฉ๋๋ค. ์์ ์ ์ธ ์ ํ์ ์ํด ํ์ฌ serial/id๋ฅผ ์ฌ์ฉํ์ธ์.
๊ฐ ์์ ๋ ๋ณ๋์ ํ์ผ .csx๋ก ์ ์ฅํ๊ณ IDE์์ ์คํํ ์ ์์ต๋๋ค. UO ๊ฐ์ฒด์ ๋๊ธฐ ๊ธฐ๋ฅ์ ํ์ฌ ๊ฒ์ ์ธ์
์ ํธ์คํธ๋ฅผ ์ ๊ณตํฉ๋๋ค. ๋ฐ๋ชจ serial ์ด๋ฆ, ์ขํ, ์ฃผ์๋ฅผ ์์ ์ ๊ฒ์ผ๋ก ๋ฐ๊พธ์ธ์.
์ด ์ฝ๋๋ฅผ ๋ณ๋์ .csx ํ์ผ๋ก ์คํํ์ธ์. ์ธ์๋ ํธ์ถ์ ์ง์ ํ์๋ฉ๋๋ค. ์์ ์ ์ด๋ฆ, serial, ์ฃผ์๋ฅผ ์์ ์ ๊ฐ์ผ๋ก ๋ฐ๊พธ์ธ์.
๋ช ๋ น์ ๋ ๋ฆฝ๋ ๋ฌธ์ ๋๋ค. ์์ ๋ฉ์์ง๋ ํธ์ถ ์์์ ๋ํ๋ด๋ฉฐ ์๋ฒ ๋์์ ์๋ฃ๋ฅผ ํ์ธํ์ง ์์ต๋๋ค.
UO.Print("Calling UO.GumpObject");
UO.GumpObject(0);๋งค๊ฐ๋ณ์์ ์คํ ํ๋ฆ:
- ํ์ ํธ์ถ์ ์ํด ๊ธฐ์กด ์๋ฒ Gump๋ฅผ ์ ํํฉ๋๋ค.
if (Truth(UO.GumpExists(0)))
{
UO.GumpObject(0);
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;๋งค๊ฐ๋ณ์์ ์คํ ํ๋ฆ:
- Bridge.SelectGump๋ _selectedServerGump๋ฅผ ์ ์ฅํฉ๋๋ค. serial์ด ์ผ์นํ์ง ์์ผ๋ฉด 0..count-1 ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํฉ๋๋ค. ์ฐพ์ ์ ์์ - ์ ํํ ๊ฒํ๊ฐ null๊ฐ ๋๊ณ ๋ฉ์์ง๊ฐ ํ์๋ฉ๋๋ค.
return RunScenario();
object? RunScenario()
{
if (Truth(UO.GetGumpsCount() > 0))
{
var serial = UO.GetGumpSerial(0);
UO.GumpObject(serial);
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;๋งค๊ฐ๋ณ์์ ์คํ ํ๋ฆ:
- Gump๊ฐ ์ด๋ฆฌ์ง ์๊ณ ์๋ฒ์ ์๋ต์ด ์ ์ก๋์ง ์์ต๋๋ค. ์ฐฝ์ด ์ด๋ฆฌ๊ฑฐ๋ ๋ซํ ๋ ์ธ๋ฑ์ค๊ฐ ๋ณ๊ฒฝ๋ฉ๋๋ค. ์์ ์ ์ธ ์ ํ์ ์ํด ํ์ฌ serial/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()
{
if (Truth(UO.GetGumpsCount() > 0))
{
UO.GumpObject(0);
UO.Print(UO.LastGump("gumpid"));
}
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์ ์ฌ์ฉํ์ธ์.
๋งค๊ฐ๋ณ์: gumpId (Any)
๊ฒฐ๊ณผ: void / Unit.
ํธ์ถ ์:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.SelectGump:bridge.SelectGump(Arg(0)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias::Arg:Arg(0).
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
case "gumpobject": bridge.SelectGump(Arg(0)); break;ะฃะบัะฐัะฝััะบะฐ ยท ะ ัััะบะธะน ยท English ยท Deutsch ยท Franรงais ยท Italiano ยท Espaรฑol ยท ็น้ซไธญๆ ยท ๆฅๆฌ่ช ยท ํ๊ตญ์ด
int UO.IsGump();ํ์ฑ ์๋ฒ ๊ฒํ๊ฐ ํ๋ ์ด์ ์๋์ง ํ์ธํฉ๋๋ค.
๋งค๊ฐ๋ณ์๊ฐ ์์ต๋๋ค.
int โ 1, ๋ชฉ๋ก์ด ๋น์ด ์์ง ์์ ๊ฒฝ์ฐ; 0 ๋น์ด ์๋ ๊ฒฝ์ฐ. ์ด๋ ์ฐฝ ์๊ฐ ์๋๋ผ ๊ฐ์ฉ์ฑ์ ๋ํ๋ด๋ ํ์์ ๋๋ค.
- ํ์ฑ ์๋ฒ ๊ฒํ์ ํจ๊ป ์๋ํฉ๋๋ค. ๋ฐฐ๋ญ, ์ง๋, ์ค์ ๋ฐ ๊ธฐํ ๋ก์ปฌ ์ฐฝ์ ์ด ๋ชฉ๋ก์ ํฌํจ๋์ง ์์ต๋๋ค. ํ ๋ฒ์ ํธ์ถ์ ๊ฒ์ ์ค๋ ๋์ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ต๋๋ค. ํตํ๋ง๋ค ๋ชฉ๋ก์ ์ํ๊ฐ ๋ค๋ฅผ ์ ์์ต๋๋ค.
๊ฐ ์์ ๋ ๋ณ๋์ ํ์ผ .csx๋ก ์ ์ฅํ๊ณ IDE์์ ์คํํ ์ ์์ต๋๋ค. UO ๊ฐ์ฒด์ ๋๊ธฐ ๊ธฐ๋ฅ์ ํ์ฌ ๊ฒ์ ์ธ์
์ ํธ์คํธ๋ฅผ ์ ๊ณตํฉ๋๋ค. ๋ฐ๋ชจ serial ์ด๋ฆ, ์ขํ, ์ฃผ์๋ฅผ ์์ ์ ๊ฒ์ผ๋ก ๋ฐ๊พธ์ธ์.
์ด ์ฝ๋๋ฅผ ๋ณ๋์ .csx ํ์ผ๋ก ์คํํ์ธ์. ์ธ์๋ ํธ์ถ์ ์ง์ ํ์๋ฉ๋๋ค. ์์ ์ ์ด๋ฆ, serial, ์ฃผ์๋ฅผ ์์ ์ ๊ฐ์ผ๋ก ๋ฐ๊พธ์ธ์.
ํ ๋ฒ์ ํธ์ถ ๊ฒฐ๊ณผ๋ฅผ ์ ๋์ ํ์ํฉ๋๋ค. ์ซ์๋ฅผ bool๋ก ๋ณํํ์ง ์์ผ๋ฉฐ, ๋ฐฐ์ด์ด๋ฉด ์์ ์๋ฅผ ํ์ํฉ๋๋ค.
var result = UO.IsGump();
UO.Print("IsGump: " + Convert.ToString(result));๋งค๊ฐ๋ณ์์ ์คํ ํ๋ฆ:
- ๋ ผ์์ด ์์ต๋๋ค. GetGumpInfo(0)๋ ์ฒซ ๋ฒ์งธ ์์๋ฅผ ์ฝ๊ณ ์ฐฝ์ด ์ด๋ฏธ ๋ซํ ์์ผ๋ฉด ๋น ๋ฐฐ์ด์ ๋ฐํํ ์ ์์ต๋๋ค.
if (Truth(UO.IsGump()))
{
var info = UO.GetGumpInfo(0);
UO.Print(ArrayLength(info));
}
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;๋งค๊ฐ๋ณ์์ ์คํ ํ๋ฆ:
- ์ธ ๊ฐ์ ์์ ์ ์ธ ์ฐฝ์ด ์๋ ๊ฒฝ์ฐ=1, ๊ฐ์=3.
return RunScenario();
object? RunScenario()
{
var present = UO.IsGump();
var count = UO.GetGumpsCount();
UO.Print(Convert.ToString(present) + "/" + Convert.ToString(count));
return null;
}๋งค๊ฐ๋ณ์์ ์คํ ํ๋ฆ:
- ์ฝ 3000ms ์ด์ ๊ธฐ๋ค๋ฆฌ์ง ๋ง๊ณ 50ms๋ง๋ค ํ์ธํ์ธ์. ์ต์ข ํ์ฌ๋ ๋๊ธฐ ํ์ ์ํ๋ฅผ ๋ณด์ฌ์ค๋๋ค.
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
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;
}
async public Task<object?> RunScenarioAsync()
{
var started = Now();
while (Truth(UO.IsGump() == 0) && Truth(Now() - started < 3000))
{
await Delay(50);
}
var present = UO.IsGump();
return null;
}
Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
private int Now() => global::ClassicUO.CSharp.CSharpScriptContext.Current.Now();
}C#์ ๋์๋ฌธ์๋ฅผ ๊ตฌ๋ถํฉ๋๋ค. ์ ํํ UO ์ด๋ฆ์ ์ฌ์ฉํ์ธ์. ์ซ์ ํ๋๊ทธ๋ 0๊ณผ ๋น๊ตํ๊ณ ๋ฐํ ํ์์ด bool์ผ ๋๋ง bool์ ์ฌ์ฉํ์ธ์.
๋งค๊ฐ๋ณ์: ๋งค๊ฐ๋ณ์๊ฐ ์์ต๋๋ค.
๊ฒฐ๊ณผ: int / Integer.
ํธ์ถ ์:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetGumpCount:bridge.GetGumpCount().
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
case "isgump": return new InjectionValue(bridge.GetGumpCount() > 0 ? 1 : 0);ะฃะบัะฐัะฝััะบะฐ ยท ะ ัััะบะธะน ยท English ยท Deutsch ยท Franรงais ยท Italiano ยท Espaรฑol ยท ็น้ซไธญๆ ยท ๆฅๆฌ่ช ยท ํ๊ตญ์ด
int UO.IsGumpCanBeClosed(object? gumpIndex);์๋ฒ ๊ฒํ์ ๋ก์ปฌ ๋ง์ฐ์ค ์ค๋ฅธ์ชฝ ๋ฒํผ ํด๋ฆญ ๋ซ๊ธฐ๊ฐ ํ์ฉ๋๋์ง ํ์ธํฉ๋๋ค.
-
gumpIndexโ ํ์ int โ 0๋ถํฐ GetGumpsCount()-1๊น์ง ํ์ฑ ์๋ฒ ๊ฒํ์ ์ธ๋ฑ์ค์ ๋๋ค. GumpID/serial๊ฐ ์๋๋๋ค. ๋ชฉ๋ก ์ธ๋ถ์ ์์์ ์ธ๋ฑ์ค๋ ์ ํจํ์ง ์์ต๋๋ค. ์ฐฝ์ ์ด๊ณ ๋ซ๊ณ ์ฌ์ ๋ ฌํ๋ฉด ์์ธ์ด ๋ณ๊ฒฝ๋ ์ ์์ต๋๋ค. ํ๋ํ๊ธฐ ์ ์ GetGumpID/GetGumpSerial๋ฅผ ํ์ธํ์ธ์.
int โ 1, ์ฐฝ์ด ์กด์ฌํ๊ณ CanCloseWithRightClick๊ฐ ํ์ฑํ๋ ๊ฒฝ์ฐ; ๊ทธ๋ ์ง ์์ผ๋ฉด 0. ์ด๋ ๋ซ์๊ฑฐ๋ ์ทจ์ ๋ฒํผ์ด ์์ด์ ๋ฐ์ํ๋ ๊ฒ์ด ์๋๋๋ค.
- ํ์ฑ ์๋ฒ ๊ฒํ์ ํจ๊ป ์๋ํฉ๋๋ค. ๋ฐฐ๋ญ, ์ง๋, ์ค์ ๋ฐ ๊ธฐํ ๋ก์ปฌ ์ฐฝ์ ์ด ๋ชฉ๋ก์ ํฌํจ๋์ง ์์ต๋๋ค. ํ ๋ฒ์ ํธ์ถ์ ๊ฒ์ ์ค๋ ๋์ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ต๋๋ค. ํตํ๋ง๋ค ๋ชฉ๋ก์ ์ํ๊ฐ ๋ค๋ฅผ ์ ์์ต๋๋ค.
- NoClose๋ CloseSimpleGump์ ๊ธ์งํฉ๋๋ค. ButtonID๋ฅผ ์๋ฒ์ ๋ณด๋ด๋ ๊ธฐ๋ฅ์ ๋ณ๋์ ์์ ์ ๋๋ค.
๊ฐ ์์ ๋ ๋ณ๋์ ํ์ผ .csx๋ก ์ ์ฅํ๊ณ IDE์์ ์คํํ ์ ์์ต๋๋ค. UO ๊ฐ์ฒด์ ๋๊ธฐ ๊ธฐ๋ฅ์ ํ์ฌ ๊ฒ์ ์ธ์
์ ํธ์คํธ๋ฅผ ์ ๊ณตํฉ๋๋ค. ๋ฐ๋ชจ serial ์ด๋ฆ, ์ขํ, ์ฃผ์๋ฅผ ์์ ์ ๊ฒ์ผ๋ก ๋ฐ๊พธ์ธ์.
์ด ์ฝ๋๋ฅผ ๋ณ๋์ .csx ํ์ผ๋ก ์คํํ์ธ์. ์ธ์๋ ํธ์ถ์ ์ง์ ํ์๋ฉ๋๋ค. ์์ ์ ์ด๋ฆ, serial, ์ฃผ์๋ฅผ ์์ ์ ๊ฐ์ผ๋ก ๋ฐ๊พธ์ธ์.
ํ ๋ฒ์ ํธ์ถ ๊ฒฐ๊ณผ๋ฅผ ์ ๋์ ํ์ํฉ๋๋ค. ์ซ์๋ฅผ bool๋ก ๋ณํํ์ง ์์ผ๋ฉฐ, ๋ฐฐ์ด์ด๋ฉด ์์ ์๋ฅผ ํ์ํฉ๋๋ค.
var result = UO.IsGumpCanBeClosed(0);
UO.Print("IsGumpCanBeClosed: " + Convert.ToString(result));๋งค๊ฐ๋ณ์์ ์คํ ํ๋ฆ:
- 0 โ ์ฐฝ ์์ธ. ๊ฒ์ฆ๊ณผ ์ข ๊ฒฐ์ ์๋ก ๋ค๋ฅธ ๊ณผ์ ์ ๋๋ค. ์ธ๋ฑ์ค๋ ๊ทธ๋ค ์ฌ์ด์์ ๋ณ๊ฒฝ๋ ์ ์์ต๋๋ค.
if (Truth(UO.IsGumpCanBeClosed(0)))
{
UO.CloseSimpleGump(0);
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;๋งค๊ฐ๋ณ์์ ์คํ ํ๋ฆ:
- ๊ธฐ์กด ์ฐฝ์์ closable=0๋ ์ฐฝ์ด ์๋ ๊ฒ์ด ์๋๋ผ ์ฐฝ์ ๋ซ์ ์ ์๋ค๋ ์๋ฏธ์ ๋๋ค.
return RunScenario();
object? RunScenario()
{
if (Truth(UO.GetGumpsCount() > 0))
{
var closable = UO.IsGumpCanBeClosed(0);
UO.Print(Convert.ToString(closable));
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;๋งค๊ฐ๋ณ์์ ์คํ ํ๋ฆ:
- -1๋ ์ด ์ธ๋ฑ์ค ๋ช ๋ น์ ์ ํจํ์ง ์์ผ๋ฉฐ 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 result = UO.IsGumpCanBeClosed(-1);
UO.Print(Convert.ToString(result));
return null;
}
}C#์ ๋์๋ฌธ์๋ฅผ ๊ตฌ๋ถํฉ๋๋ค. ์ ํํ UO ์ด๋ฆ์ ์ฌ์ฉํ์ธ์. ์ซ์ ํ๋๊ทธ๋ 0๊ณผ ๋น๊ตํ๊ณ ๋ฐํ ํ์์ด bool์ผ ๋๋ง bool์ ์ฌ์ฉํ์ธ์.
๋งค๊ฐ๋ณ์: gumpIndex (Any)
๊ฒฐ๊ณผ: int / Integer.
ํธ์ถ ์:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.IsGumpCanBeClosed:bridge.IsGumpCanBeClosed(Arg(0)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0).
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
case "isgumpcanbeclosed": return new InjectionValue(bridge.IsGumpCanBeClosed(Arg(0)));ะฃะบัะฐัะฝััะบะฐ ยท ะ ัััะบะธะน ยท English ยท Deutsch ยท Franรงais ยท Italiano ยท Espaรฑol ยท ็น้ซไธญๆ ยท ๆฅๆฌ่ช ยท ํ๊ตญ์ด
dynamic UO.LastGump(object? identifier);
dynamic UO.LastGump(object? identifier, object? key);์ ํํ ์๋ฒ Gump์ ํ ํ๋๋ฅผ ์ฝ์ต๋๋ค. ์ด ์คํฌ๋ฆฝํธ์ ์ํด ์ ํ๋ ์ฐฝ์ด๋ ํ์ฌ ๋ชฉ๋ก์ ๋ง์ง๋ง ์์๋ฅผ ์ฌ์ฉํฉ๋๋ค.
-
identifier- string ๋์๋ฌธ์๋ฅผ ๊ตฌ๋ถํ์ง ์์ต๋๋ค. ์ง์๋๋ ๋ชจ๋ ๊ฐ๊ณผ ๊ฒฐ๊ณผ ์ ํ์ ๋ฐํ ์น์ ์ ๋์ด๋์ด ์์ต๋๋ค. ์ ์ ์๋ ์ด๋ฆ์ ๋น ๋ฌธ์์ด์ ๋ฐํํฉ๋๋ค. -
key- ์ ํ ์ฌํญ int, ๊ธฐ๋ณธ๊ฐ - 1. ๋ฒํผ/ํ ์คํธ/object/๋ช ๋ น์ ๊ฒฝ์ฐ 0๋ก ์์ธ์ ์์ฑํ์ธ์. ์ด๊ฒ์ ID ์ ์ด๊ฐ ์๋๋๋ค. ์์ ์ธ๋ฑ์ค์ ๋ฒ์๋ฅผ ๋ฒ์ด๋๋ฉด ๋ฒํผ์ ๊ฒฝ์ฐ 0์ด ๋๊ณ ํ ์คํธ ํ๋์ ๊ฒฝ์ฐ ๋น ๋ฌธ์์ด์ด ํ์๋ฉ๋๋ค. ๋ค๋ฅธ ์๋ณ์๋ ํค๋ฅผ ์ฌ์ฉํ์ง ์์ต๋๋ค.
๊ฒฐ๊ณผ ์ ํ์ ์๋ณ์์ ๋ฐ๋ผ ๋ค๋ฆ ๋๋ค. int: Buttonlen โ ์ผ๋ฐ ๋ฒํผ ์; ๋ฒํผ โ ์ธ๋ฑ์ค ํค๋ณ ButtonID์ ๋๋ค. textlen โ ์ฌ์ฉ ๊ฐ๋ฅํ ํ ์คํธ ์์ ์; injid โ ํ์ฌ ์ฐฝ ์ธ๋ฑ์ค; ํ์ โ 0 (์๋ต ๋ด์ญ์ ์ ์ฅ๋์ง ์์ต๋๋ค); inclient โ ๋ฐ๊ฒฌ๋ ๋ผ์ด๋ธ ์ฐฝ์ ๊ฒฝ์ฐ 1, ์๋ ๊ฒฝ์ฐ 0; objectcount - ์ค์ฒฉ๋ ์ปจํธ๋กค์ ํฌํจํ ๋ผ์ด๋ธ ์ปจํธ๋กค์ ์์ ๋๋ค. string: serial ๋ฐ gumpid - 16์ง์ ๋ฌธ์์ด 0xXXXXXXXX; text โ ์ธ๋ฑ์ค ํค์ ์์ ํ ์คํธ์ ๋๋ค. object โ ์ปจํธ๋กค ์ ํ ์ด๋ฆ; ๋ช ๋ น โ ์ปจํธ๋กค์ ๋ํ ์ค๋ช (์ ํ, ํ์ด์ง, ID, ์ขํ, ํฌ๊ธฐ ๋ฐ ์ง์๋๋ ํ๋) ์ฐฝ์ด ์์ผ๋ฉด ์ซ์ ์๋ณ์๋ 0๋ฅผ ์ ๊ณตํ๊ณ ๋ฌธ์์ด ์๋ณ์๋ ๋น ๋ฌธ์์ด์ ์ ๊ณตํฉ๋๋ค. injid=0๋ ์ ํจํ ์ฒซ ๋ฒ์งธ ์์ธ์ ๋๋ค. 0 ์์ฒด๋ง์ผ๋ก๋ ์ฐฝ์ด ์์์ ์ฆ๋ช ํ์ง ์์ต๋๋ค. ์ด๊ฒ์ Array๋ Pascal TGumpInfo๊ฐ ์๋๋๋ค.
- ํ์ฑ ์๋ฒ ๊ฒํ์ ํจ๊ป ์๋ํฉ๋๋ค. ๋ฐฐ๋ญ, ์ง๋, ์ค์ ๋ฐ ๊ธฐํ ๋ก์ปฌ ์ฐฝ์ ์ด ๋ชฉ๋ก์ ํฌํจ๋์ง ์์ต๋๋ค. ํ ๋ฒ์ ํธ์ถ์ ๊ฒ์ ์ค๋ ๋์ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ต๋๋ค. ํตํ๋ง๋ค ๋ชฉ๋ก์ ์ํ๊ฐ ๋ค๋ฅผ ์ ์์ต๋๋ค.
- SelectGump/InfoGump๋ ํ์ฌ ๋ฐํ์์์๋ง ์ ํํ ์ฐฝ์ ์ง์ ํฉ๋๋ค. ์ ํํ ์ฐฝ์ด ๋ซํ๋ฉด ํ์ฌ ๋ชฉ๋ก์ ๋ง์ง๋ง ํญ๋ชฉ์ด ์ฌ์ฉ๋ฉ๋๋ค. ์ด๋ ๋ฐ๋์ ๊ฐ์ฅ ์ต๊ทผ ํญ๋ชฉ์ผ ํ์๋ ์์ต๋๋ค.
- textlen/text๋ ์๋ฒ ํจํค์ง์ ์๋ ๋ฌธ์์ด ํ์ด ์๋ ์ฌ์ฉ ๊ฐ๋ฅํ ํ ์คํธ ์ปจํธ๋กค์ ์ฐธ์กฐํฉ๋๋ค. object/command๋ ๋ผ์ด๋ธ ์ปจํธ๋กค์ ์ ์ฒด ํธ๋ฆฌ๋ฅผ ๋ํ๋ ๋๋ค. ๋ค๋ฅธ ๋ชฉ๋ก์ ์ธ๋ฑ์ค๋ ํผํฉ๋ ์ ์์ต๋๋ค.
- ๊ฐ ํธ์ถ์ ํ์ฌ ์ํ๋ฅผ ๊ฐ๋ณ์ ์ผ๋ก ์ฝ์ต๋๋ค. ์ผ์นํ๋ serial, GumpID ๋ฐ ๋ชฉ๋ก์ ๊ฒฝ์ฐ GetGumpInfo๋ฅผ ์ฌ์ฉํ์ธ์.
๊ฐ ์์ ๋ ๋ณ๋์ ํ์ผ .csx๋ก ์ ์ฅํ๊ณ IDE์์ ์คํํ ์ ์์ต๋๋ค. UO ๊ฐ์ฒด์ ๋๊ธฐ ๊ธฐ๋ฅ์ ํ์ฌ ๊ฒ์ ์ธ์
์ ํธ์คํธ๋ฅผ ์ ๊ณตํฉ๋๋ค. ๋ฐ๋ชจ serial ์ด๋ฆ, ์ขํ, ์ฃผ์๋ฅผ ์์ ์ ๊ฒ์ผ๋ก ๋ฐ๊พธ์ธ์.
์ด ์ฝ๋๋ฅผ ๋ณ๋์ .csx ํ์ผ๋ก ์คํํ์ธ์. ์ธ์๋ ํธ์ถ์ ์ง์ ํ์๋ฉ๋๋ค. ์์ ์ ์ด๋ฆ, serial, ์ฃผ์๋ฅผ ์์ ์ ๊ฐ์ผ๋ก ๋ฐ๊พธ์ธ์.
ํ ๋ฒ์ ํธ์ถ ๊ฒฐ๊ณผ๋ฅผ ์ ๋์ ํ์ํฉ๋๋ค. ์ซ์๋ฅผ bool๋ก ๋ณํํ์ง ์์ผ๋ฉฐ, ๋ฐฐ์ด์ด๋ฉด ์์ ์๋ฅผ ํ์ํฉ๋๋ค.
object? result = UO.LastGump("gumpid");
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));๋งค๊ฐ๋ณ์์ ์คํ ํ๋ฆ:
- gumpid ๋ฐ serial๋ ์ด๋ฏธ 16์ง์๋ก ํ์ํ๋ ๋ฌธ์์ด์ ๋ฐํํฉ๋๋ค. ์ถ๊ฐ 16์ง์๊ฐ ํ์ํ์ง ์์ต๋๋ค. ๋น ์ค์ ์ฝ์ ๋ ์ฐฝ์ด ์์์ ์๋ฏธํฉ๋๋ค.
var id = UO.LastGump("gumpid");
var serial = UO.LastGump("serial");
UO.Print(id + " / " + serial);๋งค๊ฐ๋ณ์์ ์คํ ํ๋ฆ:
- Buttonlen โ ๋ฒํผ ์; i๋ 0๋ถํฐ count-1๊น์ง์ ํ ์ธ๋ฑ์ค์ ๋๋ค. ๋ฒํผ - ๊ทธ๋ํฝ์ด๋ ์์ธ์ด ์๋ ๋ต๋ณ์ฉ ID์ ๋๋ค. ์ฐฝ์ ๋ณ๊ฒฝํ ๋ ๋ชฉ๋ก์ ๋ค์ ์ฝ์ผ์ญ์์ค.
return RunScenario();
object? RunScenario()
{
var count = UO.LastGump("buttonlen");
var i = 0;
while (Truth(i < count))
{
var button = UO.LastGump("button", i);
UO.Print(Convert.ToString(button));
i = i + 1;
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;๋งค๊ฐ๋ณ์์ ์คํ ํ๋ฆ:
- 0x12345678๋ GumpID/serial์ ์์ ๋๋ค. ID๋ฅผ ์ํ๋ ํ์์ผ๋ก ๋ฐ๊พธ์ธ์. key=0์ธ ํ ์คํธ๋ ์ฌ์ฉ ๊ฐ๋ฅํ ์ฒซ ๋ฒ์งธ ํ ์คํธ ์ปจํธ๋กค์ ์ฝ์ต๋๋ค. ์ด๊ฒ์ ๋ฒํผ๊ณผ ๋ค๋ฅธ ๋ชฉ๋ก์ ๋๋ค.
- SelectGump๋ ์ง์ ๋ ์ฐฝ์ด ์๋ค๊ณ ๋ณด๊ณ ํ์ง๋ง ํ์ ์ฝ๊ธฐ๋ฅผ ์ฐจ๋จํ์ง ์์ต๋๋ค. ํ์ํ ๊ฒฝ์ฐ ๋ฐํ๋ gumpid๋ฅผ ๋ณ๋๋ก ํ์ธํ์ธ์.
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.SelectGump(0x12345678);
if (Truth(UO.LastGump("inclient")))
{
var count = UO.LastGump("textlen");
if (Truth(count > 0))
{
UO.Print(UO.LastGump("text", 0));
}
}
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์ ์ฌ์ฉํ์ธ์.
๋งค๊ฐ๋ณ์: identifier (String)
๊ฒฐ๊ณผ: dynamic / Any.
ํธ์ถ ์:
-
InjectionScript.Runtime.InjectionApiUO.LastGump. -
InjectionScript.Runtime.InjectionApiUO.LastGump:LastGump(identifier, -1).
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
public InjectionValue LastGump(string identifier) => LastGump(identifier, -1);๋งค๊ฐ๋ณ์: identifier (String), key (Integer)
๊ฒฐ๊ณผ: dynamic / Any.
ํธ์ถ ์:
-
InjectionScript.Runtime.InjectionApiUO.LastGump. -
InjectionScript.Runtime.InjectionApiUO.ConvertGumpValue:ConvertGumpValue(identifier, bridge.GetGumpValue(-1, identifier, key)). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetGumpValue:bridge.GetGumpValue(-1, identifier, key).
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
public InjectionValue LastGump(string identifier, int key) => ConvertGumpValue(identifier, bridge.GetGumpValue(-1, identifier, key));ะฃะบัะฐัะฝััะบะฐ ยท ะ ัััะบะธะน ยท English ยท Deutsch ยท Franรงais ยท Italiano ยท Espaรฑol ยท ็น้ซไธญๆ ยท ๆฅๆฌ่ช ยท ํ๊ตญ์ด
int UO.NumGumpButton(object? gumpIndex, object? value);์๊ฒฉํ ์ฐฝ ์ธ๋ฑ์ค์ ์ ํํ ButtonID๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๊ธฐ์กด ์๋ฒ ๊ฒํ ๋ฒํผ์ ํ์ฑํํฉ๋๋ค.
-
gumpIndexโ ํ์ int โ 0๋ถํฐ GetGumpsCount()-1๊น์ง ํ์ฑ ์๋ฒ ๊ฒํ์ ์ธ๋ฑ์ค์ ๋๋ค. GumpID/serial๊ฐ ์๋๋๋ค. ๋ชฉ๋ก ์ธ๋ถ์ ์์์ ์ธ๋ฑ์ค๋ ์ ํจํ์ง ์์ต๋๋ค. ์ฐฝ์ ์ด๊ณ ๋ซ๊ณ ์ฌ์ ๋ ฌํ๋ฉด ์์ธ์ด ๋ณ๊ฒฝ๋ ์ ์์ต๋๋ค. ํ๋ํ๊ธฐ ์ ์ GetGumpID/GetGumpSerial๋ฅผ ํ์ธํ์ธ์. -
value- int - ์ผ๋ฐ ๋ฒํผ ์ค๋ช ์ ButtonID์ ๋๋ค. ์ค๋ฒํธ๋ ์๋๊ณ , graphic ๋ฒํผ๋ ์๋๊ณ , GumpID๋ ์๋๋๋ค.
int (bool) - 1, ์ฐฝ๊ณผ ๋ฒํผ์ด ๋ฐ๊ฒฌ๋๊ณ ๋ก์ปฌ ์์ ์ด ์ํ๋๋ ๊ฒฝ์ฐ; 0 ์ฐฝ/๋ฒํผ์ด ์๋ ๊ฒฝ์ฐ. ํ์ด์ง๋ฅผ ๋ณ๊ฒฝํ๋ฉด 1๋ ๋ฐํ๋ฉ๋๋ค. ์ด๋ ์๋ฒ ์ฒ๋ฆฌ์ ๋ํ ํ์ธ์ด ์๋๋๋ค.
๋ช ๋ น์ ๊ฒฐ๊ณผ๋ ์ซ์ ํ๋๊ทธ์ ๋๋ค. 1๋ ์ถฉ์กฑ๋ ์กฐ๊ฑด์ ์๋ฏธํ๊ณ , 0๋ ์ถฉ์กฑ๋์ง ์์ ์กฐ๊ฑด์ ์๋ฏธํฉ๋๋ค. var result = command(...) ํ์ (๊ฒฐ๊ณผ != 0) ๋๋ (๊ฒฐ๊ณผ == 0)์ธ์ง ํ์ธํ์ธ์. ํ ๋ฒ์ ํธ์ถ ๊ฒฐ๊ณผ๋ฅผ ์ ์ฅํฉ๋๋ค. ๋ฐ๋ณต๋ ํธ์ถ์ ํตํด ํด๋น ์์ ์ ๋ค์ ์ํํ๊ฑฐ๋ ์ด๋ฏธ ๋ณ๊ฒฝ๋ ์ํ๋ฅผ ์ฝ์ ์ ์์ต๋๋ค.
- ํ์ฑ ์๋ฒ ๊ฒํ์ ํจ๊ป ์๋ํฉ๋๋ค. ๋ฐฐ๋ญ, ์ง๋, ์ค์ ๋ฐ ๊ธฐํ ๋ก์ปฌ ์ฐฝ์ ์ด ๋ชฉ๋ก์ ํฌํจ๋์ง ์์ต๋๋ค. ํ ๋ฒ์ ํธ์ถ์ ๊ฒ์ ์ค๋ ๋์ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ต๋๋ค. ํตํ๋ง๋ค ๋ชฉ๋ก์ ์ํ๊ฐ ๋ค๋ฅผ ์ ์์ต๋๋ค.
- SwitchPage ๋ฒํผ์ ํ์ด์ง๋ฅผ ๋ก์ปฌ๋ก ์ ํํฉ๋๋ค. ํ์ฑํ ๋ฒํผ์ ๋๋ฅด๋ฉด ๊ฒํ ์๋ต์ด ๋ฐ์ํฉ๋๋ค. ์ฐฝ๋ฌธ์ ๋ณดํต ๋ซํ๋๋ค. SendGumpSelect์ ๋ฌ๋ฆฌ ์ด ๋ช ๋ น์๋ ์ปจํธ๋กค ํธ๋ฆฌ์ ๊ธฐ์กด ButtonID๊ฐ ํ์ํฉ๋๋ค.
๊ฐ ์์ ๋ ๋ณ๋์ ํ์ผ .csx๋ก ์ ์ฅํ๊ณ IDE์์ ์คํํ ์ ์์ต๋๋ค. UO ๊ฐ์ฒด์ ๋๊ธฐ ๊ธฐ๋ฅ์ ํ์ฌ ๊ฒ์ ์ธ์
์ ํธ์คํธ๋ฅผ ์ ๊ณตํฉ๋๋ค. ๋ฐ๋ชจ serial ์ด๋ฆ, ์ขํ, ์ฃผ์๋ฅผ ์์ ์ ๊ฒ์ผ๋ก ๋ฐ๊พธ์ธ์.
์ด ์ฝ๋๋ฅผ ๋ณ๋์ .csx ํ์ผ๋ก ์คํํ์ธ์. ์ธ์๋ ํธ์ถ์ ์ง์ ํ์๋ฉ๋๋ค. ์์ ์ ์ด๋ฆ, serial, ์ฃผ์๋ฅผ ์์ ์ ๊ฐ์ผ๋ก ๋ฐ๊พธ์ธ์.
ํ ๋ฒ์ ํธ์ถ ๊ฒฐ๊ณผ๋ฅผ ์ ๋์ ํ์ํฉ๋๋ค. ์ซ์๋ฅผ bool๋ก ๋ณํํ์ง ์์ผ๋ฉฐ, ๋ฐฐ์ด์ด๋ฉด ์์ ์๋ฅผ ํ์ํฉ๋๋ค.
var result = UO.NumGumpButton(0, 77);
UO.Print("NumGumpButton: " + Convert.ToString(result));๋งค๊ฐ๋ณ์์ ์คํ ํ๋ฆ:
- 0์ ์ฐฝ ์ธ๋ฑ์ค์ด๊ณ , 77๋ ๊ฒ์ฌ๊ธฐ์ ButtonID ์์์ ๋๋ค. ๊ทํ์ ์์์๋ ์ค์ ID๊ฐ ํ์ํฉ๋๋ค.
var ok = UO.NumGumpButton(0, 77);
if (Truth(ok == 0))
{
UO.Print("Button not found");
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;๋งค๊ฐ๋ณ์์ ์คํ ํ๋ฆ:
- 0x12345678์ ์์๋๋ GumpID์ด๊ณ , 100๋ ButtonID์ ๋๋ค. ์ด ๋ ์ซ์๋ ์๋ก ๋ค๋ฅธ ๊ณต๋ฐฑ ID์ ์ํฉ๋๋ค.
return RunScenario();
object? RunScenario()
{
if (Truth(UO.GetGumpID(0) == 0x12345678))
{
var ok = UO.NumGumpButton(0, 100);
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;๋งค๊ฐ๋ณ์์ ์คํ ํ๋ฆ:
- 33 - ID ํ์ธ๋, 1 - ํ์ฑํ, 100 - 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()
{
if (Truth(UO.NumGumpCheckBox(0, 33, 1)))
{
var ok = UO.NumGumpButton(0, 100);
}
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์ ์ฌ์ฉํ์ธ์.
๋งค๊ฐ๋ณ์: gumpIndex (Any), value (Any)
๊ฒฐ๊ณผ: int / Integer.
ํธ์ถ ์:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.ActivateGumpButton:bridge.ActivateGumpButton(Arg(0), Arg(1)).
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
case "numgumpbutton": return (bridge is IApiGumpAccess buttons
? buttons.ActivateGumpButtonAtIndex(Arg(0), Arg(1)) : bridge.ActivateGumpButton(Arg(0), Arg(1))) != 0 ? InjectionValue.True : InjectionValue.False;ะฃะบัะฐัะฝััะบะฐ ยท ะ ัััะบะธะน ยท English ยท Deutsch ยท Franรงais ยท Italiano ยท Espaรฑol ยท ็น้ซไธญๆ ยท ๆฅๆฌ่ช ยท ํ๊ตญ์ด
int UO.NumGumpCheckBox(object? gumpIndex, object? cbid, object? value);์๋ฒ ๊ฒํ์ ํ๋๊ทธ ์ํ๋ฅผ ์ธ๋ฑ์ค๋ณ๋ก ์ค์ ํฉ๋๋ค.
-
gumpIndexโ ํ์ int โ 0๋ถํฐ GetGumpsCount()-1๊น์ง ํ์ฑ ์๋ฒ ๊ฒํ์ ์ธ๋ฑ์ค์ ๋๋ค. GumpID/serial๊ฐ ์๋๋๋ค. ๋ชฉ๋ก ์ธ๋ถ์ ์์์ ์ธ๋ฑ์ค๋ ์ ํจํ์ง ์์ต๋๋ค. ์ฐฝ์ ์ด๊ณ ๋ซ๊ณ ์ฌ์ ๋ ฌํ๋ฉด ์์ธ์ด ๋ณ๊ฒฝ๋ ์ ์์ต๋๋ค. ํ๋ํ๊ธฐ ์ ์ GetGumpID/GetGumpSerial๋ฅผ ํ์ธํ์ธ์. -
cbid- int - ๊ฒํ ์ค๋ช ์ ์ ํํ ID ์์์ ๋๋ค. ์ด๋ ์์์ ์ผ๋ จ๋ฒํธ๊ฐ ์๋๋๋ค. ๋๋ฝ๋ ID๋ ์์ธ์ผ๋ก ๋์ฒด๋์ง ์์ต๋๋ค. -
valueโ int โ 1 ํ์ฑํ/์ ํ, 0 ๋นํ์ฑํ. 0์ด ์๋ ์ซ์ ๊ฐ, true ๋ฐ selected๋ ์ธ์๋ฉ๋๋ค. 0 ๋ฐ 1๋ฅผ ๊ถ์ฅํฉ๋๋ค.
int (bool) โ 1, ํ์ํ ์์๊ฐ ๋ฐ๊ฒฌ๋๊ณ ์ต์ข ๊ฐ์ด ์ง์ ๋ ์์์ ์ผ์นํ๋ ๊ฒฝ์ฐ; 0 ์์ธ์ด ์ ํจํ์ง ์์ ๊ฒฝ์ฐ ID/์์ ์ ํ์ด ๋๋ฝ๋์๊ฑฐ๋ ํ๋๊ฐ ์ ํํ ๊ฐ์ ์ฌ์ฉํ์ง ์์ ๊ฒฝ์ฐ์ ๋๋ค. ์ด๋ฏธ ์ค์ ๋ ๊ฐ์ ์ฌ์ค์ ํด๋ ์ฑ๊ณตํฉ๋๋ค.
๋ช ๋ น์ ๊ฒฐ๊ณผ๋ ์ซ์ ํ๋๊ทธ์ ๋๋ค. 1๋ ์ถฉ์กฑ๋ ์กฐ๊ฑด์ ์๋ฏธํ๊ณ , 0๋ ์ถฉ์กฑ๋์ง ์์ ์กฐ๊ฑด์ ์๋ฏธํฉ๋๋ค. var result = command(...) ํ์ (๊ฒฐ๊ณผ != 0) ๋๋ (๊ฒฐ๊ณผ == 0)์ธ์ง ํ์ธํ์ธ์. ํ ๋ฒ์ ํธ์ถ ๊ฒฐ๊ณผ๋ฅผ ์ ์ฅํฉ๋๋ค. ๋ฐ๋ณต๋ ํธ์ถ์ ํตํด ํด๋น ์์ ์ ๋ค์ ์ํํ๊ฑฐ๋ ์ด๋ฏธ ๋ณ๊ฒฝ๋ ์ํ๋ฅผ ์ฝ์ ์ ์์ต๋๋ค.
- ํ์ฑ ์๋ฒ ๊ฒํ์ ํจ๊ป ์๋ํฉ๋๋ค. ๋ฐฐ๋ญ, ์ง๋, ์ค์ ๋ฐ ๊ธฐํ ๋ก์ปฌ ์ฐฝ์ ์ด ๋ชฉ๋ก์ ํฌํจ๋์ง ์์ต๋๋ค. ํ ๋ฒ์ ํธ์ถ์ ๊ฒ์ ์ค๋ ๋์ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ต๋๋ค. ํตํ๋ง๋ค ๋ชฉ๋ก์ ์ํ๊ฐ ๋ค๋ฅผ ์ ์์ต๋๋ค.
- ๋ก์ปฌ ์ํ๋ฅผ ๋ณ๊ฒฝํฉ๋๋ค. ํ๋์ ์ ํ๋ ๋ผ๋์ค ๋ฒํผ์ด ์ ์ก๋๊ณ ๋ฒํผ ์๋ต์ด ์ด์ด์ง๋๋ค.
- ๋ผ๋์ค ๋ฒํผ์ ์ ํํ๋ฉด ๋์ผํ ๊ทธ๋ฃน์ ์ธ์ ํ ๋ผ๋์ค ๋ฒํผ์ด ์ ํ ์ทจ์๋ฉ๋๋ค. ์ผ๋ฐ ํ์ธ๋์ ๋ ๋ฆฝ์ ์ ๋๋ค.
๊ฐ ์์ ๋ ๋ณ๋์ ํ์ผ .csx๋ก ์ ์ฅํ๊ณ IDE์์ ์คํํ ์ ์์ต๋๋ค. UO ๊ฐ์ฒด์ ๋๊ธฐ ๊ธฐ๋ฅ์ ํ์ฌ ๊ฒ์ ์ธ์
์ ํธ์คํธ๋ฅผ ์ ๊ณตํฉ๋๋ค. ๋ฐ๋ชจ serial ์ด๋ฆ, ์ขํ, ์ฃผ์๋ฅผ ์์ ์ ๊ฒ์ผ๋ก ๋ฐ๊พธ์ธ์.
์ด ์ฝ๋๋ฅผ ๋ณ๋์ .csx ํ์ผ๋ก ์คํํ์ธ์. ์ธ์๋ ํธ์ถ์ ์ง์ ํ์๋ฉ๋๋ค. ์์ ์ ์ด๋ฆ, serial, ์ฃผ์๋ฅผ ์์ ์ ๊ฐ์ผ๋ก ๋ฐ๊พธ์ธ์.
ํ ๋ฒ์ ํธ์ถ ๊ฒฐ๊ณผ๋ฅผ ์ ๋์ ํ์ํฉ๋๋ค. ์ซ์๋ฅผ bool๋ก ๋ณํํ์ง ์์ผ๋ฉฐ, ๋ฐฐ์ด์ด๋ฉด ์์ ์๋ฅผ ํ์ํฉ๋๋ค.
var result = UO.NumGumpCheckBox(0, 33, 1);
UO.Print("NumGumpCheckBox: " + Convert.ToString(result));๋งค๊ฐ๋ณ์์ ์คํ ํ๋ฆ:
- 0 โ ์ฐฝ ์ธ๋ฑ์ค; 33 โ ์ ํํ CBID; 1 - ์๋ก์ด ๊ฐ. ๊ฒํ์์ 33๋ฅผ ID๋ก ๋ฐ๊พธ์ธ์.
var ok = UO.NumGumpCheckBox(0, 33, 1);
if (Truth(ok == 0))
{
UO.Print("Control missing or value rejected");
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;๋งค๊ฐ๋ณ์์ ์คํ ํ๋ฆ:
- 0 ํ๋๋ฅผ ์ง์ฐ๊ฑฐ๋ ์ ํ์ ์ทจ์ํฉ๋๋ค. ํ๋์ ์ ๊ฐ์ด ์๋ ๋ณ๊ฒฝ ์ฑ๊ณต์ด ๋ฐํ๋ฉ๋๋ค.
return RunScenario();
object? RunScenario()
{
var ok = UO.NumGumpCheckBox(0, 33, 0);
UO.Print(Convert.ToString(ok));
return null;
}๋งค๊ฐ๋ณ์์ ์คํ ํ๋ฆ:
- 100 - ์๋ฒ ButtonID ํ์ธ ์์; ์ฐฝ๋ฌธ์ ID๋ฅผ ๊ต์ฒดํด์ผ ํฉ๋๋ค. 0 ~ SendGumpSelect(0,100)๋ ์ฐฝ ์ธ๋ฑ์ค์ ๋๋ค.
- ๋๋ต์ ๊ฒํ๋ฅผ ๋ซ๊ณ ์ธ๋ฑ์ค๋ฅผ ๋ณ๊ฒฝํ ์ ์์ต๋๋ค. ์ ์ก๋จ์ ๋ก์ปฌ ์ ์ก์ ์๋ฏธํ๋ฉฐ, ์๋ฒ์์ ํ์ธ๋์ง ์์ ์์ ์ ๊ฒฐ๊ณผ์ ๋๋ค.
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()
{
if (Truth(UO.NumGumpCheckBox(0, 33, 1)))
{
var sent = UO.SendGumpSelect(0, 100);
UO.Print(Convert.ToString(sent));
}
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์ ์ฌ์ฉํ์ธ์.
๋งค๊ฐ๋ณ์: gumpIndex (Any), cbid (Any), value (Any)
๊ฒฐ๊ณผ: int / Integer.
ํธ์ถ ์:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
InjectionScript.Runtime.InjectionApiUO.SetIndexedGumpValue:SetIndexedGumpValue(Arg(0), "checkbox", Arg(1), Text(2)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Text:Text(2).
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
case "numgumpcheckbox": return SetIndexedGumpValue(Arg(0), "checkbox", Arg(1), Text(2));ะฃะบัะฐัะฝััะบะฐ ยท ะ ัััะบะธะน ยท English ยท Deutsch ยท Franรงais ยท Italiano ยท Espaรฑol ยท ็น้ซไธญๆ ยท ๆฅๆฌ่ช ยท ํ๊ตญ์ด
int UO.NumGumpRadiobutton(object? gumpIndex, object? radiobuttonID, object? value);์ธ๋ฑ์ค๋ณ๋ก ์๋ฒ ๊ฒํ์ ๋ผ๋์ค ๋ฒํผ ์ํ๋ฅผ ์ค์ ํฉ๋๋ค.
-
gumpIndexโ ํ์ int โ 0๋ถํฐ GetGumpsCount()-1๊น์ง ํ์ฑ ์๋ฒ ๊ฒํ์ ์ธ๋ฑ์ค์ ๋๋ค. GumpID/serial๊ฐ ์๋๋๋ค. ๋ชฉ๋ก ์ธ๋ถ์ ์์์ ์ธ๋ฑ์ค๋ ์ ํจํ์ง ์์ต๋๋ค. ์ฐฝ์ ์ด๊ณ ๋ซ๊ณ ์ฌ์ ๋ ฌํ๋ฉด ์์ธ์ด ๋ณ๊ฒฝ๋ ์ ์์ต๋๋ค. ํ๋ํ๊ธฐ ์ ์ GetGumpID/GetGumpSerial๋ฅผ ํ์ธํ์ธ์. -
radiobuttonID- int - ๊ฒํ ์ค๋ช ์ ์ ํํ ID ์์์ ๋๋ค. ์ด๋ ์์์ ์ผ๋ จ๋ฒํธ๊ฐ ์๋๋๋ค. ๋๋ฝ๋ ID๋ ์์ธ์ผ๋ก ๋์ฒด๋์ง ์์ต๋๋ค. -
valueโ int โ 1 ํ์ฑํ/์ ํ, 0 ๋นํ์ฑํ. 0์ด ์๋ ์ซ์ ๊ฐ, true ๋ฐ selected๋ ์ธ์๋ฉ๋๋ค. 0 ๋ฐ 1๋ฅผ ๊ถ์ฅํฉ๋๋ค.
int (bool) โ 1, ํ์ํ ์์๊ฐ ๋ฐ๊ฒฌ๋๊ณ ์ต์ข ๊ฐ์ด ์ง์ ๋ ์์์ ์ผ์นํ๋ ๊ฒฝ์ฐ; 0 ์์ธ์ด ์ ํจํ์ง ์์ ๊ฒฝ์ฐ ID/์์ ์ ํ์ด ๋๋ฝ๋์๊ฑฐ๋ ํ๋๊ฐ ์ ํํ ๊ฐ์ ์ฌ์ฉํ์ง ์์ ๊ฒฝ์ฐ์ ๋๋ค. ์ด๋ฏธ ์ค์ ๋ ๊ฐ์ ์ฌ์ค์ ํด๋ ์ฑ๊ณตํฉ๋๋ค.
๋ช ๋ น์ ๊ฒฐ๊ณผ๋ ์ซ์ ํ๋๊ทธ์ ๋๋ค. 1๋ ์ถฉ์กฑ๋ ์กฐ๊ฑด์ ์๋ฏธํ๊ณ , 0๋ ์ถฉ์กฑ๋์ง ์์ ์กฐ๊ฑด์ ์๋ฏธํฉ๋๋ค. var result = command(...) ํ์ (๊ฒฐ๊ณผ != 0) ๋๋ (๊ฒฐ๊ณผ == 0)์ธ์ง ํ์ธํ์ธ์. ํ ๋ฒ์ ํธ์ถ ๊ฒฐ๊ณผ๋ฅผ ์ ์ฅํฉ๋๋ค. ๋ฐ๋ณต๋ ํธ์ถ์ ํตํด ํด๋น ์์ ์ ๋ค์ ์ํํ๊ฑฐ๋ ์ด๋ฏธ ๋ณ๊ฒฝ๋ ์ํ๋ฅผ ์ฝ์ ์ ์์ต๋๋ค.
- ํ์ฑ ์๋ฒ ๊ฒํ์ ํจ๊ป ์๋ํฉ๋๋ค. ๋ฐฐ๋ญ, ์ง๋, ์ค์ ๋ฐ ๊ธฐํ ๋ก์ปฌ ์ฐฝ์ ์ด ๋ชฉ๋ก์ ํฌํจ๋์ง ์์ต๋๋ค. ํ ๋ฒ์ ํธ์ถ์ ๊ฒ์ ์ค๋ ๋์ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ต๋๋ค. ํตํ๋ง๋ค ๋ชฉ๋ก์ ์ํ๊ฐ ๋ค๋ฅผ ์ ์์ต๋๋ค.
- ๋ก์ปฌ ์ํ๋ฅผ ๋ณ๊ฒฝํฉ๋๋ค. ํ๋์ ์ ํ๋ ๋ผ๋์ค ๋ฒํผ์ด ์ ์ก๋๊ณ ๋ฒํผ ์๋ต์ด ์ด์ด์ง๋๋ค.
- ๋ผ๋์ค ๋ฒํผ์ ์ ํํ๋ฉด ๋์ผํ ๊ทธ๋ฃน์ ์ธ์ ํ ๋ผ๋์ค ๋ฒํผ์ด ์ ํ ์ทจ์๋ฉ๋๋ค. ์ผ๋ฐ ํ์ธ๋์ ๋ ๋ฆฝ์ ์ ๋๋ค.
๊ฐ ์์ ๋ ๋ณ๋์ ํ์ผ .csx๋ก ์ ์ฅํ๊ณ IDE์์ ์คํํ ์ ์์ต๋๋ค. UO ๊ฐ์ฒด์ ๋๊ธฐ ๊ธฐ๋ฅ์ ํ์ฌ ๊ฒ์ ์ธ์
์ ํธ์คํธ๋ฅผ ์ ๊ณตํฉ๋๋ค. ๋ฐ๋ชจ serial ์ด๋ฆ, ์ขํ, ์ฃผ์๋ฅผ ์์ ์ ๊ฒ์ผ๋ก ๋ฐ๊พธ์ธ์.
์ด ์ฝ๋๋ฅผ ๋ณ๋์ .csx ํ์ผ๋ก ์คํํ์ธ์. ์ธ์๋ ํธ์ถ์ ์ง์ ํ์๋ฉ๋๋ค. ์์ ์ ์ด๋ฆ, serial, ์ฃผ์๋ฅผ ์์ ์ ๊ฐ์ผ๋ก ๋ฐ๊พธ์ธ์.
ํ ๋ฒ์ ํธ์ถ ๊ฒฐ๊ณผ๋ฅผ ์ ๋์ ํ์ํฉ๋๋ค. ์ซ์๋ฅผ bool๋ก ๋ณํํ์ง ์์ผ๋ฉฐ, ๋ฐฐ์ด์ด๋ฉด ์์ ์๋ฅผ ํ์ํฉ๋๋ค.
var result = UO.NumGumpRadiobutton(0, 33, 1);
UO.Print("NumGumpRadiobutton: " + Convert.ToString(result));๋งค๊ฐ๋ณ์์ ์คํ ํ๋ฆ:
- 0 โ ์ฐฝ ์ธ๋ฑ์ค; 33 โ ์ ํํ RadiobuttonID; 1 - ์๋ก์ด ๊ฐ. ๊ฒํ์์ 33๋ฅผ ID๋ก ๋ฐ๊พธ์ธ์.
var ok = UO.NumGumpRadiobutton(0, 33, 1);
if (Truth(ok == 0))
{
UO.Print("Control missing or value rejected");
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;๋งค๊ฐ๋ณ์์ ์คํ ํ๋ฆ:
- 0 ํ๋๋ฅผ ์ง์ฐ๊ฑฐ๋ ์ ํ์ ์ทจ์ํฉ๋๋ค. ํ๋์ ์ ๊ฐ์ด ์๋ ๋ณ๊ฒฝ ์ฑ๊ณต์ด ๋ฐํ๋ฉ๋๋ค.
return RunScenario();
object? RunScenario()
{
var ok = UO.NumGumpRadiobutton(0, 33, 0);
UO.Print(Convert.ToString(ok));
return null;
}๋งค๊ฐ๋ณ์์ ์คํ ํ๋ฆ:
- 100 - ์๋ฒ ButtonID ํ์ธ ์์; ์ฐฝ๋ฌธ์ ID๋ฅผ ๊ต์ฒดํด์ผ ํฉ๋๋ค. 0 ~ SendGumpSelect(0,100)๋ ์ฐฝ ์ธ๋ฑ์ค์ ๋๋ค.
- ๋๋ต์ ๊ฒํ๋ฅผ ๋ซ๊ณ ์ธ๋ฑ์ค๋ฅผ ๋ณ๊ฒฝํ ์ ์์ต๋๋ค. ์ ์ก๋จ์ ๋ก์ปฌ ์ ์ก์ ์๋ฏธํ๋ฉฐ, ์๋ฒ์์ ํ์ธ๋์ง ์์ ์์ ์ ๊ฒฐ๊ณผ์ ๋๋ค.
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()
{
if (Truth(UO.NumGumpRadiobutton(0, 33, 1)))
{
var sent = UO.SendGumpSelect(0, 100);
UO.Print(Convert.ToString(sent));
}
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์ ์ฌ์ฉํ์ธ์.
๋งค๊ฐ๋ณ์: gumpIndex (Any), radiobuttonID (Any), value (Any)
๊ฒฐ๊ณผ: int / Integer.
ํธ์ถ ์:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
InjectionScript.Runtime.InjectionApiUO.SetIndexedGumpValue:SetIndexedGumpValue(Arg(0), "radio", Arg(1), Text(2)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Text:Text(2).
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
case "numgumpradiobutton": return SetIndexedGumpValue(Arg(0), "radio", Arg(1), Text(2));ะฃะบัะฐัะฝััะบะฐ ยท ะ ัััะบะธะน ยท English ยท Deutsch ยท Franรงais ยท Italiano ยท Espaรฑol ยท ็น้ซไธญๆ ยท ๆฅๆฌ่ช ยท ํ๊ตญ์ด
int UO.NumGumpTextEntry(object? gumpIndex, object? textEntryID, object? value);์๋ฒ ๊ฒํ์ ์ ๋ ฅ ํ๋ ํ ์คํธ๋ฅผ ์ธ๋ฑ์ค๋ณ๋ก ์ค์ ํฉ๋๋ค.
-
gumpIndexโ ํ์ int โ 0๋ถํฐ GetGumpsCount()-1๊น์ง ํ์ฑ ์๋ฒ ๊ฒํ์ ์ธ๋ฑ์ค์ ๋๋ค. GumpID/serial๊ฐ ์๋๋๋ค. ๋ชฉ๋ก ์ธ๋ถ์ ์์์ ์ธ๋ฑ์ค๋ ์ ํจํ์ง ์์ต๋๋ค. ์ฐฝ์ ์ด๊ณ ๋ซ๊ณ ์ฌ์ ๋ ฌํ๋ฉด ์์ธ์ด ๋ณ๊ฒฝ๋ ์ ์์ต๋๋ค. ํ๋ํ๊ธฐ ์ ์ GetGumpID/GetGumpSerial๋ฅผ ํ์ธํ์ธ์. -
textEntryID- int - ๊ฒํ ์ค๋ช ์ ์ ํํ ID ์์์ ๋๋ค. ์ด๋ ์์์ ์ผ๋ จ๋ฒํธ๊ฐ ์๋๋๋ค. ๋๋ฝ๋ ID๋ ์์ธ์ผ๋ก ๋์ฒด๋์ง ์์ต๋๋ค. -
value- string - ์ ํ ์คํธ. ๋น ๋ฌธ์์ด์ ํ๋๋ฅผ ์ง์๋๋ค. ํ๋ ์์ฒด์ ๊ธธ์ด/๋ฌธ์ ์ ํ์ ์ ์ง๋ฉ๋๋ค.
int (bool) โ 1, ํ์ํ ์์๊ฐ ๋ฐ๊ฒฌ๋๊ณ ์ต์ข ๊ฐ์ด ์ง์ ๋ ์์์ ์ผ์นํ๋ ๊ฒฝ์ฐ; 0 ์์ธ์ด ์ ํจํ์ง ์์ ๊ฒฝ์ฐ ID/์์ ์ ํ์ด ๋๋ฝ๋์๊ฑฐ๋ ํ๋๊ฐ ์ ํํ ๊ฐ์ ์ฌ์ฉํ์ง ์์ ๊ฒฝ์ฐ์ ๋๋ค. ์ด๋ฏธ ์ค์ ๋ ๊ฐ์ ์ฌ์ค์ ํด๋ ์ฑ๊ณตํฉ๋๋ค.
๋ช ๋ น์ ๊ฒฐ๊ณผ๋ ์ซ์ ํ๋๊ทธ์ ๋๋ค. 1๋ ์ถฉ์กฑ๋ ์กฐ๊ฑด์ ์๋ฏธํ๊ณ , 0๋ ์ถฉ์กฑ๋์ง ์์ ์กฐ๊ฑด์ ์๋ฏธํฉ๋๋ค. var result = command(...) ํ์ (๊ฒฐ๊ณผ != 0) ๋๋ (๊ฒฐ๊ณผ == 0)์ธ์ง ํ์ธํ์ธ์. ํ ๋ฒ์ ํธ์ถ ๊ฒฐ๊ณผ๋ฅผ ์ ์ฅํฉ๋๋ค. ๋ฐ๋ณต๋ ํธ์ถ์ ํตํด ํด๋น ์์ ์ ๋ค์ ์ํํ๊ฑฐ๋ ์ด๋ฏธ ๋ณ๊ฒฝ๋ ์ํ๋ฅผ ์ฝ์ ์ ์์ต๋๋ค.
- ํ์ฑ ์๋ฒ ๊ฒํ์ ํจ๊ป ์๋ํฉ๋๋ค. ๋ฐฐ๋ญ, ์ง๋, ์ค์ ๋ฐ ๊ธฐํ ๋ก์ปฌ ์ฐฝ์ ์ด ๋ชฉ๋ก์ ํฌํจ๋์ง ์์ต๋๋ค. ํ ๋ฒ์ ํธ์ถ์ ๊ฒ์ ์ค๋ ๋์ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ต๋๋ค. ํตํ๋ง๋ค ๋ชฉ๋ก์ ์ํ๊ฐ ๋ค๋ฅผ ์ ์์ต๋๋ค.
- ๋ก์ปฌ ์ํ๋ฅผ ๋ณ๊ฒฝํฉ๋๋ค. ํ๋์ ์ ํ๋ ๋ผ๋์ค ๋ฒํผ์ด ์ ์ก๋๊ณ ๋ฒํผ ์๋ต์ด ์ด์ด์ง๋๋ค.
- ๋ผ๋์ค ๋ฒํผ์ ์ ํํ๋ฉด ๋์ผํ ๊ทธ๋ฃน์ ์ธ์ ํ ๋ผ๋์ค ๋ฒํผ์ด ์ ํ ์ทจ์๋ฉ๋๋ค. ์ผ๋ฐ ํ์ธ๋์ ๋ ๋ฆฝ์ ์ ๋๋ค.
๊ฐ ์์ ๋ ๋ณ๋์ ํ์ผ .csx๋ก ์ ์ฅํ๊ณ IDE์์ ์คํํ ์ ์์ต๋๋ค. UO ๊ฐ์ฒด์ ๋๊ธฐ ๊ธฐ๋ฅ์ ํ์ฌ ๊ฒ์ ์ธ์
์ ํธ์คํธ๋ฅผ ์ ๊ณตํฉ๋๋ค. ๋ฐ๋ชจ serial ์ด๋ฆ, ์ขํ, ์ฃผ์๋ฅผ ์์ ์ ๊ฒ์ผ๋ก ๋ฐ๊พธ์ธ์.
์ด ์ฝ๋๋ฅผ ๋ณ๋์ .csx ํ์ผ๋ก ์คํํ์ธ์. ์ธ์๋ ํธ์ถ์ ์ง์ ํ์๋ฉ๋๋ค. ์์ ์ ์ด๋ฆ, serial, ์ฃผ์๋ฅผ ์์ ์ ๊ฐ์ผ๋ก ๋ฐ๊พธ์ธ์.
ํ ๋ฒ์ ํธ์ถ ๊ฒฐ๊ณผ๋ฅผ ์ ๋์ ํ์ํฉ๋๋ค. ์ซ์๋ฅผ bool๋ก ๋ณํํ์ง ์์ผ๋ฉฐ, ๋ฐฐ์ด์ด๋ฉด ์์ ์๋ฅผ ํ์ํฉ๋๋ค.
var result = UO.NumGumpTextEntry(0, 33, "500");
UO.Print("NumGumpTextEntry: " + Convert.ToString(result));๋งค๊ฐ๋ณ์์ ์คํ ํ๋ฆ:
- 0 โ ์ฐฝ ์ธ๋ฑ์ค; 33 โ ์ ํํ TextEntryID; '500'๋ ์๋ก์ด ๊ฐ์ ๋๋ค. ๊ฒํ์์ 33๋ฅผ ID๋ก ๋ฐ๊พธ์ธ์.
var ok = UO.NumGumpTextEntry(0, 33, "500");
if (Truth(ok == 0))
{
UO.Print("Control missing or value rejected");
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;๋งค๊ฐ๋ณ์์ ์คํ ํ๋ฆ:
- ''๋ ํ๋๋ฅผ ์ง์ฐ๊ฑฐ๋ ์ ํ์ ์ทจ์ํฉ๋๋ค. ํ๋์ ์ ๊ฐ์ด ์๋ ๋ณ๊ฒฝ ์ฑ๊ณต์ด ๋ฐํ๋ฉ๋๋ค.
return RunScenario();
object? RunScenario()
{
var ok = UO.NumGumpTextEntry(0, 33, "");
UO.Print(Convert.ToString(ok));
return null;
}๋งค๊ฐ๋ณ์์ ์คํ ํ๋ฆ:
- 100 - ์๋ฒ ButtonID ํ์ธ ์์; ์ฐฝ๋ฌธ์ ID๋ฅผ ๊ต์ฒดํด์ผ ํฉ๋๋ค. 0 ~ SendGumpSelect(0,100)๋ ์ฐฝ ์ธ๋ฑ์ค์ ๋๋ค.
- ๋๋ต์ ๊ฒํ๋ฅผ ๋ซ๊ณ ์ธ๋ฑ์ค๋ฅผ ๋ณ๊ฒฝํ ์ ์์ต๋๋ค. ์ ์ก๋จ์ ๋ก์ปฌ ์ ์ก์ ์๋ฏธํ๋ฉฐ, ์๋ฒ์์ ํ์ธ๋์ง ์์ ์์ ์ ๊ฒฐ๊ณผ์ ๋๋ค.
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()
{
if (Truth(UO.NumGumpTextEntry(0, 33, "500")))
{
var sent = UO.SendGumpSelect(0, 100);
UO.Print(Convert.ToString(sent));
}
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์ ์ฌ์ฉํ์ธ์.
๋งค๊ฐ๋ณ์: gumpIndex (Any), textEntryID (Any), value (Any)
๊ฒฐ๊ณผ: int / Integer.
ํธ์ถ ์:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
InjectionScript.Runtime.InjectionApiUO.SetIndexedGumpValue:SetIndexedGumpValue(Arg(0), "textentry", Arg(1), Text(2)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Text:Text(2).
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
case "numgumptextentry": return SetIndexedGumpValue(Arg(0), "textentry", Arg(1), Text(2));ะฃะบัะฐัะฝััะบะฐ ยท ะ ัััะบะธะน ยท English ยท Deutsch ยท Franรงais ยท Italiano ยท Espaรฑol ยท ็น้ซไธญๆ ยท ๆฅๆฌ่ช ยท ํ๊ตญ์ด
void UO.SelectGump(object? id);ํ์ ํธ์ถ์ ์ํด ๊ธฐ์กด ์๋ฒ Gump๋ฅผ ์ ํํฉ๋๋ค.
-
id- int: LocalSerial ๋๋ ServerSerial๋ฅผ ๋จผ์ ์ผ์น์ํจ ๋ค์ ํ์ฌ ๊ฒํ ๋ชฉ๋ก์์ ์ธ๋ฑ์ค 0์ ์ฐพ์ต๋๋ค. ID ๋ฒํผ์ด ์๋๋๋ค.
void - ๊ฐ์ด ์์ต๋๋ค. ๋ณ๋์ ํ์ ์ผ๋ก ์ ํํ์ธ์. ์๋ฃ๋ ์๋ฒ์ ์์ ์ ํ์ธํ์ง ์์ต๋๋ค.
- Bridge.SelectGump๋ _selectedServerGump๋ฅผ ์ ์ฅํฉ๋๋ค. serial์ด ์ผ์นํ์ง ์์ผ๋ฉด 0..count-1 ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํฉ๋๋ค. ์ฐพ์ ์ ์์ - ์ ํํ ๊ฒํ๊ฐ null๊ฐ ๋๊ณ ๋ฉ์์ง๊ฐ ํ์๋ฉ๋๋ค.
- Gump๊ฐ ์ด๋ฆฌ์ง ์๊ณ ์๋ฒ์ ์๋ต์ด ์ ์ก๋์ง ์์ต๋๋ค. ์ฐฝ์ด ์ด๋ฆฌ๊ฑฐ๋ ๋ซํ ๋ ์ธ๋ฑ์ค๊ฐ ๋ณ๊ฒฝ๋ฉ๋๋ค. ์์ ์ ์ธ ์ ํ์ ์ํด ํ์ฌ serial/id๋ฅผ ์ฌ์ฉํ์ธ์.
๊ฐ ์์ ๋ ๋ณ๋์ ํ์ผ .csx๋ก ์ ์ฅํ๊ณ IDE์์ ์คํํ ์ ์์ต๋๋ค. UO ๊ฐ์ฒด์ ๋๊ธฐ ๊ธฐ๋ฅ์ ํ์ฌ ๊ฒ์ ์ธ์
์ ํธ์คํธ๋ฅผ ์ ๊ณตํฉ๋๋ค. ๋ฐ๋ชจ serial ์ด๋ฆ, ์ขํ, ์ฃผ์๋ฅผ ์์ ์ ๊ฒ์ผ๋ก ๋ฐ๊พธ์ธ์.
์ด ์ฝ๋๋ฅผ ๋ณ๋์ .csx ํ์ผ๋ก ์คํํ์ธ์. ์ธ์๋ ํธ์ถ์ ์ง์ ํ์๋ฉ๋๋ค. ์์ ์ ์ด๋ฆ, serial, ์ฃผ์๋ฅผ ์์ ์ ๊ฐ์ผ๋ก ๋ฐ๊พธ์ธ์.
๋ช ๋ น์ ๋ ๋ฆฝ๋ ๋ฌธ์ ๋๋ค. ์์ ๋ฉ์์ง๋ ํธ์ถ ์์์ ๋ํ๋ด๋ฉฐ ์๋ฒ ๋์์ ์๋ฃ๋ฅผ ํ์ธํ์ง ์์ต๋๋ค.
UO.Print("Calling UO.SelectGump");
UO.SelectGump(0);๋งค๊ฐ๋ณ์์ ์คํ ํ๋ฆ:
- ํ์ ํธ์ถ์ ์ํด ๊ธฐ์กด ์๋ฒ Gump๋ฅผ ์ ํํฉ๋๋ค.
if (Truth(UO.GumpExists(0)))
{
UO.SelectGump(0);
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;๋งค๊ฐ๋ณ์์ ์คํ ํ๋ฆ:
- Bridge.SelectGump๋ _selectedServerGump๋ฅผ ์ ์ฅํฉ๋๋ค. serial์ด ์ผ์นํ์ง ์์ผ๋ฉด 0..count-1 ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํฉ๋๋ค. ์ฐพ์ ์ ์์ - ์ ํํ ๊ฒํ๊ฐ null๊ฐ ๋๊ณ ๋ฉ์์ง๊ฐ ํ์๋ฉ๋๋ค.
return RunScenario();
object? RunScenario()
{
if (Truth(UO.GetGumpsCount() > 0))
{
var serial = UO.GetGumpSerial(0);
UO.SelectGump(serial);
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;๋งค๊ฐ๋ณ์์ ์คํ ํ๋ฆ:
- Gump๊ฐ ์ด๋ฆฌ์ง ์๊ณ ์๋ฒ์ ์๋ต์ด ์ ์ก๋์ง ์์ต๋๋ค. ์ฐฝ์ด ์ด๋ฆฌ๊ฑฐ๋ ๋ซํ ๋ ์ธ๋ฑ์ค๊ฐ ๋ณ๊ฒฝ๋ฉ๋๋ค. ์์ ์ ์ธ ์ ํ์ ์ํด ํ์ฌ serial/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()
{
if (Truth(UO.GetGumpsCount() > 0))
{
UO.SelectGump(0);
UO.Print(UO.LastGump("gumpid"));
}
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์ ์ฌ์ฉํ์ธ์.
๋งค๊ฐ๋ณ์: id (Any)
๊ฒฐ๊ณผ: void / Unit.
ํธ์ถ ์:
-
InjectionScript.Runtime.InjectionApiUO.SelectGump. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.SelectGump:bridge.SelectGump(NumberConversions.ToInt(id)). -
InjectionScript.Runtime.NumberConversions.ToInt:NumberConversions.ToInt(id).
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
public void SelectGump(InjectionValue id) => bridge.SelectGump(NumberConversions.ToInt(id));ะฃะบัะฐัะฝััะบะฐ ยท ะ ัััะบะธะน ยท English ยท Deutsch ยท Franรงais ยท Italiano ยท Espaรฑol ยท ็น้ซไธญๆ ยท ๆฅๆฌ่ช ยท ํ๊ตญ์ด
int UO.SendGumpSelect(object? triggerId);
int UO.SendGumpSelect(object? gumpIndex, object? triggerId);
int UO.SendGumpSelect(object? serial, object? gumpId, object? triggerId);
int UO.SendGumpSelect(object? serial, object? gumpId, object? triggerId, object? timeout);์ ํํ ์๋ฒ Gump์ ButtonID๋ฅผ ๋ณด๋ ๋๋ค.
-
triggerId- int ๋๋ ์ซ์ ๋ฌธ์์ด - ์๋ฒ ButtonID. 0๋ ์ผ๋ฐ์ ์ผ๋ก ๋ซ๊ธฐ/๊ฑฐ๋ถ๋ฅผ ์๋ฏธํ์ง๋ง ์ ํํ ๋์์ ์๋ฒ์ ์ํด ๊ฒฐ์ ๋ฉ๋๋ค. ํธ๋ฆฌ์ ํ์๋๋ ButtonID๋ ํ์ํ์ง ์์ต๋๋ค. -
gumpIndexโ ํ์ int โ 0๋ถํฐ GetGumpsCount()-1๊น์ง ํ์ฑ ์๋ฒ ๊ฒํ์ ์ธ๋ฑ์ค์ ๋๋ค. GumpID/serial์ด ์๋๋๋ค. ๋ชฉ๋ก ์ธ๋ถ์ ์์์ ์ธ๋ฑ์ค๋ ์ ํจํ์ง ์์ต๋๋ค. ์ฐฝ์ ์ด๊ณ ๋ซ๊ณ ์ฌ์ ๋ ฌํ๋ฉด ์์ธ์ด ๋ณ๊ฒฝ๋ ์ ์์ต๋๋ค. ํ๋ํ๊ธฐ ์ ์ GetGumpID/GetGumpSerial๋ฅผ ํ์ธํ์ธ์. ๋ ๊ฐ์ ์ธ์ ํ์(gumpIndex, triggerId)์์๋ง ์ฌ์ฉ๋ฉ๋๋ค. -
serialโ 3/4 ์ธ์ ํ์์์ ์ซ์ 32๋นํธ serial๊ฐ ์ฌ์ฉ๋ฉ๋๋ค. 0 ๋๋ -1๋ ํํฐ serial๋ฅผ ๋นํ์ฑํํฉ๋๋ค. ์ต์์ ๋นํธ์ ์์๋ฅผ ํฌํจํ ๋๋จธ์ง ์ซ์๋ ์ ํํ๊ฒ ๋น๊ต๋ฉ๋๋ค. -
gumpIdโ 3/4 ์ธ์ ํ์์์ ์ซ์ 32 ๋นํธ GumpID์ ๋๋ค. 0 ๋๋ -1๋ GumpID ํํฐ๋ฅผ ๋นํ์ฑํํฉ๋๋ค. 16์ง์ ๋ฌธ์์ด์ด ํ์ฉ๋ฉ๋๋ค. ์ฌ๊ธฐ์๋ ์ด๋ฆ AddObject์ด ํ์ฉ๋์ง ์์ต๋๋ค. -
timeoutโ ์ ํ์ ์ธ ๋ค ๋ฒ์งธ ์ธ์, int ์ผ์นํ๋ ID ์์ ๊ธฐ๋ค๋ฆฌ๋ ๋ฐ ๊ฑธ๋ฆฌ๋ ์๊ฐ(๋ฐ๋ฆฌ์ด)์ ๋๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก 0๋ ์ฆ๊ฐ์ ์ธ ์๋ 1ํ์ ๋๋ค. ๋ถ์ ์ 0๋ก ์ ํ๋ฉ๋๋ค. ๊ฐ๊ฒฉ 20ms๋ฅผ ๋ค์ ํ์ธํ์ธ์.
int โ 1, ๋ผ์ด๋ธ ์๋ฒ Gump๊ฐ ๋ฐ๊ฒฌ๋๊ณ ์๋ต์ด ํธ์ถ๋๋ ๊ฒฝ์ฐ; 0 ์๊ฐ ์ด๊ณผ๊ฐ ๋ง๋ฃ๋๊ธฐ ์ ์ ์ฐฝ์ ์ฐพ์ง ๋ชปํ ๊ฒฝ์ฐ. ์ ํํ ID๋ฅผ ๋ฐํํ์ง ์์ผ๋ฉฐ ์๋ฒ๊ฐ ๊ฒฐ๊ณผ๋ฅผ ํ์ธํ ๋๊น์ง ๊ธฐ๋ค๋ฆฌ์ง ์์ต๋๋ค.
- ํ์ฑ ์๋ฒ ๊ฒํ์ ํจ๊ป ์๋ํฉ๋๋ค. ๋ฐฐ๋ญ, ์ง๋, ์ค์ ๋ฐ ๊ธฐํ ๋ก์ปฌ ์ฐฝ์ ์ด ๋ชฉ๋ก์ ํฌํจ๋์ง ์์ต๋๋ค. ํ ๋ฒ์ ํธ์ถ์ ๊ฒ์ ์ค๋ ๋์ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ต๋๋ค. ํตํ๋ง๋ค ๋ชฉ๋ก์ ์ํ๊ฐ ๋ค๋ฅผ ์ ์์ต๋๋ค.
- ํ ์ธ์๋ ์ด ์คํฌ๋ฆฝํธ์์ ์ด์ ์ ์ ํํ ๊ฒํ๋ฅผ ์ ํํฉ๋๋ค. ๋ซํ ์๊ฑฐ๋ ์ ํ๋์ง ์์ ๊ฒฝ์ฐ - ํ์ฌ ๋ชฉ๋ก์ ๋ง์ง๋ง ์์์ ๋๋ค. ๋ ๊ฐ์ ์ธ์๊ฐ ์๊ฒฉํ ์ธ๋ฑ์ค๋ฅผ ์ง์ ํฉ๋๋ค. 3/4 - ํํฐ๊ฐ ์๋ ID ์.
- ์๋ต ์ ํ ๋ฐ ํธ์ถ์ ํ๋์ ๊ฒ์ ์ค๋ ๋ ์์ฒญ์์ ๋ฐ์ํฉ๋๋ค. ์ ์ฐจ๋ฅผ ์ค์งํ๋ฉด ๋๊ธฐ๊ฐ ์ทจ์๋ฉ๋๋ค. ์ง์ ์ ์ธ ์๋ฒ ์๋ต๊ณผ ํ์ด์ง ๋ณ๊ฒฝ์ ํผ๋ํ์ง ๋ง์ญ์์ค. SwitchPage ๋ฒํผ์๋ NumGumpButton์ด ํ์ํฉ๋๋ค.
๊ฐ ์์ ๋ ๋ณ๋์ ํ์ผ .csx๋ก ์ ์ฅํ๊ณ IDE์์ ์คํํ ์ ์์ต๋๋ค. UO ๊ฐ์ฒด์ ๋๊ธฐ ๊ธฐ๋ฅ์ ํ์ฌ ๊ฒ์ ์ธ์
์ ํธ์คํธ๋ฅผ ์ ๊ณตํฉ๋๋ค. ๋ฐ๋ชจ serial ์ด๋ฆ, ์ขํ, ์ฃผ์๋ฅผ ์์ ์ ๊ฒ์ผ๋ก ๋ฐ๊พธ์ธ์.
์ด ์ฝ๋๋ฅผ ๋ณ๋์ .csx ํ์ผ๋ก ์คํํ์ธ์. ์ธ์๋ ํธ์ถ์ ์ง์ ํ์๋ฉ๋๋ค. ์์ ์ ์ด๋ฆ, serial, ์ฃผ์๋ฅผ ์์ ์ ๊ฐ์ผ๋ก ๋ฐ๊พธ์ธ์.
ํ ๋ฒ์ ํธ์ถ ๊ฒฐ๊ณผ๋ฅผ ์ ๋์ ํ์ํฉ๋๋ค. ์ซ์๋ฅผ bool๋ก ๋ณํํ์ง ์์ผ๋ฉฐ, ๋ฐฐ์ด์ด๋ฉด ์์ ์๋ฅผ ํ์ํฉ๋๋ค.
var result = UO.SendGumpSelect(100);
UO.Print("SendGumpSelect: " + Convert.ToString(result));๋งค๊ฐ๋ณ์์ ์คํ ํ๋ฆ:
- SelectGump ์ ํ/serial 0x12345678์ ์ ํํ๊ฑฐ๋ ๋ถ์ฌ๋ฅผ ์ ๊ณ ํฉ๋๋ค. 100 - ๋ฒํผID.
- ๋ ์ด์ ์ ํ๋ ์ฐฝ์ด ์์ผ๋ฉด ๋จ์ผ ์ธ์ ํ์์ ์ฌ์ฉ ๊ฐ๋ฅํ ๋ง์ง๋ง ์ฐฝ์ ์ฌ์ฉํฉ๋๋ค. ์๊ฒฉํ ์ ์ ํ์ธ์ ์ํด ID ๋ ๊ฐ๊ฐ ํฌํจ๋ ์์์ ์ฌ์ฉํ์ธ์.
UO.SelectGump(0x12345678);
var sent = UO.SendGumpSelect(100);
UO.Print(Convert.ToString(sent));๋งค๊ฐ๋ณ์์ ์คํ ํ๋ฆ:
- 0 โ ์ธ๋ฑ์ค, 100 โ ๋ฒํผID. ์ด๊ฒ์ serial=0๋ ์๋๊ณ GumpID=100๋ ์๋๋๋ค.
return RunScenario();
object? RunScenario()
{
var sent = UO.SendGumpSelect(0, 100);
if (Truth(sent == 0))
{
UO.Print("No gump at index zero");
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;๋งค๊ฐ๋ณ์์ ์คํ ํ๋ฆ:
- info[0] - serial, info[1] - GumpID, 100 - ButtonID. ์ธ๋ฑ์ค๋ฅผ ๋ณ๊ฒฝํด๋ ์๋ต์ด ๋ค๋ฅธ ์ ํ/์์ ์๋ก ๋ฆฌ๋๋ ์ ๋์ง ์์ต๋๋ค.
- Serial/GumpID ๊ฐ โโ0/-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 info = UO.GetGumpInfo(0);
if (Truth(ArrayLength(info) == 5))
{
var sent = UO.SendGumpSelect(info[0], info[1], 100);
}
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;
}๋งค๊ฐ๋ณ์์ ์คํ ํ๋ฆ:
- 0 ํํฐ serial๋ฅผ ๋นํ์ฑํํฉ๋๋ค. 0x87654321 โ ์ต์์ ๋นํธ๊ฐ ์๋ ์ ํํ ID; 100 โ ๋ฒํผ; 2000 โ ์ต๋ ๋๊ธฐ ์๊ฐ(ms) ๋ฌด์กฐ๊ฑด์ ์ธ ์์ผ๋์นด๋๋ก ์ฌ์ฉ๋์ง ์์ต๋๋ค.
var sent = UO.SendGumpSelect(0, 0x87654321, 100, 2000);
UO.Print(Convert.ToString(sent));C#์ ๋์๋ฌธ์๋ฅผ ๊ตฌ๋ถํฉ๋๋ค. ์ ํํ UO ์ด๋ฆ์ ์ฌ์ฉํ์ธ์. ์ซ์ ํ๋๊ทธ๋ 0๊ณผ ๋น๊ตํ๊ณ ๋ฐํ ํ์์ด bool์ผ ๋๋ง bool์ ์ฌ์ฉํ์ธ์.
๋งค๊ฐ๋ณ์: triggerId (Integer/String)
๊ฒฐ๊ณผ: int / Integer.
ํธ์ถ ์:
-
InjectionScript.Runtime.InjectionApiUO.SendGumpSelect. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.SendGumpSelect:bridge.SendGumpSelect(triggerId).
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
public int SendGumpSelect(int triggerId) => bridge.SendGumpSelect(triggerId);๋งค๊ฐ๋ณ์: triggerId (Integer/String)
๊ฒฐ๊ณผ: int / Integer.
ํธ์ถ ์:
-
InjectionScript.Runtime.InjectionApiUO.SendGumpSelect. -
InjectionScript.Runtime.InjectionApiUO.SendGumpSelect:SendGumpSelect(NumberConversions.ToInt(triggerId)). -
InjectionScript.Runtime.NumberConversions.ToInt:NumberConversions.ToInt(triggerId).
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
public int SendGumpSelect(string triggerId) => SendGumpSelect(NumberConversions.ToInt(triggerId));๋งค๊ฐ๋ณ์: gumpIndex (Any), triggerId (Any)
๊ฒฐ๊ณผ: int / Integer.
ํธ์ถ ์:
-
InjectionScript.Runtime.InjectionApiUO.SendGumpSelect. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.SendGumpSelect:bridge.SendGumpSelect(NumberConversions.ToInt(gumpIndex), NumberConversions.ToInt(triggerId)). -
InjectionScript.Runtime.NumberConversions.ToInt:NumberConversions.ToInt(gumpIndex).
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
public int SendGumpSelect(InjectionValue gumpIndex, InjectionValue triggerId)
=> bridge.SendGumpSelect(NumberConversions.ToInt(gumpIndex), NumberConversions.ToInt(triggerId));๋งค๊ฐ๋ณ์: serial (Any), gumpId (Any), triggerId (Any)
๊ฒฐ๊ณผ: int / Integer.
ํธ์ถ ์:
-
InjectionScript.Runtime.InjectionApiUO.SendGumpSelect. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.SendGumpSelect:bridge.SendGumpSelect(NumberConversions.ToInt(serial), NumberConversions.ToInt(gumpId), NumberConversions.ToInt(triggerId)). -
InjectionScript.Runtime.NumberConversions.ToInt:NumberConversions.ToInt(serial).
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
public int SendGumpSelect(InjectionValue serial, InjectionValue gumpId, InjectionValue triggerId)
=> bridge.SendGumpSelect(NumberConversions.ToInt(serial), NumberConversions.ToInt(gumpId), NumberConversions.ToInt(triggerId));๋งค๊ฐ๋ณ์: serial (Any), gumpId (Any), triggerId (Any), timeout (Any)
๊ฒฐ๊ณผ: int / Integer.
ํธ์ถ ์:
-
InjectionScript.Runtime.InjectionApiUO.SendGumpSelect. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.SendGumpSelect:bridge.SendGumpSelect(NumberConversions.ToInt(serial), NumberConversions.ToInt(gumpId), NumberConversions.ToInt(triggerId), Math.Max(0, NumberConversions.ToInt(timeout))). -
InjectionScript.Runtime.NumberConversions.ToInt:NumberConversions.ToInt(serial).
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
public int SendGumpSelect(InjectionValue serial, InjectionValue gumpId, InjectionValue triggerId, InjectionValue timeout)
=> bridge.SendGumpSelect(NumberConversions.ToInt(serial), NumberConversions.ToInt(gumpId),
NumberConversions.ToInt(triggerId), Math.Max(0, NumberConversions.ToInt(timeout)));ะฃะบัะฐัะฝััะบะฐ ยท ะ ัััะบะธะน ยท English ยท Deutsch ยท Franรงais ยท Italiano ยท Espaรฑol ยท ็น้ซไธญๆ ยท ๆฅๆฌ่ช ยท ํ๊ตญ์ด
void UO.SetGump(object? identifier, object? key, object? stateValue);
void UO.SetGump(object? gumpId, object? identifier, object? key, object? stateValue);๊ธฐ์กด ์๋ฒ ๊ฒํ์ ํ๋๋ฅผ ๋ณ๊ฒฝํฉ๋๋ค.
-
gumpId- 4๊ฐ์ ์ธ์ ํ์๋ง ํด๋น: serial/id ๋๋ 0 ๊ฒํ ์ธ๋ฑ์ค. ์ธ ๊ฐ์ง ์ฉ๋๋ก ์ฌ์ฉ๋๋ ํํ -1 - ์ ํ/๋ง์ง๋ง ๊ฒํ. -
identifierโ ๋ฌธ์์ด "checkbox", "radio" ๋๋ "textentry", ๋์๋ฌธ์๋ ์ค์ํ์ง ์์ต๋๋ค. ์ง์๋์ง ์๋ ์ด๋ฆ์ ํ๋๋ฅผ ๋ณ๊ฒฝํ์ง ์์ต๋๋ค. -
key- int: ๋จผ์ LocalSerial/ID ์์, ๊ทธ ๋ค์์๋ ์ง์ ๋ ์ข ๋ฅ์ ์์ ์ค ์ธ๋ฑ์ค๊ฐ 0์ ๋๋ค. ์์ ์์ - ์ค๋ฅ ๋ฉ์์ง์ ๋๋ค. -
stateValueโ ์ฒดํฌ๋ฐ์ค/๋ผ๋์ค์ ๊ฒฝ์ฐ: "checked", "true" ๋์๋ฌธ์๋ฅผ ๊ตฌ๋ถํ์ง ์๊ฑฐ๋ 0์ด ์๋ ์ธ์๋ int ํฌํจ; ๋ค๋ฅธ ํ๋๋ ๊บผ์ง๋๋ค. ํ ์คํธ ์ ๋ ฅ์ ๊ฒฝ์ฐ - ToString๊น์ง์ ๋ชจ๋ ํ ์คํธ์ ๋๋ค.
void - ๊ฐ์ด ์์ต๋๋ค. ๋ณ๋์ ํ์ ์ผ๋ก ์ ํํ์ธ์. ์๋ฃ๋ ์๋ฒ์ ์์ ์ ํ์ธํ์ง ์์ต๋๋ค.
- SetGumpValue ์ ํ TrySetGumpValue; 0๋ฅผ ์ฌ์ฉํ๋ฉด ๋ฉ์์ง๊ฐ ํ์๋ฉ๋๋ค. ์ด๋ฏธ ์กด์ฌํ๋ Gump์ ๋ก์ปฌ ํ๋๋ฅผ ๋ณ๊ฒฝํ๊ณ ์ ์ฐฝ์ ๊ธฐ๋ค๋ฆฌ๋ ํํฌ๋ฅผ ๋ฑ๋กํ์ง ์์ต๋๋ค.
- ์ฒดํฌ๋ฐ์ค/ํ ์คํธ ํญ๋ชฉ์ ๋ณ๊ฒฝํด๋ ์๋ฒ ์์ฒด์ ์๋ต์ด ์ ์ก๋์ง ์์ต๋๋ค. ์ ํ๋ฅผ ๋ฐ์ผ๋ ค๋ฉด SendGumpSelect/WaitGump ๋ฒํผ์ ์ ํํ์ธ์. ๋ผ๋์ค ๋ฒํผ์ ๋ณ๋์ ๋ณด๊ธฐ์์ ์ฒ๋ฆฌ๋ฉ๋๋ค.
๊ฐ ์์ ๋ ๋ณ๋์ ํ์ผ .csx๋ก ์ ์ฅํ๊ณ IDE์์ ์คํํ ์ ์์ต๋๋ค. UO ๊ฐ์ฒด์ ๋๊ธฐ ๊ธฐ๋ฅ์ ํ์ฌ ๊ฒ์ ์ธ์
์ ํธ์คํธ๋ฅผ ์ ๊ณตํฉ๋๋ค. ๋ฐ๋ชจ serial ์ด๋ฆ, ์ขํ, ์ฃผ์๋ฅผ ์์ ์ ๊ฒ์ผ๋ก ๋ฐ๊พธ์ธ์.
์ด ์ฝ๋๋ฅผ ๋ณ๋์ .csx ํ์ผ๋ก ์คํํ์ธ์. ์ธ์๋ ํธ์ถ์ ์ง์ ํ์๋ฉ๋๋ค. ์์ ์ ์ด๋ฆ, serial, ์ฃผ์๋ฅผ ์์ ์ ๊ฐ์ผ๋ก ๋ฐ๊พธ์ธ์.
๋ช ๋ น์ ๋ ๋ฆฝ๋ ๋ฌธ์ ๋๋ค. ์์ ๋ฉ์์ง๋ ํธ์ถ ์์์ ๋ํ๋ด๋ฉฐ ์๋ฒ ๋์์ ์๋ฃ๋ฅผ ํ์ธํ์ง ์์ต๋๋ค.
UO.Print("Calling UO.SetGump");
UO.SetGump("checkbox", 0, 1);๋งค๊ฐ๋ณ์์ ์คํ ํ๋ฆ:
- ๊ธฐ์กด ์๋ฒ ๊ฒํ์ ํ๋๋ฅผ ๋ณ๊ฒฝํฉ๋๋ค.
if (Truth(UO.GetGumpsCount() > 0))
{
UO.SetGump("checkbox", 0, 1);
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;๋งค๊ฐ๋ณ์์ ์คํ ํ๋ฆ:
- SetGumpValue ์ ํ TrySetGumpValue; 0๋ฅผ ์ฌ์ฉํ๋ฉด ๋ฉ์์ง๊ฐ ํ์๋ฉ๋๋ค. ์ด๋ฏธ ์กด์ฌํ๋ Gump์ ๋ก์ปฌ ํ๋๋ฅผ ๋ณ๊ฒฝํ๊ณ ์ ์ฐฝ์ ๊ธฐ๋ค๋ฆฌ๋ ํํฌ๋ฅผ ๋ฑ๋กํ์ง ์์ต๋๋ค.
return RunScenario();
object? RunScenario()
{
if (Truth(UO.GetGumpsCount() > 0))
{
UO.SetGump(0, "textentry", 0, "Example");
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;๋งค๊ฐ๋ณ์์ ์คํ ํ๋ฆ:
- ์ฒดํฌ๋ฐ์ค/ํ ์คํธ ํญ๋ชฉ์ ๋ณ๊ฒฝํด๋ ์๋ฒ ์์ฒด์ ์๋ต์ด ์ ์ก๋์ง ์์ต๋๋ค. ์ ํ๋ฅผ ๋ฐ์ผ๋ ค๋ฉด SendGumpSelect/WaitGump ๋ฒํผ์ ์ ํํ์ธ์. ๋ผ๋์ค ๋ฒํผ์ ๋ณ๋์ ๋ณด๊ธฐ์์ ์ฒ๋ฆฌ๋ฉ๋๋ค.
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()
{
if (Truth(UO.GetGumpsCount() > 0))
{
UO.SetGump("radio", 0, "true");
UO.SetGump("checkbox", 0, 0);
}
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์ ์ฌ์ฉํ์ธ์.
๋งค๊ฐ๋ณ์: identifier (Any), key (Any), stateValue (Any)
๊ฒฐ๊ณผ: void / Unit.
ํธ์ถ ์:
-
InjectionScript.Runtime.InjectionApiUO.SetGump. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.SetGumpValue:bridge.SetGumpValue(-1, identifier.ToString(), NumberConversions.ToInt(key), stateValue.ToString()). -
InjectionScript.Runtime.InjectionValue.ToString:identifier.ToString(). -
InjectionScript.Runtime.NumberConversions.ToInt:NumberConversions.ToInt(key).
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
public void SetGump(InjectionValue identifier, InjectionValue key, InjectionValue stateValue)
=> bridge.SetGumpValue(-1, identifier.ToString(), NumberConversions.ToInt(key), stateValue.ToString());๋งค๊ฐ๋ณ์: gumpId (Any), identifier (Any), key (Any), stateValue (Any)
๊ฒฐ๊ณผ: void / Unit.
ํธ์ถ ์:
-
InjectionScript.Runtime.InjectionApiUO.SetGump. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.SetGumpValue:bridge.SetGumpValue(NumberConversions.ToInt(gumpId), identifier.ToString(), NumberConversions.ToInt(key), stateValue.ToString()). -
InjectionScript.Runtime.NumberConversions.ToInt:NumberConversions.ToInt(gumpId). -
InjectionScript.Runtime.InjectionValue.ToString:identifier.ToString().
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
public void SetGump(InjectionValue gumpId, InjectionValue identifier, InjectionValue key, InjectionValue stateValue)
=> bridge.SetGumpValue(NumberConversions.ToInt(gumpId), identifier.ToString(), NumberConversions.ToInt(key), stateValue.ToString());ะฃะบัะฐัะฝััะบะฐ ยท ะ ัััะบะธะน ยท English ยท Deutsch ยท Franรงais ยท Italiano ยท Espaรฑol ยท ็น้ซไธญๆ ยท ๆฅๆฌ่ช ยท ํ๊ตญ์ด
void UO.WaitGump(object? value);
void UO.WaitGump(object? trigger1, object? trigger2);
void UO.WaitGump(object? trigger1, object? trigger2, object? trigger3);
void UO.WaitGump(object? trigger1, object? trigger2, object? trigger3, object? trigger4);
void UO.WaitGump(object? trigger1, object? trigger2, object? trigger3, object? trigger4, object? trigger5);
void UO.WaitGump(object? trigger1, object? trigger2, object? trigger3, object? trigger4, object? trigger5, object? trigger6);
void UO.WaitGump(object? trigger1, object? trigger2, object? trigger3, object? trigger4, object? trigger5, object? trigger6, object? trigger7);
void UO.WaitGump(object? trigger1, object? trigger2, object? trigger3, object? trigger4, object? trigger5, object? trigger6, object? trigger7, object? trigger8);
void UO.WaitGump(object? trigger1, object? trigger2, object? trigger3, object? trigger4, object? trigger5, object? trigger6, object? trigger7, object? trigger8, object? trigger9);
void UO.WaitGump(object? trigger1, object? trigger2, object? trigger3, object? trigger4, object? trigger5, object? trigger6, object? trigger7, object? trigger8, object? trigger9, object? trigger10);
void UO.WaitGump(object? trigger1, object? trigger2, object? trigger3, object? trigger4, object? trigger5, object? trigger6, object? trigger7, object? trigger8, object? trigger9, object? trigger10, object? trigger11);
void UO.WaitGump(object? trigger1, object? trigger2, object? trigger3, object? trigger4, object? trigger5, object? trigger6, object? trigger7, object? trigger8, object? trigger9, object? trigger10, object? trigger11, object? trigger12);
void UO.WaitGump(object? trigger1, object? trigger2, object? trigger3, object? trigger4, object? trigger5, object? trigger6, object? trigger7, object? trigger8, object? trigger9, object? trigger10, object? trigger11, object? trigger12, object? trigger13);
void UO.WaitGump(object? trigger1, object? trigger2, object? trigger3, object? trigger4, object? trigger5, object? trigger6, object? trigger7, object? trigger8, object? trigger9, object? trigger10, object? trigger11, object? trigger12, object? trigger13, object? trigger14);
void UO.WaitGump(object? trigger1, object? trigger2, object? trigger3, object? trigger4, object? trigger5, object? trigger6, object? trigger7, object? trigger8, object? trigger9, object? trigger10, object? trigger11, object? trigger12, object? trigger13, object? trigger14, object? trigger15);
void UO.WaitGump(object? trigger1, object? trigger2, object? trigger3, object? trigger4, object? trigger5, object? trigger6, object? trigger7, object? trigger8, object? trigger9, object? trigger10, object? trigger11, object? trigger12, object? trigger13, object? trigger14, object? trigger15, object? trigger16);๋ฒํผ์ ๋ํ ์ผ๋ จ์ ์ผํ์ฑ ์๋ต์ ๋ฑ๋กํฉ๋๋ค. ์คํฌ๋ฆฝํธ๋ ์ฆ์ ๊ณ์ ์คํ๋ฉ๋๋ค. ์ฐฝ์ด ์์ด๋ 30์ด ์ง์ฐ์ด ๋ฐ์ํ์ง ์์ต๋๋ค.
-
valueโ ์ํ์ค ์์: int ButtonID, ์ซ์ string, |/์ผํ๊ฐ ์๋ ๋ฌธ์์ด ๋๋ ์ด๋ฌํ ์์์ ๋ฐฐ์ด. ์์๋ ์ผ์ชฝ์์ ์ค๋ฅธ์ชฝ์ ๋๋ค. ์ผ๋ฐ์ ์ธ ๊ฒฝ๊ณ ๋ฐ ๊ท์น triggerId์ด ์ ์ฉ๋ฉ๋๋ค. ๊ฐ์ ๋ฐฐ์ด๋ ํ์ฉํ๋ object? ํ์์ ์ ์ผํ ๋งค๊ฐ๋ณ์ ์ด๋ฆ์ ๋๋ค. -
trigger1โ ์ํ์ค ์์: int ButtonID, ์ซ์ string, |/์ผํ๊ฐ ์๋ ๋ฌธ์์ด ๋๋ ์ด๋ฌํ ์์์ ๋ฐฐ์ด. ์์๋ ์ผ์ชฝ์์ ์ค๋ฅธ์ชฝ์ ๋๋ค. ์ผ๋ฐ์ ์ธ ๊ฒฝ๊ณ ๋ฐ ๊ท์น triggerId์ด ์ ์ฉ๋ฉ๋๋ค. ๊ฐ์ ๋ฐฐ์ด๋ ํ์ฉํ๋ object? ํ์์ ์ ์ผํ ๋งค๊ฐ๋ณ์ ์ด๋ฆ์ ๋๋ค. -
trigger2โ ์ํ์ค ์์: int ButtonID, ์ซ์ string, |/์ผํ๊ฐ ์๋ ๋ฌธ์์ด ๋๋ ์ด๋ฌํ ์์์ ๋ฐฐ์ด. ์์๋ ์ผ์ชฝ์์ ์ค๋ฅธ์ชฝ์ ๋๋ค. ์ผ๋ฐ์ ์ธ ๊ฒฝ๊ณ ๋ฐ ๊ท์น triggerId์ด ์ ์ฉ๋ฉ๋๋ค. ๊ฐ์ ๋ฐฐ์ด๋ ํ์ฉํ๋ object? ํ์์ ์ ์ผํ ๋งค๊ฐ๋ณ์ ์ด๋ฆ์ ๋๋ค. -
trigger3โ ์ํ์ค ์์: int ButtonID, ์ซ์ string, |/์ผํ๊ฐ ์๋ ๋ฌธ์์ด ๋๋ ์ด๋ฌํ ์์์ ๋ฐฐ์ด. ์์๋ ์ผ์ชฝ์์ ์ค๋ฅธ์ชฝ์ ๋๋ค. ์ผ๋ฐ์ ์ธ ๊ฒฝ๊ณ ๋ฐ ๊ท์น triggerId์ด ์ ์ฉ๋ฉ๋๋ค. ๊ฐ์ ๋ฐฐ์ด๋ ํ์ฉํ๋ object? ํ์์ ์ ์ผํ ๋งค๊ฐ๋ณ์ ์ด๋ฆ์ ๋๋ค. -
trigger4โ ์ํ์ค ์์: int ButtonID, ์ซ์ string, |/์ผํ๊ฐ ์๋ ๋ฌธ์์ด ๋๋ ์ด๋ฌํ ์์์ ๋ฐฐ์ด. ์์๋ ์ผ์ชฝ์์ ์ค๋ฅธ์ชฝ์ ๋๋ค. ์ผ๋ฐ์ ์ธ ๊ฒฝ๊ณ ๋ฐ ๊ท์น triggerId์ด ์ ์ฉ๋ฉ๋๋ค. ๊ฐ์ ๋ฐฐ์ด๋ ํ์ฉํ๋ object? ํ์์ ์ ์ผํ ๋งค๊ฐ๋ณ์ ์ด๋ฆ์ ๋๋ค. -
trigger5โ ์ํ์ค ์์: int ButtonID, ์ซ์ string, |/์ผํ๊ฐ ์๋ ๋ฌธ์์ด ๋๋ ์ด๋ฌํ ์์์ ๋ฐฐ์ด. ์์๋ ์ผ์ชฝ์์ ์ค๋ฅธ์ชฝ์ ๋๋ค. ์ผ๋ฐ์ ์ธ ๊ฒฝ๊ณ ๋ฐ ๊ท์น triggerId์ด ์ ์ฉ๋ฉ๋๋ค. ๊ฐ์ ๋ฐฐ์ด๋ ํ์ฉํ๋ object? ํ์์ ์ ์ผํ ๋งค๊ฐ๋ณ์ ์ด๋ฆ์ ๋๋ค. -
trigger6โ ์ํ์ค ์์: int ButtonID, ์ซ์ string, |/์ผํ๊ฐ ์๋ ๋ฌธ์์ด ๋๋ ์ด๋ฌํ ์์์ ๋ฐฐ์ด. ์์๋ ์ผ์ชฝ์์ ์ค๋ฅธ์ชฝ์ ๋๋ค. ์ผ๋ฐ์ ์ธ ๊ฒฝ๊ณ ๋ฐ ๊ท์น triggerId์ด ์ ์ฉ๋ฉ๋๋ค. ๊ฐ์ ๋ฐฐ์ด๋ ํ์ฉํ๋ object? ํ์์ ์ ์ผํ ๋งค๊ฐ๋ณ์ ์ด๋ฆ์ ๋๋ค. -
trigger7โ ์ํ์ค ์์: int ButtonID, ์ซ์ string, |/์ผํ๊ฐ ์๋ ๋ฌธ์์ด ๋๋ ์ด๋ฌํ ์์์ ๋ฐฐ์ด. ์์๋ ์ผ์ชฝ์์ ์ค๋ฅธ์ชฝ์ ๋๋ค. ์ผ๋ฐ์ ์ธ ๊ฒฝ๊ณ ๋ฐ ๊ท์น triggerId์ด ์ ์ฉ๋ฉ๋๋ค. ๊ฐ์ ๋ฐฐ์ด๋ ํ์ฉํ๋ object? ํ์์ ์ ์ผํ ๋งค๊ฐ๋ณ์ ์ด๋ฆ์ ๋๋ค. -
trigger8โ ์ํ์ค ์์: int ButtonID, ์ซ์ string, |/์ผํ๊ฐ ์๋ ๋ฌธ์์ด ๋๋ ์ด๋ฌํ ์์์ ๋ฐฐ์ด. ์์๋ ์ผ์ชฝ์์ ์ค๋ฅธ์ชฝ์ ๋๋ค. ์ผ๋ฐ์ ์ธ ๊ฒฝ๊ณ ๋ฐ ๊ท์น triggerId์ด ์ ์ฉ๋ฉ๋๋ค. ๊ฐ์ ๋ฐฐ์ด๋ ํ์ฉํ๋ object? ํ์์ ์ ์ผํ ๋งค๊ฐ๋ณ์ ์ด๋ฆ์ ๋๋ค. -
trigger9โ ์ํ์ค ์์: int ButtonID, ์ซ์ string, |/์ผํ๊ฐ ์๋ ๋ฌธ์์ด ๋๋ ์ด๋ฌํ ์์์ ๋ฐฐ์ด. ์์๋ ์ผ์ชฝ์์ ์ค๋ฅธ์ชฝ์ ๋๋ค. ์ผ๋ฐ์ ์ธ ๊ฒฝ๊ณ ๋ฐ ๊ท์น triggerId์ด ์ ์ฉ๋ฉ๋๋ค. ๊ฐ์ ๋ฐฐ์ด๋ ํ์ฉํ๋ object? ํ์์ ์ ์ผํ ๋งค๊ฐ๋ณ์ ์ด๋ฆ์ ๋๋ค. -
trigger10โ ์ํ์ค ์์: int ButtonID, ์ซ์ string, |/์ผํ๊ฐ ์๋ ๋ฌธ์์ด ๋๋ ์ด๋ฌํ ์์์ ๋ฐฐ์ด. ์์๋ ์ผ์ชฝ์์ ์ค๋ฅธ์ชฝ์ ๋๋ค. ์ผ๋ฐ์ ์ธ ๊ฒฝ๊ณ ๋ฐ ๊ท์น triggerId์ด ์ ์ฉ๋ฉ๋๋ค. ๊ฐ์ ๋ฐฐ์ด๋ ํ์ฉํ๋ object? ํ์์ ์ ์ผํ ๋งค๊ฐ๋ณ์ ์ด๋ฆ์ ๋๋ค. -
trigger11โ ์ํ์ค ์์: int ButtonID, ์ซ์ string, |/์ผํ๊ฐ ์๋ ๋ฌธ์์ด ๋๋ ์ด๋ฌํ ์์์ ๋ฐฐ์ด. ์์๋ ์ผ์ชฝ์์ ์ค๋ฅธ์ชฝ์ ๋๋ค. ์ผ๋ฐ์ ์ธ ๊ฒฝ๊ณ ๋ฐ ๊ท์น triggerId์ด ์ ์ฉ๋ฉ๋๋ค. ๊ฐ์ ๋ฐฐ์ด๋ ํ์ฉํ๋ object? ํ์์ ์ ์ผํ ๋งค๊ฐ๋ณ์ ์ด๋ฆ์ ๋๋ค. -
trigger12โ ์ํ์ค ์์: int ButtonID, ์ซ์ string, |/์ผํ๊ฐ ์๋ ๋ฌธ์์ด ๋๋ ์ด๋ฌํ ์์์ ๋ฐฐ์ด. ์์๋ ์ผ์ชฝ์์ ์ค๋ฅธ์ชฝ์ ๋๋ค. ์ผ๋ฐ์ ์ธ ๊ฒฝ๊ณ ๋ฐ ๊ท์น triggerId์ด ์ ์ฉ๋ฉ๋๋ค. ๊ฐ์ ๋ฐฐ์ด๋ ํ์ฉํ๋ object? ํ์์ ์ ์ผํ ๋งค๊ฐ๋ณ์ ์ด๋ฆ์ ๋๋ค. -
trigger13โ ์ํ์ค ์์: int ButtonID, ์ซ์ string, |/์ผํ๊ฐ ์๋ ๋ฌธ์์ด ๋๋ ์ด๋ฌํ ์์์ ๋ฐฐ์ด. ์์๋ ์ผ์ชฝ์์ ์ค๋ฅธ์ชฝ์ ๋๋ค. ์ผ๋ฐ์ ์ธ ๊ฒฝ๊ณ ๋ฐ ๊ท์น triggerId์ด ์ ์ฉ๋ฉ๋๋ค. ๊ฐ์ ๋ฐฐ์ด๋ ํ์ฉํ๋ object? ํ์์ ์ ์ผํ ๋งค๊ฐ๋ณ์ ์ด๋ฆ์ ๋๋ค. -
trigger14โ ์ํ์ค ์์: int ButtonID, ์ซ์ string, |/์ผํ๊ฐ ์๋ ๋ฌธ์์ด ๋๋ ์ด๋ฌํ ์์์ ๋ฐฐ์ด. ์์๋ ์ผ์ชฝ์์ ์ค๋ฅธ์ชฝ์ ๋๋ค. ์ผ๋ฐ์ ์ธ ๊ฒฝ๊ณ ๋ฐ ๊ท์น triggerId์ด ์ ์ฉ๋ฉ๋๋ค. ๊ฐ์ ๋ฐฐ์ด๋ ํ์ฉํ๋ object? ํ์์ ์ ์ผํ ๋งค๊ฐ๋ณ์ ์ด๋ฆ์ ๋๋ค. -
trigger15โ ์ํ์ค ์์: int ButtonID, ์ซ์ string, |/์ผํ๊ฐ ์๋ ๋ฌธ์์ด ๋๋ ์ด๋ฌํ ์์์ ๋ฐฐ์ด. ์์๋ ์ผ์ชฝ์์ ์ค๋ฅธ์ชฝ์ ๋๋ค. ์ผ๋ฐ์ ์ธ ๊ฒฝ๊ณ ๋ฐ ๊ท์น triggerId์ด ์ ์ฉ๋ฉ๋๋ค. ๊ฐ์ ๋ฐฐ์ด๋ ํ์ฉํ๋ object? ํ์์ ์ ์ผํ ๋งค๊ฐ๋ณ์ ์ด๋ฆ์ ๋๋ค. -
trigger16โ ์ํ์ค ์์: int ButtonID, ์ซ์ string, |/์ผํ๊ฐ ์๋ ๋ฌธ์์ด ๋๋ ์ด๋ฌํ ์์์ ๋ฐฐ์ด. ์์๋ ์ผ์ชฝ์์ ์ค๋ฅธ์ชฝ์ ๋๋ค. ์ผ๋ฐ์ ์ธ ๊ฒฝ๊ณ ๋ฐ ๊ท์น triggerId์ด ์ ์ฉ๋ฉ๋๋ค. ๊ฐ์ ๋ฐฐ์ด๋ ํ์ฉํ๋ object? ํ์์ ์ ์ผํ ๋งค๊ฐ๋ณ์ ์ด๋ฆ์ ๋๋ค.
void - ์๋ฌด๊ฒ๋ ๋ฐํํ์ง ์์ต๋๋ค. ์ฑ๊ณต๋, ์ ๊ฐ๋, ์๋ฒ ํ์ธ๋ ๋ฐํ๋์ง ์์ต๋๋ค.
- ์ํ๋ ButtonID๊ฐ ์๋ ์ค์ ํ์ฑํ ๋ฒํผ์ ์ฐพ์ต๋๋ค. ํ์ ๋ฒํผ์ด ์๋ ํ์ด์ง ๋ฐ ์ฐฝ ์ ํ ๋ฒํผ์ ๊ฑด๋๋๋๋ค. ํ์ ID๋ ์ฒซ ๋ฒ์งธ ๋๊ธฐ๋ฅผ ์ฐํํ์ง ์์ต๋๋ค. ํ๋์ ๋งํฌ์ ์ ๋ฌ์ ๊ฒฝ์ฐ - ํ๋์ ์ฐฝ์ ํ๋ ์ด์์ ์๋ต์ด ์์ต๋๋ค. ์ ๋ฐ์ดํธ๋ ๋งํฌ์ ์ ๋์ผํ ์ฐฝ ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.
- ๋์ผํ ์คํฌ๋ฆฝํธ์ ๋ค์ WaitGump๋ ๋ณด๋ฅ ์ค์ธ ์ํ์ค๋ฅผ ์๋ฃํฉ๋๋ค. ๊ฒ์์ GumpID์๋ง ๊ตญํ๋์ง ์์ต๋๋ค. ์ ํํ ์ ํ์ ์ํด NumGumpButton ๋๋ SendGumpSelect๋ฅผ ์ฌ์ฉํ์ธ์. ButtonID=0๋ ID 0์ ๊ธฐ์กด ํ์ฑํ ๋ฒํผ์ด ์๋ ๊ฒฝ์ฐ์๋ง ์๋ํฉ๋๋ค. ์ด๋ ๋ณดํธ์ ์ธ ํ์๊ฐ ์๋๋๋ค.
- ์ ์ฐจ๊ฐ ์ ์์ ์ผ๋ก ์๋ฃ๋๋ฉด ๋๊ธฐ ์๊ฐ์ด ์ ์ฝ๋ฉ๋๋ค. ์์ ์๋ฅผ ์ทจ์ํ๊ฑฐ๋ ๊ทธ์ ์ด๋ฆ์ผ๋ก Terminate์ ์ ๋ ฅํ๋ฉด ๋๊ธฐ ์๊ฐ์ด ์ ๊ฑฐ๋ฉ๋๋ค. TerminateAll๋ ์ ์ฐจ ์๋ฃ ํ ๋จ์ ๋ด์ฉ์ ํฌํจํ์ฌ ๋ชจ๋ ๋ด์ฉ์ ์ญ์ ํฉ๋๋ค. ์ธ์์ ๋ฐ๊พธ๋ฉด ๋๊ธฐ์ด์ด ์ง์์ง๋๋ค. ๊ธฐ๋์น๋ ํ๋กํ์ ์ ์ฅ๋์ง ์์ต๋๋ค.
๊ฐ ์์ ๋ ๋ณ๋์ ํ์ผ .csx๋ก ์ ์ฅํ๊ณ IDE์์ ์คํํ ์ ์์ต๋๋ค. UO ๊ฐ์ฒด์ ๋๊ธฐ ๊ธฐ๋ฅ์ ํ์ฌ ๊ฒ์ ์ธ์
์ ํธ์คํธ๋ฅผ ์ ๊ณตํฉ๋๋ค. ๋ฐ๋ชจ serial ์ด๋ฆ, ์ขํ, ์ฃผ์๋ฅผ ์์ ์ ๊ฒ์ผ๋ก ๋ฐ๊พธ์ธ์.
์ด ์ฝ๋๋ฅผ ๋ณ๋์ .csx ํ์ผ๋ก ์คํํ์ธ์. ์ธ์๋ ํธ์ถ์ ์ง์ ํ์๋ฉ๋๋ค. ์์ ์ ์ด๋ฆ, serial, ์ฃผ์๋ฅผ ์์ ์ ๊ฐ์ผ๋ก ๋ฐ๊พธ์ธ์.
๋ช ๋ น์ ๋ ๋ฆฝ๋ ๋ฌธ์ ๋๋ค. ์์ ๋ฉ์์ง๋ ํธ์ถ ์์์ ๋ํ๋ด๋ฉฐ ์๋ฒ ๋์์ ์๋ฃ๋ฅผ ํ์ธํ์ง ์์ต๋๋ค.
UO.Print("Calling UO.WaitGump");
UO.WaitGump(100);๋งค๊ฐ๋ณ์์ ์คํ ํ๋ฆ:
- 100 โ ์๋ต์ ButtonID์ ๋๋ค. WaitGump๋ UseObject ์ด์ ์ ๋ฑ๋กํฉ๋๋ค. ์ถ๊ฐ ์คํ์ด ์๋ฒ๊ฐ ์ด๋ฏธ ์๋ต์ ์๋ฝํ๋ค๋ ์๋ฏธ๋ ์๋๋๋ค.
UO.WaitGump(100);
UO.UseObject("0x40001234");๋งค๊ฐ๋ณ์์ ์คํ ํ๋ฆ:
- 7, 22 ๋ฐ 1๋ ์์ฐจ ํ์์ ButtonID์ ๋๋ค. ID๋ ์์๋๋ก ํ์ธ๋ฉ๋๋ค. ์ธ์ ์๋ ์ง์ฐ์ ์ง์ ํ์ง ์์ต๋๋ค. ํธ์ถ์ ์ ์ฒด ์ํ์ค๋ฅผ ๊ธฐ๋กํฉ๋๋ค.
return RunScenario();
object? RunScenario()
{
UO.WaitGump(7, 22, 1);
UO.UseObject("0x40001234");
return null;
}๋งค๊ฐ๋ณ์์ ์คํ ํ๋ฆ:
- 7|22|1 ์ค์ ๋์ผํ ์์๋ฅผ ์ง์ ํฉ๋๋ค. TerminateAll ๊ทธ๋ฐ ๋ค์ ๋ณด๋ฅ ์ค์ธ ๋ชจ๋ ๊ฒํ๋ฅผ ์ง์ฐ๊ณ ๋ชจ๋ ์ ์ฐจ๋ฅผ ์ค์งํฉ๋๋ค. ์ด๊ฒ์ ์ธ๊ณ์ ์ธ ํ๋์ ๋๋ค.
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.WaitGump("7|22|1");
UO.TerminateAll();
return null;
}
}C#์ ๋์๋ฌธ์๋ฅผ ๊ตฌ๋ถํฉ๋๋ค. ์ ํํ UO ์ด๋ฆ์ ์ฌ์ฉํ์ธ์. ์ซ์ ํ๋๊ทธ๋ 0๊ณผ ๋น๊ตํ๊ณ ๋ฐํ ํ์์ด bool์ผ ๋๋ง bool์ ์ฌ์ฉํ์ธ์.
๋งค๊ฐ๋ณ์: value (Any/Integer/String)
๊ฒฐ๊ณผ: void / Unit.
ํธ์ถ ์:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
InjectionScript.Runtime.InjectionApiUO.CompactWaitGump:CompactWaitGump(arguments).
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
case "waitgump": CompactWaitGump(arguments); return InjectionValue.Unit;๋งค๊ฐ๋ณ์: value (Any/Integer/String)
๊ฒฐ๊ณผ: void / Unit.
ํธ์ถ ์:
-
InjectionScript.Runtime.InjectionApiUO.WaitGump. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.WaitGumpSelect:bridge.WaitGumpSelect(triggerId, 30_000).
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
public void WaitGump(int triggerId)
{
if (bridge is IApiGumpAutomation automation) automation.QueueGumpButtons(new[] { triggerId });
else bridge.WaitGumpSelect(triggerId, 30_000);
}๋งค๊ฐ๋ณ์: value (Any/Integer/String)
๊ฒฐ๊ณผ: void / Unit.
ํธ์ถ ์:
-
InjectionScript.Runtime.InjectionApiUO.WaitGump. -
InjectionScript.Runtime.InjectionApiUO.CompactWaitGump:CompactWaitGump(chain). -
InjectionScript.Runtime.InjectionApiUO.WaitGump:WaitGump(NumberConversions.ToInt(triggerId)). -
InjectionScript.Runtime.NumberConversions.ToInt:NumberConversions.ToInt(triggerId).
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
public void WaitGump(string triggerId)
{
string text = (triggerId ?? string.Empty).Trim();
if (text.Contains('|') || text.Contains(','))
{
InjectionValue[] chain = text.Split(new[] { '|', ',' }, StringSplitOptions.RemoveEmptyEntries)
.Select(value => new InjectionValue(value.Trim())).ToArray();
CompactWaitGump(chain);
return;
}
WaitGump(NumberConversions.ToInt(triggerId));
}๋งค๊ฐ๋ณ์: trigger1 (Any), trigger2 (Any)
๊ฒฐ๊ณผ: void / Unit.
ํธ์ถ ์:
-
InjectionScript.Runtime.InjectionApiUO.Register [WaitGump]. -
InjectionScript.Runtime.InjectionApiUO.CompactWaitGump:CompactWaitGump(values).
ํธ์ถ ์ ์ ์ฅ๋ ์ฒ๋ฆฌ๊ธฐ delegate๋ฅผ ์คํํฉ๋๋ค. ๋ฑ๋ก ๋ฉ์๋๋ API๋ฅผ ๊ตฌ์ฑํ ๋ ์ด delegate๋ฅผ ๋ง๋ญ๋๋ค.
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
values =>
{
CompactWaitGump(values);
return InjectionValue.Unit;
}๋งค๊ฐ๋ณ์: trigger1 (Any), trigger2 (Any), trigger3 (Any)
๊ฒฐ๊ณผ: void / Unit.
ํธ์ถ ์:
-
InjectionScript.Runtime.InjectionApiUO.Register [WaitGump]. -
InjectionScript.Runtime.InjectionApiUO.CompactWaitGump:CompactWaitGump(values).
ํธ์ถ ์ ์ ์ฅ๋ ์ฒ๋ฆฌ๊ธฐ delegate๋ฅผ ์คํํฉ๋๋ค. ๋ฑ๋ก ๋ฉ์๋๋ API๋ฅผ ๊ตฌ์ฑํ ๋ ์ด delegate๋ฅผ ๋ง๋ญ๋๋ค.
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
values =>
{
CompactWaitGump(values);
return InjectionValue.Unit;
}๋งค๊ฐ๋ณ์: trigger1 (Any), trigger2 (Any), trigger3 (Any), trigger4 (Any)
๊ฒฐ๊ณผ: void / Unit.
ํธ์ถ ์:
-
InjectionScript.Runtime.InjectionApiUO.Register [WaitGump]. -
InjectionScript.Runtime.InjectionApiUO.CompactWaitGump:CompactWaitGump(values).
ํธ์ถ ์ ์ ์ฅ๋ ์ฒ๋ฆฌ๊ธฐ delegate๋ฅผ ์คํํฉ๋๋ค. ๋ฑ๋ก ๋ฉ์๋๋ API๋ฅผ ๊ตฌ์ฑํ ๋ ์ด delegate๋ฅผ ๋ง๋ญ๋๋ค.
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
values =>
{
CompactWaitGump(values);
return InjectionValue.Unit;
}๋งค๊ฐ๋ณ์: trigger1 (Any), trigger2 (Any), trigger3 (Any), trigger4 (Any), trigger5 (Any)
๊ฒฐ๊ณผ: void / Unit.
ํธ์ถ ์:
-
InjectionScript.Runtime.InjectionApiUO.Register [WaitGump]. -
InjectionScript.Runtime.InjectionApiUO.CompactWaitGump:CompactWaitGump(values).
ํธ์ถ ์ ์ ์ฅ๋ ์ฒ๋ฆฌ๊ธฐ delegate๋ฅผ ์คํํฉ๋๋ค. ๋ฑ๋ก ๋ฉ์๋๋ API๋ฅผ ๊ตฌ์ฑํ ๋ ์ด delegate๋ฅผ ๋ง๋ญ๋๋ค.
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
values =>
{
CompactWaitGump(values);
return InjectionValue.Unit;
}
UO.WaitGump(trigger1, trigger2, trigger3, trigger4, trigger5, trigger6) โ UO.WaitGump(Any,Any,Any,Any,Any,Any)
๋งค๊ฐ๋ณ์: trigger1 (Any), trigger2 (Any), trigger3 (Any), trigger4 (Any), trigger5 (Any), trigger6 (Any)
๊ฒฐ๊ณผ: void / Unit.
ํธ์ถ ์:
-
InjectionScript.Runtime.InjectionApiUO.Register [WaitGump]. -
InjectionScript.Runtime.InjectionApiUO.CompactWaitGump:CompactWaitGump(values).
ํธ์ถ ์ ์ ์ฅ๋ ์ฒ๋ฆฌ๊ธฐ delegate๋ฅผ ์คํํฉ๋๋ค. ๋ฑ๋ก ๋ฉ์๋๋ API๋ฅผ ๊ตฌ์ฑํ ๋ ์ด delegate๋ฅผ ๋ง๋ญ๋๋ค.
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
values =>
{
CompactWaitGump(values);
return InjectionValue.Unit;
}
UO.WaitGump(trigger1, trigger2, trigger3, trigger4, trigger5, trigger6, trigger7) โ UO.WaitGump(Any,Any,Any,Any,Any,Any,Any)
๋งค๊ฐ๋ณ์: trigger1 (Any), trigger2 (Any), trigger3 (Any), trigger4 (Any), trigger5 (Any), trigger6 (Any), trigger7 (Any)
๊ฒฐ๊ณผ: void / Unit.
ํธ์ถ ์:
-
InjectionScript.Runtime.InjectionApiUO.Register [WaitGump]. -
InjectionScript.Runtime.InjectionApiUO.CompactWaitGump:CompactWaitGump(values).
ํธ์ถ ์ ์ ์ฅ๋ ์ฒ๋ฆฌ๊ธฐ delegate๋ฅผ ์คํํฉ๋๋ค. ๋ฑ๋ก ๋ฉ์๋๋ API๋ฅผ ๊ตฌ์ฑํ ๋ ์ด delegate๋ฅผ ๋ง๋ญ๋๋ค.
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
values =>
{
CompactWaitGump(values);
return InjectionValue.Unit;
}
UO.WaitGump(trigger1, trigger2, trigger3, trigger4, trigger5, trigger6, trigger7, trigger8) โ UO.WaitGump(Any,Any,Any,Any,Any,Any,Any,Any)
๋งค๊ฐ๋ณ์: trigger1 (Any), trigger2 (Any), trigger3 (Any), trigger4 (Any), trigger5 (Any), trigger6 (Any), trigger7 (Any), trigger8 (Any)
๊ฒฐ๊ณผ: void / Unit.
ํธ์ถ ์:
-
InjectionScript.Runtime.InjectionApiUO.Register [WaitGump]. -
InjectionScript.Runtime.InjectionApiUO.CompactWaitGump:CompactWaitGump(values).
ํธ์ถ ์ ์ ์ฅ๋ ์ฒ๋ฆฌ๊ธฐ delegate๋ฅผ ์คํํฉ๋๋ค. ๋ฑ๋ก ๋ฉ์๋๋ API๋ฅผ ๊ตฌ์ฑํ ๋ ์ด delegate๋ฅผ ๋ง๋ญ๋๋ค.
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
values =>
{
CompactWaitGump(values);
return InjectionValue.Unit;
}
UO.WaitGump(trigger1, trigger2, trigger3, trigger4, trigger5, trigger6, trigger7, trigger8, trigger9) โ UO.WaitGump(Any,Any,Any,Any,Any,Any,Any,Any,Any)
๋งค๊ฐ๋ณ์: trigger1 (Any), trigger2 (Any), trigger3 (Any), trigger4 (Any), trigger5 (Any), trigger6 (Any), trigger7 (Any), trigger8 (Any), trigger9 (Any)
๊ฒฐ๊ณผ: void / Unit.
ํธ์ถ ์:
-
InjectionScript.Runtime.InjectionApiUO.Register [WaitGump]. -
InjectionScript.Runtime.InjectionApiUO.CompactWaitGump:CompactWaitGump(values).
ํธ์ถ ์ ์ ์ฅ๋ ์ฒ๋ฆฌ๊ธฐ delegate๋ฅผ ์คํํฉ๋๋ค. ๋ฑ๋ก ๋ฉ์๋๋ API๋ฅผ ๊ตฌ์ฑํ ๋ ์ด delegate๋ฅผ ๋ง๋ญ๋๋ค.
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
values =>
{
CompactWaitGump(values);
return InjectionValue.Unit;
}
UO.WaitGump(trigger1, trigger2, trigger3, trigger4, trigger5, trigger6, trigger7, trigger8, trigger9, trigger10) โ UO.WaitGump(Any,Any,Any,Any,Any,Any,Any,Any,Any,Any)
๋งค๊ฐ๋ณ์: trigger1 (Any), trigger2 (Any), trigger3 (Any), trigger4 (Any), trigger5 (Any), trigger6 (Any), trigger7 (Any), trigger8 (Any), trigger9 (Any), trigger10 (Any)
๊ฒฐ๊ณผ: void / Unit.
ํธ์ถ ์:
-
InjectionScript.Runtime.InjectionApiUO.Register [WaitGump]. -
InjectionScript.Runtime.InjectionApiUO.CompactWaitGump:CompactWaitGump(values).
ํธ์ถ ์ ์ ์ฅ๋ ์ฒ๋ฆฌ๊ธฐ delegate๋ฅผ ์คํํฉ๋๋ค. ๋ฑ๋ก ๋ฉ์๋๋ API๋ฅผ ๊ตฌ์ฑํ ๋ ์ด delegate๋ฅผ ๋ง๋ญ๋๋ค.
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
values =>
{
CompactWaitGump(values);
return InjectionValue.Unit;
}
UO.WaitGump(trigger1, trigger2, trigger3, trigger4, trigger5, trigger6, trigger7, trigger8, trigger9, trigger10, trigger11) โ UO.WaitGump(Any,Any,Any,Any,Any,Any,Any,Any,Any,Any,Any)
๋งค๊ฐ๋ณ์: trigger1 (Any), trigger2 (Any), trigger3 (Any), trigger4 (Any), trigger5 (Any), trigger6 (Any), trigger7 (Any), trigger8 (Any), trigger9 (Any), trigger10 (Any), trigger11 (Any)
๊ฒฐ๊ณผ: void / Unit.
ํธ์ถ ์:
-
InjectionScript.Runtime.InjectionApiUO.Register [WaitGump]. -
InjectionScript.Runtime.InjectionApiUO.CompactWaitGump:CompactWaitGump(values).
ํธ์ถ ์ ์ ์ฅ๋ ์ฒ๋ฆฌ๊ธฐ delegate๋ฅผ ์คํํฉ๋๋ค. ๋ฑ๋ก ๋ฉ์๋๋ API๋ฅผ ๊ตฌ์ฑํ ๋ ์ด delegate๋ฅผ ๋ง๋ญ๋๋ค.
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
values =>
{
CompactWaitGump(values);
return InjectionValue.Unit;
}
UO.WaitGump(trigger1, trigger2, trigger3, trigger4, trigger5, trigger6, trigger7, trigger8, trigger9, trigger10, trigger11, trigger12) โ UO.WaitGump(Any,Any,Any,Any,Any,Any,Any,Any,Any,Any,Any,Any)
๋งค๊ฐ๋ณ์: trigger1 (Any), trigger2 (Any), trigger3 (Any), trigger4 (Any), trigger5 (Any), trigger6 (Any), trigger7 (Any), trigger8 (Any), trigger9 (Any), trigger10 (Any), trigger11 (Any), trigger12 (Any)
๊ฒฐ๊ณผ: void / Unit.
ํธ์ถ ์:
-
InjectionScript.Runtime.InjectionApiUO.Register [WaitGump]. -
InjectionScript.Runtime.InjectionApiUO.CompactWaitGump:CompactWaitGump(values).
ํธ์ถ ์ ์ ์ฅ๋ ์ฒ๋ฆฌ๊ธฐ delegate๋ฅผ ์คํํฉ๋๋ค. ๋ฑ๋ก ๋ฉ์๋๋ API๋ฅผ ๊ตฌ์ฑํ ๋ ์ด delegate๋ฅผ ๋ง๋ญ๋๋ค.
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
values =>
{
CompactWaitGump(values);
return InjectionValue.Unit;
}
UO.WaitGump(trigger1, trigger2, trigger3, trigger4, trigger5, trigger6, trigger7, trigger8, trigger9, trigger10, trigger11, trigger12, trigger13) โ UO.WaitGump(Any,Any,Any,Any,Any,Any,Any,Any,Any,Any,Any,Any,Any)
๋งค๊ฐ๋ณ์: trigger1 (Any), trigger2 (Any), trigger3 (Any), trigger4 (Any), trigger5 (Any), trigger6 (Any), trigger7 (Any), trigger8 (Any), trigger9 (Any), trigger10 (Any), trigger11 (Any), trigger12 (Any), trigger13 (Any)
๊ฒฐ๊ณผ: void / Unit.
ํธ์ถ ์:
-
InjectionScript.Runtime.InjectionApiUO.Register [WaitGump]. -
InjectionScript.Runtime.InjectionApiUO.CompactWaitGump:CompactWaitGump(values).
ํธ์ถ ์ ์ ์ฅ๋ ์ฒ๋ฆฌ๊ธฐ delegate๋ฅผ ์คํํฉ๋๋ค. ๋ฑ๋ก ๋ฉ์๋๋ API๋ฅผ ๊ตฌ์ฑํ ๋ ์ด delegate๋ฅผ ๋ง๋ญ๋๋ค.
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
values =>
{
CompactWaitGump(values);
return InjectionValue.Unit;
}
UO.WaitGump(trigger1, trigger2, trigger3, trigger4, trigger5, trigger6, trigger7, trigger8, trigger9, trigger10, trigger11, trigger12, trigger13, trigger14) โ UO.WaitGump(Any,Any,Any,Any,Any,Any,Any,Any,Any,Any,Any,Any,Any,Any)
๋งค๊ฐ๋ณ์: trigger1 (Any), trigger2 (Any), trigger3 (Any), trigger4 (Any), trigger5 (Any), trigger6 (Any), trigger7 (Any), trigger8 (Any), trigger9 (Any), trigger10 (Any), trigger11 (Any), trigger12 (Any), trigger13 (Any), trigger14 (Any)
๊ฒฐ๊ณผ: void / Unit.
ํธ์ถ ์:
-
InjectionScript.Runtime.InjectionApiUO.Register [WaitGump]. -
InjectionScript.Runtime.InjectionApiUO.CompactWaitGump:CompactWaitGump(values).
ํธ์ถ ์ ์ ์ฅ๋ ์ฒ๋ฆฌ๊ธฐ delegate๋ฅผ ์คํํฉ๋๋ค. ๋ฑ๋ก ๋ฉ์๋๋ API๋ฅผ ๊ตฌ์ฑํ ๋ ์ด delegate๋ฅผ ๋ง๋ญ๋๋ค.
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
values =>
{
CompactWaitGump(values);
return InjectionValue.Unit;
}
UO.WaitGump(trigger1, trigger2, trigger3, trigger4, trigger5, trigger6, trigger7, trigger8, trigger9, trigger10, trigger11, trigger12, trigger13, trigger14, trigger15) โ UO.WaitGump(Any,Any,Any,Any,Any,Any,Any,Any,Any,Any,Any,Any,Any,Any,Any)
๋งค๊ฐ๋ณ์: trigger1 (Any), trigger2 (Any), trigger3 (Any), trigger4 (Any), trigger5 (Any), trigger6 (Any), trigger7 (Any), trigger8 (Any), trigger9 (Any), trigger10 (Any), trigger11 (Any), trigger12 (Any), trigger13 (Any), trigger14 (Any), trigger15 (Any)
๊ฒฐ๊ณผ: void / Unit.
ํธ์ถ ์:
-
InjectionScript.Runtime.InjectionApiUO.Register [WaitGump]. -
InjectionScript.Runtime.InjectionApiUO.CompactWaitGump:CompactWaitGump(values).
ํธ์ถ ์ ์ ์ฅ๋ ์ฒ๋ฆฌ๊ธฐ delegate๋ฅผ ์คํํฉ๋๋ค. ๋ฑ๋ก ๋ฉ์๋๋ API๋ฅผ ๊ตฌ์ฑํ ๋ ์ด delegate๋ฅผ ๋ง๋ญ๋๋ค.
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
values =>
{
CompactWaitGump(values);
return InjectionValue.Unit;
}
UO.WaitGump(trigger1, trigger2, trigger3, trigger4, trigger5, trigger6, trigger7, trigger8, trigger9, trigger10, trigger11, trigger12, trigger13, trigger14, trigger15, trigger16) โ UO.WaitGump(Any,Any,Any,Any,Any,Any,Any,Any,Any,Any,Any,Any,Any,Any,Any,Any)
๋งค๊ฐ๋ณ์: trigger1 (Any), trigger2 (Any), trigger3 (Any), trigger4 (Any), trigger5 (Any), trigger6 (Any), trigger7 (Any), trigger8 (Any), trigger9 (Any), trigger10 (Any), trigger11 (Any), trigger12 (Any), trigger13 (Any), trigger14 (Any), trigger15 (Any), trigger16 (Any)
๊ฒฐ๊ณผ: void / Unit.
ํธ์ถ ์:
-
InjectionScript.Runtime.InjectionApiUO.Register [WaitGump]. -
InjectionScript.Runtime.InjectionApiUO.CompactWaitGump:CompactWaitGump(values).
ํธ์ถ ์ ์ ์ฅ๋ ์ฒ๋ฆฌ๊ธฐ delegate๋ฅผ ์คํํฉ๋๋ค. ๋ฑ๋ก ๋ฉ์๋๋ API๋ฅผ ๊ตฌ์ฑํ ๋ ์ด delegate๋ฅผ ๋ง๋ญ๋๋ค.
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
values =>
{
CompactWaitGump(values);
return InjectionValue.Unit;
}ะฃะบัะฐัะฝััะบะฐ ยท ะ ัััะบะธะน ยท English ยท Deutsch ยท Franรงais ยท Italiano ยท Espaรฑol ยท ็น้ซไธญๆ ยท ๆฅๆฌ่ช ยท ํ๊ตญ์ด
void UO.WaitGumpCheck(object? index, object? state);
void UO.WaitGumpCheck(object? index, object? state, object? index2, object? state2);
void UO.WaitGumpCheck(object? index, object? state, object? index2, object? state2, object? index3, object? state3);ํ์ฌ ๊ฒํ์ ์ฒดํฌ๋ฐ์ค ํ๋๋ฅผ ์ต๋ 3๊ฐ๊น์ง ๋ณ๊ฒฝํฉ๋๋ค.
-
indexโ int ID ์์ ๋๋ SetGump์ ๊ฐ์ 0 ์ธ๋ฑ์ค์ ๋๋ค. ์ธ์๋ ์ ํ์, ๊ฐ ์์ผ๋ก ์ ๊ณต๋ฉ๋๋ค. -
index2โ int ID ์์ ๋๋ SetGump์ ๊ฐ์ 0 ์ธ๋ฑ์ค์ ๋๋ค. ์ธ์๋ ์ ํ์, ๊ฐ ์์ผ๋ก ์ ๊ณต๋ฉ๋๋ค. -
index3โ int ID ์์ ๋๋ SetGump์ ๊ฐ์ 0 ์ธ๋ฑ์ค์ ๋๋ค. ์ธ์๋ ์ ํ์, ๊ฐ ์์ผ๋ก ์ ๊ณต๋ฉ๋๋ค. -
stateโ ToString๊น์ง์ ํ๋ ๊ฐ์ ๋๋ค. ํ์ธ๋์๋ "์ ํ๋จ"/"true"/0์ด ์๋ ์ซ์๊ฐ ํฌํจ๋ฉ๋๋ค. textentry๋ ํ ์คํธ๋ฅผ ํ์ฉํฉ๋๋ค. -
state2โ ToString๊น์ง์ ํ๋ ๊ฐ์ ๋๋ค. ํ์ธ๋์๋ "์ ํ๋จ"/"true"/0์ด ์๋ ์ซ์๊ฐ ํฌํจ๋ฉ๋๋ค. textentry๋ ํ ์คํธ๋ฅผ ํ์ฉํฉ๋๋ค. -
state3โ ToString๊น์ง์ ํ๋ ๊ฐ์ ๋๋ค. ํ์ธ๋์๋ "์ ํ๋จ"/"true"/0์ด ์๋ ์ซ์๊ฐ ํฌํจ๋ฉ๋๋ค. textentry๋ ํ ์คํธ๋ฅผ ํ์ฉํฉ๋๋ค.
void - ๊ฐ์ด ์์ต๋๋ค. ๋ณ๋์ ํ์ ์ผ๋ก ์ ํํ์ธ์. ์๋ฃ๋ ์๋ฒ์ ์์ ์ ํ์ธํ์ง ์์ต๋๋ค.
- ExecuteLegacyManualAlias๋ ์์ผ๋ก ์ธ์๋ฅผ ๊ฒํ ํ๊ณ ๊ฐ ์ธ์์ ๋ํด SetGumpValue(-1, "checkbox", selector, value)๋ฅผ ํธ์ถํฉ๋๋ค. ๋ฑ๋ก๋ ๋ชจ๋ ์์์ 2, 4 ๋๋ 6 ์ธ์์ ๋๋ค.
- UO.Wait๋ผ๋ ์ด๋ฆ์ ๋๊ธฐ๋ฅผ ์๋ฏธํ์ง ์์ต๋๋ค. ์ฐจ๋จ๋ ์๊ณ ํฅํ ๊ฒํ๋ฅผ ์ํ ๋๊ธฐ์ด๋ ์์ต๋๋ค. ํ๋๊ฐ ๋๋ฝ๋๋ฉด ์ค๋ฅ๊ฐ ํ์๋ฉ๋๋ค. ๋ฒํผ ์๋ต์ด ์ ์ก๋์ง ์์ต๋๋ค.
๊ฐ ์์ ๋ ๋ณ๋์ ํ์ผ .csx๋ก ์ ์ฅํ๊ณ IDE์์ ์คํํ ์ ์์ต๋๋ค. UO ๊ฐ์ฒด์ ๋๊ธฐ ๊ธฐ๋ฅ์ ํ์ฌ ๊ฒ์ ์ธ์
์ ํธ์คํธ๋ฅผ ์ ๊ณตํฉ๋๋ค. ๋ฐ๋ชจ serial ์ด๋ฆ, ์ขํ, ์ฃผ์๋ฅผ ์์ ์ ๊ฒ์ผ๋ก ๋ฐ๊พธ์ธ์.
์ด ์ฝ๋๋ฅผ ๋ณ๋์ .csx ํ์ผ๋ก ์คํํ์ธ์. ์ธ์๋ ํธ์ถ์ ์ง์ ํ์๋ฉ๋๋ค. ์์ ์ ์ด๋ฆ, serial, ์ฃผ์๋ฅผ ์์ ์ ๊ฐ์ผ๋ก ๋ฐ๊พธ์ธ์.
๋ช ๋ น์ ๋ ๋ฆฝ๋ ๋ฌธ์ ๋๋ค. ์์ ๋ฉ์์ง๋ ํธ์ถ ์์์ ๋ํ๋ด๋ฉฐ ์๋ฒ ๋์์ ์๋ฃ๋ฅผ ํ์ธํ์ง ์์ต๋๋ค.
UO.Print("Calling UO.WaitGumpCheck");
UO.WaitGumpCheck(0, 1);๋งค๊ฐ๋ณ์์ ์คํ ํ๋ฆ:
- ํ์ฌ ๊ฒํ์ ์ฒดํฌ๋ฐ์ค ํ๋๋ฅผ ์ต๋ 3๊ฐ๊น์ง ๋ณ๊ฒฝํฉ๋๋ค.
if (Truth(UO.GetGumpsCount() > 0))
{
UO.WaitGumpCheck(0, 1);
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;๋งค๊ฐ๋ณ์์ ์คํ ํ๋ฆ:
- ExecuteLegacyManualAlias๋ ์์ผ๋ก ์ธ์๋ฅผ ๊ฒํ ํ๊ณ ๊ฐ ์ธ์์ ๋ํด SetGumpValue(-1, "checkbox", selector, value)๋ฅผ ํธ์ถํฉ๋๋ค. ๋ฑ๋ก๋ ๋ชจ๋ ์์์ 2, 4 ๋๋ 6 ์ธ์์ ๋๋ค.
return RunScenario();
object? RunScenario()
{
if (Truth(UO.GetGumpsCount() > 0))
{
UO.WaitGumpCheck(0, 1, 1, 0);
}
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()
{
if (Truth(UO.GetGumpsCount() > 0))
{
UO.WaitGumpCheck(0, 1, 1, 0, 2, 1);
}
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์ ์ฌ์ฉํ์ธ์.
๋งค๊ฐ๋ณ์: index (Any), state (Any)
๊ฒฐ๊ณผ: void / Unit.
ํธ์ถ ์:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.SetGumpValue:bridge.SetGumpValue(-1, "checkbox", Arg(index), Text(index + 1)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias::Arg:Arg(index). -
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias::Text:Text(index + 1).
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
case "waitgumpcheck":
for (int index = 0; index + 1 < arguments.Length; index += 2)
bridge.SetGumpValue(-1, "checkbox", Arg(index), Text(index + 1));
break;๋งค๊ฐ๋ณ์: index (Any), state (Any), index2 (Any), state2 (Any)
๊ฒฐ๊ณผ: void / Unit.
ํธ์ถ ์:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.SetGumpValue:bridge.SetGumpValue(-1, "checkbox", Arg(index), Text(index + 1)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias::Arg:Arg(index). -
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias::Text:Text(index + 1).
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
case "waitgumpcheck":
for (int index = 0; index + 1 < arguments.Length; index += 2)
bridge.SetGumpValue(-1, "checkbox", Arg(index), Text(index + 1));
break;
UO.WaitGumpCheck(index, state, index2, state2, index3, state3) โ UO.WaitGumpCheck(Any,Any,Any,Any,Any,Any)
๋งค๊ฐ๋ณ์: index (Any), state (Any), index2 (Any), state2 (Any), index3 (Any), state3 (Any)
๊ฒฐ๊ณผ: void / Unit.
ํธ์ถ ์:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.SetGumpValue:bridge.SetGumpValue(-1, "checkbox", Arg(index), Text(index + 1)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias::Arg:Arg(index). -
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias::Text:Text(index + 1).
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
case "waitgumpcheck":
for (int index = 0; index + 1 < arguments.Length; index += 2)
bridge.SetGumpValue(-1, "checkbox", Arg(index), Text(index + 1));
break;ะฃะบัะฐัะฝััะบะฐ ยท ะ ัััะบะธะน ยท English ยท Deutsch ยท Franรงais ยท Italiano ยท Espaรฑol ยท ็น้ซไธญๆ ยท ๆฅๆฌ่ช ยท ํ๊ตญ์ด
void UO.WaitGumpEntry(object? index, object? text);
void UO.WaitGumpEntry(object? index, object? text, object? index2, object? text2);
void UO.WaitGumpEntry(object? index, object? text, object? index2, object? text2, object? index3, object? text3);ํ์ฌ ๊ฒํ์ ํ ์คํธ ์ ๋ ฅ ํ๋๋ฅผ ์ต๋ 3๊ฐ๊น์ง ๋ณ๊ฒฝํฉ๋๋ค.
-
indexโ int ID ์์ ๋๋ SetGump์ ๊ฐ์ 0 ์ธ๋ฑ์ค์ ๋๋ค. ์ธ์๋ ์ ํ์, ๊ฐ ์์ผ๋ก ์ ๊ณต๋ฉ๋๋ค. -
index2โ int ID ์์ ๋๋ SetGump์ ๊ฐ์ 0 ์ธ๋ฑ์ค์ ๋๋ค. ์ธ์๋ ์ ํ์, ๊ฐ ์์ผ๋ก ์ ๊ณต๋ฉ๋๋ค. -
index3โ int ID ์์ ๋๋ SetGump์ ๊ฐ์ 0 ์ธ๋ฑ์ค์ ๋๋ค. ์ธ์๋ ์ ํ์, ๊ฐ ์์ผ๋ก ์ ๊ณต๋ฉ๋๋ค. -
textโ ToString๊น์ง์ ํ๋ ๊ฐ์ ๋๋ค. ํ์ธ๋์๋ "์ ํ๋จ"/"true"/0์ด ์๋ ์ซ์๊ฐ ํฌํจ๋ฉ๋๋ค. textentry๋ ํ ์คํธ๋ฅผ ํ์ฉํฉ๋๋ค. -
text2โ ToString๊น์ง์ ํ๋ ๊ฐ์ ๋๋ค. ํ์ธ๋์๋ "์ ํ๋จ"/"true"/0์ด ์๋ ์ซ์๊ฐ ํฌํจ๋ฉ๋๋ค. textentry๋ ํ ์คํธ๋ฅผ ํ์ฉํฉ๋๋ค. -
text3โ ToString๊น์ง์ ํ๋ ๊ฐ์ ๋๋ค. ํ์ธ๋์๋ "์ ํ๋จ"/"true"/0์ด ์๋ ์ซ์๊ฐ ํฌํจ๋ฉ๋๋ค. textentry๋ ํ ์คํธ๋ฅผ ํ์ฉํฉ๋๋ค.
void - ๊ฐ์ด ์์ต๋๋ค. ๋ณ๋์ ํ์ ์ผ๋ก ์ ํํ์ธ์. ์๋ฃ๋ ์๋ฒ์ ์์ ์ ํ์ธํ์ง ์์ต๋๋ค.
- ExecuteLegacyManualAlias๋ ์์ผ๋ก ์ธ์๋ฅผ ๊ฒํ ํ๊ณ ๊ฐ๊ฐ์ ๋ํด SetGumpValue(-1, "textentry", selector, value)๋ฅผ ํธ์ถํฉ๋๋ค. ๋ฑ๋ก๋ ๋ชจ๋ ์์์ 2, 4 ๋๋ 6 ์ธ์์ ๋๋ค.
- UO.Wait๋ผ๋ ์ด๋ฆ์ ๋๊ธฐ๋ฅผ ์๋ฏธํ์ง ์์ต๋๋ค. ์ฐจ๋จ๋ ์๊ณ ํฅํ ๊ฒํ๋ฅผ ์ํ ๋๊ธฐ์ด๋ ์์ต๋๋ค. ํ๋๊ฐ ๋๋ฝ๋๋ฉด ์ค๋ฅ๊ฐ ํ์๋ฉ๋๋ค. ๋ฒํผ ์๋ต์ด ์ ์ก๋์ง ์์ต๋๋ค.
๊ฐ ์์ ๋ ๋ณ๋์ ํ์ผ .csx๋ก ์ ์ฅํ๊ณ IDE์์ ์คํํ ์ ์์ต๋๋ค. UO ๊ฐ์ฒด์ ๋๊ธฐ ๊ธฐ๋ฅ์ ํ์ฌ ๊ฒ์ ์ธ์
์ ํธ์คํธ๋ฅผ ์ ๊ณตํฉ๋๋ค. ๋ฐ๋ชจ serial ์ด๋ฆ, ์ขํ, ์ฃผ์๋ฅผ ์์ ์ ๊ฒ์ผ๋ก ๋ฐ๊พธ์ธ์.
์ด ์ฝ๋๋ฅผ ๋ณ๋์ .csx ํ์ผ๋ก ์คํํ์ธ์. ์ธ์๋ ํธ์ถ์ ์ง์ ํ์๋ฉ๋๋ค. ์์ ์ ์ด๋ฆ, serial, ์ฃผ์๋ฅผ ์์ ์ ๊ฐ์ผ๋ก ๋ฐ๊พธ์ธ์.
๋ช ๋ น์ ๋ ๋ฆฝ๋ ๋ฌธ์ ๋๋ค. ์์ ๋ฉ์์ง๋ ํธ์ถ ์์์ ๋ํ๋ด๋ฉฐ ์๋ฒ ๋์์ ์๋ฃ๋ฅผ ํ์ธํ์ง ์์ต๋๋ค.
UO.Print("Calling UO.WaitGumpEntry");
UO.WaitGumpEntry(0, "Example");๋งค๊ฐ๋ณ์์ ์คํ ํ๋ฆ:
- ํ์ฌ ๊ฒํ์ ํ ์คํธ ์ ๋ ฅ ํ๋๋ฅผ ์ต๋ 3๊ฐ๊น์ง ๋ณ๊ฒฝํฉ๋๋ค.
if (Truth(UO.GetGumpsCount() > 0))
{
UO.WaitGumpEntry(0, "Example");
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;๋งค๊ฐ๋ณ์์ ์คํ ํ๋ฆ:
- ExecuteLegacyManualAlias๋ ์์ผ๋ก ์ธ์๋ฅผ ๊ฒํ ํ๊ณ ๊ฐ๊ฐ์ ๋ํด SetGumpValue(-1, "textentry", selector, value)๋ฅผ ํธ์ถํฉ๋๋ค. ๋ฑ๋ก๋ ๋ชจ๋ ์์์ 2, 4 ๋๋ 6 ์ธ์์ ๋๋ค.
return RunScenario();
object? RunScenario()
{
if (Truth(UO.GetGumpsCount() > 0))
{
UO.WaitGumpEntry(0, "First", 1, "Second");
}
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()
{
if (Truth(UO.GetGumpsCount() > 0))
{
UO.WaitGumpEntry(0, "First", 1, "Second", 2, "Third");
}
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์ ์ฌ์ฉํ์ธ์.
๋งค๊ฐ๋ณ์: index (Any), text (Any)
๊ฒฐ๊ณผ: void / Unit.
ํธ์ถ ์:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.SetGumpValue:bridge.SetGumpValue(-1, "textentry", Arg(index), Text(index + 1)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias::Arg:Arg(index). -
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias::Text:Text(index + 1).
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
case "waitgumpentry":
for (int index = 0; index + 1 < arguments.Length; index += 2)
bridge.SetGumpValue(-1, "textentry", Arg(index), Text(index + 1));
break;๋งค๊ฐ๋ณ์: index (Any), text (Any), index2 (Any), text2 (Any)
๊ฒฐ๊ณผ: void / Unit.
ํธ์ถ ์:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.SetGumpValue:bridge.SetGumpValue(-1, "textentry", Arg(index), Text(index + 1)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias::Arg:Arg(index). -
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias::Text:Text(index + 1).
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
case "waitgumpentry":
for (int index = 0; index + 1 < arguments.Length; index += 2)
bridge.SetGumpValue(-1, "textentry", Arg(index), Text(index + 1));
break;
UO.WaitGumpEntry(index, text, index2, text2, index3, text3) โ UO.WaitGumpEntry(Any,Any,Any,Any,Any,Any)
๋งค๊ฐ๋ณ์: index (Any), text (Any), index2 (Any), text2 (Any), index3 (Any), text3 (Any)
๊ฒฐ๊ณผ: void / Unit.
ํธ์ถ ์:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.SetGumpValue:bridge.SetGumpValue(-1, "textentry", Arg(index), Text(index + 1)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias::Arg:Arg(index). -
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias::Text:Text(index + 1).
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
case "waitgumpentry":
for (int index = 0; index + 1 < arguments.Length; index += 2)
bridge.SetGumpValue(-1, "textentry", Arg(index), Text(index + 1));
break;