KO UO Topic quests virtues - LIHACHTETAN/ClassicUO-Bad-Newbie-CSharp-Scripts-IDE GitHub Wiki
ะฃะบัะฐัะฝััะบะฐ ยท ะ ัััะบะธะน ยท English ยท Deutsch ยท Franรงais ยท Italiano ยท Espaรฑol ยท ็น้ซไธญๆ ยท ๆฅๆฌ่ช ยท ํ๊ตญ์ด
ํ ยท C# ยท IDE ยท UO API ยท AโZ ยท ์ ยท ์ธ์ด
ํ์คํธ์ ๋ฏธ๋์ ๋ํ ์ผ๋ฐ ๊ณ ๊ฐ ์์ฒญ์ ๋๋ค. Age of Power ์๋ฒ ์๋ฌด๋ Wiki์ ๋ณ๋ ์น์ ์ ์ค๋ช ๋์ด ์์ต๋๋ค.
| ์ฃผ์ | ๋ช ๋ น ๋ฐ ์ค๋ช |
|---|---|
| QuestRequest | UO.QuestRequest |
| Quest Arrow | UO.GetQuestArrow |
| Virtues Gump | UO.ReqVirtuesGump |
| UseVirtue | UO.UseVirtue |
UO.QuestRequest ยท UO.GetQuestArrow ยท UO.ReqVirtuesGump ยท UO.UseVirtue
๊ฐ ๋ช ๋ น ์นด๋์๋ ์ง์ ์ฝ๋, ํจ์ ๋ฐ ํด๋์ค ๋ฑ ์ฌ๋ฌ ๊ฐ์ง ๋ ๋ฆฝ์ ์ธ ์๋๋ฆฌ์ค๊ฐ ์์ต๋๋ค. ๋ค์์ ์ ํ๋ ์งง์ ์๋๋ฆฌ์ค์ ๋๋ค. ์ ํ์ฌํญ๊ณผ ์ ์ฒด ๋ถ์์ด ์นด๋์ ํฌํจ๋์ด ์์ต๋๋ค.
๋งค๊ฐ๋ณ์, ๊ฒฐ๊ณผ ๋ฐ ๋ชจ๋ ์๋๋ฆฌ์ค
var arrow = UO.GetQuestArrow();
if (Truth(Truth(arrow[0]) == true))
{
UO.Print(Convert.ToString(arrow[1]) + ", " + Convert.ToString(arrow[2]));
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;๋งค๊ฐ๋ณ์, ๊ฒฐ๊ณผ ๋ฐ ๋ชจ๋ ์๋๋ฆฌ์ค
UO.Print(UO.UseVirtue("Honor"));ะฃะบัะฐัะฝััะบะฐ ยท ะ ัััะบะธะน ยท English ยท Deutsch ยท Franรงais ยท Italiano ยท Espaรฑol ยท ็น้ซไธญๆ ยท ๆฅๆฌ่ช ยท ํ๊ตญ์ด
dynamic UO.GetQuestArrow();
dynamic UO.GetQuestArrow(object? point);์๋ฒ ์์ ํ์ดํ์ ์์น๋ฅผ โโ์ฝ์ต๋๋ค. ์๋ฒ์์ ์์ ํ ํ์ดํ๊ฐ ๊ฐ๋ฆฌํค๋ ์์น๋ฅผ ์คํฌ๋ฆฝํธ๊ฐ ์ ์ ์๋๋ก ํฉ๋๋ค. Track ๋ช ๋ น์ ์ฝ์ง ์์ต๋๋ค.
-
point- ๋ ์ด์ ์ฌ์ฉ๋์ง ์๋ ์ ํ์ ์๋ฆฌ ํ์์์ ๋๋ค. UO.GetQuestArrow(point) ํ์์ ํธํ์ฑ์ ์ํด ์ ์ง๋ฉ๋๋ค. ์ธ์๋ ์ฝํ์ง๊ฑฐ๋ ์์ ๋์ง ์์ต๋๋ค. UO.GetQuestArrow() ๋ฐ ํด๋น ๋ฐํ ๋ฐฐ์ด์ ์ฌ์ฉํ์ธ์.
๋ฐฐ์ด [์กด์ฌํจ, x, y], ์ ํํ 3๊ฐ์ ์ ์. [0] - 1 (true), ์๋ฒ ํ์ดํ๊ฐ ์๋ ๊ฒฝ์ฐ, ๊ทธ๋ ์ง ์์ ๊ฒฝ์ฐ 0 (false); [1] - X, [2] - Y. ํ์ดํ ์์ [0, 0, 0]. [0] ํ๋๋ง ๋ถ์ธ ์์ฑ์ ๋๋ค. ์ ์ฒด ๋ฐฐ์ด์ด bool๊ฐ ์๋๋๋ค. ํ์ดํ๊ฐ ์ฌ๋ฌ ๊ฐ์ธ ๊ฒฝ์ฐ ๋จผ์ ์ ์ฅ๋ ํ์ดํ๋ฅผ ์ฝ์ผ๋ฉฐ ID ์ ํ์ ์์ต๋๋ค.
- ์๋ฒ ๋ฐ ๋ก์ปฌ ํ์ดํ๋ ๋ณ๋๋ก ์ ์ฅ๋ฉ๋๋ค. Track(0)์ ์๋ฒ ํ์ดํ๋ฅผ ์ ๊ฑฐํ์ง ์์ต๋๋ค. ๊ทธ๋ํฝ์ด ์์ผ๋ฉด ๋ง์ปค๊ฐ ์ ์ฅ๋๊ณ ์ฐฝ์ด ์ด๋ฆด ๋ ๋ํ๋ฉ๋๋ค. ๊ฒ์ ์ฐฝ์ ๋ซ์๋ ๋ง์ปค๋ ์ ๊ฑฐ๋์ง ์์ต๋๋ค. ์ฐ๊ฒฐ์ ๋์ผ๋ฉด ์ฐ๊ฒฐ์ด ์ง์์ง๋๋ค. ์๋ฒ๋ ํ์ดํ๋ฅผ ์ด๋ํ๊ฑฐ๋ ์ ๊ฑฐํ ์ ์์ต๋๋ค. ์ขํ๋ ๋ชฉํ๊ฐ ๋ฌ์ฑ ๊ฐ๋ฅํ๋ค๋ ๊ฒ์ ์ฆ๋ช ํ์ง ์์ต๋๋ค.
- ์ฐฝ ํฝ์ ์ด ์๋ ํ์ฌ ์ง๋์ ์ ์ขํ์ ๋๋ค. Z ๋ฐ ์นด๋๋ฒํธ๋ ํ์ฉ๋์ง ์์ต๋๋ค. ์ง๋์์ ๊ธฐ์กด ์ง์ ์ ์ ํํฉ๋๋ค. ํ์ ์งํ์ ํ์ธํ๊ฑฐ๋ ๊ฒฝ๋ก๋ฅผ ๊ณํํ๊ฑฐ๋ ์์ง์ด๋ ํ์ ์ ๋ฐ๋ฅด์ง ์์ต๋๋ค.
- ๋ ์ด์ ์ฌ์ฉ๋์ง ์๋ ์ ํ์ ์๋ฆฌ ํ์์์ ๋๋ค. UO.GetQuestArrow(point) ํ์์ ํธํ์ฑ์ ์ํด ์ ์ง๋ฉ๋๋ค. ์ธ์๋ ์ฝํ์ง๊ฑฐ๋ ์์ ๋์ง ์์ต๋๋ค. UO.GetQuestArrow() ๋ฐ ํด๋น ๋ฐํ ๋ฐฐ์ด์ ์ฌ์ฉํ์ธ์.
๊ฐ ์์ ๋ ๋ณ๋์ ํ์ผ .csx๋ก ์ ์ฅํ๊ณ IDE์์ ์คํํ ์ ์์ต๋๋ค. UO ๊ฐ์ฒด์ ๋๊ธฐ ๊ธฐ๋ฅ์ ํ์ฌ ๊ฒ์ ์ธ์
์ ํธ์คํธ๋ฅผ ์ ๊ณตํฉ๋๋ค. ๋ฐ๋ชจ serial ์ด๋ฆ, ์ขํ, ์ฃผ์๋ฅผ ์์ ์ ๊ฒ์ผ๋ก ๋ฐ๊พธ์ธ์.
์ด ์ฝ๋๋ฅผ ๋ณ๋์ .csx ํ์ผ๋ก ์คํํ์ธ์. ์ธ์๋ ํธ์ถ์ ์ง์ ํ์๋ฉ๋๋ค. ์์ ์ ์ด๋ฆ, serial, ์ฃผ์๋ฅผ ์์ ์ ๊ฐ์ผ๋ก ๋ฐ๊พธ์ธ์.
ํ ๋ฒ์ ํธ์ถ ๊ฒฐ๊ณผ๋ฅผ ์ ๋์ ํ์ํฉ๋๋ค. ์ซ์๋ฅผ bool๋ก ๋ณํํ์ง ์์ผ๋ฉฐ, ๋ฐฐ์ด์ด๋ฉด ์์ ์๋ฅผ ํ์ํฉ๋๋ค.
object? result = UO.GetQuestArrow();
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));๋งค๊ฐ๋ณ์์ ์คํ ํ๋ฆ:
- ๋จผ์ [0]๋ฅผ ์ ํํฉ๋๋ค. ๊ทธ๋ฌ๋ฉด [1]/[2]๋ X/Y๋ก ์ฝ์ ์ ์์ต๋๋ค. ์ ์ฒด ๋ฐฐ์ด์ serial ๋๋ bool๋ก ์ ๋ฌํ์ง ๋ง์ธ์.
var arrow = UO.GetQuestArrow();
if (Truth(Truth(arrow[0]) == true))
{
UO.Print(Convert.ToString(arrow[1]) + ", " + Convert.ToString(arrow[2]));
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;๋งค๊ฐ๋ณ์์ ์คํ ํ๋ฆ:
- ์๋ฒ ํ์ดํ์ ์ขํ๋ฅผ ๋ก์ปฌ ๋ง์ปค Track์ ๋ณต์ฌํฉ๋๋ค. ์ด๊ฒ์ ์ด๋์ด ์๋๋๋ค. ๋์ค์ ์๋ฒ๊ฐ ํ์ดํ๋ฅผ ์ด๋ํ๋ฉด ๋ก์ปฌ ํ์ดํ๋ ๊ฐ์ ์ง์ ์ ์ ์ง๋ฉ๋๋ค.
return RunScenario();
object? RunScenario()
{
var arrow = UO.GetQuestArrow();
if (Truth(arrow[0] == 1))
{
UO.Track(1, arrow[1], arrow[2]);
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;๋งค๊ฐ๋ณ์์ ์คํ ํ๋ฆ:
- ArrowDistance๋ ์๋ฒ ์ง์ ๊น์ง์ ๊ฑฐ๋ฆฌ UO.GetDistance(x,y)๋ฅผ ๋ฐํํ๊ณ , ํ์ดํ๊ฐ ์์ผ๋ฉด โ1๋ฅผ ๋ฐํํฉ๋๋ค. ์ต๋ 2๊ฐ์ ์ ๊ฑฐ๋ฆฌ์์๋ ๋ก์ปฌ Track๋ง ์ ๊ฑฐ๋๊ณ ์๋ฒ ํ์ดํ๋ ๋จ์ต๋๋ค.
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 distance = ArrowDistance();
if (Truth(distance >= 0) && Truth(distance <= 2))
{
UO.Track(0);
}
return null;
}
dynamic ArrowDistance()
{
var arrow = UO.GetQuestArrow();
if (Truth(arrow[0] == 0))
{
return -1;
}
return UO.GetDistance(arrow[1], arrow[2]);
}
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์ ์ฌ์ฉํ์ธ์.
๋งค๊ฐ๋ณ์: ๋งค๊ฐ๋ณ์๊ฐ ์์ต๋๋ค.
๊ฒฐ๊ณผ: dynamic / Array.
ํธ์ถ ์:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetQuestArrow:bridge.GetQuestArrow().
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
case "getquestarrow":
return new InjectionValue(bridge.GetQuestArrow().Select(value => new InjectionValue(value)).ToArray());๋งค๊ฐ๋ณ์: point (Any)
๊ฒฐ๊ณผ: dynamic / Array.
ํธ์ถ ์:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetQuestArrow:bridge.GetQuestArrow().
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
case "getquestarrow":
return new InjectionValue(bridge.GetQuestArrow().Select(value => new InjectionValue(value)).ToArray());ะฃะบัะฐัะฝััะบะฐ ยท ะ ัััะบะธะน ยท English ยท Deutsch ยท Franรงais ยท Italiano ยท Espaรฑol ยท ็น้ซไธญๆ ยท ๆฅๆฌ่ช ยท ํ๊ตญ์ด
void UO.QuestRequest();์๋ฒ์์ ๋ฉ๋ด๋ฅผ ์์ฒญํฉ๋๋ค.
๋งค๊ฐ๋ณ์๊ฐ ์์ต๋๋ค.
void - ๊ฐ์ด ์์ต๋๋ค. ๋ณ๋์ ํ์ ์ผ๋ก ์ ํํ์ธ์. ์๋ฃ๋ ์๋ฒ์ ์์ ์ ํ์ธํ์ง ์์ต๋๋ค.
- QuestRequest๋ GameActions.RequestQuestMenu(_world)๋ฅผ ๊ฒ์ ์คํธ๋ฆผ์ ์ ๋ฌํฉ๋๋ค. ํ์ ์์ ์ ์ฝ๊ฑฐ๋ ์์ฑํ์ง ์์ต๋๋ค.
- ์์ ์์ UO.Wait๋ ์คํฌ๋ฆฝํธ ์ผ์ ์ค์ง๋ง ์ง์ ํฉ๋๋ค. ์ผ์ ์ค์ง๊ฐ ๋๋ฌ๋ค๊ณ ํด์ ์๋ฒ๊ฐ ์์ฒญ์ ์๋ฃํ์์ ์ฆ๋ช ํ๋ ๊ฒ์ ์๋๋๋ค.
๊ฐ ์์ ๋ ๋ณ๋์ ํ์ผ .csx๋ก ์ ์ฅํ๊ณ IDE์์ ์คํํ ์ ์์ต๋๋ค. UO ๊ฐ์ฒด์ ๋๊ธฐ ๊ธฐ๋ฅ์ ํ์ฌ ๊ฒ์ ์ธ์
์ ํธ์คํธ๋ฅผ ์ ๊ณตํฉ๋๋ค. ๋ฐ๋ชจ serial ์ด๋ฆ, ์ขํ, ์ฃผ์๋ฅผ ์์ ์ ๊ฒ์ผ๋ก ๋ฐ๊พธ์ธ์.
์ด ์ฝ๋๋ฅผ ๋ณ๋์ .csx ํ์ผ๋ก ์คํํ์ธ์. ์ธ์๋ ํธ์ถ์ ์ง์ ํ์๋ฉ๋๋ค. ์์ ์ ์ด๋ฆ, serial, ์ฃผ์๋ฅผ ์์ ์ ๊ฐ์ผ๋ก ๋ฐ๊พธ์ธ์.
๋ช ๋ น์ ๋ ๋ฆฝ๋ ๋ฌธ์ ๋๋ค. ์์ ๋ฉ์์ง๋ ํธ์ถ ์์์ ๋ํ๋ด๋ฉฐ ์๋ฒ ๋์์ ์๋ฃ๋ฅผ ํ์ธํ์ง ์์ต๋๋ค.
UO.Print("Calling UO.QuestRequest");
UO.QuestRequest();๋งค๊ฐ๋ณ์์ ์คํ ํ๋ฆ:
- ์๋ฒ์์ ๋ฉ๋ด๋ฅผ ์์ฒญํฉ๋๋ค.
UO.QuestRequest();๋งค๊ฐ๋ณ์์ ์คํ ํ๋ฆ:
- QuestRequest๋ GameActions.RequestQuestMenu(_world)๋ฅผ ๊ฒ์ ์คํธ๋ฆผ์ ์ ๋ฌํฉ๋๋ค. ํ์ ์์ ์ ์ฝ๊ฑฐ๋ ์์ฑํ์ง ์์ต๋๋ค.
return RunScenario();
object? RunScenario()
{
if (Truth(UO.IsOnline()))
{
UO.QuestRequest();
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;๋งค๊ฐ๋ณ์์ ์คํ ํ๋ฆ:
- ์์ ์์ UO.Wait๋ ์คํฌ๋ฆฝํธ ์ผ์ ์ค์ง๋ง ์ง์ ํฉ๋๋ค. ์ผ์ ์ค์ง๊ฐ ๋๋ฌ๋ค๊ณ ํด์ ์๋ฒ๊ฐ ์์ฒญ์ ์๋ฃํ์์ ์ฆ๋ช ํ๋ ๊ฒ์ ์๋๋๋ค.
return new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
UO.QuestRequest();
UO.Wait(500);
UO.Print(UO.GetGumpsCount());
return null;
}
}C#์ ๋์๋ฌธ์๋ฅผ ๊ตฌ๋ถํฉ๋๋ค. ์ ํํ UO ์ด๋ฆ์ ์ฌ์ฉํ์ธ์. ์ซ์ ํ๋๊ทธ๋ 0๊ณผ ๋น๊ตํ๊ณ ๋ฐํ ํ์์ด bool์ผ ๋๋ง bool์ ์ฌ์ฉํ์ธ์.
๋งค๊ฐ๋ณ์: ๋งค๊ฐ๋ณ์๊ฐ ์์ต๋๋ค.
๊ฒฐ๊ณผ: void / Unit.
ํธ์ถ ์:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.QuestRequest:bridge.QuestRequest().
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
case "questrequest": bridge.QuestRequest(); return InjectionValue.Unit;ะฃะบัะฐัะฝััะบะฐ ยท ะ ัััะบะธะน ยท English ยท Deutsch ยท Franรงais ยท Italiano ยท Espaรฑol ยท ็น้ซไธญๆ ยท ๆฅๆฌ่ช ยท ํ๊ตญ์ด
void UO.ReqVirtuesGump();์บ๋ฆญํฐ์ ๋ฏธ๋ ์ฐฝ์ ์์ฒญํฉ๋๋ค.
๋งค๊ฐ๋ณ์๊ฐ ์์ต๋๋ค.
void - ๊ฐ์ด ์์ต๋๋ค. ๋ณ๋์ ํ์ ์ผ๋ก ์ ํํ์ธ์. ์๋ฃ๋ ์๋ฒ์ ์์ ์ ํ์ธํ์ง ์์ต๋๋ค.
- RequestVirtuesGump, ํ๋ ์ด์ด๊ฐ ์์ผ๋ฉด gumpID=0x1CD, ๋ฒํผ=1 ๋ฐ serial ๋ฌธ์๋ก ReplyGump์ ํธ์ถํฉ๋๋ค. ํ๋ ์ด์ด๊ฐ ์์ผ๋ฉด ์์ฒญ์ด ์์ต๋๋ค.
- ์์ ์์ UO.Wait๋ ์คํฌ๋ฆฝํธ ์ผ์ ์ค์ง๋ง ์ง์ ํฉ๋๋ค. ์ผ์ ์ค์ง๊ฐ ๋๋ฌ๋ค๊ณ ํด์ ์๋ฒ๊ฐ ์์ฒญ์ ์๋ฃํ์์ ์ฆ๋ช ํ๋ ๊ฒ์ ์๋๋๋ค.
๊ฐ ์์ ๋ ๋ณ๋์ ํ์ผ .csx๋ก ์ ์ฅํ๊ณ IDE์์ ์คํํ ์ ์์ต๋๋ค. UO ๊ฐ์ฒด์ ๋๊ธฐ ๊ธฐ๋ฅ์ ํ์ฌ ๊ฒ์ ์ธ์
์ ํธ์คํธ๋ฅผ ์ ๊ณตํฉ๋๋ค. ๋ฐ๋ชจ serial ์ด๋ฆ, ์ขํ, ์ฃผ์๋ฅผ ์์ ์ ๊ฒ์ผ๋ก ๋ฐ๊พธ์ธ์.
์ด ์ฝ๋๋ฅผ ๋ณ๋์ .csx ํ์ผ๋ก ์คํํ์ธ์. ์ธ์๋ ํธ์ถ์ ์ง์ ํ์๋ฉ๋๋ค. ์์ ์ ์ด๋ฆ, serial, ์ฃผ์๋ฅผ ์์ ์ ๊ฐ์ผ๋ก ๋ฐ๊พธ์ธ์.
๋ช ๋ น์ ๋ ๋ฆฝ๋ ๋ฌธ์ ๋๋ค. ์์ ๋ฉ์์ง๋ ํธ์ถ ์์์ ๋ํ๋ด๋ฉฐ ์๋ฒ ๋์์ ์๋ฃ๋ฅผ ํ์ธํ์ง ์์ต๋๋ค.
UO.Print("Calling UO.ReqVirtuesGump");
UO.ReqVirtuesGump();๋งค๊ฐ๋ณ์์ ์คํ ํ๋ฆ:
- ์บ๋ฆญํฐ์ ๋ฏธ๋ ์ฐฝ์ ์์ฒญํฉ๋๋ค.
UO.ReqVirtuesGump();๋งค๊ฐ๋ณ์์ ์คํ ํ๋ฆ:
- RequestVirtuesGump, ํ๋ ์ด์ด๊ฐ ์์ผ๋ฉด gumpID=0x1CD, ๋ฒํผ=1 ๋ฐ serial ๋ฌธ์๋ก ReplyGump์ ํธ์ถํฉ๋๋ค. ํ๋ ์ด์ด๊ฐ ์์ผ๋ฉด ์์ฒญ์ด ์์ต๋๋ค.
return RunScenario();
object? RunScenario()
{
if (Truth(UO.Self() != 0))
{
UO.ReqVirtuesGump();
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;๋งค๊ฐ๋ณ์์ ์คํ ํ๋ฆ:
- ์์ ์์ UO.Wait๋ ์คํฌ๋ฆฝํธ ์ผ์ ์ค์ง๋ง ์ง์ ํฉ๋๋ค. ์ผ์ ์ค์ง๊ฐ ๋๋ฌ๋ค๊ณ ํด์ ์๋ฒ๊ฐ ์์ฒญ์ ์๋ฃํ์์ ์ฆ๋ช ํ๋ ๊ฒ์ ์๋๋๋ค.
return new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
UO.ReqVirtuesGump();
UO.Wait(500);
UO.Print(UO.GetGumpsCount());
return null;
}
}C#์ ๋์๋ฌธ์๋ฅผ ๊ตฌ๋ถํฉ๋๋ค. ์ ํํ UO ์ด๋ฆ์ ์ฌ์ฉํ์ธ์. ์ซ์ ํ๋๊ทธ๋ 0๊ณผ ๋น๊ตํ๊ณ ๋ฐํ ํ์์ด bool์ผ ๋๋ง bool์ ์ฌ์ฉํ์ธ์.
๋งค๊ฐ๋ณ์: ๋งค๊ฐ๋ณ์๊ฐ ์์ต๋๋ค.
๊ฒฐ๊ณผ: void / Unit.
ํธ์ถ ์:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.RequestVirtuesGump:bridge.RequestVirtuesGump().
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
case "reqvirtuesgump": bridge.RequestVirtuesGump(); return InjectionValue.Unit;ะฃะบัะฐัะฝััะบะฐ ยท ะ ัััะบะธะน ยท English ยท Deutsch ยท Franรงais ยท Italiano ยท Espaรฑol ยท ็น้ซไธญๆ ยท ๆฅๆฌ่ช ยท ํ๊ตญ์ด
dynamic UO.UseVirtue(object? virtueName);๋ฏธ๋์ ์ ์ฉ์ ์์ฒญํฉ๋๋ค.
-
virtueNameโ ๋ช ์/ํฌ์/์ฉ๋งน/์ฐ๋ฏผ/์ ์ง/๊ฒธ์/์ ์/์์ฑ์ ๋์๋ฌธ์ ๊ตฌ๋ถ ์์ด, ๊ณต๋ฐฑ์ ์ ๊ฑฐํ๊ณ , ๋๋ double-text ID 1..8๋ก ์ด๋ฆ์ ์ง์ ํ์ธ์.
์ซ์ ํ๋๊ทธ int: 1 - ์ ํจํ ID 1..8๊ฐ Send_InvokeVirtueRequest๋ฅผ ํตํด ์ ์ก๋์์ต๋๋ค. 0 - ์ ์ ์๋ ์ด๋ฆ/์๋ชป๋ ID. ์ด๋ ์๋ฒ ํจ๊ณผ๋ฅผ ํ์ธํ๋ ๊ฒ์ด ์๋๋๋ค.
- ์ด๋ฆ์ ID์ ํด๋นํฉ๋๋ค: Honor=1, Sacrifice=2, Valor=3, Compassion=4, Honesty=5, Humility=6, Justice=7, Spirituality=8. ์ด ํจ์์ ์ซ์ ๊ตฌ๋ฌธ ๋ถ์์์๋ 0x ๋ณํ์ด ์๋ int.TryParse๋ฅผ ์ฌ์ฉํฉ๋๋ค.
- ํ ์์ฒด์์๋ ํ์ ๋ชฉํ๋ฅผ ์ค์ ํ๊ฑฐ๋ ๋ฏธ๋ ํฌ์ธํธ/๊ฐ์ฉ์ฑ์ ํ์ธํ์ง ์์ต๋๋ค. ์ด๋ ์๋ฒ์ ์ํด ๊ฒฐ์ ๋ฉ๋๋ค.
๊ฐ ์์ ๋ ๋ณ๋์ ํ์ผ .csx๋ก ์ ์ฅํ๊ณ IDE์์ ์คํํ ์ ์์ต๋๋ค. UO ๊ฐ์ฒด์ ๋๊ธฐ ๊ธฐ๋ฅ์ ํ์ฌ ๊ฒ์ ์ธ์
์ ํธ์คํธ๋ฅผ ์ ๊ณตํฉ๋๋ค. ๋ฐ๋ชจ serial ์ด๋ฆ, ์ขํ, ์ฃผ์๋ฅผ ์์ ์ ๊ฒ์ผ๋ก ๋ฐ๊พธ์ธ์.
์ด ์ฝ๋๋ฅผ ๋ณ๋์ .csx ํ์ผ๋ก ์คํํ์ธ์. ์ธ์๋ ํธ์ถ์ ์ง์ ํ์๋ฉ๋๋ค. ์์ ์ ์ด๋ฆ, serial, ์ฃผ์๋ฅผ ์์ ์ ๊ฐ์ผ๋ก ๋ฐ๊พธ์ธ์.
ํ ๋ฒ์ ํธ์ถ ๊ฒฐ๊ณผ๋ฅผ ์ ๋์ ํ์ํฉ๋๋ค. ์ซ์๋ฅผ bool๋ก ๋ณํํ์ง ์์ผ๋ฉฐ, ๋ฐฐ์ด์ด๋ฉด ์์ ์๋ฅผ ํ์ํฉ๋๋ค.
object? result = UO.UseVirtue("Honor");
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));๋งค๊ฐ๋ณ์์ ์คํ ํ๋ฆ:
- ๋ฏธ๋์ ์ ์ฉ์ ์์ฒญํฉ๋๋ค.
UO.Print(UO.UseVirtue("Honor"));๋งค๊ฐ๋ณ์์ ์คํ ํ๋ฆ:
- ์ด๋ฆ์ ID์ ํด๋นํฉ๋๋ค: Honor=1, Sacrifice=2, Valor=3, Compassion=4, Honesty=5, Humility=6, Justice=7, Spirituality=8. ์ด ํจ์์ ์ซ์ ๊ตฌ๋ฌธ ๋ถ์์์๋ 0x ๋ณํ์ด ์๋ int.TryParse๋ฅผ ์ฌ์ฉํฉ๋๋ค.
return RunScenario();
object? RunScenario()
{
UO.Print(UO.UseVirtue("1"));
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()
{
var accepted = UO.UseVirtue("Honor");
if (Truth(accepted))
{
UO.Print("Virtue request 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์ ์ฌ์ฉํ์ธ์.
๋งค๊ฐ๋ณ์: virtueName (Any)
๊ฒฐ๊ณผ: dynamic / Any.
ํธ์ถ ์:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.UseVirtue:bridge.UseVirtue(Text(0)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Text:Text(0).
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
case "usevirtue": return new InjectionValue(bridge.UseVirtue(Text(0)));