KO UO Topic search Part 2 - LIHACHTETAN/ClassicUO-Bad-Newbie-CSharp-Scripts-IDE GitHub Wiki
ะฃะบัะฐัะฝััะบะฐ ยท ะ ัััะบะธะน ยท English ยท Deutsch ยท Franรงais ยท Italiano ยท Espaรฑol ยท ็น้ซไธญๆ ยท ๆฅๆฌ่ช ยท ํ๊ตญ์ด
ํ ยท C# ยท IDE ยท UO API ยท AโZ ยท ์ ยท ์ธ์ด
ะฃะบัะฐัะฝััะบะฐ ยท ะ ัััะบะธะน ยท English ยท Deutsch ยท Franรงais ยท Italiano ยท Espaรฑol ยท ็น้ซไธญๆ ยท ๆฅๆฌ่ช ยท ํ๊ตญ์ด
void UO.FindMan();
dynamic UO.FindMan(object? notoriety);
dynamic UO.FindMan(object? notoriety, object? distance);
dynamic UO.FindMan(object? notoriety, object? distance, object? nearest);
dynamic UO.FindMan(object? notoriety, object? distance, object? nearest, object? maxZ);
dynamic UO.FindMan(object? notoriety, object? distance, object? nearest, object? maxZ, object? body);
dynamic UO.FindMan(object? notoriety, object? distance, object? nearest, object? maxZ, object? body, object? color);
dynamic UO.FindMan(object? notoriety, object? distance, object? nearest, object? maxZ, object? body, object? color, object? includeSelf);์ ๋ช , ๊ฑฐ๋ฆฌ, ํค, ์ ์ฒด ๋ฐ hue๋ฅผ ๊ธฐ์ค์ผ๋ก serial๋ฅผ ์ฐพ์ต๋๋ค. ์๋ ๊ณต๊ฒฉ ์์ด ๋์์ ๋ฏธ๋ฆฌ ์ ํํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค.
-
notorietyโ ์๋ฒ์์ ๋ฐ์ ์บ๋ฆญํฐ์์ ๊ด๊ณ ์ํ: 0 โ ์ ์ ์์, 1 โ ๋ฌด์ฃ, 2 โ ๋๋งน, 3 โ ํ์, 4 โ ๋ฒ์ฃ, 5 โ ์ , 6 โ ์ด์ธ์, 7 - ๋ฌด์ ์ ๋๋ค. ์ซ์๋ ํ๋์ ์ํ๋ฅผ ์๋ฏธํฉ๋๋ค. "5|6" ๋๋ ์ซ์ ๋ฐฐ์ด - ์ ํญ๋ชฉ ์ค ํ๋. ์ท์ ์๊น์ด๋ ์์ ์ ์๊น์ด ์๋๋๋ค. ์์(๋ณดํต -1), 0xFFFF, "any", ๋น ๋ฌธ์์ด ๋๋ ๋น ๋ฐฐ์ด์ ์ด ํํฐ๋ฅผ ๋ณ๋๋ก ๋นํ์ฑํํฉ๋๋ค. ์ ํจํ ์ซ์๊ฐ ์๋ ์๋ชป๋ ๋ฌธ์์ด์ ๋๊ตฌ๋ ์ฐพ์ ์ ์์ต๋๋ค. ์ํ ์์์ ๋ฐ๋ผ ์ฐ์ ์์๊ฐ ์ค์ ๋์ง ์์ต๋๋ค. 5 ํํฐ๋ NPC/๋ชฌ์คํฐ๋ฅผ ์๋์ผ๋ก ์ ํํ๋ ๋์ ์ ์ ์ ํํฉ๋๋ค. ์ค์ ๊ฐ์ ์๋ฒ์ ๋ฐ๋ผ ๋ค๋ฆ ๋๋ค. -
distanceโ ์ ์ ํฌํจํ ์ํ ๋ฐ๊ฒฝ: 5๋ ๊ฑฐ๋ฆฌ 0..5๋ฅผ ํ์ฉํฉ๋๋ค. ๊ฑฐ๋ฆฌ๋ max(abs(dx),abs(dy))์ด๋ฏ๋ก ์ธ์ ํ ๋๊ฐ์ ๋ 1์ ๋๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก ์ซ์๊ฐ ์์์ธ ๊ฒฝ์ฐ์๋ ๋ฌด์ ํ ๊ฒ์์ด ์๋ UO.FindDistance()์ ์ ํํฉ๋๋ค. 0๋ ๋์ผํ X/Y ์ ์ ๋จ๊น๋๋ค. ๊ฒฝ๋ก์ ๊ธธ์ด๊ฐ ์๋๋๋ค. ์ฅ์ ๋ฌผ๊ณผ ๋ฐ๋ฅ์ ์ด ๋งค๊ฐ๋ณ์๋ก ํ์ธ๋์ง ์์ต๋๋ค. -
nearest- true/1 ๊ธฐ๋ณธ์ ์ผ๋ก - ๊ฐ์ฅ ๊ฐ๊น๊ณ ๊ฑฐ๋ฆฌ๊ฐ ๊ฐ์์๋ก ๋ ์์ต๋๋ค serial; false/0 - ํด๋ผ์ด์ธํธ ๋ชฉ๋ก์์ ๊ฐ์ฅ ๋จผ ๊ฒ์ด ์๋ ์ฒซ ๋ฒ์งธ์ ๋๋ค. -
maxZโ ์ต๋ ๋ณต๊ทผ(Z ๋์ - ์บ๋ฆญํฐ์ Z)์ ํฌํจํ๋ฉฐ, Z ์ธ๊ณ ๋จ์์ ๋๋ค. ์ด๊ฒ์ ์ธต์๋ ์ ์ X/Y๊ฐ ์๋๋๋ค. maxZ=4 Z ํ๋ ์ด์ด 10๋ Z ๋์ 6..14๋ฅผ ํ์ฉํฉ๋๋ค. 0์๋ ์ ํํ ๋์ผํ ๋์ด๊ฐ ํ์ํฉ๋๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก/์์์ ๊ฒฝ์ฐ UO.FindVertical()๊ฐ ์ฌ์ฉ๋ฉ๋๋ค. ๊ณ๋จ์์๋ Z๋ก ์ํ๋ ๋์์ ์ ๊ฑฐํ ์ ์์ต๋๋ค. ์์ ์ฐจ์ด Z๋ ๋ฐ๋ฅ์ ์ ๊ทผ์ฑ์ ์ ์ฆํ์ง ๋ชปํฉ๋๋ค. -
body- ํน์ ์บ๋ฆญํฐ์ ID๋ ์ฐฉ์ฉํ ๊ฐ์ท์ type๊ฐ ์๋ ์บ๋ฆญํฐ์ ์ ์ฒด/NPC ๊ทธ๋ํฝ์ ๋๋ค. ์ซ์, 16์ง์ ๋ฌธ์์ด, ๋ฌธ์์ด "0x0190|0x0191" ๋๋ ์ซ์ ๋ฐฐ์ด. 0x0190 (400) - ์ธ๊ฐ ๋จ์ฑ; 0x0191 (401) - ์ฌ์ฑ ์ธ๊ฐ. ๋ง์คํฌ๋ ๋ ๋ชธ์ ํ๋๋ก ๋ฌถ์ต๋๋ค. ๋ชฉ๋ก์๋ ๋ค๋ฅธ ์ข ์กฑ, ์ ๋ น ๋๋ ๋ณ์ ์ด ์๋์ผ๋ก ํฌํจ๋์ง ์์ต๋๋ค. ํ์ค ๊ทธ๋ํฝ ์ ์ฒด ์ ํ ํ. ์์(๊ธฐ๋ณธ์ ์ผ๋ก -1), 0xFFFF, "any", ๋น ๋ฌธ์์ด ๋๋ ๋น ๋ฐฐ์ด๋ง - ๋ชจ๋ ๋ณธ๋ฌธ. ์ ํจํ ์ซ์๊ฐ ์๋ ์ ์ ์๋ ํ ์คํธ๋ ๋น ๊ฒฐ๊ณผ๋ฅผ ์์ฑํฉ๋๋ค. -
colorโ mobile ์์ฒด์ ์์: int ๋๋ ์ซ์/16์ง์ ๋ฌธ์์ด. ์์(๊ธฐ๋ณธ์ ์ผ๋ก -1) ๋ฐ 0xFFFF - ๋ชจ๋ hue; 0์ ์ ํํ hue 0์ด๋ฉฐ ์ด๋ค ๊ฐ๋ ์๋๋๋ค. ์ ๋ช ๋์ ์คํธ๋ฆฝ์ ์์์ด๋ ์ท์ ์์์ด ์๋๋๋ค. ์ด ํ๋ผ๋ฏธํฐ๋ ์ฐฉ์ฉ ์ค์ธ ์์ดํ ์ ์์์ ํ์ธํ์ง ์์ต๋๋ค. -
includeSelf- true/1๋ self์ ๋ค๋ฅธ ํํฐ๊ฐ ์ ์ฉ๋๋๋ก ํ์ฉํฉ๋๋ค. false/0๋ ๊ธฐ๋ณธ์ ์ผ๋ก ์ ์ธ๋ฉ๋๋ค. Ignore๋ self์๋ ์ ์ฉ๋ฉ๋๋ค.
int serial ๋๋ 0 ๊ฒฐ๊ณผ๊ฐ ์์ต๋๋ค. ์์ด๋ ํ์ธ != 0; bool๋ ์๋๊ณ ์๋๋ ์๋๋๋ค. FindItem/FindCount/GetFoundItems๋ฅผ ๋ณ๊ฒฝํ์ง ์์ผ๋ฉฐ ๊ณต๊ฒฉ์ ์์ํ์ง ์์ต๋๋ค.
- ์ง์ญ ๊ฒ์: ์ด๋ฏธ ๋ค์ด๋ก๋ํ ๋ชจ๋ฐ์ผ์๋ง ํด๋น๋ฉ๋๋ค. Ignore์ด ๊ณ ๋ ค๋ฉ๋๋ค. self๋ ์ง์ํ๋ ๋ช ๋ น์์ ๋ช ์์ ์ผ๋ก includeSelf=true๋ฅผ ์ ์ธํ๊ณ ๋ ์ ์ธ๋ฉ๋๋ค. ์ปจํ ์ด๋์ ์์ดํ ์ ๋ชจ๋ฐ์ผ์ด ์๋๋๋ค.
- ์กฐ๊ฑด์ด ํจ๊ป ์ ์ฉ๋ฉ๋๋ค(AND). body/notoriety ๋ด์ ์ ํจํ ๋์์ OR๋ฅผ ํตํด ๊ฒฐํฉ๋ฉ๋๋ค. FindItem, FindCount ๋ฐ GetFoundItems์์๋ ๊ฒ์์ด ๋ณ๊ฒฝ๋์ง ์์ต๋๋ค.
- body/notoriety์์ ์ ํจํ ์ซ์๊ฐ ์๋ ๋ง์คํฌ๋ ๋ค์์ ์ฌ์ฉํฉ๋๋ค. "any|5"๋ ์ฌ์ ํ 5๋ก ์ ํ๋ฉ๋๋ค. ์ ํจํ ์ซ์ ์์ ์๋ ๊ณต๋ฐฑ/์๋ชป๋ ์์๋ ๋ฌด์๋ฉ๋๋ค. ์ ํ์ด ์์ผ๋ฉด -1๋ฅผ ๋ณ๋๋ก ์ ๋ฌํ์ธ์. ์ด ๊ท์น์ classMask์ ์ ์ฉํ์ง ๋ง์ธ์. ์ ์ ์๋ ํด๋์ค ์ด๋ฆ์ ์ ์ฒด ๋ชฉ๋ก์ ๊ฑฐ๋ถํฉ๋๋ค.
- ํ์ ์ธ๊ณ์ ์์ญ์ ์ด์ง ์์ผ๋ฉฐ ๋ชฉํ๋ฅผ ํฅํด ๋ฌ๋ฆฌ์ง ์์ผ๋ฉฐ ๊ฒฝ๋ก์ ํต๊ณผ ๊ฐ๋ฅ์ฑ์ ํ์ธํ์ง ์์ต๋๋ค. ์ ํ๊ณผ ์๋ฒ ์ฒ๋ฆฌ ์ฌ์ด์ ์ธ์์ ์ํ๊ฐ ๋ฐ๋ ์ ์์ต๋๋ค.
- true ๋ฐ 1์ ์ ์ก์ ํ๋๊ทธ false ๋ฐ 0์๋ ๋์ผํฉ๋๋ค. 0์ด ์๋ ๋ค๋ฅธ ์ซ์๋ true๋ก ๋ณํ๋์ง๋ง 8/9๋ ๋ณ๋์ ๋ชจ๋๊ฐ ์๋๋๋ค. ํด๋ฆฌ์ด true/false๋ฅผ ์ฌ์ฉํ์ธ์.
- ์ ํํ ์์: ์ ๋ช , ๊ฑฐ๋ฆฌ, ๊ฐ์ฅ ๊ฐ๊น์ด, maxZ, body, ์์, includeSelf. AttackNearest ๋ฐ GetMobiles์ ๋ค๋ฆ ๋๋ค.
- ๋งค๊ฐ๋ณ์ classMask, aliveOnly ๋๋ visibleOnly๊ฐ ์์ต๋๋ค. ํ์ํ ๊ฒฝ์ฐ ๋ฐ๊ฒฌ๋ ID๋ฅผ ๋ณ๋๋ก ํ์ธํ์ธ์. ๋ชจ๋ ์ด์์๋/๋์ ๋ณด์ด๋ ๊ฒ ์ค์์ ์ ํํ๋ ค๋ฉด ๊ฐ์ฅ ๊ฐ๊น์ด ์ฃฝ์ ๊ฒ์ด ๋ค๋ฅธ ๊ฒ์ ๊ฐ๋ฆฌ์ง ์๋๋ก GetMobiles๋ฅผ ์ฌ์ฉํ์ญ์์ค.
๊ฐ ์์ ๋ ๋ณ๋์ ํ์ผ .csx๋ก ์ ์ฅํ๊ณ IDE์์ ์คํํ ์ ์์ต๋๋ค. UO ๊ฐ์ฒด์ ๋๊ธฐ ๊ธฐ๋ฅ์ ํ์ฌ ๊ฒ์ ์ธ์
์ ํธ์คํธ๋ฅผ ์ ๊ณตํฉ๋๋ค. ๋ฐ๋ชจ serial ์ด๋ฆ, ์ขํ, ์ฃผ์๋ฅผ ์์ ์ ๊ฒ์ผ๋ก ๋ฐ๊พธ์ธ์.
์ด ์ฝ๋๋ฅผ ๋ณ๋์ .csx ํ์ผ๋ก ์คํํ์ธ์. ์ธ์๋ ํธ์ถ์ ์ง์ ํ์๋ฉ๋๋ค. ์์ ์ ์ด๋ฆ, serial, ์ฃผ์๋ฅผ ์์ ์ ๊ฐ์ผ๋ก ๋ฐ๊พธ์ธ์.
ํ ๋ฒ์ ํธ์ถ ๊ฒฐ๊ณผ๋ฅผ ์ ๋์ ํ์ํฉ๋๋ค. ์ซ์๋ฅผ bool๋ก ๋ณํํ์ง ์์ผ๋ฉฐ, ๋ฐฐ์ด์ด๋ฉด ์์ ์๋ฅผ ํ์ํฉ๋๋ค.
object? result = UO.FindMan(2, 12);
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));๋งค๊ฐ๋ณ์์ ์คํ ํ๋ฆ:
- 2 - ์๊ตฐ, 12 - ๋ฐ๊ฒฝ. ๋๋จธ์ง: ๊ฐ์ฅ ๊ฐ๊น์ด=true, maxZ=FindVertical(), ๋ชจ๋ body/hue, self ์ ์ธ. ํ์ ๋ชฉํ๋ฌผ์ ์ ์ฅํ๊ธฐ๋ง ํ๊ณ ๊ณต๊ฒฉํ์ง๋ ์์ต๋๋ค.
var ally = UO.FindMan(2, 12);
if (Truth(ally == 0))
{
return null;
}
UO.AddObject("ally_nearby", ally);
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;๋งค๊ฐ๋ณ์์ ์คํ ํ๋ฆ:
- IsDead ํ์ธ์ ๋ณ๋๋ก ์ํ๋์์ต๋๋ค. body๋ ๋ณธ๋ฌธ์ ์ง์ ํฉ๋๋ค. bodyHue=-1๋ hue๋ก ์ ํํ์ง ์์ต๋๋ค. ์ด ํ์ ์๋ฅ๋ก ๋ถ๋ฅํ์ง ์์ต๋๋ค.
return RunScenario();
object? RunScenario()
{
var status = 5;
var radius = 8;
dynamic nearest = true;
var height = 4;
var bodies = "0x0190|0x0191";
var bodyHue = -1;
dynamic includeMe = false;
var enemy = UO.FindMan(status, radius, nearest, height, bodies, bodyHue, includeMe);
if (Truth(enemy != 0))
{
if (Truth(UO.IsDead(enemy) == 0))
{
UO.Attack(enemy);
}
}
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๋ ์ ๋ช ์ ๋นํ์ฑํํ๊ณ , ๋ ๋ฒ์งธ -1๋ body๋ฅผ ๋นํ์ฑํํฉ๋๋ค. false ์ธ ๋ฒ์งธ ์์น์์๋ ์ ๋ ฌ ๊ธฐ๋ฅ์ด ๊บผ์ง๋๋ค. ๋ง์ง๋ง false๋ self๋ฅผ ์ ์ธํฉ๋๋ค. ์๋ฅ์ ์์์ ํ์ธ๋์ง ์์ต๋๋ค.
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 chosenHue = 0x0455;
var mobile = UO.FindMan(-1, 10, false, 8, -1, chosenHue, false);
if (Truth(mobile == 0))
{
return null;
}
UO.AddObject("body_hue_match", mobile);
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
}C#์ ๋์๋ฌธ์๋ฅผ ๊ตฌ๋ถํฉ๋๋ค. ์ ํํ UO ์ด๋ฆ์ ์ฌ์ฉํ์ธ์. ์ซ์ ํ๋๊ทธ๋ 0๊ณผ ๋น๊ตํ๊ณ ๋ฐํ ํ์์ด bool์ผ ๋๋ง bool์ ์ฌ์ฉํ์ธ์.
๋งค๊ฐ๋ณ์: ๋งค๊ฐ๋ณ์๊ฐ ์์ต๋๋ค.
๊ฒฐ๊ณผ: void / Unit.
ํธ์ถ ์:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetMobiles:bridge.GetMobiles(). -
InjectionScript.Runtime.State.RuntimeDictionary.Set:state.Objects.Set(arguments.Length > 0 ? Text(0) : "findman", mobile). -
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias::Text:Text(0).
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
case "findman":
{
int mobile = bridge.GetMobiles().FirstOrDefault();
if (mobile != 0) state.Objects.Set(arguments.Length > 0 ? Text(0) : "findman", mobile);
break;
}๋งค๊ฐ๋ณ์: notoriety (Any)
๊ฒฐ๊ณผ: dynamic / Any.
ํธ์ถ ์:
-
InjectionScript.Runtime.InjectionApiUO.RegisterCompactSearchApi [FindMan]. -
InjectionScript.Runtime.InjectionApiUO.CompactFindMan:CompactFindMan(values).
ํธ์ถ ์ ์ ์ฅ๋ ์ฒ๋ฆฌ๊ธฐ delegate๋ฅผ ์คํํฉ๋๋ค. ๋ฑ๋ก ๋ฉ์๋๋ API๋ฅผ ๊ตฌ์ฑํ ๋ ์ด delegate๋ฅผ ๋ง๋ญ๋๋ค.
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
values => new InjectionValue(CompactFindMan(values))๋งค๊ฐ๋ณ์: notoriety (Any), distance (Any)
๊ฒฐ๊ณผ: dynamic / Any.
ํธ์ถ ์:
-
InjectionScript.Runtime.InjectionApiUO.RegisterCompactSearchApi [FindMan]. -
InjectionScript.Runtime.InjectionApiUO.CompactFindMan:CompactFindMan(values).
ํธ์ถ ์ ์ ์ฅ๋ ์ฒ๋ฆฌ๊ธฐ delegate๋ฅผ ์คํํฉ๋๋ค. ๋ฑ๋ก ๋ฉ์๋๋ API๋ฅผ ๊ตฌ์ฑํ ๋ ์ด delegate๋ฅผ ๋ง๋ญ๋๋ค.
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
values => new InjectionValue(CompactFindMan(values))๋งค๊ฐ๋ณ์: notoriety (Any), distance (Any), nearest (Any)
๊ฒฐ๊ณผ: dynamic / Any.
ํธ์ถ ์:
-
InjectionScript.Runtime.InjectionApiUO.RegisterCompactSearchApi [FindMan]. -
InjectionScript.Runtime.InjectionApiUO.CompactFindMan:CompactFindMan(values).
ํธ์ถ ์ ์ ์ฅ๋ ์ฒ๋ฆฌ๊ธฐ delegate๋ฅผ ์คํํฉ๋๋ค. ๋ฑ๋ก ๋ฉ์๋๋ API๋ฅผ ๊ตฌ์ฑํ ๋ ์ด delegate๋ฅผ ๋ง๋ญ๋๋ค.
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
values => new InjectionValue(CompactFindMan(values))๋งค๊ฐ๋ณ์: notoriety (Any), distance (Any), nearest (Any), maxZ (Any)
๊ฒฐ๊ณผ: dynamic / Any.
ํธ์ถ ์:
-
InjectionScript.Runtime.InjectionApiUO.RegisterCompactSearchApi [FindMan]. -
InjectionScript.Runtime.InjectionApiUO.CompactFindMan:CompactFindMan(values).
ํธ์ถ ์ ์ ์ฅ๋ ์ฒ๋ฆฌ๊ธฐ delegate๋ฅผ ์คํํฉ๋๋ค. ๋ฑ๋ก ๋ฉ์๋๋ API๋ฅผ ๊ตฌ์ฑํ ๋ ์ด delegate๋ฅผ ๋ง๋ญ๋๋ค.
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
values => new InjectionValue(CompactFindMan(values))๋งค๊ฐ๋ณ์: notoriety (Any), distance (Any), nearest (Any), maxZ (Any), body (Any)
๊ฒฐ๊ณผ: dynamic / Any.
ํธ์ถ ์:
-
InjectionScript.Runtime.InjectionApiUO.RegisterCompactSearchApi [FindMan]. -
InjectionScript.Runtime.InjectionApiUO.CompactFindMan:CompactFindMan(values).
ํธ์ถ ์ ์ ์ฅ๋ ์ฒ๋ฆฌ๊ธฐ delegate๋ฅผ ์คํํฉ๋๋ค. ๋ฑ๋ก ๋ฉ์๋๋ API๋ฅผ ๊ตฌ์ฑํ ๋ ์ด delegate๋ฅผ ๋ง๋ญ๋๋ค.
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
values => new InjectionValue(CompactFindMan(values))๋งค๊ฐ๋ณ์: notoriety (Any), distance (Any), nearest (Any), maxZ (Any), body (Any), color (Any)
๊ฒฐ๊ณผ: dynamic / Any.
ํธ์ถ ์:
-
InjectionScript.Runtime.InjectionApiUO.RegisterCompactSearchApi [FindMan]. -
InjectionScript.Runtime.InjectionApiUO.CompactFindMan:CompactFindMan(values).
ํธ์ถ ์ ์ ์ฅ๋ ์ฒ๋ฆฌ๊ธฐ delegate๋ฅผ ์คํํฉ๋๋ค. ๋ฑ๋ก ๋ฉ์๋๋ API๋ฅผ ๊ตฌ์ฑํ ๋ ์ด delegate๋ฅผ ๋ง๋ญ๋๋ค.
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
values => new InjectionValue(CompactFindMan(values))
UO.FindMan(notoriety, distance, nearest, maxZ, body, color, includeSelf) โ UO.FindMan(Any,Any,Any,Any,Any,Any,Any)
๋งค๊ฐ๋ณ์: notoriety (Any), distance (Any), nearest (Any), maxZ (Any), body (Any), color (Any), includeSelf (Any)
๊ฒฐ๊ณผ: dynamic / Any.
ํธ์ถ ์:
-
InjectionScript.Runtime.InjectionApiUO.RegisterCompactSearchApi [FindMan]. -
InjectionScript.Runtime.InjectionApiUO.CompactFindMan:CompactFindMan(values).
ํธ์ถ ์ ์ ์ฅ๋ ์ฒ๋ฆฌ๊ธฐ delegate๋ฅผ ์คํํฉ๋๋ค. ๋ฑ๋ก ๋ฉ์๋๋ API๋ฅผ ๊ตฌ์ฑํ ๋ ์ด delegate๋ฅผ ๋ง๋ญ๋๋ค.
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
values => new InjectionValue(CompactFindMan(values))ะฃะบัะฐัะฝััะบะฐ ยท ะ ัััะบะธะน ยท English ยท Deutsch ยท Franรงais ยท Italiano ยท Espaรฑol ยท ็น้ซไธญๆ ยท ๆฅๆฌ่ช ยท ํ๊ตญ์ด
int UO.FindMobile();
int UO.FindMobile(object? stateFilter);
int UO.FindMobile(object? stateFilter, object? rangeFilter);
int UO.FindMobile(object? stateFilter, object? rangeFilter, object? verticalFilter);
int UO.FindMobile(object? stateFilter, object? rangeFilter, object? verticalFilter, object? directionOrKind);
int UO.FindMobile(object? stateFilter, object? rangeFilter, object? verticalFilter, object? directionFilter, object? kindFilter);๊ฒฐํฉ ๋ฌธ์์ด ํํฐ๋ฅผ ์ฌ์ฉํ์ฌ ๊ฐ์ฅ ๊ฐ๊น์ด ๋ก๋๋ ์บ๋ฆญํฐ/์๋ฌผ์ ์ฐพ์ต๋๋ค. ํ๋ ์ด์ด ์์ ์ ์ ์ธ๋ฉ๋๋ค.
-
stateFilter- ๋ณดํต ๋ชจ๋/์ด์์์/์ฃฝ์; ์ ํ ๊ณผ๋ชฉ. ๊ตฌํ์ ๋ชจ๋ ์ธ์๋ ํํฐ ๋ฌธ์์ด์ด๋ฏ๋ก ํ๋์ ์ธ์์ ์ฌ๋ฌ ๋จ์ด๋ฅผ ๊ฒฐํฉํ๋ ๊ฒ์ด ํ์ฉ๋ฉ๋๋ค. -
rangeFilter- ์ผ๋ฐ์ ์ผ๋ก ๋ชจ๋ / ๊ทผ๊ฑฐ๋ฆฌ(0..4) / ์ค๊ฐ(5..9) / ์๊ฑฐ๋ฆฌ(10์์ ์ ์ฒด ๋ฐ๊ฒฝ๊น์ง). ์ด ์์น์์๋ ์ซ์ ๋ฐ๊ฒฝ์ด ํ์ฉ๋์ง ์์ต๋๋ค. ์ ์ฒด ํ๋๋ UO.FindDistance(value)์ ํตํด ๋ณ๊ฒฝ๋ฉ๋๋ค. -
verticalFilter- ๋ชจ๋/์/์๋. ์: Candidate.Z > self.Z, ์๋: Candidate.Z < self.Z. ์ด๊ฒ์ ๋ฐ๋ฅ์ด๋ Z ์์น ๊ณต์ฐจ๊ฐ ์๋๋๋ค. -
directionOrKindโ 4๊ฐ์ ์ธ์(๋ชจ๋, ๋ถ์ชฝ/๋จ์ชฝ/๋์ชฝ/์์ชฝ ๋๋ ์ธ๊ฐ/npc/๋ชน)๊ฐ ์๋ ์์์ ๋ค ๋ฒ์งธ ์์น์ ๋๋ค. ๋ณตํฉ ๋ฌธ์์ด์ผ ์ ์์ต๋๋ค. -
directionFilterโ 5๊ฐ์ ์ธ์๊ฐ ์๋ ์์์ ๋ค ๋ฒ์งธ ์์น: ๋ชจ๋ ๋๋ ๋น๊ต X/Y ๋ถ์ชฝ/๋จ์ชฝ/๋์ชฝ/์์ชฝ. ์ด๋ ๋ณด๋ ๋ฐฉํฅ์ด ์๋ self๋ฅผ ๊ธฐ์ค์ผ๋ก ํ ์์น์ ๋๋ค. -
kindFilter- ๋ค์ฏ ๋ฒ์งธ ์์น: all/human/npc/mob. ์ธ๊ฐ์๋ ๋จ์ฑ๊ณผ ์ฌ์ฑ์ ์ ์ฒด๊ฐ ํฌํจ๋ฉ๋๋ค. 0x0190 - ๋จ์ฑ ์ธ๊ฐ, 0x0191 - ์ฌ์ฑ ์ธ๊ฐ, ๊ทธ๋ฆฌ๊ณ ํ์ค ์ํ/๊ฐ๊ณ ์ผ ๋ฐ ์ ๋ น ์ ์ฒด๋ ํฌํจ๋ฉ๋๋ค. ์ ์ฒด ๋ชฉ๋ก: ์ธ๊ฐ. npc - IsNpc ๋ฐ ์ธ๊ฐ; ํญ๋ - IsNpc ์ธ๊ฐ์ด ์๋๋๋ค. ๊ดด๋ฌผ, ์ฌ์ฑ์ด๋ผ๋ ๋จ์ด๋ ์ฉ๋ฉ๋์ง ์์ต๋๋ค.
int: ํ๋์ serial mobile ๋๋ ์ผ์นํ๋ ํญ๋ชฉ์ด ์๋ ๊ฒฝ์ฐ 0. ์๋๋ ์๋๊ณ ๋ฐฐ์ด๋ ์๋๊ณ type๋ ์๋๊ณ bool๋ ์๋๋๋ค. ํ์ธ ๊ฒฐ๊ณผ != 0๋ ๊ฒฐ๊ณผ๊ฐ ์์์ ์๋ฏธํฉ๋๋ค. ๋น๊ต ๋ฐ๊ฒฌ == true๋ C#์์ ์ ํจํ์ง ์์ต๋๋ค. int๋ bool์ ๋น๊ตํ ์ ์์ต๋๋ค.
- UO.FindMobile: 0 ~ 5 ์ธ์์ ์ ์ฉ๋ฉ๋๋ค. ๋๋ฝ๋ ๊ผฌ๋ฆฌ ์ธ์๊ฐ ๋ชจ๋ ์์ต๋๋ค. ๊ฐ ์ธ์์๋ ๊ณต๋ฐฑ, ํญ, ์ผํ, ์ธ๋ฏธ์ฝ๋ก , |๋ก ๊ตฌ๋ถ๋ ํ ๋จ์ด ๋๋ ์ฌ๋ฌ ๋จ์ด๊ฐ ํฌํจ๋ ์ ์์ต๋๋ค. or +. ๋ชจ๋ ์กฐ๊ฑด์ AND์ ํตํด ๊ฒฐํฉ๋ฉ๋๋ค. ๊ธฐํธ | ์ฌ๊ธฐ์๋ OR๋ฅผ ์๋ฏธํ์ง ์์ต๋๋ค.
- ๊ฒ์์ ๋ค์ด๋ก๋๋ ๋ชจ๋ฐ์ผ๋ง ์ดํด๋ณด๊ณ self์ ์ ์ธํ๊ณ ๊ฑฐ๋ฆฌ๋ฅผ ์ต๋(1, UO.FindDistance())๋ก ์ ํํฉ๋๋ค. ๊ฑฐ๋ฆฌ๋ max(abs(dx), abs(dy)) ๊ท์น์ ๋ฐ๋ผ ์ธก์ ๋ฉ๋๋ค. ๋๊ฐ์ ์ ์ฌ๊ฐํ์ 1๋ก ๊ณ์ฐ๋ฉ๋๋ค. ์์ง์ด๋ ๋ฌผ์ฒด์ ๊ฒฝ์ฐ ๊ฑฐ๋ฆฌ๋ ๊ณ๋จ์ ๋๊ธฐ์ด์ ๊ณ ๋ คํ ์ ์์ผ๋ฉฐ X/Y/Z ๋น๊ต๋ ํ์ฌ ์ขํ๋ฅผ ์ฝ์ต๋๋ค.
- ์ ํฉํ ๊ฒ ์ค์์ ๊ฐ์ฅ ๊ฐ๊น์ด ๊ฒ์ด ์ ํ๋ฉ๋๋ค. ๊ฐ์ ๊ฑฐ๋ฆฌ์์ - ๋ ์์ serial. true/false, ๊ฐ์ ๋๋ ๋ฐฐ์ด ๋์ int serial ๋๋ 0๋ฅผ ๋ฐํํฉ๋๋ค.
- UO.FindMobile๋ ๋ณ๊ฒฝ๋์ง ์์ผ๋ฉฐ FindItem/FindCount/GetFoundItems๋ Ignore ๋ฐ UO.FindVertical์ ์ ์ฉ๋์ง ์์ผ๋ฉฐ ๊ฐ์์ฑ, ํตํ์ฑ ๋๋ ์์ ์ ํ์ธํ์ง ์์ต๋๋ค. ์๊ฒฉ ๊ฐ์ฒด๋ฅผ ์ด๋ํ๊ฑฐ๋ ๋์์ผ๋ก ์ง์ ํ๊ฑฐ๋ ๋ก๋ํ์ง ์์ต๋๋ค.
- ์ซ์ ๋ฐ๊ฒฝ/Z/๋ฐฉํฅ, ๋จ์ด ๋ชฌ์คํฐ, ๋ถ๋์ชฝ, ๋ถ์์ชฝ, ๋จ๋์ชฝ, ๋จ์์ชฝ์ ํํฐ๊ฐ ์๋๋๋ค. ํ๋ณด์ ํ์ธ ์ ์ ์ ์๋ ๋จ์ด๋ก ์ธํด ์ค๋ฅ๊ฐ ๋ฐ์ํฉ๋๋ค. ํ๋ณด์๊ฐ ์์ ๊ฒฝ์ฐ ์ด ์น์ ์ ์คํ๋์ง ์์ ์ ์์ต๋๋ค. ๋๊ฐ์ ์ง์ญ์ ๊ฒฝ์ฐ ๋ถ๋์ชฝ ๋ฑ์ ๊ฒฐํฉํฉ๋๋ค. ์์น ํ์ธ์ ์ํด์๋ ๋ฐ๊ฒฌ๋ ๊ฐ์ฒด์ ์์ฑ ๋๋ UO.GetMobiles()๋ฅผ ์ฌ์ฉํ์ธ์.
๊ฐ ์์ ๋ ๋ณ๋์ ํ์ผ .csx๋ก ์ ์ฅํ๊ณ IDE์์ ์คํํ ์ ์์ต๋๋ค. UO ๊ฐ์ฒด์ ๋๊ธฐ ๊ธฐ๋ฅ์ ํ์ฌ ๊ฒ์ ์ธ์
์ ํธ์คํธ๋ฅผ ์ ๊ณตํฉ๋๋ค. ๋ฐ๋ชจ serial ์ด๋ฆ, ์ขํ, ์ฃผ์๋ฅผ ์์ ์ ๊ฒ์ผ๋ก ๋ฐ๊พธ์ธ์.
์ด ์ฝ๋๋ฅผ ๋ณ๋์ .csx ํ์ผ๋ก ์คํํ์ธ์. ์ธ์๋ ํธ์ถ์ ์ง์ ํ์๋ฉ๋๋ค. ์์ ์ ์ด๋ฆ, serial, ์ฃผ์๋ฅผ ์์ ์ ๊ฐ์ผ๋ก ๋ฐ๊พธ์ธ์.
ํ ๋ฒ์ ํธ์ถ ๊ฒฐ๊ณผ๋ฅผ ์ ๋์ ํ์ํฉ๋๋ค. ์ซ์๋ฅผ bool๋ก ๋ณํํ์ง ์์ผ๋ฉฐ, ๋ฐฐ์ด์ด๋ฉด ์์ ์๋ฅผ ํ์ํฉ๋๋ค.
var result = UO.FindMobile("all", "all", "above");
UO.Print("FindMobile: " + Convert.ToString(result));๋งค๊ฐ๋ณ์์ ์คํ ํ๋ฆ:
- ๋ชจ๋, ๋ชจ๋, ์๋ฅผ ํต๊ณผํจ: ๊ฐ์ฒด์ ๋์ด๊ฐ ๋ฌธ์์ Z๋ณด๋ค ์๊ฒฉํ๊ฒ ํฝ๋๋ค. Z๊ณผ ๊ฐ์ผ๋ฉด ์ ํฉํ์ง ์์ต๋๋ค.
- 0๋ ์์ฑ์ ์ฝ๊ธฐ ์ ์ ์ฒ๋ฆฌ๋ฉ๋๋ค. Print๋ ID, ์ด๋ฆ ๋ฐ ๋์ด๋ฅผ ํ์ํฉ๋๋ค. ๊ฒ์ ์์ ์ด ์คํ๋์ง ์์ต๋๋ค.
var found = UO.FindMobile("all", "all", "above");
if (Truth(found == 0))
{
UO.Print("No matching mobile");
return null;
}
UO.Print("ID: " + Convert.ToString(found) + " | Name: " + UO.GetName(found));
UO.Print("Z: " + Convert.ToString(UO.GetZ(found)) + " | Self Z: " + Convert.ToString(UO.GetZ("self")));
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;๋งค๊ฐ๋ณ์์ ์คํ ํ๋ฆ:
- 18โ์ธ๋ถ ํ๊ณ; ์ด์์๋, ๊ฐ๊น์ด, ๋ชจ๋ , ๋ชจ๋ , ๊ตฐ์ค์ ํ๋ ฅ ์กฐ๊ฑด์ ์ค์ ํฉ๋๋ค. ๊ทผ์ฒ๋ ์ต๋ 4, ์ค๊ฐ - 5..9, ๋ฉ๋ฆฌ๋ 10๊น์ง์ ๋ฒ์๋ฅผ ์ ์งํฉ๋๋ค.
- ๋ง์ง๋ง์ผ๋ก ์ ์ ์๋ฃ ๋๋ ์ฒ๋ฆฌ๋ ์ค๋ฅ ์ ์ด์ ๋ฐ๊ฒฝ์ ๋ฐํํฉ๋๋ค. ์คํฌ๋ฆฝํธ๋ ์๋ ๋ก๋ฉ์ โโํ์ฅํ์ง ์์ต๋๋ค.
return RunScenario();
object? RunScenario()
{
var previous = UO.FindDistance();
try
{
UO.FindDistance(18);
var found = UO.FindMobile("alive", "near", "all", "all", "mob");
if (Truth(found != 0))
{
UO.Print("Match: " + Convert.ToString(found));
UO.Print("Distance: " + Convert.ToString(UO.GetDistance(found)));
}
else
{
UO.Print("No match in the loaded area");
}
}
finally
{
UO.FindDistance(previous);
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;๋งค๊ฐ๋ณ์์ ์คํ ํ๋ฆ:
- ๋ฌธ์์ด "north east"๊ฐ ๋์ฐ๋ฏธ์๊ฒ ์ ๋ฌ๋ฉ๋๋ค. ์ด๋ ํ๋์ ์์ฒญ์ ๋ํ ์ฌ๋ฌ ์กฐ๊ฑด์ด๋ฉฐ ์๋ก ๋ค๋ฅธ ๋ชฉํ์ ๋ํ ์์ฐจ์ ๊ฒ์์ด ์๋๋๋ค.
- FindAndDescribe ์ ์ฒด๊ฐ ์ ์ธ๋ฉ๋๋ค. ๋์์ด๋ ์บ๋ฆญํฐ๋ฅผ ๋ณ๊ฒฝํ์ง ์๊ณ ID/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 id = FindAndDescribe("north east");
UO.Print("Returned ID: " + Convert.ToString(id));
return null;
}
dynamic FindAndDescribe(dynamic filters)
{
var id = UO.FindMobile(filters);
if (Truth(id == 0))
{
UO.Print("Nothing matched: " + filters);
return 0;
}
UO.Print(UO.GetName(id) + " | " + Convert.ToString(id));
return id;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
}๋งค๊ฐ๋ณ์์ ์คํ ํ๋ฆ:
- Alive/all/all/all/mob - 5๊ฐ์ ์ง์ ์์น. ๊ฐ์ฅ ๊ฐ๊น์ด ๊ฒฐ๊ณผ๋ฅผ ์ป์ ํ ๊ฑฐ๋ฆฌ 2๋ฅผ ํ์ธํฉ๋๋ค.
- ์ด๋ฌํ ์คํฌ๋ฆฝํธ๋ ์๋ฌผ์ ๊ฒฝ๋ก๋ฅผ ํ์ธํ์ง ์์ผ๋ฉฐ ์์ง์ด์ง ์์ต๋๋ค.
var found = UO.FindMobile("alive", "all", "all", "all", "mob");
if (Truth(found == 0))
{
UO.Print("No loaded creature");
return null;
}
if (Truth(UO.GetDistance(found) <= 2))
{
UO.Print("Creature within two tiles: " + Convert.ToString(found));
}
else
{
UO.Print("Nearest creature is farther away");
}
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.FindMobile. -
InjectionScript.Runtime.InjectionApiUO.FindMobile:FindMobile(new InjectionValue("all"), new InjectionValue("all"), new InjectionValue("all"), new InjectionValue("all")).
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
public int FindMobile() => FindMobile(new InjectionValue("all"), new InjectionValue("all"),
new InjectionValue("all"), new InjectionValue("all"));๋งค๊ฐ๋ณ์: stateFilter (Any)
๊ฒฐ๊ณผ: int / Integer.
ํธ์ถ ์:
-
InjectionScript.Runtime.InjectionApiUO.FindMobile. -
InjectionScript.Runtime.InjectionApiUO.FindMobile:FindMobile(stateFilter, new InjectionValue("all"), new InjectionValue("all"), new InjectionValue("all")).
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
public int FindMobile(InjectionValue stateFilter) => FindMobile(stateFilter, new InjectionValue("all"),
new InjectionValue("all"), new InjectionValue("all"));๋งค๊ฐ๋ณ์: stateFilter (Any), rangeFilter (Any)
๊ฒฐ๊ณผ: int / Integer.
ํธ์ถ ์:
-
InjectionScript.Runtime.InjectionApiUO.FindMobile. -
InjectionScript.Runtime.InjectionApiUO.FindMobile:FindMobile(stateFilter, rangeFilter, new InjectionValue("all"), new InjectionValue("all")).
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
public int FindMobile(InjectionValue stateFilter, InjectionValue rangeFilter) => FindMobile(stateFilter,
rangeFilter, new InjectionValue("all"), new InjectionValue("all"));๋งค๊ฐ๋ณ์: stateFilter (Any), rangeFilter (Any), verticalFilter (Any)
๊ฒฐ๊ณผ: int / Integer.
ํธ์ถ ์:
-
InjectionScript.Runtime.InjectionApiUO.FindMobile. -
InjectionScript.Runtime.InjectionApiUO.FindMobile:FindMobile(stateFilter, rangeFilter, verticalFilter, new InjectionValue("all")).
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
public int FindMobile(InjectionValue stateFilter, InjectionValue rangeFilter, InjectionValue verticalFilter) =>
FindMobile(stateFilter, rangeFilter, verticalFilter, new InjectionValue("all"));
UO.FindMobile(stateFilter, rangeFilter, verticalFilter, directionOrKind) โ UO.FindMobile(Any,Any,Any,Any)
๋งค๊ฐ๋ณ์: stateFilter (Any), rangeFilter (Any), verticalFilter (Any), directionOrKind (Any)
๊ฒฐ๊ณผ: int / Integer.
ํธ์ถ ์:
-
InjectionScript.Runtime.InjectionApiUO.Register [FindMobile]. -
InjectionScript.Runtime.InjectionApiUO.FindMobile:FindMobile(values[0], values[1], values[2], values[3]).
ํธ์ถ ์ ์ ์ฅ๋ ์ฒ๋ฆฌ๊ธฐ delegate๋ฅผ ์คํํฉ๋๋ค. ๋ฑ๋ก ๋ฉ์๋๋ API๋ฅผ ๊ตฌ์ฑํ ๋ ์ด delegate๋ฅผ ๋ง๋ญ๋๋ค.
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
values => new InjectionValue(
FindMobile(values[0], values[1], values[2], values[3]))
UO.FindMobile(stateFilter, rangeFilter, verticalFilter, directionFilter, kindFilter) โ UO.FindMobile(Any,Any,Any,Any,Any)
๋งค๊ฐ๋ณ์: stateFilter (Any), rangeFilter (Any), verticalFilter (Any), directionFilter (Any), kindFilter (Any)
๊ฒฐ๊ณผ: int / Integer.
ํธ์ถ ์:
-
InjectionScript.Runtime.InjectionApiUO.Register [FindMobile]. -
InjectionScript.Runtime.InjectionApiUO.FindMobile:FindMobile(values[0], values[1], values[2], values[3], values[4]).
ํธ์ถ ์ ์ ์ฅ๋ ์ฒ๋ฆฌ๊ธฐ delegate๋ฅผ ์คํํฉ๋๋ค. ๋ฑ๋ก ๋ฉ์๋๋ API๋ฅผ ๊ตฌ์ฑํ ๋ ์ด delegate๋ฅผ ๋ง๋ญ๋๋ค.
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
values => new InjectionValue(
FindMobile(values[0], values[1], values[2], values[3], values[4]))ะฃะบัะฐัะฝััะบะฐ ยท ะ ัััะบะธะน ยท English ยท Deutsch ยท Franรงais ยท Italiano ยท Espaรฑol ยท ็น้ซไธญๆ ยท ๆฅๆฌ่ช ยท ํ๊ตญ์ด
dynamic UO.FindNotoriety(object? @type, object? notoriety);
dynamic UO.FindNotoriety(object? @type, object? notoriety, object? distance);
dynamic UO.FindNotoriety(object? @type, object? notoriety, object? distance, object? nearest);
dynamic UO.FindNotoriety(object? @type, object? notoriety, object? distance, object? nearest, object? maxZ);
dynamic UO.FindNotoriety(object? @type, object? notoriety, object? distance, object? nearest, object? maxZ, object? color);
dynamic UO.FindNotoriety(object? @type, object? notoriety, object? distance, object? nearest, object? maxZ, object? color, object? container);๋ ๋ค๋ฅธ mobile๋ฅผ ํ๋์ฉ body/type ์ฐพ์ ์ ๋ช ์ ํ์ฉํฉ๋๋ค. ์ฌ๋ฐ๋ฅธ ํ๋๋ฅผ ์ง๋ ํน์ ์ฑ๊ฒฉ์ด ํ์ํ ๋ ์ ํฉํฉ๋๋ค. ๊ณ ๊ธ ๋ชจ์์ ์ฌ์ฉํ๋ฉด ๋ฐ๊ฒฝ, ๋์ด ๋ฐ hue๋ฅผ ์ ํํ ์ ์์ต๋๋ค. ์ด๊ฒ์ ๊ณต๊ฒฉ์ด ์๋ ๊ฐ์ฒด ์ ํ์ผ ๋ฟ์ ๋๋ค.
-
typeโ ํ๋์ ๋ณธ๋ฌธ ์ซ์ graphic ๋๋ 16์ง์ ๋ฌธ์์ด; ์ฐฉ์ฉํ ์์ดํ ์ serial๋, type๋ ์๋๊ณ ๋ฐฐ์ด๋ ์๋๋๋ค. 0x0190 (400) - ๋จ์ฑ ์ธ๊ฐ, 0x0191 (401) - ์ฌ์ฑ ์ธ๊ฐ; ์ด๋ค์ ๋ค๋ฅธ ์ ๋ฐ ํํฐ์ ๋๋ค. ๋ body๋ ๋ณ๋์ ํธ์ถ์ด ํ์ํ๊ฑฐ๋ ๋ง์คํฌ๋ฅผ ์ฐฉ์ฉํ GetMobiles์ด ํ์ํฉ๋๋ค. -1 ๋๋ 0xFFFF - ๋ชจ๋ ์ ์ฒด. -
notorietyโ ์๋ฒ์์ ๋ฐ์ ์บ๋ฆญํฐ์์ ๊ด๊ณ ์ํ: 0 โ ์ ์ ์์, 1 โ ๋ฌด์ฃ, 2 โ ๋๋งน, 3 โ ํ์, 4 โ ๋ฒ์ฃ, 5 โ ์ , 6 โ ์ด์ธ์, 7 - ๋ฌด์ ์ ๋๋ค. ์ซ์๋ ํ๋์ ์ํ๋ฅผ ์๋ฏธํฉ๋๋ค. "5|6" ๋๋ ์ซ์ ๋ฐฐ์ด - ์ ํญ๋ชฉ ์ค ํ๋. ์ท์ ์๊น์ด๋ ์์ ์ ์๊น์ด ์๋๋๋ค. ์์(๋ณดํต -1), 0xFFFF, "any", ๋น ๋ฌธ์์ด ๋๋ ๋น ๋ฐฐ์ด์ ์ด ํํฐ๋ฅผ ๋ณ๋๋ก ๋นํ์ฑํํฉ๋๋ค. ์ ํจํ ์ซ์๊ฐ ์๋ ์๋ชป๋ ๋ฌธ์์ด์ ๋๊ตฌ๋ ์ฐพ์ ์ ์์ต๋๋ค. ์ํ ์์์ ๋ฐ๋ผ ์ฐ์ ์์๊ฐ ์ค์ ๋์ง ์์ต๋๋ค. 5 ํํฐ๋ NPC/๋ชฌ์คํฐ๋ฅผ ์๋์ผ๋ก ์ ํํ๋ ๋์ ์ ์ ์ ํํฉ๋๋ค. ์ค์ ๊ฐ์ ์๋ฒ์ ๋ฐ๋ผ ๋ค๋ฆ ๋๋ค. ์ฌ๋ฌ ๊ฐ์ OR(์ซ์ 5, ๋ฌธ์์ด "5|6") ๋๋ ์ซ์/์ซ์ ๋ฌธ์์ด์ ๋จ์ ๋ฐฐ์ด๋ก ๊ฒฐํฉ๋ฉ๋๋ค. ํ๋ฉด ๋ฐฐ์ด๊ณผ ๊ฐ๋ณ ์ธ์๋ฅผ ํผํฉํ ์ ์์ต๋๋ค. ๊ฐ์ ์์๋ ์ฐ์ ์์๋ฅผ ๋ถ์ฌํ์ง ์์ต๋๋ค. ์ซ์๊ฐ ์๋ ํ ํฐ์ ์ ์ธ๋ฉ๋๋ค. ์์ ํ ์๋ชป๋ ๋ง์คํฌ๋ ์๋ฌด๊ฒ๋ ์ฐพ์ง ๋ชปํฉ๋๋ค. ์ค์ฒฉ ๋ฐฐ์ด์ ์ซ์๊ฐ ์๋๋ฉฐ ์๋ชป๋ ์์๋ก ๋ฌด์๋ฉ๋๋ค. ๋ค์ฐจ์ ๋ง์คํฌ๋ ์ง์๋์ง ์์ต๋๋ค. ๋ ๊ฐ์ ์ธ์๋ก ๊ตฌ์ฑ๋ ์ซ์ ํ์์ ํน์ง: ์์ ์ฝ๋๋ง ํํฐ๋ฅผ ๋นํ์ฑํํ๊ณ ์ซ์ 0xFFFF๋ ๋ฆฌํฐ๋ด ์ฝ๋๋ก ๊ฐ์ฃผ๋๋ฉฐ ์ผ๋ฐ์ ์ผ๋ก ๋๊ตฌ๋ ์ฐพ์ง ์์ต๋๋ค. -
distanceโ ์ ์ ํฌํจํ ์ํ ๋ฐ๊ฒฝ: 5๋ ๊ฑฐ๋ฆฌ 0..5๋ฅผ ํ์ฉํฉ๋๋ค. ๊ฑฐ๋ฆฌ๋ max(abs(dx),abs(dy))์ด๋ฏ๋ก ์ธ์ ํ ๋๊ฐ์ ๋ 1์ ๋๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก ์ซ์๊ฐ ์์์ธ ๊ฒฝ์ฐ์๋ ๋ฌด์ ํ ๊ฒ์์ด ์๋ UO.FindDistance()์ ์ ํํฉ๋๋ค. 0๋ ๋์ผํ X/Y ์ ์ ๋จ๊น๋๋ค. ๊ฒฝ๋ก์ ๊ธธ์ด๊ฐ ์๋๋๋ค. ์ฅ์ ๋ฌผ๊ณผ ๋ฐ๋ฅ์ ์ด ๋งค๊ฐ๋ณ์๋ก ํ์ธ๋์ง ์์ต๋๋ค. -
nearest- false/0 ๊ธฐ๋ณธ๊ฐ: ์ธ๊ณ ์ด๊ฑฐ ์์์์ ์ฒซ ๋ฒ์งธ ์ผ์น, ๊ฐ์ฅ ๊ฐ๊น๊ฑฐ๋ ์์ ID๊ฐ ๋ณด์ฅ๋์ง ์์ต๋๋ค. true/1: ๊ฐ์ฅ ๊ฐ๊น๊ณ ๊ฐ์ผ๋ฉด ๋ ์์ serial. -
maxZโ ์ต๋ ๋ณต๊ทผ(Z ๋์ - ์บ๋ฆญํฐ์ Z)์ ํฌํจํ๋ฉฐ, Z ์ธ๊ณ ๋จ์์ ๋๋ค. ์ด๊ฒ์ ์ธต์๋ ์ ์ X/Y๊ฐ ์๋๋๋ค. maxZ=4 Z ํ๋ ์ด์ด 10๋ Z ๋์ 6..14๋ฅผ ํ์ฉํฉ๋๋ค. 0์๋ ์ ํํ ๋์ผํ ๋์ด๊ฐ ํ์ํฉ๋๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก/์์์ ๊ฒฝ์ฐ UO.FindVertical()๊ฐ ์ฌ์ฉ๋ฉ๋๋ค. ๊ณ๋จ์์๋ Z๋ก ์ํ๋ ๋์์ ์ ๊ฑฐํ ์ ์์ต๋๋ค. ์์ ์ฐจ์ด Z๋ ๋ฐ๋ฅ์ ์ ๊ทผ์ฑ์ ์ ์ฆํ์ง ๋ชปํฉ๋๋ค. -
colorโ mobile ์์ฒด์ ์์: int ๋๋ ์ซ์/16์ง์ ๋ฌธ์์ด. ์์(๊ธฐ๋ณธ์ ์ผ๋ก -1) ๋ฐ 0xFFFF - ๋ชจ๋ hue; 0์ ์ ํํ hue 0์ด๋ฉฐ ์ด๋ค ๊ฐ๋ ์๋๋๋ค. ์ ๋ช ๋์ ์คํธ๋ฆฝ์ ์์์ด๋ ์ท์ ์์์ด ์๋๋๋ค. ์ด ํ๋ผ๋ฏธํฐ๋ ์ฐฉ์ฉ ์ค์ธ ์์ดํ ์ ์์์ ํ์ธํ์ง ์์ต๋๋ค. -
container- ๊ธฐ๋ณธ์ ์ผ๋ก ์์: ์ธ๊ณ. ์ง์ ๋ ๊ฒฝ์ฐ ground/"ground"/UO.Ground(), ์ซ์ 0/1 ๋ฐ -1/"my"๊ฐ ์ด ํน์ ๋ช ๋ น์์ ํธํ๋๋ ์ธ๊ณ ์ง์ ์ผ๋ก ํ์ฉ๋ฉ๋๋ค. ๋ช ์์ ์ธ serial ์ปจํ ์ด๋ ๋๋ "backpack"๋ 0์ ๋ฐํํฉ๋๋ค. ์ปจํ ์ด๋ ๋ด๋ถ์๋ ๋ชจ๋ฐ์ผ์ด ์์ต๋๋ค. ์ฌ๋ฌผ ๊ฒ์์ ์ถ๊ฐํ์ง ์์ต๋๋ค.
int - ์ ํํ mobile์ serial ๋๋ ์ ํฉํ ํญ๋ชฉ์ด ์๋ ๊ฒฝ์ฐ 0. ์ด๋ graphic/type, ๋ฐ๊ฒฌ๋ ๊ฐ์ฒด ์ ๋๋ true/false๊ฐ ์๋ ID์ ๋๋ค. if (found != 0) { ... }, notfound == true๋ฅผ ์ฌ์ฉํ์ธ์. ๋ฐ๊ฒฌ๋ ID๋ UO.AddObject, UO.Attack ๋๋ UO.Follow๋ก ์ ๋ฌ๋ ์ ์์ง๋ง ๊ฐ ๊ฒ์ ์์ ์ ๋ณ๋๋ก ํธ์ถ๋ฉ๋๋ค.
- ๊ฒ์์์๋ ํด๋ผ์ด์ธํธ๊ฐ ์ด๋ฏธ ๋ค์ด๋ก๋ํ ๋ชจ๋ฐ์ผ๋ง ์ฝ์ต๋๋ค. ํ๊ธฐ๋ ๊ธฐ๋ก๊ณผ Ignore๋ ์ ์ธ๋ฉ๋๋ค. ํธ์ถ ์์ฒด๋ ๋์์ ์ด์ง ์๊ณ , ๊ณต๊ฒฉํ์ง ์์ผ๋ฉฐ, ๋์์ผ๋ก ์ด๋ํ์ง ์์ผ๋ฉฐ, ์๋ฒ์ ์๊ฒฉ ๊ฐ์ฒด๋ฅผ ์์ฒญํ์ง ์์ต๋๋ค.
- ๊ฑฐ๋ฆฌ๋ ๊ฒฝ๋ก ๊ธธ์ด๊ฐ ์๋ ๊ธฐํํ์ max(abs(dx),abs(dy))์ ๋๋ค. ๊ทผ์ ์ฑ์ด ์๋ค๊ณ ํด์ ๋ฒฝ์ด ์๊ฑฐ๋ ๋ค๋ฅธ ์ธต์ ๋ํ ์ ๊ทผ์ฑ์ด ๋ณด์ฅ๋๋ ๊ฒ์ ์๋๋๋ค. ๋ฐํ ์ ์ํ๊ฐ ๋ณ๊ฒฝ๋ ์ ์์ต๋๋ค.
- ์๋ช , ์คํ ์ค, ์์ผ๋ ์๋์ผ๋ก ํ์ธ๋์ง ์์ต๋๋ค. ์ค์ํ๋ค๋ฉด GetMobiles๋ฅผ aliveOnly/visibleOnly์ ํจ๊ป ์ฌ์ฉํ๊ฑฐ๋ ์ง์ ํ์ธํ์ธ์. ์ ์ํ์ ์๋ฒ๊ฐ ์๋ค๊ณ ํด์ NPC๋ฅผ ์ฌ์ฉํ ์ ์๋ ๊ฒ์ ์๋๋๋ค.
- 2์์ 7 ์ธ์. maxZ๋ฅผ ์ ์กํ๋ ค๋ฉด ์ด์ ๊ฑฐ๋ฆฌ์ ๊ฐ์ฅ ๊ฐ๊น์ด ๊ฑฐ๋ฆฌ๋ฅผ ์ง์ ํด์ผ ํฉ๋๋ค. ์ด ๋ช ๋ น์ ์ฌ๋ฌ ์ ๋ช ์ ์ป์ผ๋ ค๋ฉด ๋ ๋ฒ์งธ ์ธ์์ ๋จ์ผ ๋ง์คํฌ "5|6" ๋๋ ํ๋ฉด ๋ฐฐ์ด์ ์ฌ์ฉํ์ญ์์ค. ์ธ ๋ฒ์งธ ์ธ์๋ ๋ ๋ฒ์งธ ์ํ๊ฐ ์๋๋ผ ๊ฑฐ๋ฆฌ์ ๋๋ค.
- ํ์์ ์ค์ํ ์ฐจ์ด์ : NUMERIC ์ ๋ช ํธ์ถ ๋ธ๋ฆฌ์ง.FindNotoriety๋ฅผ ์ฌ์ฉํ๋ ๋ ์ธ์, ์ด์ FindItem/FindCount/GetFoundItems๋ฅผ ์ญ์ ํ๊ณ ๋ชจ๋ ์ผ์น ํญ๋ชฉ์ ๊ธฐ๋กํฉ๋๋ค. ๋ ๊ฐ์ STRING/ARARY ์ธ์์ 3..7 ์ธ์๊ฐ ์๋ ๋ชจ๋ ์์์ ๋์ผํ Find* ํ๋๋ฅผ ์ ์งํ๋ฉด์ ID๋ง ๋ฐํํฉ๋๋ค. ํ์ฅ๋ ์ฟผ๋ฆฌ์ ๊ฒฐ๊ณผ๋ก FindCount๋ฅผ ์ฝ์ง ๋ง์ธ์.
- ๋ชจ๋ ์์์์๋ self ๋ฐ Ignore๋ฅผ ์ ์ธํ๊ณ Z ์ ํ์ ์ฌ์ฉํฉ๋๋ค. ์ค์๊ฐ/๊ฐ์์ ํํฐ๊ฐ ์์ผ๋ฉฐ ์์ผ๊ฐ ํ๋ณด๋์ง ์์ต๋๋ค. ์ผ์นํ๋ ํญ๋ชฉ์ด ๋ฐํ๋์ง ์์ต๋๋ค 0. ์ฝ์ ์ ์๋ type/distance/maxZ/color๋ก ์ธํด ๋ณํ ์ค๋ฅ๊ฐ ๋ฐ์ํฉ๋๋ค.
๊ฐ ์์ ๋ ๋ณ๋์ ํ์ผ .csx๋ก ์ ์ฅํ๊ณ IDE์์ ์คํํ ์ ์์ต๋๋ค. UO ๊ฐ์ฒด์ ๋๊ธฐ ๊ธฐ๋ฅ์ ํ์ฌ ๊ฒ์ ์ธ์
์ ํธ์คํธ๋ฅผ ์ ๊ณตํฉ๋๋ค. ๋ฐ๋ชจ serial ์ด๋ฆ, ์ขํ, ์ฃผ์๋ฅผ ์์ ์ ๊ฒ์ผ๋ก ๋ฐ๊พธ์ธ์.
์ด ์ฝ๋๋ฅผ ๋ณ๋์ .csx ํ์ผ๋ก ์คํํ์ธ์. ์ธ์๋ ํธ์ถ์ ์ง์ ํ์๋ฉ๋๋ค. ์์ ์ ์ด๋ฆ, serial, ์ฃผ์๋ฅผ ์์ ์ ๊ฐ์ผ๋ก ๋ฐ๊พธ์ธ์.
ํ ๋ฒ์ ํธ์ถ ๊ฒฐ๊ณผ๋ฅผ ์ ๋์ ํ์ํฉ๋๋ค. ์ซ์๋ฅผ bool๋ก ๋ณํํ์ง ์์ผ๋ฉฐ, ๋ฐฐ์ด์ด๋ฉด ์์ ์๋ฅผ ํ์ํฉ๋๋ค.
object? result = UO.FindNotoriety(0x0190, 5);
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));๋งค๊ฐ๋ณ์์ ์คํ ํ๋ฆ:
- 0x0190(400)๋ ๋จ์ฑ ์ธ์ฒด, 0x0191(401)๋ ์ฌ์ฑ ์ธ์ฒด์ ๋๋ค. 5 - ์ . ๊ฐ ํตํ๋ 1๊ฐ์ body๋ฅผ ์์ ํฉ๋๋ค. ๋ฌธ์์ด 0x0190|0x0191๋ ์ด ์์น์์ ์ง์๋์ง ์์ต๋๋ค. ํ์ฌ FindDistance/FindVertical๊ฐ ์ฌ์ฉ๋ฉ๋๋ค.
- ๋ ๋ฒ์งธ ํธ์ถ ์ดํ FindItem/FindCount/GetFoundItems๋ ์ฌ์ฑ์ ์ ์ฒด๋ง์ ๋ํ๋ ๋๋ค. ์ฒซ ๋ฒ์งธ ์๋์ menCount์ ์ ์ฅ๋ฉ๋๋ค. ๋ฐํ๋ ๋จ์/์ฌ์๋ ๋ฒํธ๊ฐ ์๋ ์ฒซ ๋ฒ์งธ serial ๋๋ 0์ ๋๋ค. NPC ์ด๋ฌํ ์ ์ฒด๊ฐ ํฌํจ๋ ๊ฒฝ์ฐ๋ ๊ฒฐ๊ณผ์ ํฌํจ๋ ์ ์์ต๋๋ค. ์ ๋ น๊ณผ ๋ค๋ฅธ ์ข ์กฑ์ ์ด ๋ body์ ํฌํจ๋์ง ์์ต๋๋ค.
var man = UO.FindNotoriety(0x0190, 5);
var menCount = UO.FindCount();
var woman = UO.FindNotoriety(0x0191, 5);
var womenCount = UO.FindCount();
UO.Print("Male humans: " + Convert.ToString(menCount));
UO.Print("Female humans: " + Convert.ToString(womenCount));
UO.Print("Total humans: " + Convert.ToString(menCount + womenCount));๋งค๊ฐ๋ณ์์ ์คํ ํ๋ฆ:
- -1 ์ฒซ ๋ฒ์งธ ๋งค๊ฐ๋ณ์ โ ๋ชจ๋ ๋ชธ์ฒด; -6๋ฒ์งธ 1 - ๋ชจ๋ hue. ground - ํํ. FindCount ์ด ์์ ์ดํ ์ ๋ฐ์ดํธ๋์ง ์์์ต๋๋ค. ์ฌ์ฉ์ด ๋ฐ๊ฒฌ๋์์ต๋๋ค.
return RunScenario();
object? RunScenario()
{
var found = UO.FindNotoriety(-1, "5|6", 12, true, 4, -1, "ground");
if (Truth(found != 0))
{
UO.AddObject("near_enemy", found);
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;๋งค๊ฐ๋ณ์์ ์คํ ํ๋ฆ:
- ๋ฐฐ์ด์๋ ๋ ๊ฐ์ ์ฝ๋๊ฐ ํฌํจ๋์ด ์์ต๋๋ค. ๋๋ฝ๋ ๊ผฌ๋ฆฌ ์ธ์๋ ํ์ฌ ๋ฐ๊ฒฝ/Z, ๊ฐ์ฅ ๊ฐ๊น์ด=false ๋ฐ ๋ชจ๋ hue์ ์๋ฏธํฉ๋๋ค. ์ด๊ฒ์ UO.FindNotoriety(type,5,6) ํญ๋ชฉ์ด ์๋๋๋ค. 6๊ฐ ๋ฐ๊ฒฝ์ด ๋ฉ๋๋ค.
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()
{
dynamic[] allowed = new dynamic[checked((int)(1) + 1)];
allowed[0] = 5;
allowed[1] = 6;
var found = UO.FindNotoriety(0x0191, allowed);
if (Truth(found != 0))
{
UO.AddObject("allowed_mobile", found);
UO.Print("Selected ID: " + Convert.ToString(found));
}
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์ ์ฌ์ฉํ์ธ์.
๋งค๊ฐ๋ณ์: type (Any), notoriety (Any)
๊ฒฐ๊ณผ: dynamic / Any.
ํธ์ถ ์:
-
InjectionScript.Runtime.InjectionApiUO.RegisterCompactSearchApi [FindNotoriety]. -
InjectionScript.Runtime.InjectionApiUO.CompactFindNotoriety:CompactFindNotoriety(values).
ํธ์ถ ์ ์ ์ฅ๋ ์ฒ๋ฆฌ๊ธฐ delegate๋ฅผ ์คํํฉ๋๋ค. ๋ฑ๋ก ๋ฉ์๋๋ API๋ฅผ ๊ตฌ์ฑํ ๋ ์ด delegate๋ฅผ ๋ง๋ญ๋๋ค.
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
values => new InjectionValue(CompactFindNotoriety(values))๋งค๊ฐ๋ณ์: type (Any), notoriety (Any), distance (Any)
๊ฒฐ๊ณผ: dynamic / Any.
ํธ์ถ ์:
-
InjectionScript.Runtime.InjectionApiUO.RegisterCompactSearchApi [FindNotoriety]. -
InjectionScript.Runtime.InjectionApiUO.CompactFindNotoriety:CompactFindNotoriety(values).
ํธ์ถ ์ ์ ์ฅ๋ ์ฒ๋ฆฌ๊ธฐ delegate๋ฅผ ์คํํฉ๋๋ค. ๋ฑ๋ก ๋ฉ์๋๋ API๋ฅผ ๊ตฌ์ฑํ ๋ ์ด delegate๋ฅผ ๋ง๋ญ๋๋ค.
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
values => new InjectionValue(CompactFindNotoriety(values))๋งค๊ฐ๋ณ์: type (Any), notoriety (Any), distance (Any), nearest (Any)
๊ฒฐ๊ณผ: dynamic / Any.
ํธ์ถ ์:
-
InjectionScript.Runtime.InjectionApiUO.RegisterCompactSearchApi [FindNotoriety]. -
InjectionScript.Runtime.InjectionApiUO.CompactFindNotoriety:CompactFindNotoriety(values).
ํธ์ถ ์ ์ ์ฅ๋ ์ฒ๋ฆฌ๊ธฐ delegate๋ฅผ ์คํํฉ๋๋ค. ๋ฑ๋ก ๋ฉ์๋๋ API๋ฅผ ๊ตฌ์ฑํ ๋ ์ด delegate๋ฅผ ๋ง๋ญ๋๋ค.
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
values => new InjectionValue(CompactFindNotoriety(values))
UO.FindNotoriety(type, notoriety, distance, nearest, maxZ) โ UO.FindNotoriety(Any,Any,Any,Any,Any)
๋งค๊ฐ๋ณ์: type (Any), notoriety (Any), distance (Any), nearest (Any), maxZ (Any)
๊ฒฐ๊ณผ: dynamic / Any.
ํธ์ถ ์:
-
InjectionScript.Runtime.InjectionApiUO.RegisterCompactSearchApi [FindNotoriety]. -
InjectionScript.Runtime.InjectionApiUO.CompactFindNotoriety:CompactFindNotoriety(values).
ํธ์ถ ์ ์ ์ฅ๋ ์ฒ๋ฆฌ๊ธฐ delegate๋ฅผ ์คํํฉ๋๋ค. ๋ฑ๋ก ๋ฉ์๋๋ API๋ฅผ ๊ตฌ์ฑํ ๋ ์ด delegate๋ฅผ ๋ง๋ญ๋๋ค.
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
values => new InjectionValue(CompactFindNotoriety(values))
UO.FindNotoriety(type, notoriety, distance, nearest, maxZ, color) โ UO.FindNotoriety(Any,Any,Any,Any,Any,Any)
๋งค๊ฐ๋ณ์: type (Any), notoriety (Any), distance (Any), nearest (Any), maxZ (Any), color (Any)
๊ฒฐ๊ณผ: dynamic / Any.
ํธ์ถ ์:
-
InjectionScript.Runtime.InjectionApiUO.RegisterCompactSearchApi [FindNotoriety]. -
InjectionScript.Runtime.InjectionApiUO.CompactFindNotoriety:CompactFindNotoriety(values).
ํธ์ถ ์ ์ ์ฅ๋ ์ฒ๋ฆฌ๊ธฐ delegate๋ฅผ ์คํํฉ๋๋ค. ๋ฑ๋ก ๋ฉ์๋๋ API๋ฅผ ๊ตฌ์ฑํ ๋ ์ด delegate๋ฅผ ๋ง๋ญ๋๋ค.
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
values => new InjectionValue(CompactFindNotoriety(values))
UO.FindNotoriety(type, notoriety, distance, nearest, maxZ, color, container) โ UO.FindNotoriety(Any,Any,Any,Any,Any,Any,Any)
๋งค๊ฐ๋ณ์: type (Any), notoriety (Any), distance (Any), nearest (Any), maxZ (Any), color (Any), container (Any)
๊ฒฐ๊ณผ: dynamic / Any.
ํธ์ถ ์:
-
InjectionScript.Runtime.InjectionApiUO.RegisterCompactSearchApi [FindNotoriety]. -
InjectionScript.Runtime.InjectionApiUO.CompactFindNotoriety:CompactFindNotoriety(values).
ํธ์ถ ์ ์ ์ฅ๋ ์ฒ๋ฆฌ๊ธฐ delegate๋ฅผ ์คํํฉ๋๋ค. ๋ฑ๋ก ๋ฉ์๋๋ API๋ฅผ ๊ตฌ์ฑํ ๋ ์ด delegate๋ฅผ ๋ง๋ญ๋๋ค.
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
values => new InjectionValue(CompactFindNotoriety(values))ะฃะบัะฐัะฝััะบะฐ ยท ะ ัััะบะธะน ยท English ยท Deutsch ยท Franรงais ยท Italiano ยท Espaรฑol ยท ็น้ซไธญๆ ยท ๆฅๆฌ่ช ยท ํ๊ตญ์ด
dynamic UO.FindQuantity();์ฒซ ๋ฒ์งธ ๊ฒ์ ๊ฒฐ๊ณผ์์ ํ์ฌ ์๋์ ์ฝ์ต๋๋ค.
๋งค๊ฐ๋ณ์๊ฐ ์์ต๋๋ค.
int - ๊ธฐ์กด ์บ๋ฆญํฐ์ ๊ฒฝ์ฐ serial FindItem, 1, ๋๋ฝ/์ญ์ ๋ ๊ฐ์ฒด์ ๊ฒฝ์ฐ 0์ธ ํญ๋ชฉ์ ํ์ฌ ๊ธ์ก์ ๋๋ค. ๋ฐ๊ฒฌ๋ ๋ค๋ฅธ ์คํ์ ๋์ ๋์ง ์์ต๋๋ค. FindFullQuantity๊ณผ ๋ฌ๋ฆฌ ํธ์ถ ์ ํ์ฌ ๊ฐ์ฒด์์ ์๋์ ์ฝ์ต๋๋ค.
- ๋ฐ์ดํฐ๋ ์ด ์คํฌ๋ฆฝํธ์ ๋ง์ง๋ง ์ผ๋ฐ ๊ฒ์์ ์ํฉ๋๋ค. FindType๋ 1โ5 ์ธ์, FindTypeEx, Count/CountEx/CountGround๋ก ๊ฒฐ๊ณผ๋ฅผ ๋ฐ๊ฟ๋๋ค. ์ด ์ค๋ ์ท์ ๋ณ๊ฒฝํ๋ ๋ฐ๋ ๊ณ ๊ธ ํํฐ๋ง๋ ๋ฌธ์ ๋ช ๋ น์ด ํ์ํ์ง ์์ต๋๋ค.
- ์ผ์นํ๋ ํญ๋ชฉ์ด ์๋ ์ ๊ฒ์์์๋ FindItem, FindCount ๋ฐ FindFullQuantity๊ฐ ์ง์์ง๊ณ GetFoundItems๊ฐ ์ง์์ง๋๋ค. ๊ฒฐ๊ณผ๋ฅผ ์ฝ๋ ๊ฒ๋ง์ผ๋ก๋ ์๋ก์ด ๊ฒ์์ด ์คํ๋์ง ์์ต๋๋ค.
๊ฐ ์์ ๋ ๋ณ๋์ ํ์ผ .csx๋ก ์ ์ฅํ๊ณ IDE์์ ์คํํ ์ ์์ต๋๋ค. UO ๊ฐ์ฒด์ ๋๊ธฐ ๊ธฐ๋ฅ์ ํ์ฌ ๊ฒ์ ์ธ์
์ ํธ์คํธ๋ฅผ ์ ๊ณตํฉ๋๋ค. ๋ฐ๋ชจ serial ์ด๋ฆ, ์ขํ, ์ฃผ์๋ฅผ ์์ ์ ๊ฒ์ผ๋ก ๋ฐ๊พธ์ธ์.
์ด ์ฝ๋๋ฅผ ๋ณ๋์ .csx ํ์ผ๋ก ์คํํ์ธ์. ์ธ์๋ ํธ์ถ์ ์ง์ ํ์๋ฉ๋๋ค. ์์ ์ ์ด๋ฆ, serial, ์ฃผ์๋ฅผ ์์ ์ ๊ฐ์ผ๋ก ๋ฐ๊พธ์ธ์.
ํ ๋ฒ์ ํธ์ถ ๊ฒฐ๊ณผ๋ฅผ ์ ๋์ ํ์ํฉ๋๋ค. ์ซ์๋ฅผ bool๋ก ๋ณํํ์ง ์์ผ๋ฉฐ, ๋ฐฐ์ด์ด๋ฉด ์์ ์๋ฅผ ํ์ํฉ๋๋ค.
UO.FindType(0x0EED, -1, "backpack");
object? result = UO.FindQuantity();
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));๋งค๊ฐ๋ณ์์ ์คํ ํ๋ฆ:
- type=0x0EED โ ๊ธ; color=-1 โ ๋ชจ๋ hue; backpack - ์ด ํ์์๋ ๋ฐฐ๋ญ์ ์ง์ ์ ์ธ ๋ด์ฉ๋ง FindType๋ก ํ์๋ฉ๋๋ค.
- int - ๊ธฐ์กด ์บ๋ฆญํฐ์ ๊ฒฝ์ฐ serial FindItem, 1, ๋๋ฝ/์ญ์ ๋ ๊ฐ์ฒด์ ๊ฒฝ์ฐ 0์ธ ํญ๋ชฉ์ ํ์ฌ ๊ธ์ก์ ๋๋ค. ๋ฐ๊ฒฌ๋ ๋ค๋ฅธ ์คํ์ ๋์ ๋์ง ์์ต๋๋ค. FindFullQuantity๊ณผ ๋ฌ๋ฆฌ ํธ์ถ ์ ํ์ฌ ๊ฐ์ฒด์์ ์๋์ ์ฝ์ต๋๋ค.
var found = UO.FindType(0x0EED, -1, "backpack");
var value = UO.FindQuantity();
UO.Print(Convert.ToString(value));๋งค๊ฐ๋ณ์์ ์คํ ํ๋ฆ:
- 4๊ฐ์ ์ฝ๊ธฐ๋ ๋ชจ๋ ๋ค๋ฅธ ๊ฒ์์ด ํธ์ถ๋ ๋๊น์ง ํ๋์ ๊ฒ์์ ์ํฉ๋๋ค.
- ์๋ฅผ ๋ค์ด, 50 ๋ ๊ฐ์ ์คํ: Items=2, ์ฒซ ๋ฒ์งธ ์คํ=50, ๋ชจ๋ ์ ๋=100; ์ฒซ ๋ฒ์งธ ID์๋ ํ ์คํ์ ๊ณ ์ ํ ID์ด ํฌํจ๋ฉ๋๋ค.
return RunScenario();
object? RunScenario()
{
var found = UO.FindType(0x0EED, -1, "backpack");
UO.Print("Items: " + Convert.ToString(UO.FindCount()));
UO.Print("First stack: " + Convert.ToString(UO.FindQuantity()));
UO.Print("All units: " + Convert.ToString(UO.FindFullQuantity()));
UO.Print("First ID: 0x" + Hex(UO.FindItem()));
return null;
}
string Hex(object? value) => Convert.ToInt64(value).ToString("X");๋งค๊ฐ๋ณ์์ ์คํ ํ๋ฆ:
- ์ฒซ ๋ฒ์งธ type๋ ๊ธ์ด๊ณ , ๋ ๋ฒ์งธ 0x0F7A๋ ๋ณ๋์ ์์ฝ์ ๋๋ค. ์๋ก์ด ํ์ ์ ์ฒด์ ์ธ ์ท์ ๋ฐ๊พผ๋ค.
- ์ ์ฅ๋ ๋ฒํธ๋ ์ฒซ ๋ฒ์งธ ๊ฒ์์ ๋ฒํธ๋ก ์ ์ง๋ฉ๋๋ค. ๋ ๋ฒ์งธ ํ๋ ๊ฐ์ ์ผ์นํ๋ ๊ฒ์ด ์๋๋ผ๋ ์์ฝ์ ์ ์ฉ๋ฉ๋๋ค.
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 found = UO.FindType(0x0EED, -1, "backpack");
var saved = UO.FindQuantity();
found = UO.FindType(0x0F7A, -1, "backpack");
UO.Print("Saved: " + Convert.ToString(saved));
UO.Print("Current: " + Convert.ToString(UO.FindQuantity()));
return null;
}
}C#์ ๋์๋ฌธ์๋ฅผ ๊ตฌ๋ถํฉ๋๋ค. ์ ํํ UO ์ด๋ฆ์ ์ฌ์ฉํ์ธ์. ์ซ์ ํ๋๊ทธ๋ 0๊ณผ ๋น๊ตํ๊ณ ๋ฐํ ํ์์ด bool์ผ ๋๋ง bool์ ์ฌ์ฉํ์ธ์.
๋งค๊ฐ๋ณ์: ๋งค๊ฐ๋ณ์๊ฐ ์์ต๋๋ค.
๊ฒฐ๊ณผ: dynamic / Any.
ํธ์ถ ์:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.FindQuantity:bridge.FindQuantity().
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
case "findquantity": return new InjectionValue(bridge.FindQuantity());ะฃะบัะฐัะฝััะบะฐ ยท ะ ัััะบะธะน ยท English ยท Deutsch ยท Franรงais ยท Italiano ยท Espaรฑol ยท ็น้ซไธญๆ ยท ๆฅๆฌ่ช ยท ํ๊ตญ์ด
string UO.FindType(object? @type);
string UO.FindType(object? @type, object? color);
string UO.FindType(object? @type, object? color, object? container);
string UO.FindType(object? @type, object? color, object? container, object? range);
string UO.FindType(object? @type, object? color, object? container, object? distance, object? recursive);
string UO.FindType(object? @type, object? color, object? container, object? distance, object? notoriety, object? nearest);
string UO.FindType(object? @type, object? color, object? container, object? distance, object? notoriety, object? nearest, object? maxZ);
string UO.FindType(object? @type, object? color, object? container, object? distance, object? notoriety, object? nearest, object? maxZ, object? mobileOnly);
string UO.FindType(object? @type, object? color, object? container, object? distance, object? notoriety, object? nearest, object? maxZ, object? mobileOnly, object? itemOnly);
string UO.FindType(object? @type, object? color, object? container, object? distance, object? notoriety, object? nearest, object? maxZ, object? mobileOnly, object? itemOnly, object? includeIgnored);
string UO.FindType(object? @type, object? color, object? container, object? distance, object? notoriety, object? nearest, object? maxZ, object? mobileOnly, object? itemOnly, object? includeIgnored, object? includeSelf);
string UO.FindType(object? @type, object? color, object? container, object? distance, object? notoriety, object? nearest, object? maxZ, object? mobileOnly, object? itemOnly, object? includeIgnored, object? includeSelf, object? aliveOnly);
string UO.FindType(object? @type, object? color, object? container, object? distance, object? notoriety, object? nearest, object? maxZ, object? mobileOnly, object? itemOnly, object? includeIgnored, object? includeSelf, object? aliveOnly, object? visibleOnly);
string UO.FindType(object? @type, object? color, object? container, object? distance, object? notoriety, object? nearest, object? maxZ, object? mobileOnly, object? itemOnly, object? includeIgnored, object? includeSelf, object? aliveOnly, object? visibleOnly, object? nameMask);ํด๋ผ์ด์ธํธ๊ฐ ์ด๋ฏธ ๋ค์ด๋ก๋ํ ์์ดํ ๊ณผ ์บ๋ฆญํฐ๋ฅผ ๊ฒ์ํฉ๋๋ค. ์ข ๋ฅ, ์์, ์ฉ๊ธฐ, ๊ฑฐ๋ฆฌ, ์ถ๊ฐ ํํฐ๋ก ๊ฒ์ํ ์ ์์ต๋๋ค. ๊ฒฐ๊ณผ๋ ์ ํํ ๊ฐ์ฒด์ 16์ง์ ๋ฌธ์์ด serial์ ๋๋ค. ๋น ๋ฌธ์์ด์ ์ผ์น ํญ๋ชฉ์ด ์์์ ์๋ฏธํฉ๋๋ค. ์ด ๋ช ๋ น ์์ฒด๋ ์ปจํ ์ด๋๋ฅผ ์ด์ง ์๊ณ , ์์ดํ ์ ์ง์ง ์์ผ๋ฉฐ, ๋ฐ๊ฒฌ๋ ๋์์ ๊ณต๊ฒฉํ์ง ์์ต๋๋ค.
-
type- ํ๋์ graphic ํญ๋ชฉ ๋๋ body ๋ฌธ์: ์ ์ ๋๋ ์ซ์ ๋ฌธ์์ด. 0x0EED - ๊ธ; 0x0190 (400) - ์ธ๊ฐ ๋จ์ฑ; 0x0191 (401) - ์ฌ์ฑ ์ธ๊ฐ. ํ๋์ type 0x0190์๋ 0x0191์ด ํฌํจ๋์ง ์์ต๋๋ค. ๋ ์ฑ๋ณ์ ๋ฌธ์๋ฅผ ๋ชจ๋ ๋์ดํ๋ ค๋ฉด body="0x0190|0x0191"์ ํจ๊ป GetMobiles๋ฅผ ์ฌ์ฉํ์ธ์. ๋ง์คํฌ๋ ์ด ๋จ์ผ ์ธ์ FindType๋ก ์ ๋ฌ๋์ง ์์ต๋๋ค. ์์ ๊ฐ ๋๋ 0xFFFF๋ ์ ํ ํํฐ๋ฅผ ์ง์๋๋ค. -
color- ์์กฐ/์์: ์ ์ ๋๋ ์ซ์ ๋ฌธ์์ด. -1 ๋๋ 0xFFFF๋ ๋ชจ๋ ์์์ ์๋ฏธํฉ๋๋ค. 0 - ๊ตฌ์ฒด์ ์ผ๋ก hue 0. ๋ ์ธ์ ํ์์ ํน์ง: ๋ ๋ฒ์งธ ์์น์ "ground", "backpack", "my" ์ค์ ์์ ๋์ ๊ฒ์ ์์ญ์ ์ ํํฉ๋๋ค. "my"๋ฅผ ์ฌ์ฉํ๋ฉด ๋ก๋๋ ํ์ ์ปจํ ์ด๋๋ฅผ ์ฐํํ ์ ์์ต๋๋ค. -
container- ๊ฒ์ ์์ญ: "ground" - ์ธ๊ณ, "backpack" - ๋ฐฐ๋ญ์ ์ต์์ ๋ ๋ฒจ, "my" - ์งง์ ํ์์ ํ์ ์ปจํ ์ด๋๊ฐ ๋ก๋๋ ๋ฐฐ๋ญ. ์ปจํ ์ด๋์ serial ๋๋ ๊ฐ์ฒด์ ์ ์ฅ๋ ์ด๋ฆ์ ์ ๋ฌํ ์๋ ์์ต๋๋ค. ์ปจํ ์ด๋๋ ์๋์ผ๋ก ์ด๋ฆฌ์ง ์์ต๋๋ค. ์ธ์์ ํ์ฅ๋ ํ์ 7~14์ ์ง์ ๋ ์ปจํ ์ด๋์ ์ง์ ์ฝํ ์ธ ๋ฅผ ๋ฐ๋ณตํ๋ฉฐ ์ฌ๊ท ํ๋๊ทธ๊ฐ ์์ต๋๋ค. -
rangeโ 4๊ฐ ์ธ์ ํ์์ ๋ค ๋ฒ์งธ ์ธ์: ์ ๋ด ๊ฑฐ๋ฆฌ. ์์ ๊ฐ์ ์ผ๋ฐ ์ค์ FindDistance์ ์ฌ์ฉํฉ๋๋ค. 0๋ ๋์ผํ ์ ์ ์ผ์นํ๋ ํญ๋ชฉ๋ง ๋จ๊น๋๋ค. ์ปจํ ์ด๋์ ์๋ ํญ๋ชฉ์ ๊ฒฝ์ฐ ์ธ๊ณ์์ ์ปจํ ์ด๋์ ์์น๊ฐ ๊ณ ๋ ค๋ฉ๋๋ค. -
distanceโ 5๊ฐ ์ธ์ ํ์์ 4 ์์น์ ์๋ ์ ์ ๊ฑฐ๋ฆฌ์ ๋๋ค. -1๋ FindDistance์ ์ฌ์ฉํฉ๋๋ค. 0 ์ด์์ ์ซ์๋ ๋ช ์์ ์ธ ์ ํ์ ์ค์ ํฉ๋๋ค. ์ด๋ ๊ฒฝ๋ก์ ๊ธธ์ด๊ฐ ์๋ ๊ฒ์ ๋ฐ๊ฒฝ์ ๋๋ค. -
recursive- 5๊ฐ ์ธ์ ํ์์ ๋ค์ฏ ๋ฒ์งธ ์ธ์๋ง: 1/true - ๋ก๋๋ ํ์ ์ปจํ ์ด๋์์๋ ๊ฒ์, 0/false - ์ต์์ ์์ค๋ง ๊ฒ์ํฉ๋๋ค. ์ด๊ฒ์ ์ ๋ช ์ด ์๋๋๋ค. 6์ธ์ ํ์์ผ๋ก ๋ณ๊ฒฝํ๋ฉด ์์น 5์ ์๋ฏธ๊ฐ ๋ณ๊ฒฝ๋ฉ๋๋ค. -
notorietyโ ์ธ์ ํ์ 6โ14์์ 5์ ์์น์ ๋๋ค. ์บ๋ฆญํฐ ํํ: 0 ์ ์ ์์, 1 ๋ฌด๊ณ ํจ, 2 ์๊ตฐ, 3 ๊ณต๊ฒฉ ๊ฐ๋ฅ, 4 ๋ฒ์ฃ์, 5 ์ , 6 ์ด์ธ์, 7 ๋ฌด์ . ์ซ์, ๋ฌธ์์ด "3|6" ๋๋ ๊ฐ ๋ฐฐ์ด์ ์ ๋ฌํ ์ ์์ต๋๋ค. -1, 0xFFFF ๋๋ "any"๋ ํํฐ๋ฅผ ๋นํ์ฑํํฉ๋๋ค. ํํฐ๊ฐ ํ์ฑํ๋๋ฉด ํญ๋ชฉ์ด ์ ์ธ๋ฉ๋๋ค. ํด๋น ํญ๋ชฉ์๋ ์ ๋ช ์ด ์์ต๋๋ค. -
nearest- ์์น 6: 1/true - ๊ฐ์ฅ ๊ฐ๊น์ด ์ ํฉํ ๋ฌธ์๋ฅผ ์ ํํ๊ณ ํ์ฅ ํ์์ผ๋ก 7โ14 - ํ์ฉ๋๋ ์ ํ ์ค ๊ฐ์ฅ ๊ฐ๊น์ด ํ๋ณด; ๊ฑฐ๋ฆฌ๊ฐ ๊ฐ์ผ๋ฉด serial๊ฐ ์ฌ์ฉ๋ฉ๋๋ค. 0/false๋ ๊ฒ์ ์์๋ฅผ ์ ์งํฉ๋๋ค. 6์ธ์ ํ์์์๋ ํญ๋ชฉ ์ฐพ๊ธฐ๋ฅผ ์งํํ ๋ ์ผ๋ฐ ํญ๋ชฉ ๊ฒ์ ์์๋ฅผ ์ฌ์ฉํฉ๋๋ค. -
maxZ- ์์น 7: ์์ ์ ์บ๋ฆญํฐ์์ ์ต๋ ์ ๋ Z ๋์ด ์ฐจ์ด. 0 - ๊ฐ์ ๋์ด; -1๋ FindVertical์ ์ฐจ์งํฉ๋๋ค. ์ปจํ ์ด๋ ์์ ์๋ ํ๋ชฉ์ ๊ฒฝ์ฐ ์ปจํ ์ด๋ ๋์ด๋ฅผ ํ์ธํฉ๋๋ค. ์ด๊ฒ์ ์ธต ๋ฒํธ๊ฐ ์๋๋๋ค. -
mobileOnlyโ ์์น 8: 1/true โ ์บ๋ฆญํฐ์ ๋ชน๋ง ๋จ๊น๋๋ค. 0/false - ์์ดํ ๋ ํ์ฉํฉ๋๋ค. ์ธ์๊ฐ ์์ผ๋ฉด false. -
itemOnlyโ ์์น 9: 1/true โ ๊ฐ์ฒด๋ง ๋จ๊ฒจ๋ก๋๋ค. 0/false - ๋ฌธ์๋ ํ์ฉ๋ฉ๋๋ค. ๋๋ฝ๋ ๊ฒฝ์ฐ false. ๋์์ mobileOnly=true ๋ฐ itemOnly=true๋ ๋น ๊ฒฐ๊ณผ๋ฅผ ์ ๊ณตํฉ๋๋ค. -
includeIgnoredโ ์์น 10: 1/true โ IgnoreList์ ๊ฐ์ฒด ํ์ฉ; 0/false - ์ ์ธํฉ๋๋ค. ๊ธฐ๋ณธ๊ฐ์ false์ ๋๋ค. IgnoreList ๋ช ๋ น ์์ฒด๋ ๋ณ๊ฒฝ๋์ง ์์ต๋๋ค. -
includeSelfโ ์์น 11: 1/true โ ํ๋ณด ์ค์์ ์์ ๋ง์ ์บ๋ฆญํฐ๋ฅผ ํ์ฉ mobile; 0/false - ์ ์ธ๋ฉ๋๋ค. ๊ธฐ๋ณธ๊ฐ์ false์ ๋๋ค. ์์ดํ ์๋ ์ํฅ์ ๋ฏธ์น์ง ์์ต๋๋ค. -
aliveOnly- ์์น 12: 1/true - ์ฃฝ์ ๋ฌธ์๋ฅผ ์ ์ธํฉ๋๋ค. 0/false - ๋ ์ํ๋ฅผ ๋ชจ๋ ํ์ฉํฉ๋๋ค. ๊ธฐ๋ณธ๊ฐ์ false์ ๋๋ค. ์ด ํํฐ๋ ํญ๋ชฉ ์ํ๋ฅผ ํ์ธํ์ง ์์ต๋๋ค. -
visibleOnly- ์์น 13: 1/true - ๊ธ์ ์ ์ธ ํ์ธ ํ์ IsVisible; 0/false - ์ฌ์ฉํ์ง ๋ง์ธ์. ๊ธฐ๋ณธ๊ฐ์ false์ ๋๋ค. ์ด ๋ช ๋ น์ ์ฌ์ ํ โโํด๋ผ์ด์ธํธ์ ์๋ ค์ง ๊ฐ์ฒด์๋ง ์๋ํฉ๋๋ค. -
nameMaskโ ์์น 14: ์ด๋ฆ์ ํ ์คํธ ๋ถ๋ถ์ด๋ฉฐ ๋์๋ฌธ์๋ฅผ ๊ตฌ๋ถํ์ง ์์ต๋๋ค. ๋ฌธ์์ด "orc|troll"์ ๋ ๊ฐ์ง ์ผ์น ์ค ํ๋๋ฅผ ํ์ฉํฉ๋๋ค. ๊ตฌ๋ถ ๊ธฐํธ๋ ์ผํ๋ ์ธ๋ฏธ์ฝ๋ก ์ผ ์๋ ์์ต๋๋ค. ๋น ๋ฌธ์์ด("any" ๋๋ "-1")์ ํํฐ๋ฅผ ์ ๊ฑฐํฉ๋๋ค. ์ด๋ ์ ๊ท์์ด๋ *๊ฐ ํฌํจ๋ ๋ง์คํฌ๊ฐ ์๋ ํ์ ๋ฌธ์์ด ๊ฒ์์ ๋๋ค. ์ธ์๊ฐ ๋๋ฝ๋๋ฉด ํํฐ๊ฐ ๋นํ์ฑํ๋ฉ๋๋ค.
string: ์๋ฅผ ๋ค์ด "0x40001234"์ ๋๋ค. ์๋ฌด๊ฒ๋ ๋ฐ๊ฒฌ๋์ง ์์ ๊ฒฝ์ฐ - "". ๋น ๋ฌธ์์ด๊ณผ ๋น๊ตํ์ฌ ๊ฒฐ๊ณผ๋ฅผ ํ์ธํฉ๋๋ค. ๋ฐ๊ฒฌ๋ ๊ฐ์ฒด ์ ๋๋ ํด๋น ๊ฐ์ฒด์ ๋ํ ๋จ๊ณ ์์ ํผ๋ํ์ง ๋ง์ญ์์ค.
- 1~14 ์ธ์๋ฅผ ๊ฐ๋ ํ์์ด ์์ง๋ง ์ด๋ ์์๋ก ๋งค๊ฐ๋ณ์๋ฅผ ์๋ตํ ํ๋์ ๊ธด ์๋ช ์ด ์๋๋๋ค. ์ ํํ ๊ตฌ๋ฌธ ํ์ ์ ํํ์ญ์์ค. ์ธ์๋ ์์น์ ์ผ๋ก ์ ๋ฌ๋ฉ๋๋ค.
- ์์ 1โ5๋ ์ผ๋ฐ ๊ฒ์์ ์ฌ์ฉํ๊ณ FindItem/FindCount/ ๊ฒฐ๊ณผ ๋ชฉ๋ก์ ์ ๋ฐ์ดํธํฉ๋๋ค. 6~14 ํ์์ ๊ฒฝ์ฐ ๋ฐํ๋ ๋ฌธ์์ด์ ์ง์ ์ฌ์ฉํ์ธ์. ๋ฌธ์ ํํฐ๋ง์ ๋ณ๋์ ๋ฐฉ์์ผ๋ก ์ํ๋๋ฉฐ ์ด๋ฌํ ๊ณต์ ๊ฐ ์ ๋ฐ์ดํธ๋ฅผ ์ฝ์ํ์ง ์์ต๋๋ค.
- ์งง์ ํ์์ ๊ฒฝ์ฐ ๊ธฐ๋ณธ์ ์ผ๋ก ๊ฒ์์ ์ฌ๊ท ์์ด ์ ์ธ๊ณ, ๋ชจ๋ ์์, ๊ฑฐ๋ฆฌ FindDistance์์ ์ํ๋ฉ๋๋ค. ๋ฌธ์์ด "my"๋ ํ์ ์ปจํ ์ด๋๊ฐ ํฌํจ๋ ๋ฐฐ๋ญ์ ๋ํ๋ด๋ ํน๋ณํ ์ฝ์นญ ํํ์ ๋๋ค.
- 6๊ฐ์ ์ธ์ ํ์์ ๋จผ์ ์ผ์นํ๋ ๋ฌธ์๋ฅผ ์ฐพ์ต๋๋ค. ์ ๋ช ํํฐ์ ์ ํฉํ ์บ๋ฆญํฐ๊ฐ ์์ผ๋ฉด ๊ฐ์ฒด ๊ฒ์์ด ๊ฐ๋ฅํฉ๋๋ค. 7~14 ํ์์ ํด๊ฒฐ๋ ํ๋ณด๋ฅผ ๊ฒฐํฉํ๊ณ ์ถ๊ฐ ํํฐ๋ฅผ ์ ์ฉํฉ๋๋ค.
- ์ธ์ ์๋ฅผ 5๊ฐ์์ 6๊ฐ๋ก ๋ณ๊ฒฝํ๋ ๊ฒ์ด ํนํ ์ค์ํฉ๋๋ค. ์ฌ๊ท๋ ์ ๋ช ์ผ๋ก ๋์ฒด๋๊ณ ๊ฐ์ฅ ๊ฐ๊น์ด ์ธ์๋ ์ฌ์ฏ ๋ฒ์งธ ์ธ์๊ฐ ๋ฉ๋๋ค. 5 ์์น์ 1 ๊ฐ์ ์ฌ๊ท ์ํ๊ฐ ์๋ ์ํ๋ฅผ ์๋ฏธํฉ๋๋ค.
๊ฐ ์์ ๋ ๋ณ๋์ ํ์ผ .csx๋ก ์ ์ฅํ๊ณ IDE์์ ์คํํ ์ ์์ต๋๋ค. UO ๊ฐ์ฒด์ ๋๊ธฐ ๊ธฐ๋ฅ์ ํ์ฌ ๊ฒ์ ์ธ์
์ ํธ์คํธ๋ฅผ ์ ๊ณตํฉ๋๋ค. ๋ฐ๋ชจ serial ์ด๋ฆ, ์ขํ, ์ฃผ์๋ฅผ ์์ ์ ๊ฒ์ผ๋ก ๋ฐ๊พธ์ธ์.
์ด ์ฝ๋๋ฅผ ๋ณ๋์ .csx ํ์ผ๋ก ์คํํ์ธ์. ์ธ์๋ ํธ์ถ์ ์ง์ ํ์๋ฉ๋๋ค. ์์ ์ ์ด๋ฆ, serial, ์ฃผ์๋ฅผ ์์ ์ ๊ฐ์ผ๋ก ๋ฐ๊พธ์ธ์.
ํ ๋ฒ์ ํธ์ถ ๊ฒฐ๊ณผ๋ฅผ ์ ๋์ ํ์ํฉ๋๋ค. ์ซ์๋ฅผ bool๋ก ๋ณํํ์ง ์์ผ๋ฉฐ, ๋ฐฐ์ด์ด๋ฉด ์์ ์๋ฅผ ํ์ํฉ๋๋ค.
var result = UO.FindType(0x0EED, -1, "backpack");
UO.Print("FindType: " + Convert.ToString(result));๋งค๊ฐ๋ณ์์ ์คํ ํ๋ฆ:
- 1: type=0x0EED - ๊ธ์ ์ฐพ๊ณ ์์ต๋๋ค.
- 2: ์์=-1 โ ๋ชจ๋ hue.
- 3: ์ปจํ ์ด๋="backpack" - ๋ฐฐ๋ญ์ ์ง์ ๋ด๊ธด ๋ด์ฉ๋ฌผ๋ง.
- gold๋ ๋ฌธ์์ด serial์ ๋ฐ์ต๋๋ค. gold="" ํ์ธ์ ๋๋ฝ๋ ํญ๋ชฉ๊ณผ ์ฐพ์ ํญ๋ชฉ์ ๊ตฌ๋ถํฉ๋๋ค. Info(๊ธ์)์ ์ ๋ณด๋ฅผ ํ์ํฉ๋๋ค. ๊ธ์ ์์ง์ด์ง ์์ต๋๋ค.
var gold = UO.FindType(0x0EED, -1, "backpack");
if (Truth(gold == ""))
{
UO.Print("Gold was not found in the loaded backpack");
}
else
{
UO.Print("Gold serial: " + gold);
UO.Info(gold);
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;๋งค๊ฐ๋ณ์์ ์คํ ํ๋ฆ:
- 1: wantedType์๋ graphic 0x0EED์ด ํฌํจ๋์ด ์์ต๋๋ค.
- 2: -1 ์ปฌ๋ฌ ํํฐ๋ฅผ ์ ๊ฑฐํฉ๋๋ค.
- 3: "backpack"์ ๋ฃจํธ ์ปจํ ์ด๋๋ฅผ ์ ํํฉ๋๋ค.
- 4: -1๋ ํ์ฌ FindDistance๋ฅผ ์ฌ์ฉํฉ๋๋ค.
- 5: recursive=1๋ ํ์ ์ปจํ ์ด๋ ์ํ๋ฅผ ํ์ฑํํฉ๋๋ค. ์ด๊ฒ์ 5๊ฐ์ ์ธ์ ํ์์ ๋๋ค. ์๋ฒ๊ฐ ์์ง ๋ณด๋ด์ง ์์ ๋ซํ ๊ฐ๋ฐฉ์ ๋ด์ฉ๋ฌผ์ ์ด ๋ฐฉ์์ผ๋ก ๋ก๋๋์ง ์์ต๋๋ค.
- AddObject๋ ๊ฒฐ๊ณผ๋ฅผ ํ์ธํ ํ์๋ง ๋ฐ๊ฒฌ๋ serial๋ฅผfound_gold๋ผ๋ ์ด๋ฆ์ผ๋ก ์ ์ฅํฉ๋๋ค.
return RunScenario();
object? RunScenario()
{
var wantedType = 0x0EED;
var recursive = 1;
var found = UO.FindType(wantedType, -1, "backpack", -1, recursive);
if (Truth(found != ""))
{
UO.AddObject("found_gold", found);
UO.Print("Saved object: " + found);
}
else
{
UO.Print("No matching item in loaded containers");
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;3. ๋ ๊ฐ์ง ํํ ์ค ํ๋๋ฅผ ๊ฐ์ง ๊ฐ์ฅ ๊ฐ๊น์ด ์บ๋ฆญํฐ ์ฐพ๊ธฐ - ์๋๋ฆฌ์ค ํด๋์ค
๋งค๊ฐ๋ณ์์ ์คํ ํ๋ฆ:
- 1: body=-1๋ ๋ชจ๋ body์ ํ์ฉํฉ๋๋ค.
- 2: color=-1๋ ๋ชจ๋ ์์์ ํ์ฉํฉ๋๋ค.
- 3: "ground"๋ ๋ก๋๋ ์๋ ๊ฐ์ฒด๋ฅผ ์๋ฏธํฉ๋๋ค.
- 4: radius=10๋ ๊ฑฐ๋ฆฌ๋ฅผ 10๊ฐ ์ ๋ก ์ ํํฉ๋๋ค.
- 5: ํํ="3|6" - ๊ณต๊ฒฉ ๊ฐ๋ฅํ๊ฑฐ๋ ์ด์ธ์. ์ฌ๊ท์ ์ธ ๊ฒ์ด ์๋๋ผ ์ ๋ช ๋์ ๊ฒ์ ๋๋ค.
- 6: Nearest=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 body = -1;
var radius = 10;
var reputation = "3|6";
var nearest = 1;
var found = UO.FindType(body, -1, "ground", radius, reputation, nearest);
if (Truth(found != ""))
{
UO.Print("Matching mobile: " + found);
UO.Info(found);
}
else
{
UO.Print("No matching mobile within the radius");
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
}4. 14๊ฐ ๋งค๊ฐ๋ณ์ ๋ชจ๋: ์ ์ ํ ์ด๋ฆ์ ๊ฐ์ง ์ค์๊ฐ์ผ๋ก ํ์๋๋ ๋ชน - ์ง์ ์คํฌ๋ฆฝํธ
๋งค๊ฐ๋ณ์์ ์คํ ํ๋ฆ:
- 1 body=-1 ๋ฐ 2hue=-1๋ ์ข ๋ฅ์ ์์์ ์ ํํ์ง ์์ต๋๋ค.
- 3scope="ground" - ์ ์ธ๊ณ์์ ๊ฒ์ํฉ๋๋ค. 4 ๋ฐ๊ฒฝ=5 - 5๊ฐ ์ ์ ์ด๊ณผํ ์ ์์ต๋๋ค.
- 5 ํํ=-1์ ๋ชจ๋ ์ ๋ช ์ ํ์ฉํฉ๋๋ค. 6 ์ต๊ทผ์ =1 ๊ฐ์ฅ ๊ฐ๊น์ด ๊ฒ์ ์ ํํฉ๋๋ค.
- 7 maxZ=16๋ ์ต๋ 16 ๋จ์์ ์ ๋ ๋์ด ์ฐจ์ด๋ฅผ ํ์ฉํฉ๋๋ค.
- 8 mobileOnly=1 ํญ๋ชฉ์ ์ ์ธ๋ฉ๋๋ค. 9 itemOnly=0๋ ๋ชน์ ๊ธ์งํ์ง ์์ต๋๋ค.
- 10 includeIgnored=0๋ IgnoreList์ ํจ๊ณผ๋ฅผ ์ ์งํฉ๋๋ค.
- 11 includeSelf=0๋ ํด๋น ์บ๋ฆญํฐ๋ฅผ ์ ์ธํฉ๋๋ค.
- 12 aliveOnly=1 ๋ฐ 13 visibleOnly=1 ๋์ ๋ณด์ด๋ ํ๋ณด์๋ฅผ ์ด๋ ค๋ก๋๋ค.
- 14 names="orc|troll"์๋ ํด๋ผ์ด์ธํธ์ ์ด๋ฏธ ์๋ ค์ง ์ด๋ฆ์ orc ๋๋ troll ํ์ ๋ฌธ์์ด์ด ํ์ํฉ๋๋ค. ๋ชจ๋ ํํฐ๋ ๋์์ ์คํ๋์ด์ผ ํฉ๋๋ค.
var body = -1;
var hue = -1;
var scope = "ground";
var radius = 5;
var reputation = -1;
var nearest = 1;
var maxZ = 16;
var mobileOnly = 1;
var itemOnly = 0;
var includeIgnored = 0;
var includeSelf = 0;
var aliveOnly = 1;
var visibleOnly = 1;
var names = "orc|troll";
var found = UO.FindType(body, hue, scope, radius, reputation, nearest, maxZ, mobileOnly, itemOnly, includeIgnored, includeSelf, aliveOnly, visibleOnly, names);
if (Truth(found == ""))
{
UO.Print("No loaded mobile satisfies every filter");
}
else
{
UO.Print("Selected serial: " + found);
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;๋งค๊ฐ๋ณ์์ ์คํ ํ๋ฆ:
- 1 wantedType=0x0EED๋ ๊ธ์ ๋๋ค.
- 2 "my"๋ ๋ ์ธ์ ํ์์ ํน์ ๋ฌธ์์ด์ ๋๋ค. ๋ฐฐ๋ญ์ ์ ํํ๊ณ ์ฌ๊ท ๋ฐ ๋ชจ๋ ์์์ ํฌํจํฉ๋๋ค. ์ฌ๊ธฐ์ ๋ ๋ฒ์งธ ์ธ์๋ hue์ด ์๋๋๋ค.
- ์ต์์ ์์ค์ ๊ฒฝ์ฐ "my" ๋์ "backpack"๋ฅผ ์ ๋ฌํฉ๋๋ค. ์ธ๊ณ๋ฅผ ์ํด - "ground". ๋ฐ๋๋ก ๋ ๋ฒ์งธ ์์น์ ์ซ์๋ ์ปฌ๋ฌ ํํฐ๊ฐ ๋ฉ๋๋ค.
return RunScenario();
object? RunScenario()
{
var wantedType = 0x0EED;
var found = UO.FindType(wantedType, "my");
if (Truth(found != ""))
{
UO.Print("Found in backpack or a loaded subcontainer: " + found);
}
else
{
UO.Print("Nothing found");
}
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์ ์ฌ์ฉํ์ธ์.
๋งค๊ฐ๋ณ์: type (Any)
๊ฒฐ๊ณผ: string / String.
ํธ์ถ ์:
-
InjectionScript.Runtime.InjectionApiUO.FindType. -
InjectionScript.Runtime.InjectionApiUO.FindType:FindType(ResolveType(type)). -
InjectionScript.Runtime.InjectionApiUO.ResolveType:ResolveType(type).
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
public string FindType(InjectionValue type)
=> FindType(ResolveType(type));๋งค๊ฐ๋ณ์: type (Any), color (Any)
๊ฒฐ๊ณผ: string / String.
ํธ์ถ ์:
-
InjectionScript.Runtime.InjectionApiUO.FindType. -
InjectionScript.Runtime.InjectionApiUO.FindType:FindType(ResolveType(type), -1, ConvertContainer(color), -1, color.String.Equals("my", StringComparison.OrdinalIgnoreCase)). -
InjectionScript.Runtime.InjectionApiUO.ResolveType:ResolveType(type). -
InjectionScript.Runtime.InjectionApiUO.ConvertContainer:ConvertContainer(color). -
InjectionScript.Runtime.NumberConversions.ToInt:NumberConversions.ToInt(color).
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
public string FindType(InjectionValue type, InjectionValue color)
{
if (color.Kind == InjectionValueKind.String
&& (color.String.Equals("ground", StringComparison.OrdinalIgnoreCase)
|| color.String.Equals("backpack", StringComparison.OrdinalIgnoreCase)
|| color.String.Equals("my", StringComparison.OrdinalIgnoreCase)))
{
return FindType(ResolveType(type), -1, ConvertContainer(color), -1, color.String.Equals("my", StringComparison.OrdinalIgnoreCase));
}
return FindType(ResolveType(type), NumberConversions.ToInt(color), -1, -1, false);
}๋งค๊ฐ๋ณ์: type (Any), color (Any), container (Any)
๊ฒฐ๊ณผ: string / String.
ํธ์ถ ์:
-
InjectionScript.Runtime.InjectionApiUO.FindType. -
InjectionScript.Runtime.InjectionApiUO.FindType:FindType(type, color, container, new InjectionValue(-1)).
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
public string FindType(InjectionValue type, InjectionValue color, InjectionValue container)
=> FindType(type, color, container, new InjectionValue(-1));๋งค๊ฐ๋ณ์: type (Any), color (Any), container (Any), range (Any)
๊ฒฐ๊ณผ: string / String.
ํธ์ถ ์:
-
InjectionScript.Runtime.InjectionApiUO.FindType. -
InjectionScript.Runtime.InjectionApiUO.FindType:FindType(ResolveType(type), NumberConversions.ToInt(color), ConvertContainer(container), NumberConversions.ToInt(range), true). -
InjectionScript.Runtime.InjectionApiUO.ResolveType:ResolveType(type). -
InjectionScript.Runtime.NumberConversions.ToInt:NumberConversions.ToInt(color). -
InjectionScript.Runtime.InjectionApiUO.ConvertContainer:ConvertContainer(container).
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
public string FindType(InjectionValue type, InjectionValue color, InjectionValue container, InjectionValue range)
{
if (container.Kind == InjectionValueKind.String && container.String.Equals("my", StringComparison.OrdinalIgnoreCase))
return FindType(ResolveType(type), NumberConversions.ToInt(color), ConvertContainer(container), NumberConversions.ToInt(range), true);
else
return FindType(ResolveType(type), NumberConversions.ToInt(color), ConvertContainer(container), NumberConversions.ToInt(range), false);
}๋งค๊ฐ๋ณ์: type (Any), color (Any), container (Any), distance (Any), recursive (Any)
๊ฒฐ๊ณผ: string / String.
ํธ์ถ ์:
-
InjectionScript.Runtime.InjectionApiUO.Register [FindType]. -
InjectionScript.Runtime.InjectionApiUO.FindType:FindType(values[0], values[1], values[2], values[3], values[4]).
ํธ์ถ ์ ์ ์ฅ๋ ์ฒ๋ฆฌ๊ธฐ delegate๋ฅผ ์คํํฉ๋๋ค. ๋ฑ๋ก ๋ฉ์๋๋ API๋ฅผ ๊ตฌ์ฑํ ๋ ์ด delegate๋ฅผ ๋ง๋ญ๋๋ค.
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
values =>
new InjectionValue(FindType(values[0], values[1], values[2], values[3], values[4]))
UO.FindType(type, color, container, distance, notoriety, nearest) โ UO.FindType(Any,Any,Any,Any,Any,Any)
๋งค๊ฐ๋ณ์: type (Any), color (Any), container (Any), distance (Any), notoriety (Any), nearest (Any)
๊ฒฐ๊ณผ: string / String.
ํธ์ถ ์:
-
InjectionScript.Runtime.InjectionApiUO.Register [FindType]. -
InjectionScript.Runtime.InjectionApiUO.CompactFindType:CompactFindType(values[0], values[1], values[2], values[3], values[4], values[5]).
ํธ์ถ ์ ์ ์ฅ๋ ์ฒ๋ฆฌ๊ธฐ delegate๋ฅผ ์คํํฉ๋๋ค. ๋ฑ๋ก ๋ฉ์๋๋ API๋ฅผ ๊ตฌ์ฑํ ๋ ์ด delegate๋ฅผ ๋ง๋ญ๋๋ค.
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
values =>
CompactFindType(values[0], values[1], values[2], values[3], values[4], values[5])
UO.FindType(type, color, container, distance, notoriety, nearest, maxZ) โ UO.FindType(Any,Any,Any,Any,Any,Any,Any)
๋งค๊ฐ๋ณ์: type (Any), color (Any), container (Any), distance (Any), notoriety (Any), nearest (Any), maxZ (Any)
๊ฒฐ๊ณผ: string / String.
ํธ์ถ ์:
-
InjectionScript.Runtime.InjectionApiUO.Register [FindType]. -
InjectionScript.Runtime.InjectionApiUO.CompactFindTypeExtended:CompactFindTypeExtended(values).
ํธ์ถ ์ ์ ์ฅ๋ ์ฒ๋ฆฌ๊ธฐ delegate๋ฅผ ์คํํฉ๋๋ค. ๋ฑ๋ก ๋ฉ์๋๋ API๋ฅผ ๊ตฌ์ฑํ ๋ ์ด delegate๋ฅผ ๋ง๋ญ๋๋ค.
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
values => CompactFindTypeExtended(values)
UO.FindType(type, color, container, distance, notoriety, nearest, maxZ, mobileOnly) โ UO.FindType(Any,Any,Any,Any,Any,Any,Any,Any)
๋งค๊ฐ๋ณ์: type (Any), color (Any), container (Any), distance (Any), notoriety (Any), nearest (Any), maxZ (Any), mobileOnly (Any)
๊ฒฐ๊ณผ: string / String.
ํธ์ถ ์:
-
InjectionScript.Runtime.InjectionApiUO.Register [FindType]. -
InjectionScript.Runtime.InjectionApiUO.CompactFindTypeExtended:CompactFindTypeExtended(values).
ํธ์ถ ์ ์ ์ฅ๋ ์ฒ๋ฆฌ๊ธฐ delegate๋ฅผ ์คํํฉ๋๋ค. ๋ฑ๋ก ๋ฉ์๋๋ API๋ฅผ ๊ตฌ์ฑํ ๋ ์ด delegate๋ฅผ ๋ง๋ญ๋๋ค.
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
values => CompactFindTypeExtended(values)
UO.FindType(type, color, container, distance, notoriety, nearest, maxZ, mobileOnly, itemOnly) โ UO.FindType(Any,Any,Any,Any,Any,Any,Any,Any,Any)
๋งค๊ฐ๋ณ์: type (Any), color (Any), container (Any), distance (Any), notoriety (Any), nearest (Any), maxZ (Any), mobileOnly (Any), itemOnly (Any)
๊ฒฐ๊ณผ: string / String.
ํธ์ถ ์:
-
InjectionScript.Runtime.InjectionApiUO.Register [FindType]. -
InjectionScript.Runtime.InjectionApiUO.CompactFindTypeExtended:CompactFindTypeExtended(values).
ํธ์ถ ์ ์ ์ฅ๋ ์ฒ๋ฆฌ๊ธฐ delegate๋ฅผ ์คํํฉ๋๋ค. ๋ฑ๋ก ๋ฉ์๋๋ API๋ฅผ ๊ตฌ์ฑํ ๋ ์ด delegate๋ฅผ ๋ง๋ญ๋๋ค.
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
values => CompactFindTypeExtended(values)
UO.FindType(type, color, container, distance, notoriety, nearest, maxZ, mobileOnly, itemOnly, includeIgnored) โ UO.FindType(Any,Any,Any,Any,Any,Any,Any,Any,Any,Any)
๋งค๊ฐ๋ณ์: type (Any), color (Any), container (Any), distance (Any), notoriety (Any), nearest (Any), maxZ (Any), mobileOnly (Any), itemOnly (Any), includeIgnored (Any)
๊ฒฐ๊ณผ: string / String.
ํธ์ถ ์:
-
InjectionScript.Runtime.InjectionApiUO.Register [FindType]. -
InjectionScript.Runtime.InjectionApiUO.CompactFindTypeExtended:CompactFindTypeExtended(values).
ํธ์ถ ์ ์ ์ฅ๋ ์ฒ๋ฆฌ๊ธฐ delegate๋ฅผ ์คํํฉ๋๋ค. ๋ฑ๋ก ๋ฉ์๋๋ API๋ฅผ ๊ตฌ์ฑํ ๋ ์ด delegate๋ฅผ ๋ง๋ญ๋๋ค.
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
values => CompactFindTypeExtended(values)
UO.FindType(type, color, container, distance, notoriety, nearest, maxZ, mobileOnly, itemOnly, includeIgnored, includeSelf) โ UO.FindType(Any,Any,Any,Any,Any,Any,Any,Any,Any,Any,Any)
๋งค๊ฐ๋ณ์: type (Any), color (Any), container (Any), distance (Any), notoriety (Any), nearest (Any), maxZ (Any), mobileOnly (Any), itemOnly (Any), includeIgnored (Any), includeSelf (Any)
๊ฒฐ๊ณผ: string / String.
ํธ์ถ ์:
-
InjectionScript.Runtime.InjectionApiUO.Register [FindType]. -
InjectionScript.Runtime.InjectionApiUO.CompactFindTypeExtended:CompactFindTypeExtended(values).
ํธ์ถ ์ ์ ์ฅ๋ ์ฒ๋ฆฌ๊ธฐ delegate๋ฅผ ์คํํฉ๋๋ค. ๋ฑ๋ก ๋ฉ์๋๋ API๋ฅผ ๊ตฌ์ฑํ ๋ ์ด delegate๋ฅผ ๋ง๋ญ๋๋ค.
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
values => CompactFindTypeExtended(values)
UO.FindType(type, color, container, distance, notoriety, nearest, maxZ, mobileOnly, itemOnly, includeIgnored, includeSelf, aliveOnly) โ UO.FindType(Any,Any,Any,Any,Any,Any,Any,Any,Any,Any,Any,Any)
๋งค๊ฐ๋ณ์: type (Any), color (Any), container (Any), distance (Any), notoriety (Any), nearest (Any), maxZ (Any), mobileOnly (Any), itemOnly (Any), includeIgnored (Any), includeSelf (Any), aliveOnly (Any)
๊ฒฐ๊ณผ: string / String.
ํธ์ถ ์:
-
InjectionScript.Runtime.InjectionApiUO.Register [FindType]. -
InjectionScript.Runtime.InjectionApiUO.CompactFindTypeExtended:CompactFindTypeExtended(values).
ํธ์ถ ์ ์ ์ฅ๋ ์ฒ๋ฆฌ๊ธฐ delegate๋ฅผ ์คํํฉ๋๋ค. ๋ฑ๋ก ๋ฉ์๋๋ API๋ฅผ ๊ตฌ์ฑํ ๋ ์ด delegate๋ฅผ ๋ง๋ญ๋๋ค.
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
values => CompactFindTypeExtended(values)
UO.FindType(type, color, container, distance, notoriety, nearest, maxZ, mobileOnly, itemOnly, includeIgnored, includeSelf, aliveOnly, visibleOnly) โ UO.FindType(Any,Any,Any,Any,Any,Any,Any,Any,Any,Any,Any,Any,Any)
๋งค๊ฐ๋ณ์: type (Any), color (Any), container (Any), distance (Any), notoriety (Any), nearest (Any), maxZ (Any), mobileOnly (Any), itemOnly (Any), includeIgnored (Any), includeSelf (Any), aliveOnly (Any), visibleOnly (Any)
๊ฒฐ๊ณผ: string / String.
ํธ์ถ ์:
-
InjectionScript.Runtime.InjectionApiUO.Register [FindType]. -
InjectionScript.Runtime.InjectionApiUO.CompactFindTypeExtended:CompactFindTypeExtended(values).
ํธ์ถ ์ ์ ์ฅ๋ ์ฒ๋ฆฌ๊ธฐ delegate๋ฅผ ์คํํฉ๋๋ค. ๋ฑ๋ก ๋ฉ์๋๋ API๋ฅผ ๊ตฌ์ฑํ ๋ ์ด delegate๋ฅผ ๋ง๋ญ๋๋ค.
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
values => CompactFindTypeExtended(values)
UO.FindType(type, color, container, distance, notoriety, nearest, maxZ, mobileOnly, itemOnly, includeIgnored, includeSelf, aliveOnly, visibleOnly, nameMask) โ UO.FindType(Any,Any,Any,Any,Any,Any,Any,Any,Any,Any,Any,Any,Any,Any)
๋งค๊ฐ๋ณ์: type (Any), color (Any), container (Any), distance (Any), notoriety (Any), nearest (Any), maxZ (Any), mobileOnly (Any), itemOnly (Any), includeIgnored (Any), includeSelf (Any), aliveOnly (Any), visibleOnly (Any), nameMask (Any)
๊ฒฐ๊ณผ: string / String.
ํธ์ถ ์:
-
InjectionScript.Runtime.InjectionApiUO.Register [FindType]. -
InjectionScript.Runtime.InjectionApiUO.CompactFindTypeExtended:CompactFindTypeExtended(values).
ํธ์ถ ์ ์ ์ฅ๋ ์ฒ๋ฆฌ๊ธฐ delegate๋ฅผ ์คํํฉ๋๋ค. ๋ฑ๋ก ๋ฉ์๋๋ API๋ฅผ ๊ตฌ์ฑํ ๋ ์ด delegate๋ฅผ ๋ง๋ญ๋๋ค.
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
values => CompactFindTypeExtended(values)ะฃะบัะฐัะฝััะบะฐ ยท ะ ัััะบะธะน ยท English ยท Deutsch ยท Franรงais ยท Italiano ยท Espaรฑol ยท ็น้ซไธญๆ ยท ๆฅๆฌ่ช ยท ํ๊ตญ์ด
int UO.FindTypeEx(object? objType, object? color, object? container, object? inSub);์ปจํ ์ด๋๋ ์ง๋ฉด์์ ํ๋์ ๊ทธ๋ํฝ๊ณผ ์์์ ๊ฒ์ํ๊ณ ์ฐพ์ ํ๋๋ฅผ ๋ฐํํฉ๋๋ค ID.
-
objType- ๊ทธ๋ํฝ/body, serial ํญ๋ชฉ ์๋. 0..65534 - ํน์ ๊ทธ๋ํฝ; -1 ๋๋ 0xFFFF - ๋ชจ๋. ์ด ํด๋ผ์ด์ธํธ์ ๋ค๋ฅธ ๋ถ์ ์ ์ธ int๋ ํํฐ๋ฅผ ์ ๊ฑฐํฉ๋๋ค. -
colorโ ํญ๋ชฉ ๊ฐ์๊ฐ ์๋ ์์์ ๋๋ค. 0 - ๋์๋์ง ์์ ๊ฐ์ฒด; -1 ๋๋ 0xFFFF - ๋ชจ๋ hue. ๋ค๋ฅธ ๋ค๊ฑฐํฐ๋ธ int๋ ์ปฌ๋ฌ ํํฐ๋ฅผ ์ ๊ฑฐํฉ๋๋ค. -
container- ์ ์ง: UO.Ground(), 0, -1, 0xFFFFFFFF ๋๋ ๋ฌธ์์ด ground. ๋ฐฐ๋ญ: ๋ฌธ์์ด backpack ๋๋ serial. 10์ง์/16์ง์ serial ๋ฐ ์ด๋ฆ AddObject๊ฐ ํ์ฉ๋ฉ๋๋ค. my๋ ์ฅ๋น์ ๋ถ์ฐฉ๋ ๊ฐ๋ฐฉ์ ํฌํจํ ์บ๋ฆญํฐ์ ์ ์ฒด ์ธ๋ฒคํ ๋ฆฌ๋ฅผ ์ ํํฉ๋๋ค. ์ ์ ์๋ ์ด๋ฆ์ผ๋ก ์ธํด ์คํฌ๋ฆฝํธ ์ค๋ฅ๊ฐ ๋ฐ์ํฉ๋๋ค. ๊ฒฐ๊ณผ serial๋ฅผ ํ์ธํ์ธ์. ๋ช ์์ ์ธ 0๋ ์ง๋ฉด์ ์ ํํฉ๋๋ค. ์ด๋ฆ ground/backpack์ ๋ช ๋ น๊ตฐ๋ง๋ค ๋ค๋ฅธ ์ซ์ ์ง์ ๋ณด๋ค ๋ ๋ช ํํฉ๋๋ค. -
inSub- ํ์ true/false (1/0). false - ํน์ ์ปจํ ์ด๋์ ์ง์ ์ ์ธ ์ฝํ ์ธ ์ ๋๋ค. true โ ์ค์ฒฉ๋ ๊ฐ๋ฐฉ๋ ๋ก๋๋ฉ๋๋ค. ์ง๊ตฌ์ ์์ด์ ์ฌ๊ท๋ ์๋ฌด๊ฒ๋ ๋ฐ๊พธ์ง ์์ต๋๋ค. my๋ ์ด๋ฏธ ์บ๋ฆญํฐ์ ๋ชจ๋ ์ฅ๋น๋ฅผ ์ ํํ๊ณ ์์ต๋๋ค.
int: serial ๋ก์ปฌ ์ํ ์์์์ ์ฒซ ๋ฒ์งธ ์ผ์น; 0 ์ผ์นํ๋ ํญ๋ชฉ์ด ์๋ ๊ฒฝ์ฐ. graphic, ๊ฐ์, ๋ฐฐ์ด ๋๋ bool๊ฐ ์๋๋๋ค. ๊ฒฐ๊ณผ๋ฅผ ํ์ธํ์ธ์ != 0, ๊ฒฐ๊ณผ๊ฐ ์๋ == true ๋๋ ๊ฒฐ๊ณผ == 1. ์คํ์ ํ๋์ ๊ฐ์ฒด๋ก ๊ฐ์ฃผ๋ฉ๋๋ค. ๋ชจ๋ฐ์ผ - ํ๋์ ๊ฐ์ฒด์ ํ๋์ ์ ๋. ์์๋ ๊ทผ์ ์ฑ์ ์๋ฏธํ์ง ์์ผ๋ฉฐ ๊ฒ์ ๊ฐ์๋ ๋ณด์ฅ๋์ง ์์ต๋๋ค.
- ๋ค ๊ฐ์ง ์์น ์ธ์๊ฐ ๋ชจ๋ ํ์ํฉ๋๋ค. ์ ํ์ ์ธ์๊ฐ ์์ต๋๋ค.
- ์ด์ค๋ ์ด ์คํฌ๋ฆฝํธ์ FindDistance ๋ฐ FindVertical๋ฅผ ์ฌ์ฉํ๊ณ self๋ฅผ ์ ์ธํ๋ฉฐ ์ ์ ํ ํญ๋ชฉ๊ณผ ๋ชจ๋ฐ์ผ์ ํฌํจํฉ๋๋ค. ํน์ ์ปจํ ์ด๋ ๋ด์์ ๊ฒ์ํ๋ฉด ์ด๋ฌํ ๊ฑฐ๋ฆฌ/๋์ด ์ ํ์ด ์ ์ฉ๋์ง ์์ต๋๋ค. ๋ ๊ฒฝ์ฐ ๋ชจ๋ Ignore ๋ฐ ํ๊ดด๋ ๊ฐ์ฒด๋ ์ ์ธ๋ฉ๋๋ค.
- ๋ฐ์ดํจ์ค ์ FindItem, FindCount, FindFullQuantity, GetFoundItems๊ฐ ํด๋ฆฌ์ด๋ฉ๋๋ค. ๊ทธ๋ฐ ๋ค์ ์ด ๊ฒ์๊ณผ ๊ด๋ จ๋ฉ๋๋ค. ๋น ๊ฒ์์ 0๊ณผ ๋น ๋ฐฐ์ด์ ๋จ๊น๋๋ค. FindFullQuantity๋ ์ต๋ ์์ดํ (1, Amount)์ ์์ฝํ๊ณ , ๋ชจ๋ฐ์ผ์ ๊ฒฝ์ฐ 1๋ก ์์ฝํฉ๋๋ค. FindQuantity๋ ํ์ฌ ์๋ FindItem์ ์ฝ์ต๋๋ค. ๋ค์ ๊ฒ์ํ ํ์๋ ์ด์ ๋ชฉ๋ก์ด ์ฌ์ ํ ํ์ํ ๊ฒฝ์ฐ GetFoundItems๋ฅผ ์ ์ฅํ์ธ์.
- Bridge๋ ๋ก๋๋ ํญ๋ชฉ์ ํ ๋ฒ ํต๊ณผํ ๋ค์ Land๊ฐ ์ ํ๋ ๊ฒฝ์ฐ Mobile์ ํต๊ณผํฉ๋๋ค. ์ ํ, ์์ ๋ฐ ํ๋ ์ด์์ ์ฉ๊ธฐ๊ฐ ์ผ์นํด์ผ ํฉ๋๋ค. ์ฌ๋ฌ ์กฐ๊ฑด์ ์ถฉ์กฑํ๋๋ผ๋ ํ๋์ ๊ฐ์ฒด๋ ํ ๋ฒ ๊ณ์ฐ๋ฉ๋๋ค. ๊ฐ ์กฐํฉ์ ๋ํด ๋ฐ๋ณต๋๋ ์์ ํ ์ธ๊ณ ์ํ๋ ์์ต๋๋ค.
- ํด๋ผ์ด์ธํธ๊ฐ ๋ฐ์ ๋ฐ์ดํฐ๋ง ์ฝ์ต๋๋ค. ์ปจํ ์ด๋๊ฐ ์ด๋ฆฌ์ง ์๊ณ , ๋งต ์ ์ด ๋ก๋๋์ง ์์ผ๋ฉฐ, ์ ์ก์ด ์์ต๋๋ค. ๋น ๊ฒฐ๊ณผ๋ ์๋ฒ์ ์์๊ฐ ๋น์ด ์๋ค๋ ๊ฒ์ ์ฆ๋ช ํ์ง ์์ต๋๋ค. ํ์ฑ ๋งํฌ๊ฐ ํ์ํ ๊ฒฝ์ฐ Connected๋ฅผ ํ์ธํ์ธ์. ๊ฒ์ ์์ฒด๊ฐ ๋ก์ปฌ ์ํ๋ฅผ ์ฝ์ต๋๋ค.
- ์ฒซ ๋ฒ์งธ ๋ก์ปฌ ์ผ์น ํญ๋ชฉ์ด ์ฌ๊ธฐ์ ์ ์ฅ๋ฉ๋๋ค. ์ ์ ์๋ ์ด๋ฆ์ ๊ฒ์์ ๋ฐฐ๋ญ์ผ๋ก ์ ํํ์ง ์์ต๋๋ค. Ground๋ 0๋ฅผ ํ์ฉํฉ๋๋ค. FindDistance ๊ธฐ๋ณธ๊ฐ 18, ์ต๋ 255. ์ด๊ฒ์ด ๋ฐ๋ก ์ด ํด๋ผ์ด์ธํธ์ ํน์ง์ ๋๋ค.
๊ฐ ์์ ๋ ๋ณ๋์ ํ์ผ .csx๋ก ์ ์ฅํ๊ณ IDE์์ ์คํํ ์ ์์ต๋๋ค. UO ๊ฐ์ฒด์ ๋๊ธฐ ๊ธฐ๋ฅ์ ํ์ฌ ๊ฒ์ ์ธ์
์ ํธ์คํธ๋ฅผ ์ ๊ณตํฉ๋๋ค. ๋ฐ๋ชจ serial ์ด๋ฆ, ์ขํ, ์ฃผ์๋ฅผ ์์ ์ ๊ฒ์ผ๋ก ๋ฐ๊พธ์ธ์.
์ด ์ฝ๋๋ฅผ ๋ณ๋์ .csx ํ์ผ๋ก ์คํํ์ธ์. ์ธ์๋ ํธ์ถ์ ์ง์ ํ์๋ฉ๋๋ค. ์์ ์ ์ด๋ฆ, serial, ์ฃผ์๋ฅผ ์์ ์ ๊ฐ์ผ๋ก ๋ฐ๊พธ์ธ์.
ํ ๋ฒ์ ํธ์ถ ๊ฒฐ๊ณผ๋ฅผ ์ ๋์ ํ์ํฉ๋๋ค. ์ซ์๋ฅผ bool๋ก ๋ณํํ์ง ์์ผ๋ฉฐ, ๋ฐฐ์ด์ด๋ฉด ์์ ์๋ฅผ ํ์ํฉ๋๋ค.
var result = UO.FindTypeEx(0x0EED, -1, "backpack", false);
UO.Print("FindTypeEx: " + Convert.ToString(result));๋งค๊ฐ๋ณ์์ ์คํ ํ๋ฆ:
- 0x0EED - ๊ณจ๋, -1 - ๋ชจ๋ hue; backpack/false ์ค์ฒฉ๋ ๋ฐฑ์ ์ ์ธ๋ฉ๋๋ค. ์ธ ์ค์ 0x๊ฐ ์๋ 16์ง์๋ก ์ฒซ ๋ฒ์งธ ID, ๊ฐ์ฒด ์ ๋ฐ ๊ฐ์ฒด์ ํฉ์ ์ถ๋ ฅํฉ๋๋ค. 20 ๋ฐ 50์ ๋ ์คํ: ๊ฐ์ฒด 2, ๋จ์ 70.
var item = UO.FindTypeEx(0x0EED, -1, "backpack", false);
UO.Print(Hex(item));
UO.Print(Convert.ToString(UO.FindCount()));
UO.Print(Convert.ToString(UO.FindFullQuantity()));
string Hex(object? value) => Convert.ToInt64(value).ToString("X");๋งค๊ฐ๋ณ์์ ์คํ ํ๋ฆ:
- ๋ฐ๊ฒฝ=5 ๋ฐ ๋์ด=10๋ FindGoldNearSelf ๋ด๋ถ์์ ์๋ํฉ๋๋ค. ๋ง์ง๋ง์ผ๋ก ๋ฐํ ๋๋ ์ค๋ฅ๊ฐ ๋ฐ์ํ๋๋ผ๋ ๋ ๊ฐ์ง ์ ํ์ ๋ชจ๋ ๋ณต์ํฉ๋๋ค. ์ด ํจ์๋ serial gold ๋๋ 0๋ฅผ ๋ฐํํฉ๋๋ค. ์ถ๋ ฅ ์ ์ฃผ์ ํ์ธ != 0.
return RunScenario();
object? RunScenario()
{
var item = FindGoldNearSelf(5, 10);
if (Truth(item != 0))
{
UO.Print(Hex(item));
}
else
{
UO.Print("Empty");
}
return null;
}
dynamic FindGoldNearSelf(dynamic radius, dynamic height)
{
var oldDistance = UO.FindDistance();
var oldVertical = UO.FindVertical();
try
{
UO.FindDistance(radius);
UO.FindVertical(height);
return UO.FindTypeEx(0x0EED, -1, UO.Ground(), false);
}
finally
{
UO.FindDistance(oldDistance);
UO.FindVertical(oldVertical);
}
}
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;๋งค๊ฐ๋ณ์์ ์คํ ํ๋ฆ:
- GetSerial๋ backpack์ ํ์ฉํฉ๋๋ค. 0์ ํ์ธํ๋ฉด ๋ฌด์์ ์ ์ง ์ ํ์ด ๋ฐฉ์ง๋ฉ๋๋ค. AddObject๋ ID๋ฅผ search_bag๋ก ์ ์ฅํฉ๋๋ค. true์๋ ์ค์ฒฉ๋ ๊ฐ๋ฐฉ์ด ํฌํจ๋ฉ๋๋ค. GetFoundItems๋ ๋ณ๋์ ๋ฐฐ์ด์ ์ ์ฅํฉ๋๋ค. IsObjectExists๋ 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()
{
var bag = UO.GetSerial("backpack");
if (Truth(bag != "0x00000000"))
{
UO.AddObject("search_bag", bag);
UO.FindTypeEx(0x0EED, -1, "search_bag", true);
var items = UO.GetFoundItems();
foreach (var item in items)
{
if (Truth(UO.IsObjectExists(item)))
{
UO.Print(Hex(item));
}
}
}
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;
}C#์ ๋์๋ฌธ์๋ฅผ ๊ตฌ๋ถํฉ๋๋ค. ์ ํํ UO ์ด๋ฆ์ ์ฌ์ฉํ์ธ์. ์ซ์ ํ๋๊ทธ๋ 0๊ณผ ๋น๊ตํ๊ณ ๋ฐํ ํ์์ด bool์ผ ๋๋ง bool์ ์ฌ์ฉํ์ธ์.
๋งค๊ฐ๋ณ์: objType (Any), color (Any), container (Any), inSub (Any)
๊ฒฐ๊ณผ: int / Integer.
ํธ์ถ ์:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.FindType:bridge.FindType(ResolveType(arguments[0]), Arg(1), StealthContainer(2), -1, Arg(3) != 0). -
InjectionScript.Runtime.InjectionApiUO.ResolveType:ResolveType(arguments[0]). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(1). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::StealthContainer:StealthContainer(2).
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
case "findtypeex": return new InjectionValue(bridge.FindType(ResolveType(arguments[0]), Arg(1), StealthContainer(2), -1, Arg(3) != 0));ะฃะบัะฐัะฝััะบะฐ ยท ะ ัััะบะธะน ยท English ยท Deutsch ยท Franรงais ยท Italiano ยท Espaรฑol ยท ็น้ซไธญๆ ยท ๆฅๆฌ่ช ยท ํ๊ตญ์ด
int UO.FindTypesArrayEx(object? objTypes, object? colors, object? containers, object? inSub);ํ ๋ฒ์ ์ํ์์ ๋ค์ํ ๊ทธ๋ํฝ, ์์ ๋ฐ ์ปจํ ์ด๋๋ฅผ ๊ฒ์ํ๊ณ ์ฐพ์ ํญ๋ชฉ ID์ ๋ฐํํฉ๋๋ค. ์ ์ฒด ๋ชฉ๋ก์ GetFoundItems๋ฅผ ํตํด ์ฝ์ต๋๋ค.
-
objTypes- ๊ทธ๋ํฝ/body, serial ํญ๋ชฉ ์๋. 0..65534 - ํน์ ๊ทธ๋ํฝ; -1 ๋๋ 0xFFFF - ๋ชจ๋. ์ด ํด๋ผ์ด์ธํธ์ ๋ค๋ฅธ ๋ถ์ ์ ์ธ int๋ ํํฐ๋ฅผ ์ ๊ฑฐํฉ๋๋ค. -
colorsโ ํญ๋ชฉ ๊ฐ์๊ฐ ์๋ ์์์ ๋๋ค. 0 - ๋์๋์ง ์์ ๊ฐ์ฒด; -1 ๋๋ 0xFFFF - ๋ชจ๋ hue. ๋ค๋ฅธ ๋ค๊ฑฐํฐ๋ธ int๋ ์ปฌ๋ฌ ํํฐ๋ฅผ ์ ๊ฑฐํฉ๋๋ค. -
containers- ์ ์ง: UO.Ground(), 0, -1, 0xFFFFFFFF ๋๋ ๋ฌธ์์ด ground. ๋ฐฐ๋ญ: ๋ฌธ์์ด backpack ๋๋ serial. 10์ง์/16์ง์ serial ๋ฐ ์ด๋ฆ AddObject๊ฐ ํ์ฉ๋ฉ๋๋ค. my๋ ์ฅ๋น์ ๋ถ์ฐฉ๋ ๊ฐ๋ฐฉ์ ํฌํจํ ์บ๋ฆญํฐ์ ์ ์ฒด ์ธ๋ฒคํ ๋ฆฌ๋ฅผ ์ ํํฉ๋๋ค. ์ ์ ์๋ ์ด๋ฆ์ผ๋ก ์ธํด ์คํฌ๋ฆฝํธ ์ค๋ฅ๊ฐ ๋ฐ์ํฉ๋๋ค. ๊ฒฐ๊ณผ serial๋ฅผ ํ์ธํ์ธ์. ๋ช ์์ ์ธ 0๋ ์ง๋ฉด์ ์ ํํฉ๋๋ค. ์ด๋ฆ ground/backpack์ ๋ช ๋ น๊ตฐ๋ง๋ค ๋ค๋ฅธ ์ซ์ ์ง์ ๋ณด๋ค ๋ ๋ช ํํฉ๋๋ค. -
inSub- ํ์ true/false (1/0). false - ํน์ ์ปจํ ์ด๋์ ์ง์ ์ ์ธ ์ฝํ ์ธ ์ ๋๋ค. true โ ์ค์ฒฉ๋ ๊ฐ๋ฐฉ๋ ๋ก๋๋ฉ๋๋ค. ์ง๊ตฌ์ ์์ด์ ์ฌ๊ท๋ ์๋ฌด๊ฒ๋ ๋ฐ๊พธ์ง ์์ต๋๋ค. my๋ ์ด๋ฏธ ์บ๋ฆญํฐ์ ๋ชจ๋ ์ฅ๋น๋ฅผ ์ ํํ๊ณ ์์ต๋๋ค.
int: serial ๋ก์ปฌ ์ํ ์์์์ ์ฒซ ๋ฒ์งธ ์ผ์น; 0 ์ผ์นํ๋ ํญ๋ชฉ์ด ์๋ ๊ฒฝ์ฐ. graphic, ๊ฐ์, ๋ฐฐ์ด ๋๋ bool๊ฐ ์๋๋๋ค. ๊ฒฐ๊ณผ๋ฅผ ํ์ธํ์ธ์ != 0, ๊ฒฐ๊ณผ๊ฐ ์๋ == true ๋๋ ๊ฒฐ๊ณผ == 1. ์คํ์ ํ๋์ ๊ฐ์ฒด๋ก ๊ฐ์ฃผ๋ฉ๋๋ค. ๋ชจ๋ฐ์ผ - ํ๋์ ๊ฐ์ฒด์ ํ๋์ ์ ๋. ์์๋ ๊ทผ์ ์ฑ์ ์๋ฏธํ์ง ์์ผ๋ฉฐ ๊ฒ์ ๊ฐ์๋ ๋ณด์ฅ๋์ง ์์ต๋๋ค.
- ๋ฐฐ์ด์ด ์ ๋ฌ๋์์ต๋๋ค. ๋จ์ผ ๊ฐ์ ํ๋์ ์์๋ก ๊ตฌ์ฑ๋ ๋ฐฐ์ด๋ก๋ ์ฒ๋ฆฌ๋ฉ๋๋ค. ๋ณ์ ๊ฐ[1]์ ์ ์ธํ๋ฉด ์ธ๋ฑ์ค 0 ๋ฐ 1๊ฐ ์์ฑ๋ฉ๋๋ค. ๊ฐ๊ฐ์ ์ฑ์๋๋ค. ์ข ๋ฅ์ ์์์ ์์ธ๋ณ ์์ด ์๋ ๋ ๋ฆฝ์ ์ธ ์ต์ ์ ๋๋ค. ์์์ ์์น์ ์๋ "๋ชจ๋ " ๋ง์คํฌ ๋๋ ์ ํ/์์์ ๋น ๋ฐฐ์ด์ ์ด ํํฐ๋ฅผ ์ ๊ฑฐํฉ๋๋ค. ๋น ์ปจํ ์ด๋ ๋ฐฐ์ด์ ์บ๋ฆญํฐ์ ์ธ๋ฒคํ ๋ฆฌ๋ฅผ ์ ํํฉ๋๋ค. ์ปจํ ์ด๋์ ๋ฐ๋ณต๊ณผ ๊ต์ฐจ๋ ID์ ์ค๋ณต๋์ง ์์ต๋๋ค.
- ๋ค ๊ฐ์ง ์์น ์ธ์๊ฐ ๋ชจ๋ ํ์ํฉ๋๋ค. ์ ํ์ ์ธ์๊ฐ ์์ต๋๋ค.
- ์ด์ค๋ ์ด ์คํฌ๋ฆฝํธ์ FindDistance ๋ฐ FindVertical๋ฅผ ์ฌ์ฉํ๊ณ self๋ฅผ ์ ์ธํ๋ฉฐ ์ ์ ํ ํญ๋ชฉ๊ณผ ๋ชจ๋ฐ์ผ์ ํฌํจํฉ๋๋ค. ํน์ ์ปจํ ์ด๋ ๋ด์์ ๊ฒ์ํ๋ฉด ์ด๋ฌํ ๊ฑฐ๋ฆฌ/๋์ด ์ ํ์ด ์ ์ฉ๋์ง ์์ต๋๋ค. ๋ ๊ฒฝ์ฐ ๋ชจ๋ Ignore ๋ฐ ํ๊ดด๋ ๊ฐ์ฒด๋ ์ ์ธ๋ฉ๋๋ค.
- ๋ฐ์ดํจ์ค ์ FindItem, FindCount, FindFullQuantity, GetFoundItems๊ฐ ํด๋ฆฌ์ด๋ฉ๋๋ค. ๊ทธ๋ฐ ๋ค์ ์ด ๊ฒ์๊ณผ ๊ด๋ จ๋ฉ๋๋ค. ๋น ๊ฒ์์ 0๊ณผ ๋น ๋ฐฐ์ด์ ๋จ๊น๋๋ค. FindFullQuantity๋ ์ต๋ ์์ดํ (1, Amount)์ ์์ฝํ๊ณ , ๋ชจ๋ฐ์ผ์ ๊ฒฝ์ฐ 1๋ก ์์ฝํฉ๋๋ค. FindQuantity๋ ํ์ฌ ์๋ FindItem์ ์ฝ์ต๋๋ค. ๋ค์ ๊ฒ์ํ ํ์๋ ์ด์ ๋ชฉ๋ก์ด ์ฌ์ ํ ํ์ํ ๊ฒฝ์ฐ GetFoundItems๋ฅผ ์ ์ฅํ์ธ์.
- Bridge๋ ๋ก๋๋ ํญ๋ชฉ์ ํ ๋ฒ ํต๊ณผํ ๋ค์ Land๊ฐ ์ ํ๋ ๊ฒฝ์ฐ Mobile์ ํต๊ณผํฉ๋๋ค. ์ ํ, ์์ ๋ฐ ํ๋ ์ด์์ ์ฉ๊ธฐ๊ฐ ์ผ์นํด์ผ ํฉ๋๋ค. ์ฌ๋ฌ ์กฐ๊ฑด์ ์ถฉ์กฑํ๋๋ผ๋ ํ๋์ ๊ฐ์ฒด๋ ํ ๋ฒ ๊ณ์ฐ๋ฉ๋๋ค. ๊ฐ ์กฐํฉ์ ๋ํด ๋ฐ๋ณต๋๋ ์์ ํ ์ธ๊ณ ์ํ๋ ์์ต๋๋ค.
- ํด๋ผ์ด์ธํธ๊ฐ ๋ฐ์ ๋ฐ์ดํฐ๋ง ์ฝ์ต๋๋ค. ์ปจํ ์ด๋๊ฐ ์ด๋ฆฌ์ง ์๊ณ , ๋งต ์ ์ด ๋ก๋๋์ง ์์ผ๋ฉฐ, ์ ์ก์ด ์์ต๋๋ค. ๋น ๊ฒฐ๊ณผ๋ ์๋ฒ์ ์์๊ฐ ๋น์ด ์๋ค๋ ๊ฒ์ ์ฆ๋ช ํ์ง ์์ต๋๋ค. ํ์ฑ ๋งํฌ๊ฐ ํ์ํ ๊ฒฝ์ฐ Connected๋ฅผ ํ์ธํ์ธ์. ๊ฒ์ ์์ฒด๊ฐ ๋ก์ปฌ ์ํ๋ฅผ ์ฝ์ต๋๋ค.
- ์ฒซ ๋ฒ์งธ ๋ก์ปฌ ์ผ์น ํญ๋ชฉ์ด ์ฌ๊ธฐ์ ์ ์ฅ๋ฉ๋๋ค. ์ ์ ์๋ ์ด๋ฆ์ ๊ฒ์์ ๋ฐฐ๋ญ์ผ๋ก ์ ํํ์ง ์์ต๋๋ค. Ground๋ 0๋ฅผ ํ์ฉํฉ๋๋ค. FindDistance ๊ธฐ๋ณธ๊ฐ 18, ์ต๋ 255. ์ด๊ฒ์ด ๋ฐ๋ก ์ด ํด๋ผ์ด์ธํธ์ ํน์ง์ ๋๋ค.
๊ฐ ์์ ๋ ๋ณ๋์ ํ์ผ .csx๋ก ์ ์ฅํ๊ณ IDE์์ ์คํํ ์ ์์ต๋๋ค. UO ๊ฐ์ฒด์ ๋๊ธฐ ๊ธฐ๋ฅ์ ํ์ฌ ๊ฒ์ ์ธ์
์ ํธ์คํธ๋ฅผ ์ ๊ณตํฉ๋๋ค. ๋ฐ๋ชจ serial ์ด๋ฆ, ์ขํ, ์ฃผ์๋ฅผ ์์ ์ ๊ฒ์ผ๋ก ๋ฐ๊พธ์ธ์.
์ด ์ฝ๋๋ฅผ ๋ณ๋์ .csx ํ์ผ๋ก ์คํํ์ธ์. ์ธ์๋ ํธ์ถ์ ์ง์ ํ์๋ฉ๋๋ค. ์์ ์ ์ด๋ฆ, serial, ์ฃผ์๋ฅผ ์์ ์ ๊ฐ์ผ๋ก ๋ฐ๊พธ์ธ์.
ํ ๋ฒ์ ํธ์ถ ๊ฒฐ๊ณผ๋ฅผ ์ ๋์ ํ์ํฉ๋๋ค. ์ซ์๋ฅผ bool๋ก ๋ณํํ์ง ์์ผ๋ฉฐ, ๋ฐฐ์ด์ด๋ฉด ์์ ์๋ฅผ ํ์ํฉ๋๋ค.
var result = UO.FindTypesArrayEx(new[] { 0x0EED }, new[] { -1 }, new[] { "backpack" }, false);
UO.Print("FindTypesArrayEx: " + Convert.ToString(result));๋งค๊ฐ๋ณ์์ ์คํ ํ๋ฆ:
- ์ ํ์๋ ๊ธ 0x0EED ๋ฐ ํ์ง์ฃผ 0x0F7A๊ฐ ํฌํจ๋ฉ๋๋ค. ํ๋์ ์์=-1 - ๋ชจ๋ hue, ํ๋์ Ground - ์ง๊ตฌ. false๋ ์ง๊ตฌ์์ ์๋ฌด๊ฒ๋ ๋ฐ๊พธ์ง ์์ต๋๋ค. ํ์ฌ ๊ฒ์ ์ ํ์ด ์ ์ฉ๋ฉ๋๋ค. ID, ๊ฐ์ฒด ์์ ๋จ์์ ํฉ์ด ์ถ๋ ฅ๋ฉ๋๋ค.
dynamic[] types = new dynamic[checked((int)(1) + 1)];
types[0] = 0x0EED;
types[1] = 0x0F7A;
dynamic[] colors = new dynamic[checked((int)(0) + 1)];
colors[0] = -1;
dynamic[] containers = new dynamic[checked((int)(0) + 1)];
containers[0] = UO.Ground();
var first = UO.FindTypesArrayEx(types, colors, containers, false);
UO.Print(Hex(first));
UO.Print(Convert.ToString(UO.FindCount()));
UO.Print(Convert.ToString(UO.FindFullQuantity()));
string Hex(object? value) => Convert.ToInt64(value).ToString("X");๋งค๊ฐ๋ณ์์ ์คํ ํ๋ฆ:
- ์ ํ - ๊ธ๋ง; ์์ - ๋ชจ๋ hue. ์ปจํ ์ด๋ - backpack ๋ฐ ํ ์ง; true์๋ ์ค์ฒฉ๋ ๊ฐ๋ฐฉ์ด ํฌํจ๋ฉ๋๋ค. ๋ ์์ญ ๋ชจ๋์ ๊ฐ์ฒด/์คํ ๋ฐ ๋จ์๊ฐ ์ถ๋ ฅ๋๋ฉฐ ๊ฐ ๊ฐ์ฒด๋ ํ ๋ฒ์ฉ ๊ณ์ฐ๋ฉ๋๋ค.
return RunScenario();
object? RunScenario()
{
dynamic[] types = new dynamic[checked((int)(0) + 1)];
types[0] = 0x0EED;
dynamic[] colors = new dynamic[checked((int)(0) + 1)];
colors[0] = -1;
dynamic[] containers = new dynamic[checked((int)(1) + 1)];
containers[0] = "backpack";
containers[1] = UO.Ground();
UO.FindTypesArrayEx(types, colors, containers, true);
UO.Print(Convert.ToString(UO.FindCount()));
UO.Print(Convert.ToString(UO.FindFullQuantity()));
return null;
}๋งค๊ฐ๋ณ์์ ์คํ ํ๋ฆ:
- SearchTypesIn(container,firstType,secondType)๋ Array๋ฅผ ๋ฐํํ๋ ๋ฐ๋ฉด, ๋ด์ฅ ๋ช ๋ น์ ๋จ์ผ int ID๋ฅผ ๋ฐํํฉ๋๋ค. ์์ ์ ์ฒด ํจ์๋ ๋ฐฐ์ด์ ์ฑ์ฐ๊ณ ์ฌ๊ท์ ์ผ๋ก ๊ฒ์ํ ํ ์ฆ์ GetFoundItems๋ฅผ ๋ณต์ฌํฉ๋๋ค. ๋ฉ์ธ์ ์ ์ฅ๋ 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()
{
var items = SearchTypesIn("backpack", 0x0EED, 0x0F7A);
foreach (var item in items)
{
if (Truth(UO.IsObjectExists(item)))
{
UO.Print(Hex(item));
}
}
return null;
}
dynamic SearchTypesIn(dynamic container, dynamic firstType, dynamic secondType)
{
dynamic[] types = new dynamic[checked((int)(1) + 1)];
types[0] = firstType;
types[1] = secondType;
dynamic[] colors = new dynamic[checked((int)(0) + 1)];
colors[0] = -1;
dynamic[] containers = new dynamic[checked((int)(0) + 1)];
containers[0] = container;
UO.FindTypesArrayEx(types, colors, containers, true);
return UO.GetFoundItems();
}
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;
}C#์ ๋์๋ฌธ์๋ฅผ ๊ตฌ๋ถํฉ๋๋ค. ์ ํํ UO ์ด๋ฆ์ ์ฌ์ฉํ์ธ์. ์ซ์ ํ๋๊ทธ๋ 0๊ณผ ๋น๊ตํ๊ณ ๋ฐํ ํ์์ด bool์ผ ๋๋ง bool์ ์ฌ์ฉํ์ธ์.
๋งค๊ฐ๋ณ์: objTypes (Any), colors (Any), containers (Any), inSub (Any)
๊ฒฐ๊ณผ: int / Integer.
ํธ์ถ ์:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.FindTypes:bridge.FindTypes(arguments[0].Kind == InjectionValueKind.Array ? arguments[0].Array.Select(ResolveType).ToArray() : new[] { ResolveType(arguments[0]) }, ArrayArg(1), searchContainers.Select(ConvertClientSearchContainer).ToArray(), Arg(3) != 0). -
InjectionScript.Runtime.InjectionApiUO.ResolveType:ResolveType(arguments[0]). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::ArrayArg:ArrayArg(1). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(3).
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
case "findtypesarrayex":
InjectionValue[] searchContainers = arguments[2].Kind == InjectionValueKind.Array
? arguments[2].Array : new[] { arguments[2] };
return new InjectionValue(bridge.FindTypes(arguments[0].Kind == InjectionValueKind.Array
? arguments[0].Array.Select(ResolveType).ToArray() : new[] { ResolveType(arguments[0]) }, ArrayArg(1),
searchContainers.Select(ConvertClientSearchContainer).ToArray(), Arg(3) != 0));ะฃะบัะฐัะฝััะบะฐ ยท ะ ัััะบะธะน ยท English ยท Deutsch ยท Franรงais ยท Italiano ยท Espaรฑol ยท ็น้ซไธญๆ ยท ๆฅๆฌ่ช ยท ํ๊ตญ์ด
int UO.FindVertical();
void UO.FindVertical(object? value);๊ธฐ๋ณธ ๊ฒ์์์ ํ์ฉ๋๋ ๋์ด ์ฐจ์ด๋ฅผ ์ฝ๊ฑฐ๋ ์์ ํฉ๋๋ค.
-
value- ์ ํ์ฌํญ int. ๋ ผ์ ์์ด - ์ฝ๊ธฐ; ๊ฐ - ์ค์ . ๊ฐ์ 0..120 ๋ฒ์๋ก ์ ํ๋ฉ๋๋ค. ์์๋ ๋ฌด์ ํ์ด ์๋ 0๊ฐ ๋ฉ๋๋ค. ์ ๋ฐํ์: 2; ๋ณต์๋ ์ํ์๋ ๋ค๋ฅธ ๊ฐ์ด ํฌํจ๋ ์ ์์ต๋๋ค. ๋ถ์๋ 0์ผ๋ก ์๋ฆฝ๋๋ค. ์ซ์ ๋ฌธ์์ด double/0x๋ ํ์ฉ๋ฉ๋๋ค. ์์์ ๋ณํ์ ํผํ๋ ค๋ฉด int๋ฅผ ์ฌ์ฉํ์ธ์.
์ธ์ ์์: int - ํ์ฌ ์ ํ(์ธ๊ณ ๋จ์์ ์ฐจ์ด Z), ์ฐพ์ ์ ์์ ID, ๊ฐ์ฒด ์ ๋๋ bool. 0๋ ์คํจ๊ฐ ์๋ ์ ๋ก ํ๊ณ๋ฅผ ์๋ฏธํฉ๋๋ค. ๊ฐ ํฌํจ: void - ๊ฐ ์์; ์ด๊ฒ์ true/false ๋๋ ์ด์ ์ค์ ์ด ์๋๋๋ค. ์ค์น๊ฐ ์๋ฃ๋๋ฉด FindVertical()์ ์ฝ์ด ์ ์ฅ๋ ๊ฐ์ ์์๋ณด์ธ์.
- ๋์ด: abs(object.Z - player.Z), ์๋ฐฉํฅ, ํ ๋๋ฆฌ ํฌํจ. 0์ ๊ฒฝ์ฐ ๋์ผํ Z๋ง ์ ํฉํฉ๋๋ค. ์ด๊ฒ์ ์ธต์๋ ๊ฐ๋ก ์ ์ ๊ฐ์๊ฐ ์๋๋๋ค.
- ์ค์ ์ ํ์ฌ ์คํฌ๋ฆฝํธ์ ๋ฐํ์์ ์ ์ฅ๋ฉ๋๋ค. ํด๋น ํ๋ก์์ ๋ ๋จ์ผ ๊ฐ์ ์ฌ์ฉํฉ๋๋ค. ๋ ๋ฆฝ ๋ฐํ์์๋ ๋ณ๋์ ์ค์ ์ด ์์ต๋๋ค. ์ฝ๊ธฐ ๋ฐ ์ฐ๊ธฐ๋ ๊ฒ์์ ํธ๋ฆฌ๊ฑฐํ์ง ์์ผ๋ฉฐ, FindItem/FindCount/GetFoundItems๋ฅผ ์ง์ฐ๊ณ , ํจํท์ ๋ณด๋ด๊ณ , ๋ฌธ์๋ฅผ ์ด๋ํ๊ฑฐ๋, ๋ฉ๋ฆฌ ์๋ ๊ฐ์ฒด๋ฅผ ๋ก๋ํ์ง ์์ต๋๋ค.
- FindTypeEx ๋ฐ FindTypesArrayEx ์ง์์์ ๊ฒ์ํ ๋๋ ์ด๋ฌํ ์ ํ์ ์ฌ์ฉํ์ง๋ง ์ปจํ ์ด๋ ๋ด๋ถ์์๋ ๊ฒ์ํ์ง ์์ต๋๋ค. ๋๋จธ์ง ํํฐ๋ type, hue, Ignore ๋ฐ ๋ก๋๋ ๊ฐ์ฒด์ ์กด์ฌ ์ฌ๋ถ์ ๋๋ค. FindAtCoord๋ ๋ ๊ฐ์ง ์ ํ์ ๋ชจ๋ ๋ฌด์ํฉ๋๋ค. ํ์ฅ ๋ช ๋ น์์๋ ๋ช ์์ ์ธ ๊ฑฐ๋ฆฌ/maxZ๊ฐ ์ค์ ์ ์ฌ์ ์ํ ์ ์์ต๋๋ค. -1 ์ด๋ฌํ ๋งค๊ฐ๋ณ์์์๋ ์ค์ ์์ฒด๋ฅผ -1๋ก ์ค์ ํ๋ ๊ฒ์ด ์๋๋ผ ์ค์ ์ ์ฌ์ฉํ๋ค๋ ์๋ฏธ์ ๋๋ค. FindList๋ ์ปจํ ์ด๋๋ฅผ ๊ฒ์ํ ๋ Z๋ ํํฐ๋งํฉ๋๋ค. ์ง์ ๋ ์ปจํ ์ด๋ ์์ธ๊ฐ ์ ์ฉ๋์ง ์์ต๋๋ค.
- ์์๋ก ๊ฒ์ํ๊ธฐ ์ ์ ํด๋น ๊ฐ์ ์ ์ฅํ๊ณ finally๋ก ๋ณต์ํด ๋ณด์ธ์. ์ค์น๊ฐ ์๋์ผ๋ก ์ทจ์๋์ง ์์ต๋๋ค. ๋ง์ง๋ง์ผ๋ก ์ ์์ ์ธ ์๋ฃ ๋ฐ ์กํ ์คํฌ๋ฆฝํธ ์ค๋ฅ์ ๋ํด ์๋ํฉ๋๋ค. ๋น์ ์ ์ง๋ ์ฒญ์ ์ฅ์น๋ก ์ฌ์ฉํ ์ ์์ต๋๋ค.
๊ฐ ์์ ๋ ๋ณ๋์ ํ์ผ .csx๋ก ์ ์ฅํ๊ณ IDE์์ ์คํํ ์ ์์ต๋๋ค. UO ๊ฐ์ฒด์ ๋๊ธฐ ๊ธฐ๋ฅ์ ํ์ฌ ๊ฒ์ ์ธ์
์ ํธ์คํธ๋ฅผ ์ ๊ณตํฉ๋๋ค. ๋ฐ๋ชจ serial ์ด๋ฆ, ์ขํ, ์ฃผ์๋ฅผ ์์ ์ ๊ฒ์ผ๋ก ๋ฐ๊พธ์ธ์.
์ด ์ฝ๋๋ฅผ ๋ณ๋์ .csx ํ์ผ๋ก ์คํํ์ธ์. ์ธ์๋ ํธ์ถ์ ์ง์ ํ์๋ฉ๋๋ค. ์์ ์ ์ด๋ฆ, serial, ์ฃผ์๋ฅผ ์์ ์ ๊ฐ์ผ๋ก ๋ฐ๊พธ์ธ์.
ํ ๋ฒ์ ํธ์ถ ๊ฒฐ๊ณผ๋ฅผ ์ ๋์ ํ์ํฉ๋๋ค. ์ซ์๋ฅผ bool๋ก ๋ณํํ์ง ์์ผ๋ฉฐ, ๋ฐฐ์ด์ด๋ฉด ์์ ์๋ฅผ ํ์ํฉ๋๋ค.
var result = UO.FindVertical();
UO.Print("FindVertical: " + Convert.ToString(result));๋งค๊ฐ๋ณ์์ ์คํ ํ๋ฆ:
- ์ด์ ์ค์ ์ค์ ์ ์ ์ฅํฉ๋๋ค. value:=10๋ ์ ์ ํ๊ณ๋ฅผ ์ค์ ํฉ๋๋ค. 1000๋ 120๊น์ง์ ํ๊ณ๋ฅผ ๋ํ๋ ๋๋ค. Print๋ ์ธ์ ์์ด ๋ณ๋์ ํธ์ถ๋ก ๊ฒฐ๊ณผ๋ฅผ ์ฝ์ต๋๋ค. ๋ง์ง๋ง์ผ๋ก ์ด์ ์ ๋ณต์ํฉ๋๋ค.
var previous = UO.FindVertical();
try
{
UO.FindVertical(10);
UO.Print(Convert.ToString(UO.FindVertical()));
UO.FindVertical(1000);
UO.Print(Convert.ToString(UO.FindVertical()));
}
finally
{
UO.FindVertical(previous);
}๋งค๊ฐ๋ณ์์ ์คํ ํ๋ฆ:
- ์ด์ ํธ์ถ ์ฝ๋์ ์ค์ ์ ์ ์ฅํฉ๋๋ค. 10๋ FindVertical๋ง ๋ณ๊ฒฝ๋ฉ๋๋ค. ๋ ๋ฒ์งธ ํ๋๋ ๋์ผํ๊ฒ ์ ์ง๋ฉ๋๋ค. 0x0EED - ๊ณจ๋ ๊ทธ๋ํฝ, -1 - ๋ชจ๋ hue, Container=-1 - ์๋, false - ์ปจํ ์ด๋ ์ฌ๊ท ์์. id - ํ๋ serial; != 0 ๊ฐ์ฉ์ฑ์ ํ์ธํฉ๋๋ค. FindCount ์ ์ฒด ๊ฐ์ฒด/์คํ ์๋ฅผ ๊ณ์ฐํฉ๋๋ค. ์ต์ข ์ ์ผ๋ก ๊ฒฐ๊ณผ ๋ชฉ๋ก์ด ์๋ ์ค์ ์ ๋ณต์ํฉ๋๋ค.
return RunScenario();
object? RunScenario()
{
var previous = UO.FindVertical();
try
{
UO.FindVertical(10);
var id = UO.FindTypeEx(0x0EED, -1, -1, false);
if (Truth(id != 0))
{
UO.Print(Hex(id) + ":" + Convert.ToString(UO.FindCount()));
}
else
{
UO.Print("0");
}
}
finally
{
UO.FindVertical(previous);
}
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;๋งค๊ฐ๋ณ์์ ์คํ ํ๋ฆ:
- CountGroundInRange(graphic, radius, height)๋ ๋ ์ ํ์ ๋ชจ๋ ์ ์ฅํ๊ณ , radius=5 ๋ฐ height=10๋ฅผ ์ค์ ํ๊ณ , graphic=0x0EED๋ฅผ ์ฐพ์ FindCount()๋ฅผ ๋ฐํํฉ๋๋ค. ์คํ์ ํ๋์ ๊ฐ์ฒด๋ก ๊ฐ์ฃผ๋ฉ๋๋ค. ์ ์ฒด ๊ธฐ๋ฅ์ Main ๋ค์์ ์ ๊ณต๋ฉ๋๋ค. ๋ง์ง๋ง์ผ๋ก ๋ฆฌํด์ ํตํด ์ข ๋ฃํ๋ ๊ฒฝ์ฐ์๋ ๋ ์ ํ์ ๋ชจ๋ ๋ณต์ํฉ๋๋ค. ๊ฒ์ ๊ฒฐ๊ณผ๋ ๊ณ์ ์ฌ์ฉ ๊ฐ๋ฅํฉ๋๋ค.
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 = CountGroundInRange(0x0EED, 5, 10);
UO.Print(Convert.ToString(count));
return null;
}
dynamic CountGroundInRange(dynamic graphic, dynamic radius, dynamic height)
{
var oldDistance = UO.FindDistance();
var oldVertical = UO.FindVertical();
try
{
UO.FindDistance(radius);
UO.FindVertical(height);
UO.FindTypeEx(graphic, -1, -1, false);
return UO.FindCount();
}
finally
{
UO.FindDistance(oldDistance);
UO.FindVertical(oldVertical);
}
}
}C#์ ๋์๋ฌธ์๋ฅผ ๊ตฌ๋ถํฉ๋๋ค. ์ ํํ UO ์ด๋ฆ์ ์ฌ์ฉํ์ธ์. ์ซ์ ํ๋๊ทธ๋ 0๊ณผ ๋น๊ตํ๊ณ ๋ฐํ ํ์์ด bool์ผ ๋๋ง bool์ ์ฌ์ฉํ์ธ์.
๋งค๊ฐ๋ณ์: ๋งค๊ฐ๋ณ์๊ฐ ์์ต๋๋ค.
๊ฒฐ๊ณผ: int / Integer.
ํธ์ถ ์:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.SetFindVertical:bridge.SetFindVertical(Arg(0)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetFindVertical:bridge.GetFindVertical().
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
case "findvertical":
if (arguments.Length > 0) { bridge.SetFindVertical(Arg(0)); return InjectionValue.Unit; }
return new InjectionValue(bridge.GetFindVertical());๋งค๊ฐ๋ณ์: value (Any)
๊ฒฐ๊ณผ: void / Unit.
ํธ์ถ ์:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.SetFindVertical:bridge.SetFindVertical(Arg(0)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetFindVertical:bridge.GetFindVertical().
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
case "findvertical":
if (arguments.Length > 0) { bridge.SetFindVertical(Arg(0)); return InjectionValue.Unit; }
return new InjectionValue(bridge.GetFindVertical());ะฃะบัะฐัะฝััะบะฐ ยท ะ ัััะบะธะน ยท English ยท Deutsch ยท Franรงais ยท Italiano ยท Espaรฑol ยท ็น้ซไธญๆ ยท ๆฅๆฌ่ช ยท ํ๊ตญ์ด
dynamic UO.GetFindedList(object? userList);๋ง์ง๋ง ์ผ๋ฐ ๊ฒ์ ๋ชฉ๋ก ID์ ๋ณต์ฌ๋ณธ์ ๋ง๋ญ๋๋ค.
-
userListโ ํ์ ํธํ์ฑ ์ธ์์ ๋๋ค. ํ์ฌ ๊ตฌํ์์๋ ์ฑ์์ง๊ฑฐ๋ ์์ ๋์ง ์์ต๋๋ค. ๋ชฉ๋ก์ ๋ช ๋ น์ ๊ฒฐ๊ณผ๋ก ๋ฐํ๋ฉ๋๋ค. 0๋ฅผ ํต๊ณผํ ์ ์์ต๋๋ค. ์ธ์๊ฐ ์๋ ํ์์ ๊ฒฝ์ฐ GetFoundItems๋ฅผ ์ฌ์ฉํ์ธ์.
๋ฐฐ์ด์ ๋ง์ง๋ง ๊ฒ์ ์์์์ ๋ณ๋์ ๋ฐฐ์ด serial/ID์ ๋๋ค. ์ผ์นํ๋ ํญ๋ชฉ์ด ์์ผ๋ฉด ๋น ๋ฐฐ์ด์ ๋๋ค. graphic, hue ๋๋ ๊ธ์ก์ ํฌํจํ์ง ์์ต๋๋ค. ๋ฐํ๋ ๋ฐฐ์ด์ ๋ณ๊ฒฝํด๋ ์ ์ฅ๋ ๊ฒ์ ๋ชฉ๋ก์ ํธ์ง๋์ง ์์ต๋๋ค.
- ํด๋ผ์ด์ธํธ๊ฐ ์ด๋ฏธ ๋ค์ด๋ก๋ํ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ต๋๋ค. ์ด ๋ช ๋ น์ ์ ์ฒด ์๋ฒ์์ ์ปจํ ์ด๋๋ฅผ ์ด๊ฑฐ๋ ํญ๋ชฉ์ ์ด๋ํ๊ฑฐ๋ ๊ฐ์ฒด๋ฅผ ๋ค์ด๋ก๋ํ์ง ์์ต๋๋ค.
- ๋ฐฐ์ด - 0๋ถํฐ ์์ํ๋ ์ธ๋ฑ์ค๊ฐ ์๋ ๋ฐฐ์ด์ ๋๋ค. var์ ์ ์ฅํ๊ณ , ArrayLength๋ฅผ ํ์ธํ ํ ์ ์ํ์ธ์. ์ค๋ ์ท์ ์ฐ์ ํ ์์๊ฐ ์ธ๊ณ์์ ์ฌ๋ผ์ง ์ ์์ต๋๋ค. ์กฐ์น๋ฅผ ์ทจํ๊ธฐ ์ ์ Exists(serial)๋ฅผ ํ์ธํ์ธ์.
- ๋ฐ์ดํฐ๋ ์ด ์คํฌ๋ฆฝํธ์ ๋ง์ง๋ง ์ผ๋ฐ ๊ฒ์์ ์ํฉ๋๋ค. FindType๋ 1โ5 ์ธ์, FindTypeEx, Count/CountEx/CountGround๋ก ๊ฒฐ๊ณผ๋ฅผ ๋ฐ๊ฟ๋๋ค. ์ด ์ค๋ ์ท์ ๋ณ๊ฒฝํ๋ ๋ฐ๋ ๊ณ ๊ธ ํํฐ๋ง๋ ๋ฌธ์ ๋ช ๋ น์ด ํ์ํ์ง ์์ต๋๋ค.
- ์ผ์นํ๋ ํญ๋ชฉ์ด ์๋ ์ ๊ฒ์์์๋ FindItem, FindCount ๋ฐ FindFullQuantity๊ฐ ์ง์์ง๊ณ GetFoundItems๊ฐ ์ง์์ง๋๋ค. ๊ฒฐ๊ณผ๋ฅผ ์ฝ๋ ๊ฒ๋ง์ผ๋ก๋ ์๋ก์ด ๊ฒ์์ด ์คํ๋์ง ์์ต๋๋ค.
๊ฐ ์์ ๋ ๋ณ๋์ ํ์ผ .csx๋ก ์ ์ฅํ๊ณ IDE์์ ์คํํ ์ ์์ต๋๋ค. UO ๊ฐ์ฒด์ ๋๊ธฐ ๊ธฐ๋ฅ์ ํ์ฌ ๊ฒ์ ์ธ์
์ ํธ์คํธ๋ฅผ ์ ๊ณตํฉ๋๋ค. ๋ฐ๋ชจ serial ์ด๋ฆ, ์ขํ, ์ฃผ์๋ฅผ ์์ ์ ๊ฒ์ผ๋ก ๋ฐ๊พธ์ธ์.
์ด ์ฝ๋๋ฅผ ๋ณ๋์ .csx ํ์ผ๋ก ์คํํ์ธ์. ์ธ์๋ ํธ์ถ์ ์ง์ ํ์๋ฉ๋๋ค. ์์ ์ ์ด๋ฆ, serial, ์ฃผ์๋ฅผ ์์ ์ ๊ฐ์ผ๋ก ๋ฐ๊พธ์ธ์.
ํ ๋ฒ์ ํธ์ถ ๊ฒฐ๊ณผ๋ฅผ ์ ๋์ ํ์ํฉ๋๋ค. ์ซ์๋ฅผ bool๋ก ๋ณํํ์ง ์์ผ๋ฉฐ, ๋ฐฐ์ด์ด๋ฉด ์์ ์๋ฅผ ํ์ํฉ๋๋ค.
UO.FindType(0x0EED, -1, "backpack");
object? result = UO.GetFindedList(0);
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));๋งค๊ฐ๋ณ์์ ์คํ ํ๋ฆ:
- ๋ฐฐ๋ญ์ ์๋ ๊ธ์ ์ผ๋ฐ์ ์ธ FindType๋ ๋ฏธ๋ฆฌ ๋ง๋ค์ด์ ธ ์์ต๋๋ค. UserList=0๋ ์ถ๋ ฅ ๋งค๊ฐ๋ณ์๊ฐ ์๋๋๋ค.
- ๊ธธ์ด - ๋ ์ฝ๋ ์/ID. ์ด๊ฒ์ ์คํ์ ์์ด ์๋๋๋ค. ๋น ๋ชฉ๋ก์ 0์ ์ ๊ณตํฉ๋๋ค.
var found = UO.FindType(0x0EED, -1, "backpack");
var items = UO.GetFindedList(0);
UO.Print(Convert.ToString(ArrayLength(items)));
int ArrayLength(object? value) => value is System.Array array ? array.Length : 0;๋งค๊ฐ๋ณ์์ ์คํ ํ๋ฆ:
- ๋ฐฐ๋ญ์ ์๋ ๊ธ์ ์ผ๋ฐ์ ์ธ FindType๋ ๋ฏธ๋ฆฌ ๋ง๋ค์ด์ ธ ์์ต๋๋ค. UserList=0๋ ์ถ๋ ฅ ๋งค๊ฐ๋ณ์๊ฐ ์๋๋๋ค.
- items[i] โ ์ซ์ serial. 16์ง์๋ ์ถ๋ ฅ์๋ง ์ฌ์ฉ๋ฉ๋๋ค. ๋ฃจํ๋ ๋ง์ง๋ง ์ธ๋ฑ์ค์ ์ก์ธ์คํ์ง ์์ต๋๋ค.
return RunScenario();
object? RunScenario()
{
var found = UO.FindType(0x0EED, -1, "backpack");
var items = UO.GetFindedList(0);
var i = 0;
while (Truth(i < ArrayLength(items)))
{
UO.Print("0x" + Hex(items[i]));
i = i + 1;
}
return null;
}
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;๋งค๊ฐ๋ณ์์ ์คํ ํ๋ฆ:
- ๋ฐฐ๋ญ์ ์๋ ๊ธ์ ์ผ๋ฐ์ ์ธ FindType๋ ๋ฏธ๋ฆฌ ๋ง๋ค์ด์ ธ ์์ต๋๋ค. UserList=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 found = UO.FindType(0x0EED, -1, "backpack");
var items = UO.GetFindedList(0);
if (Truth(ArrayLength(items) > 0))
{
var first = items[0];
if (Truth(UO.Exists(first)))
{
UO.Print(UO.GetName(first));
}
}
else
{
UO.Print("Empty list");
}
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์ ์ฌ์ฉํ์ธ์.
๋งค๊ฐ๋ณ์: userList (Any)
๊ฒฐ๊ณผ: dynamic / Any.
ํธ์ถ ์:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetFoundItems:bridge.GetFoundItems().
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
case "getfindedlist":
return new InjectionValue(bridge.GetFoundItems().Select(serial => new InjectionValue(serial)).ToArray());ะฃะบัะฐัะฝััะบะฐ ยท ะ ัััะบะธะน ยท English ยท Deutsch ยท Franรงais ยท Italiano ยท Espaรฑol ยท ็น้ซไธญๆ ยท ๆฅๆฌ่ช ยท ํ๊ตญ์ด
dynamic UO.GetFoundItems();๋ง์ง๋ง ์ผ๋ฐ ๊ฒ์ ๋ชฉ๋ก ID์ ๋ณต์ฌ๋ณธ์ ๋ง๋ญ๋๋ค.
๋งค๊ฐ๋ณ์๊ฐ ์์ต๋๋ค.
๋ฐฐ์ด์ ๋ง์ง๋ง ๊ฒ์ ์์์์ ๋ณ๋์ ๋ฐฐ์ด serial/ID์ ๋๋ค. ์ผ์นํ๋ ํญ๋ชฉ์ด ์์ผ๋ฉด ๋น ๋ฐฐ์ด์ ๋๋ค. graphic, hue ๋๋ ๊ธ์ก์ ํฌํจํ์ง ์์ต๋๋ค. ๋ฐํ๋ ๋ฐฐ์ด์ ๋ณ๊ฒฝํด๋ ์ ์ฅ๋ ๊ฒ์ ๋ชฉ๋ก์ ํธ์ง๋์ง ์์ต๋๋ค.
- ํด๋ผ์ด์ธํธ๊ฐ ์ด๋ฏธ ๋ค์ด๋ก๋ํ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ต๋๋ค. ์ด ๋ช ๋ น์ ์ ์ฒด ์๋ฒ์์ ์ปจํ ์ด๋๋ฅผ ์ด๊ฑฐ๋ ํญ๋ชฉ์ ์ด๋ํ๊ฑฐ๋ ๊ฐ์ฒด๋ฅผ ๋ค์ด๋ก๋ํ์ง ์์ต๋๋ค.
- ๋ฐฐ์ด - 0๋ถํฐ ์์ํ๋ ์ธ๋ฑ์ค๊ฐ ์๋ ๋ฐฐ์ด์ ๋๋ค. var์ ์ ์ฅํ๊ณ , ArrayLength๋ฅผ ํ์ธํ ํ ์ ์ํ์ธ์. ์ค๋ ์ท์ ์ฐ์ ํ ์์๊ฐ ์ธ๊ณ์์ ์ฌ๋ผ์ง ์ ์์ต๋๋ค. ์กฐ์น๋ฅผ ์ทจํ๊ธฐ ์ ์ Exists(serial)๋ฅผ ํ์ธํ์ธ์.
- ๋ฐ์ดํฐ๋ ์ด ์คํฌ๋ฆฝํธ์ ๋ง์ง๋ง ์ผ๋ฐ ๊ฒ์์ ์ํฉ๋๋ค. FindType๋ 1โ5 ์ธ์, FindTypeEx, Count/CountEx/CountGround๋ก ๊ฒฐ๊ณผ๋ฅผ ๋ฐ๊ฟ๋๋ค. ์ด ์ค๋ ์ท์ ๋ณ๊ฒฝํ๋ ๋ฐ๋ ๊ณ ๊ธ ํํฐ๋ง๋ ๋ฌธ์ ๋ช ๋ น์ด ํ์ํ์ง ์์ต๋๋ค.
- ์ผ์นํ๋ ํญ๋ชฉ์ด ์๋ ์ ๊ฒ์์์๋ FindItem, FindCount ๋ฐ FindFullQuantity๊ฐ ์ง์์ง๊ณ GetFoundItems๊ฐ ์ง์์ง๋๋ค. ๊ฒฐ๊ณผ๋ฅผ ์ฝ๋ ๊ฒ๋ง์ผ๋ก๋ ์๋ก์ด ๊ฒ์์ด ์คํ๋์ง ์์ต๋๋ค.
๊ฐ ์์ ๋ ๋ณ๋์ ํ์ผ .csx๋ก ์ ์ฅํ๊ณ IDE์์ ์คํํ ์ ์์ต๋๋ค. UO ๊ฐ์ฒด์ ๋๊ธฐ ๊ธฐ๋ฅ์ ํ์ฌ ๊ฒ์ ์ธ์
์ ํธ์คํธ๋ฅผ ์ ๊ณตํฉ๋๋ค. ๋ฐ๋ชจ serial ์ด๋ฆ, ์ขํ, ์ฃผ์๋ฅผ ์์ ์ ๊ฒ์ผ๋ก ๋ฐ๊พธ์ธ์.
์ด ์ฝ๋๋ฅผ ๋ณ๋์ .csx ํ์ผ๋ก ์คํํ์ธ์. ์ธ์๋ ํธ์ถ์ ์ง์ ํ์๋ฉ๋๋ค. ์์ ์ ์ด๋ฆ, serial, ์ฃผ์๋ฅผ ์์ ์ ๊ฐ์ผ๋ก ๋ฐ๊พธ์ธ์.
ํ ๋ฒ์ ํธ์ถ ๊ฒฐ๊ณผ๋ฅผ ์ ๋์ ํ์ํฉ๋๋ค. ์ซ์๋ฅผ bool๋ก ๋ณํํ์ง ์์ผ๋ฉฐ, ๋ฐฐ์ด์ด๋ฉด ์์ ์๋ฅผ ํ์ํฉ๋๋ค.
UO.FindType(0x0EED, -1, "backpack");
object? result = UO.GetFoundItems();
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));๋งค๊ฐ๋ณ์์ ์คํ ํ๋ฆ:
- ๋ฐฐ๋ญ์ ์๋ ๊ธ์ ์ผ๋ฐ์ ์ธ FindType๋ ๋ฏธ๋ฆฌ ๋ง๋ค์ด์ ธ ์์ต๋๋ค. ๋งค๊ฐ๋ณ์๊ฐ ์์ต๋๋ค.
- ๊ธธ์ด - ๋ ์ฝ๋ ์/ID. ์ด๊ฒ์ ์คํ์ ์์ด ์๋๋๋ค. ๋น ๋ชฉ๋ก์ 0์ ์ ๊ณตํฉ๋๋ค.
var found = UO.FindType(0x0EED, -1, "backpack");
var items = UO.GetFoundItems();
UO.Print(Convert.ToString(ArrayLength(items)));
int ArrayLength(object? value) => value is System.Array array ? array.Length : 0;๋งค๊ฐ๋ณ์์ ์คํ ํ๋ฆ:
- ๋ฐฐ๋ญ์ ์๋ ๊ธ์ ์ผ๋ฐ์ ์ธ FindType๋ ๋ฏธ๋ฆฌ ๋ง๋ค์ด์ ธ ์์ต๋๋ค. ๋งค๊ฐ๋ณ์๊ฐ ์์ต๋๋ค.
- items[i] โ ์ซ์ serial. 16์ง์๋ ์ถ๋ ฅ์๋ง ์ฌ์ฉ๋ฉ๋๋ค. ๋ฃจํ๋ ๋ง์ง๋ง ์ธ๋ฑ์ค์ ์ก์ธ์คํ์ง ์์ต๋๋ค.
return RunScenario();
object? RunScenario()
{
var found = UO.FindType(0x0EED, -1, "backpack");
var items = UO.GetFoundItems();
var i = 0;
while (Truth(i < ArrayLength(items)))
{
UO.Print("0x" + Hex(items[i]));
i = i + 1;
}
return null;
}
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;๋งค๊ฐ๋ณ์์ ์คํ ํ๋ฆ:
- ๋ฐฐ๋ญ์ ์๋ ๊ธ์ ์ผ๋ฐ์ ์ธ FindType๋ ๋ฏธ๋ฆฌ ๋ง๋ค์ด์ ธ ์์ต๋๋ค. ๋งค๊ฐ๋ณ์๊ฐ ์์ต๋๋ค.
- ๋ ๊ฐ์ง ๋ค๋ฅธ ์ฌํญ, ์ฆ ์ค๋ ์ท์ ๊ธฐ๋ก๊ณผ ํ์ฌ ๊ฐ์ฒด์ ์กด์ฌ ์ฌ๋ถ๋ฅผ ํ์ธํฉ๋๋ค. ๋ช ์์ ์ธ ์ ๋ ฌ์ด ์๋ ์์๋ ์น๋ฐํจ์ ์๋ฏธํ์ง ์์ต๋๋ค.
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 found = UO.FindType(0x0EED, -1, "backpack");
var items = UO.GetFoundItems();
if (Truth(ArrayLength(items) > 0))
{
var first = items[0];
if (Truth(UO.Exists(first)))
{
UO.Print(UO.GetName(first));
}
}
else
{
UO.Print("Empty list");
}
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์ ์ฌ์ฉํ์ธ์.
๋งค๊ฐ๋ณ์: ๋งค๊ฐ๋ณ์๊ฐ ์์ต๋๋ค.
๊ฒฐ๊ณผ: dynamic / Any.
ํธ์ถ ์:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetFoundItems:bridge.GetFoundItems().
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
case "getfounditems":
return new InjectionValue(bridge.GetFoundItems().Select(serial => new InjectionValue(serial)).ToArray());ะฃะบัะฐัะฝััะบะฐ ยท ะ ัััะบะธะน ยท English ยท Deutsch ยท Franรงais ยท Italiano ยท Espaรฑol ยท ็น้ซไธญๆ ยท ๆฅๆฌ่ช ยท ํ๊ตญ์ด
dynamic UO.GetIgnoreList();Ignore๋ฅผ ํตํด serial ํํฐ์ ์ถ๊ฐ๋ ํน์ ID์ ๋ณด์ฌ์ค๋๋ค. ์ด๋ฏธ ์ฒ๋ฆฌ๋์ด ์ฌ๊ฒ์์์ ์ ์ธ๋ ํญ๋ชฉ์ ํ์ธํ๋๋ฐ ๋์์ด ๋ฉ๋๋ค. AddIgnoreList์ ๋ช ๋ช ๋ ๊ท์น type/hue์ ์ด ๋ฐฐ์ด์ ํฌํจ๋์ง ์์ต๋๋ค.
๋งค๊ฐ๋ณ์๊ฐ ์์ต๋๋ค.
๋ฐฐ์ด - Ignore ๋ชฉ๋ก์ serial(์ซ์ ID์ ์ค๋ฆ์ฐจ์). ๋ชฉ๋ก์ด ๋น์ด ์์ผ๋ฉด ๋ฐฐ์ด์ด ๋น์ด ์์ต๋๋ค. ID์ ์ธ์์ ๋ ์ด์ ์กด์ฌํ์ง ์์ ์๋ ์์ต๋๋ค. ์ด๋ ํ์๋๋ ํญ๋ชฉ ๋ชฉ๋ก์ด ์๋ ๊ฒ์ ๊ท์น์ ๋๋ค.
- ํด๋ผ์ด์ธํธ๊ฐ ์ด๋ฏธ ๋ค์ด๋ก๋ํ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ต๋๋ค. ์ด ๋ช ๋ น์ ์ ์ฒด ์๋ฒ์์ ์ปจํ ์ด๋๋ฅผ ์ด๊ฑฐ๋ ํญ๋ชฉ์ ์ด๋ํ๊ฑฐ๋ ๊ฐ์ฒด๋ฅผ ๋ค์ด๋ก๋ํ์ง ์์ต๋๋ค.
- ๋ฐฐ์ด - 0๋ถํฐ ์์ํ๋ ์ธ๋ฑ์ค๊ฐ ์๋ ๋ฐฐ์ด์ ๋๋ค. var์ ์ ์ฅํ๊ณ , ArrayLength๋ฅผ ํ์ธํ ํ ์ ์ํ์ธ์. ์ค๋ ์ท์ ์ฐ์ ํ ์์๊ฐ ์ธ๊ณ์์ ์ฌ๋ผ์ง ์ ์์ต๋๋ค. ์กฐ์น๋ฅผ ์ทจํ๊ธฐ ์ ์ Exists(serial)๋ฅผ ํ์ธํ์ธ์.
- ํด๋ผ์ด์ธํธ์์ ์ธํธ๋ ํ๋กํ ์คํฌ๋ฆฝํธ์ ์ผ๋ฐ ์ํ์ ์ํฉ๋๋ค. ๋ฐฐ์ด์ ๋ณต์ฌ๋ณธ์ ๋๋ค. IgnoreOff(serial)๋ ํ๋์ ์์ธ๋ฅผ ์ง์ฐ๊ณ , IgnoreReset๋ ๋ชจ๋ serial๋ฅผ ์ง์๋๋ค. ์ ํํ ๊ท์น type/hue์ ๋นํ์ฑํ๋์ง ์์ต๋๋ค. SelectIgnoreList, DeleteIgnoreList ๋๋ ClearIgnoreList๊ฐ ํ์ํฉ๋๋ค. ์ธ์๊ฐ ์๋ GetContent/GetEquipment ๋ฐ GetWorldItems์๋ ์ด ํํฐ ์์ฒด๊ฐ ์ ์ฉ๋์ง ์์ต๋๋ค.
๊ฐ ์์ ๋ ๋ณ๋์ ํ์ผ .csx๋ก ์ ์ฅํ๊ณ IDE์์ ์คํํ ์ ์์ต๋๋ค. UO ๊ฐ์ฒด์ ๋๊ธฐ ๊ธฐ๋ฅ์ ํ์ฌ ๊ฒ์ ์ธ์
์ ํธ์คํธ๋ฅผ ์ ๊ณตํฉ๋๋ค. ๋ฐ๋ชจ serial ์ด๋ฆ, ์ขํ, ์ฃผ์๋ฅผ ์์ ์ ๊ฒ์ผ๋ก ๋ฐ๊พธ์ธ์.
์ด ์ฝ๋๋ฅผ ๋ณ๋์ .csx ํ์ผ๋ก ์คํํ์ธ์. ์ธ์๋ ํธ์ถ์ ์ง์ ํ์๋ฉ๋๋ค. ์์ ์ ์ด๋ฆ, serial, ์ฃผ์๋ฅผ ์์ ์ ๊ฐ์ผ๋ก ๋ฐ๊พธ์ธ์.
ํ ๋ฒ์ ํธ์ถ ๊ฒฐ๊ณผ๋ฅผ ์ ๋์ ํ์ํฉ๋๋ค. ์ซ์๋ฅผ bool๋ก ๋ณํํ์ง ์์ผ๋ฉฐ, ๋ฐฐ์ด์ด๋ฉด ์์ ์๋ฅผ ํ์ํฉ๋๋ค.
object? result = UO.GetIgnoreList();
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));๋งค๊ฐ๋ณ์์ ์คํ ํ๋ฆ:
- ๋งค๊ฐ๋ณ์๊ฐ ์์ต๋๋ค. ๋ช ๋ฐฑํ serial ์์ธ์ ์ค๋ ์ท์ ์ฝ์ต๋๋ค. ๋น ๋ฐฐ์ด์ด ๋ช ๋ช ๋ ๊ท์น type/hue์ด ๋๋ฝ๋์์์ ์๋ฏธํ์ง๋ ์์ต๋๋ค.
- ๊ธธ์ด - ๋ ์ฝ๋ ์/ID. ์ด๊ฒ์ ์คํ์ ์์ด ์๋๋๋ค. ๋น ๋ชฉ๋ก์ 0์ ์ ๊ณตํฉ๋๋ค.
var items = UO.GetIgnoreList();
UO.Print(Convert.ToString(ArrayLength(items)));
int ArrayLength(object? value) => value is System.Array array ? array.Length : 0;๋งค๊ฐ๋ณ์์ ์คํ ํ๋ฆ:
- ๋งค๊ฐ๋ณ์๊ฐ ์์ต๋๋ค. ๋ช ๋ฐฑํ serial ์์ธ์ ์ค๋ ์ท์ ์ฝ์ต๋๋ค. ๋น ๋ฐฐ์ด์ด ๋ช ๋ช ๋ ๊ท์น type/hue์ด ๋๋ฝ๋์์์ ์๋ฏธํ์ง๋ ์์ต๋๋ค.
- items[i] โ ์ซ์ serial. 16์ง์๋ ์ถ๋ ฅ์๋ง ์ฌ์ฉ๋ฉ๋๋ค. ๋ฃจํ๋ ๋ง์ง๋ง ์ธ๋ฑ์ค์ ์ก์ธ์คํ์ง ์์ต๋๋ค.
return RunScenario();
object? RunScenario()
{
var items = UO.GetIgnoreList();
var i = 0;
while (Truth(i < ArrayLength(items)))
{
UO.Print("0x" + Hex(items[i]));
i = i + 1;
}
return null;
}
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;๋งค๊ฐ๋ณ์์ ์คํ ํ๋ฆ:
- ๋งค๊ฐ๋ณ์๊ฐ ์์ต๋๋ค. ๋ช ๋ฐฑํ serial ์์ธ์ ์ค๋ ์ท์ ์ฝ์ต๋๋ค. ๋น ๋ฐฐ์ด์ด ๋ช ๋ช ๋ ๊ท์น type/hue์ด ๋๋ฝ๋์์์ ์๋ฏธํ์ง๋ ์์ต๋๋ค.
- ๋ ๊ฐ์ง ๋ค๋ฅธ ์ฌํญ, ์ฆ ์ค๋ ์ท์ ๊ธฐ๋ก๊ณผ ํ์ฌ ๊ฐ์ฒด์ ์กด์ฌ ์ฌ๋ถ๋ฅผ ํ์ธํฉ๋๋ค. ๋ช ์์ ์ธ ์ ๋ ฌ์ด ์๋ ์์๋ ์น๋ฐํจ์ ์๋ฏธํ์ง ์์ต๋๋ค.
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 items = UO.GetIgnoreList();
if (Truth(ArrayLength(items) > 0))
{
var first = items[0];
if (Truth(UO.Exists(first)))
{
UO.Print(UO.GetName(first));
}
}
else
{
UO.Print("Empty list");
}
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์ ์ฌ์ฉํ์ธ์.
๋งค๊ฐ๋ณ์: ๋งค๊ฐ๋ณ์๊ฐ ์์ต๋๋ค.
๊ฒฐ๊ณผ: dynamic / Any.
ํธ์ถ ์:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetIgnoreList:bridge.GetIgnoreList().
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
case "getignorelist":
return new InjectionValue(bridge.GetIgnoreList().Select(value => new InjectionValue(value)).ToArray());ะฃะบัะฐัะฝััะบะฐ ยท ะ ัััะบะธะน ยท English ยท Deutsch ยท Franรงais ยท Italiano ยท Espaรฑol ยท ็น้ซไธญๆ ยท ๆฅๆฌ่ช ยท ํ๊ตญ์ด
dynamic UO.GetWorldItems();
dynamic UO.GetWorldItems(object? @type);
dynamic UO.GetWorldItems(object? @type, object? color);
dynamic UO.GetWorldItems(object? @type, object? color, object? distance);
dynamic UO.GetWorldItems(object? @type, object? color, object? distance, object? container);
dynamic UO.GetWorldItems(object? @type, object? color, object? distance, object? container, object? nearest);
dynamic UO.GetWorldItems(object? @type, object? color, object? distance, object? container, object? nearest, object? maxZ);์๋ ์์ดํ ๋๋ ์ ํํ ์ปจํ ์ด๋์ ๋ฐฐ์ด ID์ ๋ฐํํฉ๋๋ค.
-
type- ํํฐ๋ง๋ ํ์์ ์ฒซ ๋ฒ์งธ ์ธ์: graphic/type, -1 ๋๋ 0xFFFF - ๋ชจ๋. ์ด๊ฒ์ serial๊ฐ ์๋๋๋ค. ๋ชจ๋ ์ธ์๊ฐ ์์ผ๋ฉด ํํฐ๋งํ์ง ์๊ณ ๋ณ๋์ ํ์์ ์ฌ์ฉํฉ๋๋ค. -
color- ์์กฐ; ๊ธฐ๋ณธ๊ฐ - 1, ๋ชจ๋ ์์. 0xFFFF๋ hue๋ ํ์ฉํฉ๋๋ค. -
distanceโ X/Y๋ฅผ ๋ฐ๋ผ ์๋ ์ ์ ๋ฐ๊ฒฝ์ ๋๋ค. ์์ ๋๋ ๋ถ์ฌ ์ฌ์ฉ FindDistance; 0๋ ๋์ผํ ์ ์ ์๋ฏธํฉ๋๋ค. ์ปจํ ์ด๋์ ๊ฒฝ์ฐ ๋ด๋ถ X/Y๊ฐ ์๋ ์ปจํ ์ด๋๊น์ง์ ๊ฑฐ๋ฆฌ๊ฐ ํ์ธ๋ฉ๋๋ค. -
container- ๊ธฐ๋ณธ์ ์ ์ง์ ๋๋ค. ground, ์ซ์ 0/1 ๋ฐ ํด๋น ๋ฌธ์์ด์ ์ ์ง๋์ด ์์ต๋๋ค. backpack, my ๋ฐ ์ซ์ -1๋ ๋ฐฐ๋ญ์ ์ง์ ์ ์ธ ๋ด์ฉ์ ๋๋ค. ์ปจํ ์ด๋์ ์ผ๋ จ๋ฒํธ/16์ง์ ๋ฌธ์์ด/๋ณ์นญ - ์ง์ ์ ์ธ ๋ด์ฉ์ ๋๋ค. self๋ ๋ถ๋ชจ๊ฐ ์บ๋ฆญํฐ์ธ ํญ๋ชฉ์ ์ ํํฉ๋๋ค. ์ ์ ์๋ ์ด๋ฆ๊ณผ ์ฌ๋ผ์ง ๋ฐฐ๋ญ์ ๋ ์ด ์๋ ๋น ๋ฐฐ์ด์ ์ ๊ณตํฉ๋๋ค. -
nearestโ ๊ธฐ๋ณธ๊ฐ false. true๋ ๊ฑฐ๋ฆฌ๋ฅผ ๊ธฐ์ค์ผ๋ก ์ ๋ ฌํ ๋ค์ ์ซ์ serial๋ฅผ ๊ธฐ์ค์ผ๋ก ์ ๋ ฌํฉ๋๋ค. ํ๋์ ์ปจํ ์ด๋์ ๋ํด ๋ชจ๋ ๊ฒฐ๊ณผ์ ๊ฑฐ๋ฆฌ๋ ๋์ผํฉ๋๋ค. -
maxZโ self๋ฅผ ๊ธฐ์ค์ผ๋ก ํ์ฉ๋๋ ๋์ด ์ฐจ์ด. ์์ ๋๋ ๋ถ์ฌ ์ฌ์ฉ FindVertical; 0์๋ ๋์ผํ ๋์ด๊ฐ ํ์ํฉ๋๋ค. ์ปจํ ์ด๋์์๋ ์ปจํ ์ด๋ ์์ฒด์ ๋์ด๋ฅผ ์ฌ์ฉํฉ๋๋ค.
๋ฐฐ์ด - serial/ID ํญ๋ชฉ(type ์๋, ์ขํ ๋๋ ์). ์ผ์นํ๋ ํญ๋ชฉ์ด ์๋ ๋น ๋ฐฐ์ด์ ๋๋ค. GetWorldItems()๋ Ignore/๋ฒ์/๋์ด ์์ด ์ปจํ ์ด๋ ์ธ๋ถ์ ๋ก๋๋ ๋ชจ๋ ํญ๋ชฉ์ ๋ฐํํฉ๋๋ค. GetWorldItems(type,...)๋ ๋์ด๋ ํํฐ์ Ignore๋ฅผ ์ฌ์ฉํฉ๋๋ค. NPC/players๋ ์ด๋ค ํํ๋ก๋ ํฌํจ๋์ง ์์ต๋๋ค.
- ํด๋ผ์ด์ธํธ๊ฐ ์ด๋ฏธ ๋ค์ด๋ก๋ํ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ต๋๋ค. ์ด ๋ช ๋ น์ ์ ์ฒด ์๋ฒ์์ ์ปจํ ์ด๋๋ฅผ ์ด๊ฑฐ๋ ํญ๋ชฉ์ ์ด๋ํ๊ฑฐ๋ ๊ฐ์ฒด๋ฅผ ๋ค์ด๋ก๋ํ์ง ์์ต๋๋ค.
- ๋ฐฐ์ด - 0๋ถํฐ ์์ํ๋ ์ธ๋ฑ์ค๊ฐ ์๋ ๋ฐฐ์ด์ ๋๋ค. var์ ์ ์ฅํ๊ณ , ArrayLength๋ฅผ ํ์ธํ ํ ์ ์ํ์ธ์. ์ค๋ ์ท์ ์ฐ์ ํ ์์๊ฐ ์ธ๊ณ์์ ์ฌ๋ผ์ง ์ ์์ต๋๋ค. ์กฐ์น๋ฅผ ์ทจํ๊ธฐ ์ ์ Exists(serial)๋ฅผ ํ์ธํ์ธ์.
- ์ฌ์ง FindItem/FindCount/GetFoundItems๋ ๋ณ๊ฒฝ๋์ง ์์ต๋๋ค. ํ์ ์ฉ๊ธฐ๋ฅผ ๊ฐ๋ดํ๊ฑฐ๋ ๋๋ด๋ ๊ฐ๋ฐฉ์ ํต๊ณผํ์ง ์์ต๋๋ค.
- ์ ํ์ ๋นํ์ฑํํ๋ ค๋ฉด -1๋ง์ผ๋ก๋ ์ถฉ๋ถํ์ง ์์ต๋๋ค. ์ด๋ ๋ฌดํ ๋ฐ๊ฒฝ์ด ์๋ ํ์ฌ ์ค์ ์ ์ ํ์ ๋๋ค. ์ํ๋ ์์๊ฐ ์๋ ๊ฑฐ๋ฆฌ/maxZ๋ฅผ ์ง์ ํ๊ฑฐ๋ ๋ก๋๋ ๋ชจ๋ ํ ์ง ํญ๋ชฉ์ ๋ํด ์ธ์ ์์ด ์์์ ์ฌ์ฉํ์ญ์์ค.
๊ฐ ์์ ๋ ๋ณ๋์ ํ์ผ .csx๋ก ์ ์ฅํ๊ณ IDE์์ ์คํํ ์ ์์ต๋๋ค. UO ๊ฐ์ฒด์ ๋๊ธฐ ๊ธฐ๋ฅ์ ํ์ฌ ๊ฒ์ ์ธ์
์ ํธ์คํธ๋ฅผ ์ ๊ณตํฉ๋๋ค. ๋ฐ๋ชจ serial ์ด๋ฆ, ์ขํ, ์ฃผ์๋ฅผ ์์ ์ ๊ฒ์ผ๋ก ๋ฐ๊พธ์ธ์.
์ด ์ฝ๋๋ฅผ ๋ณ๋์ .csx ํ์ผ๋ก ์คํํ์ธ์. ์ธ์๋ ํธ์ถ์ ์ง์ ํ์๋ฉ๋๋ค. ์์ ์ ์ด๋ฆ, serial, ์ฃผ์๋ฅผ ์์ ์ ๊ฐ์ผ๋ก ๋ฐ๊พธ์ธ์.
ํ ๋ฒ์ ํธ์ถ ๊ฒฐ๊ณผ๋ฅผ ์ ๋์ ํ์ํฉ๋๋ค. ์ซ์๋ฅผ bool๋ก ๋ณํํ์ง ์์ผ๋ฉฐ, ๋ฐฐ์ด์ด๋ฉด ์์ ์๋ฅผ ํ์ํฉ๋๋ค.
object? result = UO.GetWorldItems();
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));๋งค๊ฐ๋ณ์์ ์คํ ํ๋ฆ:
- ๋งค๊ฐ๋ณ์ ์์: ํํฐ๊ฐ ์๋ ํน์ ํ์์ ๋๋ค.
- ๊ฒฐ๊ณผ๊ฐ ๋ชจ๋ ๋งต์ด๋ ์๋ฒ ํญ๋ชฉ์ ์๋ฏธํ๋ ๊ฒ์ ์๋๋๋ค. Ignore๋ ์ฌ๊ธฐ์ ์ ์ฉ๋์ง ์์ต๋๋ค.
var items = UO.GetWorldItems();
UO.Print(Convert.ToString(ArrayLength(items)));
int ArrayLength(object? value) => value is System.Array array ? array.Length : 0;๋งค๊ฐ๋ณ์์ ์คํ ํ๋ฆ:
- type=0x0EED โ ๊ธ์, ์์=-1 โ ๋ชจ๋; ๊ฑฐ๋ฆฌ=5, ์ปจํ ์ด๋=ground, ๊ฐ์ฅ ๊ฐ๊น์ด=true, maxZ=3.
- ์ฒซ ๋ฒ์งธ ํญ๋ชฉ์ ๊ฐ์ฅ ๊ฐ๊น์ด ๋ฌด์ํ ์ ์๋ ํญ๋ชฉ์ ๋๋ค. ๊ฑฐ๋ฆฌ๋ ๋ฒฝ์ ํ์ธํ๊ฑฐ๋ ์ ๊ทผ์ฑ์ ์ ๋ฌํ์ง ์์ต๋๋ค.
return RunScenario();
object? RunScenario()
{
var items = UO.GetWorldItems(0x0EED, -1, 5, "ground", true, 3);
if (Truth(ArrayLength(items) > 0))
{
var item = items[0];
if (Truth(UO.Exists(item)))
{
UO.Print("Nearest ID: 0x" + Hex(item));
}
}
return null;
}
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;๋งค๊ฐ๋ณ์์ ์คํ ํ๋ฆ:
- ๋ชจ๋ type/์์; my์ ๋ฐฐ๋ญ์ ์ ํํฉ๋๋ค. ๊ฑฐ๋ฆฌ 20์ ์ฐจ์ด Z 255๋ ์ปจํ ์ด๋๋ฅผ ๋ํ๋ ๋๋ค. false๋ ์๋ ์์๋ฅผ ์ ์งํฉ๋๋ค.
- ์คํ์ ์๋ ๋จ์๋ ์ค์ฒฉ๋ ๊ฐ๋ฐฉ์ ๋ด์ฉ๋ฌผ์ด ์๋ ์ง์ ํ๋ชฉ์ด ๊ณ์ฐ๋ฉ๋๋ค. ๋ฐฐ๋ญ์ด ์์ผ๋ฉด ๋น ๋ฐฐ์ด์ด ๋ฐํ๋ฉ๋๋ค.
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 items = UO.GetWorldItems(-1, -1, 20, "my", false, 255);
UO.Print(Convert.ToString(ArrayLength(items)));
return null;
}
int ArrayLength(object? value) => value is System.Array array ? array.Length : 0;
}C#์ ๋์๋ฌธ์๋ฅผ ๊ตฌ๋ถํฉ๋๋ค. ์ ํํ UO ์ด๋ฆ์ ์ฌ์ฉํ์ธ์. ์ซ์ ํ๋๊ทธ๋ 0๊ณผ ๋น๊ตํ๊ณ ๋ฐํ ํ์์ด bool์ผ ๋๋ง bool์ ์ฌ์ฉํ์ธ์.
๋งค๊ฐ๋ณ์: ๋งค๊ฐ๋ณ์๊ฐ ์์ต๋๋ค.
๊ฒฐ๊ณผ: dynamic / Any.
ํธ์ถ ์:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetWorldItems:bridge.GetWorldItems().
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
case "getworlditems":
return new InjectionValue(bridge.GetWorldItems().Select(serial => new InjectionValue(serial)).ToArray());๋งค๊ฐ๋ณ์: type (Any)
๊ฒฐ๊ณผ: dynamic / Any.
ํธ์ถ ์:
-
InjectionScript.Runtime.InjectionApiUO.RegisterCompactSearchApi [GetWorldItems]. -
InjectionScript.Runtime.InjectionApiUO.CompactGetWorldItems:CompactGetWorldItems(values).
ํธ์ถ ์ ์ ์ฅ๋ ์ฒ๋ฆฌ๊ธฐ delegate๋ฅผ ์คํํฉ๋๋ค. ๋ฑ๋ก ๋ฉ์๋๋ API๋ฅผ ๊ตฌ์ฑํ ๋ ์ด delegate๋ฅผ ๋ง๋ญ๋๋ค.
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
values => CompactGetWorldItems(values)๋งค๊ฐ๋ณ์: type (Any), color (Any)
๊ฒฐ๊ณผ: dynamic / Any.
ํธ์ถ ์:
-
InjectionScript.Runtime.InjectionApiUO.RegisterCompactSearchApi [GetWorldItems]. -
InjectionScript.Runtime.InjectionApiUO.CompactGetWorldItems:CompactGetWorldItems(values).
ํธ์ถ ์ ์ ์ฅ๋ ์ฒ๋ฆฌ๊ธฐ delegate๋ฅผ ์คํํฉ๋๋ค. ๋ฑ๋ก ๋ฉ์๋๋ API๋ฅผ ๊ตฌ์ฑํ ๋ ์ด delegate๋ฅผ ๋ง๋ญ๋๋ค.
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
values => CompactGetWorldItems(values)๋งค๊ฐ๋ณ์: type (Any), color (Any), distance (Any)
๊ฒฐ๊ณผ: dynamic / Any.
ํธ์ถ ์:
-
InjectionScript.Runtime.InjectionApiUO.RegisterCompactSearchApi [GetWorldItems]. -
InjectionScript.Runtime.InjectionApiUO.CompactGetWorldItems:CompactGetWorldItems(values).
ํธ์ถ ์ ์ ์ฅ๋ ์ฒ๋ฆฌ๊ธฐ delegate๋ฅผ ์คํํฉ๋๋ค. ๋ฑ๋ก ๋ฉ์๋๋ API๋ฅผ ๊ตฌ์ฑํ ๋ ์ด delegate๋ฅผ ๋ง๋ญ๋๋ค.
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
values => CompactGetWorldItems(values)๋งค๊ฐ๋ณ์: type (Any), color (Any), distance (Any), container (Any)
๊ฒฐ๊ณผ: dynamic / Any.
ํธ์ถ ์:
-
InjectionScript.Runtime.InjectionApiUO.RegisterCompactSearchApi [GetWorldItems]. -
InjectionScript.Runtime.InjectionApiUO.CompactGetWorldItems:CompactGetWorldItems(values).
ํธ์ถ ์ ์ ์ฅ๋ ์ฒ๋ฆฌ๊ธฐ delegate๋ฅผ ์คํํฉ๋๋ค. ๋ฑ๋ก ๋ฉ์๋๋ API๋ฅผ ๊ตฌ์ฑํ ๋ ์ด delegate๋ฅผ ๋ง๋ญ๋๋ค.
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
values => CompactGetWorldItems(values)
UO.GetWorldItems(type, color, distance, container, nearest) โ UO.GetWorldItems(Any,Any,Any,Any,Any)
๋งค๊ฐ๋ณ์: type (Any), color (Any), distance (Any), container (Any), nearest (Any)
๊ฒฐ๊ณผ: dynamic / Any.
ํธ์ถ ์:
-
InjectionScript.Runtime.InjectionApiUO.RegisterCompactSearchApi [GetWorldItems]. -
InjectionScript.Runtime.InjectionApiUO.CompactGetWorldItems:CompactGetWorldItems(values).
ํธ์ถ ์ ์ ์ฅ๋ ์ฒ๋ฆฌ๊ธฐ delegate๋ฅผ ์คํํฉ๋๋ค. ๋ฑ๋ก ๋ฉ์๋๋ API๋ฅผ ๊ตฌ์ฑํ ๋ ์ด delegate๋ฅผ ๋ง๋ญ๋๋ค.
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
values => CompactGetWorldItems(values)
UO.GetWorldItems(type, color, distance, container, nearest, maxZ) โ UO.GetWorldItems(Any,Any,Any,Any,Any,Any)
๋งค๊ฐ๋ณ์: type (Any), color (Any), distance (Any), container (Any), nearest (Any), maxZ (Any)
๊ฒฐ๊ณผ: dynamic / Any.
ํธ์ถ ์:
-
InjectionScript.Runtime.InjectionApiUO.RegisterCompactSearchApi [GetWorldItems]. -
InjectionScript.Runtime.InjectionApiUO.CompactGetWorldItems:CompactGetWorldItems(values).
ํธ์ถ ์ ์ ์ฅ๋ ์ฒ๋ฆฌ๊ธฐ delegate๋ฅผ ์คํํฉ๋๋ค. ๋ฑ๋ก ๋ฉ์๋๋ API๋ฅผ ๊ตฌ์ฑํ ๋ ์ด delegate๋ฅผ ๋ง๋ญ๋๋ค.
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
values => CompactGetWorldItems(values)ะฃะบัะฐัะฝััะบะฐ ยท ะ ัััะบะธะน ยท English ยท Deutsch ยท Franรงais ยท Italiano ยท Espaรฑol ยท ็น้ซไธญๆ ยท ๆฅๆฌ่ช ยท ํ๊ตญ์ด
void UO.Ignore(object? objID);
void UO.Ignore(object? id, object? stateValue);์ผ๋ฐ ๊ฒ์ ๋ฌด์ ๋ชฉ๋ก์์ serial๋ฅผ ์ถ๊ฐํ๊ฑฐ๋ ์ ๊ฑฐํฉ๋๋ค.
-
idโ ์ง๋ ฌ/ID ๊ฐ์ฒด: int, ์ซ์/16์ง์ ๋ฌธ์์ด ๋๋ ์ค์ ๋ ๋ณ์นญ(์: "lasttarget"). ์ด๊ฒ์ graphic/type๊ฐ ์๋๋๋ค. ์กฐ์น๋ฅผ ์ทจํ๊ธฐ ์ ์ ๋ก๋๋ ๊ฐ์ฒด๋ฅผ ํ์ธํ์ญ์์ค. -
objIDโ ์ง๋ ฌ/ID ๊ฐ์ฒด: int, ์ซ์/16์ง์ ๋ฌธ์์ด ๋๋ ์ค์ ๋ ๋ณ์นญ(์: "lasttarget"). ์ด๊ฒ์ graphic/type๊ฐ ์๋๋๋ค. ์กฐ์น๋ฅผ ์ทจํ๊ธฐ ์ ์ ๋ก๋๋ ๊ฐ์ฒด๋ฅผ ํ์ธํ์ญ์์ค. -
stateValueโ ์ ํ์ ๋ชจ๋. ์ซ์ 0๊ฐ ๊บผ์ง๊ณ , 0์ด ์๋ ์ซ์๊ฐ ์ผ์ง๋๋ค. "off", "false"(๋์๋ฌธ์ ๊ตฌ๋ถ) ๋ฐ ์ ํํ "0" ์ค์ ๊บผ์ง๋๋ค. ๋ค๋ฅธ ์ค์๋ ๋ค์์ด ํฌํจ๋ฉ๋๋ค. ๋ชจ๋ ์ธ์ ์์ด - ์ถ๊ฐํฉ๋๋ค.
void - ๊ฐ์ด ์์ต๋๋ค. ๋ณ๋์ ํ์ ์ผ๋ก ์ ํํ์ธ์. ์๋ฃ๋ ์๋ฒ์ ์์ ์ ํ์ธํ์ง ์์ต๋๋ค.
- Ignore(id)๋ bridge.Ignore(serial)๋ฅผ ํธ์ถํ์ฌ State.IgnoredSerials์ serial๋ฅผ ์ถ๊ฐํฉ๋๋ค. Ignore(id,stateValue)๋ Ignore ๋๋ Unignore๋ฅผ ์ ํํฉ๋๋ค. ๋น์ด ์์ง ์์ ๋ฌธ์์ด์ ์ฐธ์ผ๋ก ๊ฐ์ฃผ๋ ์ ์์ต๋๋ค. ๋์ด๋ ์ด์ค์ผ์ดํ ๋จ์ด๋ ๋ณ๋๋ก ์ฒ๋ฆฌ๋ฉ๋๋ค.
- ์ด๋ ๊ฐ์ฒด๋ฅผ ์จ๊ธฐ๊ฑฐ๋ ์ญ์ ํ๋ ๊ฒ์ด ์๋ ๊ฒ์ ํํฐ์ ๋๋ค. AddIgnoreList ์ ํ์ ๋ช ๋ช ๋ ํํฐ๋ ๋ณ๋๋ก ์ ์ฅ๋ฉ๋๋ค.
- ์ผ๋ฐ ํด๋ผ์ด์ธํธ ํธ์คํธ์์ ์ด ์ํ ๋ฐ์ดํฐ๋ GetPersistentState ๊ด๋ฆฌ์์์ ๊ฐ์ ธ์ค๋ฉฐ ๋์ผํ ์๋/ํ๋กํ์ ์คํฌ๋ฆฝํธ/์ฑํ /๋งคํฌ๋ก์ ๊ณตํต๋๋ฉฐ ํ๋์ ์คํฌ๋ฆฝํธ์ ์ํ์ง ์์ต๋๋ค. ๋ค๋ฅธ ํ๋ก์ธ์ค ๋๋ ๋ช ๋ฐฑํ ๋ณ๋์ InjectionRuntimeState๊ฐ ๋ค๋ฅธ ์ํ๋ฅผ ๊ฐ์ต๋๋ค. ํ๋กํ์ ๋ก๋/์ญ์ ํ๋ฉด ํ๋กํ์ ๋์ฒดํ ์ ์์ต๋๋ค. ์ ์ฅ๋ serial๋ ์ฌ์ ํ ๋ก๋๋ ์ธ๊ณ์ ๋น๊ตํ์ฌ ํ์ธ๋ฉ๋๋ค.
๊ฐ ์์ ๋ ๋ณ๋์ ํ์ผ .csx๋ก ์ ์ฅํ๊ณ IDE์์ ์คํํ ์ ์์ต๋๋ค. UO ๊ฐ์ฒด์ ๋๊ธฐ ๊ธฐ๋ฅ์ ํ์ฌ ๊ฒ์ ์ธ์
์ ํธ์คํธ๋ฅผ ์ ๊ณตํฉ๋๋ค. ๋ฐ๋ชจ serial ์ด๋ฆ, ์ขํ, ์ฃผ์๋ฅผ ์์ ์ ๊ฒ์ผ๋ก ๋ฐ๊พธ์ธ์.
์ด ์ฝ๋๋ฅผ ๋ณ๋์ .csx ํ์ผ๋ก ์คํํ์ธ์. ์ธ์๋ ํธ์ถ์ ์ง์ ํ์๋ฉ๋๋ค. ์์ ์ ์ด๋ฆ, serial, ์ฃผ์๋ฅผ ์์ ์ ๊ฐ์ผ๋ก ๋ฐ๊พธ์ธ์.
๋ช ๋ น์ ๋ ๋ฆฝ๋ ๋ฌธ์ ๋๋ค. ์์ ๋ฉ์์ง๋ ํธ์ถ ์์์ ๋ํ๋ด๋ฉฐ ์๋ฒ ๋์์ ์๋ฃ๋ฅผ ํ์ธํ์ง ์์ต๋๋ค.
UO.Print("Calling UO.Ignore");
UO.Ignore("lasttarget");๋งค๊ฐ๋ณ์์ ์คํ ํ๋ฆ:
- ์ผ๋ฐ ๊ฒ์ ๋ฌด์ ๋ชฉ๋ก์์ serial๋ฅผ ์ถ๊ฐํ๊ฑฐ๋ ์ ๊ฑฐํฉ๋๋ค.
UO.Ignore("lasttarget");๋งค๊ฐ๋ณ์์ ์คํ ํ๋ฆ:
- Ignore(id)๋ bridge.Ignore(serial)๋ฅผ ํธ์ถํ์ฌ State.IgnoredSerials์ serial๋ฅผ ์ถ๊ฐํฉ๋๋ค. Ignore(id,stateValue)๋ Ignore ๋๋ Unignore๋ฅผ ์ ํํฉ๋๋ค. ๋น์ด ์์ง ์์ ๋ฌธ์์ด์ ์ฐธ์ผ๋ก ๊ฐ์ฃผ๋ ์ ์์ต๋๋ค. ๋์ด๋ ์ด์ค์ผ์ดํ ๋จ์ด๋ ๋ณ๋๋ก ์ฒ๋ฆฌ๋ฉ๋๋ค.
return RunScenario();
object? RunScenario()
{
UO.Ignore("lasttarget", "off");
return null;
}๋งค๊ฐ๋ณ์์ ์คํ ํ๋ฆ:
- ์ด๋ ๊ฐ์ฒด๋ฅผ ์จ๊ธฐ๊ฑฐ๋ ์ญ์ ํ๋ ๊ฒ์ด ์๋ ๊ฒ์ ํํฐ์ ๋๋ค. AddIgnoreList ์ ํ์ ๋ช ๋ช ๋ ํํฐ๋ ๋ณ๋๋ก ์ ์ฅ๋ฉ๋๋ค.
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.GetSerial("lasttarget");
if (Truth(UO.Exists(id)))
{
UO.Ignore(id, 1);
UO.Print(UO.GetIgnoreList());
UO.Ignore(id, 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์ ์ฌ์ฉํ์ธ์.
๋งค๊ฐ๋ณ์: objID (Any/Integer/String)
๊ฒฐ๊ณผ: void / Unit.
ํธ์ถ ์:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Ignore:bridge.Ignore(Arg(0)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0).
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
case "ignore": bridge.Ignore(Arg(0)); return InjectionValue.Unit;๋งค๊ฐ๋ณ์: objID (Any/Integer/String)
๊ฒฐ๊ณผ: void / Unit.
ํธ์ถ ์:
-
InjectionScript.Runtime.InjectionApiUO.Ignore. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Ignore:bridge.Ignore(id).
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
public void Ignore(int id) => bridge.Ignore(id);๋งค๊ฐ๋ณ์: objID (Any/Integer/String)
๊ฒฐ๊ณผ: void / Unit.
ํธ์ถ ์:
-
InjectionScript.Runtime.InjectionApiUO.Ignore. -
InjectionScript.Runtime.InjectionApiUO.Ignore:Ignore(GetObject(id)). -
InjectionScript.Runtime.InjectionApiUO.GetObject:GetObject(id).
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
public void Ignore(string id) => Ignore(GetObject(id));๋งค๊ฐ๋ณ์: id (Any), stateValue (Any)
๊ฒฐ๊ณผ: void / Unit.
ํธ์ถ ์:
-
InjectionScript.Runtime.InjectionApiUO.Ignore. -
InjectionScript.Runtime.InjectionApiUO.GetObject:GetObject(id). -
InjectionScript.Runtime.NumberConversions.ToInt:NumberConversions.ToInt(stateValue). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Ignore:bridge.Ignore(serial). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Unignore:bridge.Unignore(serial).
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
public void Ignore(InjectionValue id, InjectionValue stateValue)
{
int serial = GetObject(id);
bool enabled = stateValue.Kind != InjectionValueKind.String
? NumberConversions.ToInt(stateValue) != 0
: !stateValue.String.Equals("off", StringComparison.OrdinalIgnoreCase)
&& !stateValue.String.Equals("false", StringComparison.OrdinalIgnoreCase)
&& stateValue.String != "0";
if (enabled)
bridge.Ignore(serial);
else
bridge.Unignore(serial);
}ะฃะบัะฐัะฝััะบะฐ ยท ะ ัััะบะธะน ยท English ยท Deutsch ยท Franรงais ยท Italiano ยท Espaรฑol ยท ็น้ซไธญๆ ยท ๆฅๆฌ่ช ยท ํ๊ตญ์ด
void UO.IgnoreOff(object? objID);์ผ๋ฐ ๋ฌด์ ๋ชฉ๋ก์์ ํ๋์ serial์ ์ ๊ฑฐํฉ๋๋ค.
-
objIDโ ์ง๋ ฌ/ID ๊ฐ์ฒด: int, ์ซ์/16์ง์ ๋ฌธ์์ด ๋๋ ์ค์ ๋ ๋ณ์นญ(์: "lasttarget"). ์ด๊ฒ์ graphic/type๊ฐ ์๋๋๋ค. ์กฐ์น๋ฅผ ์ทจํ๊ธฐ ์ ์ ๋ก๋๋ ๊ฐ์ฒด๋ฅผ ํ์ธํ์ญ์์ค.
void - ๊ฐ์ด ์์ต๋๋ค. ๋ณ๋์ ํ์ ์ผ๋ก ์ ํํ์ธ์. ์๋ฃ๋ ์๋ฒ์ ์์ ์ ํ์ธํ์ง ์์ต๋๋ค.
- Bridge.Unignore๋ State.IgnoredSerials์์ ID๋ฅผ ์ ๊ฑฐํฉ๋๋ค. ๋ค๋ฅธ serial ๋ฐ ๋ช ๋ช ๋ AddIgnoreList ํํฐ๋ ์ง์์ง์ง ์์ต๋๋ค. ์์ดํ ์ ์๋์์ ์ ๊ฑฐ๋์ง ์์ต๋๋ค.
- ๊ฒ์ ํํฐ์ ๋ก์ปฌ ๋ณ๊ฒฝ ํจํท์ด ์ ์ก๋์ง ์์ต๋๋ค.
- ์ผ๋ฐ ํด๋ผ์ด์ธํธ ํธ์คํธ์์ ์ด ์ํ ๋ฐ์ดํฐ๋ GetPersistentState ๊ด๋ฆฌ์์์ ๊ฐ์ ธ์ค๋ฉฐ ๋์ผํ ์๋/ํ๋กํ์ ์คํฌ๋ฆฝํธ/์ฑํ /๋งคํฌ๋ก์ ๊ณตํต๋๋ฉฐ ํ๋์ ์คํฌ๋ฆฝํธ์ ์ํ์ง ์์ต๋๋ค. ๋ค๋ฅธ ํ๋ก์ธ์ค ๋๋ ๋ช ๋ฐฑํ ๋ณ๋์ InjectionRuntimeState๊ฐ ๋ค๋ฅธ ์ํ๋ฅผ ๊ฐ์ต๋๋ค. ํ๋กํ์ ๋ก๋/์ญ์ ํ๋ฉด ํ๋กํ์ ๋์ฒดํ ์ ์์ต๋๋ค. ์ ์ฅ๋ serial๋ ์ฌ์ ํ ๋ก๋๋ ์ธ๊ณ์ ๋น๊ตํ์ฌ ํ์ธ๋ฉ๋๋ค.
๊ฐ ์์ ๋ ๋ณ๋์ ํ์ผ .csx๋ก ์ ์ฅํ๊ณ IDE์์ ์คํํ ์ ์์ต๋๋ค. UO ๊ฐ์ฒด์ ๋๊ธฐ ๊ธฐ๋ฅ์ ํ์ฌ ๊ฒ์ ์ธ์
์ ํธ์คํธ๋ฅผ ์ ๊ณตํฉ๋๋ค. ๋ฐ๋ชจ serial ์ด๋ฆ, ์ขํ, ์ฃผ์๋ฅผ ์์ ์ ๊ฒ์ผ๋ก ๋ฐ๊พธ์ธ์.
์ด ์ฝ๋๋ฅผ ๋ณ๋์ .csx ํ์ผ๋ก ์คํํ์ธ์. ์ธ์๋ ํธ์ถ์ ์ง์ ํ์๋ฉ๋๋ค. ์์ ์ ์ด๋ฆ, serial, ์ฃผ์๋ฅผ ์์ ์ ๊ฐ์ผ๋ก ๋ฐ๊พธ์ธ์.
๋ช ๋ น์ ๋ ๋ฆฝ๋ ๋ฌธ์ ๋๋ค. ์์ ๋ฉ์์ง๋ ํธ์ถ ์์์ ๋ํ๋ด๋ฉฐ ์๋ฒ ๋์์ ์๋ฃ๋ฅผ ํ์ธํ์ง ์์ต๋๋ค.
UO.Print("Calling UO.IgnoreOff");
UO.IgnoreOff(UO.GetSerial("lasttarget"));๋งค๊ฐ๋ณ์์ ์คํ ํ๋ฆ:
- ์ผ๋ฐ ๋ฌด์ ๋ชฉ๋ก์์ ํ๋์ serial์ ์ ๊ฑฐํฉ๋๋ค.
var id = UO.GetSerial("lasttarget");
if (Truth(UO.Exists(id)))
{
UO.IgnoreOff(id);
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;๋งค๊ฐ๋ณ์์ ์คํ ํ๋ฆ:
- Bridge.Unignore๋ State.IgnoredSerials์์ ID๋ฅผ ์ ๊ฑฐํฉ๋๋ค. ๋ค๋ฅธ serial ๋ฐ ๋ช ๋ช ๋ AddIgnoreList ํํฐ๋ ์ง์์ง์ง ์์ต๋๋ค. ์์ดํ ์ ์๋์์ ์ ๊ฑฐ๋์ง ์์ต๋๋ค.
return RunScenario();
object? RunScenario()
{
var id = UO.GetSerial("self");
if (Truth(UO.Exists(id)))
{
UO.IgnoreOff(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;๋งค๊ฐ๋ณ์์ ์คํ ํ๋ฆ:
- ๊ฒ์ ํํฐ์ ๋ก์ปฌ ๋ณ๊ฒฝ ํจํท์ด ์ ์ก๋์ง ์์ต๋๋ค.
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()
{
ApplyToLoaded(UO.GetSerial("lasttarget"));
return null;
}
void ApplyToLoaded(dynamic id)
{
if (Truth(UO.Exists(id)))
{
UO.IgnoreOff(id);
}
}
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์ ์ฌ์ฉํ์ธ์.
๋งค๊ฐ๋ณ์: objID (Any)
๊ฒฐ๊ณผ: void / Unit.
ํธ์ถ ์:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Unignore:bridge.Unignore(Arg(0)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0).
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
case "ignoreoff": bridge.Unignore(Arg(0)); return InjectionValue.Unit;ะฃะบัะฐัะฝััะบะฐ ยท ะ ัััะบะธะน ยท English ยท Deutsch ยท Franรงais ยท Italiano ยท Espaรฑol ยท ็น้ซไธญๆ ยท ๆฅๆฌ่ช ยท ํ๊ตญ์ด
void UO.IgnoreReset();๋ฌด์๋ serial์ ์ผ๋ฐ ๋ชฉ๋ก์ ์ง์๋๋ค.
๋งค๊ฐ๋ณ์๊ฐ ์์ต๋๋ค.
void - ๊ฐ์ด ์์ต๋๋ค. ๋ณ๋์ ํ์ ์ผ๋ก ์ ํํ์ธ์. ์๋ฃ๋ ์๋ฒ์ ์์ ์ ํ์ธํ์ง ์์ต๋๋ค.
- Bridge.IgnoreReset๋ State.IgnoredSerials.Clear๋ฅผ ํธ์ถํฉ๋๋ค. ์ ์ฒด ๋ธ๋ฆฌ์ง ์ธ์ ์์ ๋ค๋ฅธ ๊ฒ์์ผ๋ก ์ถ๊ฐ๋ ํญ๋ชฉ์ ํฌํจํ์ฌ ์ด ํํฐ์์ ๋ชจ๋ serial๋ฅผ ์ ๊ฑฐํฉ๋๋ค.
- ๋ช ๋ช ๋ AddIgnoreList์ ์ง์ฐ๊ฑฐ๋ ๊ฐ์ฒด๋ฅผ ์ญ์ ํ๊ฑฐ๋ FindType์ ๊ฒฐ๊ณผ๋ฅผ ์ฌ์ค์ ํ์ง ์์ต๋๋ค.
- ์ผ๋ฐ ํด๋ผ์ด์ธํธ ํธ์คํธ์์ ์ด ์ํ ๋ฐ์ดํฐ๋ GetPersistentState ๊ด๋ฆฌ์์์ ๊ฐ์ ธ์ค๋ฉฐ ๋์ผํ ์๋/ํ๋กํ์ ์คํฌ๋ฆฝํธ/์ฑํ /๋งคํฌ๋ก์ ๊ณตํต๋๋ฉฐ ํ๋์ ์คํฌ๋ฆฝํธ์ ์ํ์ง ์์ต๋๋ค. ๋ค๋ฅธ ํ๋ก์ธ์ค ๋๋ ๋ช ๋ฐฑํ ๋ณ๋์ InjectionRuntimeState๊ฐ ๋ค๋ฅธ ์ํ๋ฅผ ๊ฐ์ต๋๋ค. ํ๋กํ์ ๋ก๋/์ญ์ ํ๋ฉด ํ๋กํ์ ๋์ฒดํ ์ ์์ต๋๋ค. ์ ์ฅ๋ serial๋ ์ฌ์ ํ ๋ก๋๋ ์ธ๊ณ์ ๋น๊ตํ์ฌ ํ์ธ๋ฉ๋๋ค.
๊ฐ ์์ ๋ ๋ณ๋์ ํ์ผ .csx๋ก ์ ์ฅํ๊ณ IDE์์ ์คํํ ์ ์์ต๋๋ค. UO ๊ฐ์ฒด์ ๋๊ธฐ ๊ธฐ๋ฅ์ ํ์ฌ ๊ฒ์ ์ธ์
์ ํธ์คํธ๋ฅผ ์ ๊ณตํฉ๋๋ค. ๋ฐ๋ชจ serial ์ด๋ฆ, ์ขํ, ์ฃผ์๋ฅผ ์์ ์ ๊ฒ์ผ๋ก ๋ฐ๊พธ์ธ์.
์ด ์ฝ๋๋ฅผ ๋ณ๋์ .csx ํ์ผ๋ก ์คํํ์ธ์. ์ธ์๋ ํธ์ถ์ ์ง์ ํ์๋ฉ๋๋ค. ์์ ์ ์ด๋ฆ, serial, ์ฃผ์๋ฅผ ์์ ์ ๊ฐ์ผ๋ก ๋ฐ๊พธ์ธ์.
๋ช ๋ น์ ๋ ๋ฆฝ๋ ๋ฌธ์ ๋๋ค. ์์ ๋ฉ์์ง๋ ํธ์ถ ์์์ ๋ํ๋ด๋ฉฐ ์๋ฒ ๋์์ ์๋ฃ๋ฅผ ํ์ธํ์ง ์์ต๋๋ค.
UO.Print("Calling UO.IgnoreReset");
UO.IgnoreReset();๋งค๊ฐ๋ณ์์ ์คํ ํ๋ฆ:
- ๋ฌด์๋ serial์ ์ผ๋ฐ ๋ชฉ๋ก์ ์ง์๋๋ค.
UO.IgnoreReset();๋งค๊ฐ๋ณ์์ ์คํ ํ๋ฆ:
- Bridge.IgnoreReset๋ State.IgnoredSerials.Clear๋ฅผ ํธ์ถํฉ๋๋ค. ์ ์ฒด ๋ธ๋ฆฌ์ง ์ธ์ ์์ ๋ค๋ฅธ ๊ฒ์์ผ๋ก ์ถ๊ฐ๋ ํญ๋ชฉ์ ํฌํจํ์ฌ ์ด ํํฐ์์ ๋ชจ๋ serial๋ฅผ ์ ๊ฑฐํฉ๋๋ค.
return RunScenario();
object? RunScenario()
{
UO.Print(UO.GetIgnoreList());
UO.IgnoreReset();
return null;
}๋งค๊ฐ๋ณ์์ ์คํ ํ๋ฆ:
- ๋ช ๋ช ๋ AddIgnoreList์ ์ง์ฐ๊ฑฐ๋ ๊ฐ์ฒด๋ฅผ ์ญ์ ํ๊ฑฐ๋ FindType์ ๊ฒฐ๊ณผ๋ฅผ ์ฌ์ค์ ํ์ง ์์ต๋๋ค.
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.Ignore("lasttarget");
UO.IgnoreReset();
UO.Print(UO.GetIgnoreList());
return null;
}
}C#์ ๋์๋ฌธ์๋ฅผ ๊ตฌ๋ถํฉ๋๋ค. ์ ํํ UO ์ด๋ฆ์ ์ฌ์ฉํ์ธ์. ์ซ์ ํ๋๊ทธ๋ 0๊ณผ ๋น๊ตํ๊ณ ๋ฐํ ํ์์ด bool์ผ ๋๋ง bool์ ์ฌ์ฉํ์ธ์.
๋งค๊ฐ๋ณ์: ๋งค๊ฐ๋ณ์๊ฐ ์์ต๋๋ค.
๊ฒฐ๊ณผ: void / Unit.
ํธ์ถ ์:
-
InjectionScript.Runtime.InjectionApiUO.IgnoreReset. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.IgnoreReset:bridge.IgnoreReset().
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
public void IgnoreReset() => bridge.IgnoreReset();string UO.InfoFindList();ํธ์ถ ์์น๊ฐ ํ์ ๋ฐฉ์์ ๊ฒฐ์ ํฉ๋๋ค. ๊ฒ์์ ๊ทธ๋ํฝ ์ฑํ ๋ช ๋ น์ ํ๋, ๊ฐ, Ctrl+C์ ์คํฌ๋กค์ด ์๋ ํ๋ฅผ ์ฝ๋๋ค. ์ผ๋ฐ C# ์คํฌ๋ฆฝํธ๋ ๊ฒ์ ์ฐฝ์ด ์ด๋ ค ์์ด๋ ์ฐฝ์ด๋ ํ๊น ์์ด ๋ณด๊ณ ์ ๋ฌธ์์ด๋ง ๋ฐ์ต๋๋ค. ํด๋ผ์ด์ธํธ๊ฐ ์๊ณ ์๋ ๋ฐ์ดํฐ๋ง ์ฌ์ฉํ ์ ์์ต๋๋ค.
๊ทธ๋ํฝ ์ฑํ ์์ ์ธ์ ์๋ Info์ InfoTile์ ํ๊น์ ์์ํฉ๋๋ค. ์คํฌ๋ฆฝํธ์ Info()๋ ๋ง์ง๋ง ๋ฌผ์ฒด ํ๊น ๋๋ ํ๋ ์ด์ด๋ฅผ, InfoTile()์ ๋ฐ๋ฐ ์งํ์ ์ฝ์ต๋๋ค. serial, type, ์ขํ๋ก ๋์์ ์ง์ ํฉ๋๋ค. InfoTile(x,y,map)์ ์ธ ๋ฒ์งธ ์ธ์๋ ๋งต ๋ฒํธ์ ๋๋ค.
๋งค๊ฐ๋ณ์ ์์.
์ ๋์ฌ๋ C# Scripts IDE์์ ์ค์ ํ๋ฉฐ #์ ์์์ ๋๋ค. ์ธ์๋ ๊ณต๋ฐฑ์ผ๋ก ๊ตฌ๋ถํ๊ณ ๋ฐ์ดํ ์์ ํ ์คํธ๋ ํ๋์ ์ธ์์ ๋๋ค. id๋ serial, type์ graphic์ ๋๋ค. xy x y [z]๋ ํด๋น ์์น์ ์ฒซ ๋ก๋ ๊ฐ์ฒด, type๋ง ์ฐ๋ฉด ์ฒซ ์ผ์น ๊ฐ์ฒด๋ฅผ ์ ํํฉ๋๋ค. InfoTile(x,y,map)์ ์ธ ๋ฒ์งธ ์ธ์๋ Z๊ฐ ์๋๋ผ ์ง๋์ ๋๋ค.
#infofindlist
๊ฐ ์ฝ๋ ๋ธ๋ก์ ์์ ํ ๋ ๋ฆฝ .csx์ ๋๋ค. ์์ serial, type๊ณผ ์ขํ๋ฅผ ๋ฐ๊พธ์ธ์. ์ธ์ ์์์ C# ๋ช ๋ช ๋ ์ธ์๋ ์๊ทธ๋์ฒ๋ฅผ ๋ฐ๋ฆ ๋๋ค.
UO.Print(UO.InfoFindList());string ReadDefinitions() => UO.InfoFindList();
UO.Print(ReadDefinitions());string report = UO.InfoFindList();
foreach (string line in report.Split('\n'))
UO.Print(line);new CommandSample().Execute(UO);
sealed class CommandSample
{
public void Execute(global::ClassicUO.CSharp.CSharpGameApi api)
{
api.Print(api.InfoFindList());
}
}CSharpGameApi.InfoFindList
-> CSharpScriptGlobals
-> InjectionScript.Runtime.InjectionApiUO.InfoFindList
ClassicUOInjectionApiBridge -> YokoInfoReport -> YokoInfoGump
ะฃะบัะฐัะฝััะบะฐ ยท ะ ัััะบะธะน ยท English ยท Deutsch ยท Franรงais ยท Italiano ยท Espaรฑol ยท ็น้ซไธญๆ ยท ๆฅๆฌ่ช ยท ํ๊ตญ์ด
void UO.MFGI();ํ์ฌ ๊ฒ์ ๊ฒฐ๊ณผ ๋ชฉ๋ก์ ์ธ์ํฉ๋๋ค.
๋งค๊ฐ๋ณ์๊ฐ ์์ต๋๋ค.
void - ๊ฐ์ด ์์ต๋๋ค. ๋ณ๋์ ํ์ ์ผ๋ก ์ ํํ์ธ์. ์๋ฃ๋ ์๋ฒ์ ์์ ์ ํ์ธํ์ง ์์ต๋๋ค.
- ExecuteLegacyManualAlias๋ GetFoundItems๋ฅผ ์ฝ๊ณ , ๊ฐ serial์ ํ์์ 0xXXXXXXXX๋ก ์ง์ ํ๊ณ , ์ค์ "|"๋ก ์ฐ๊ฒฐํฉ๋๋ค. ๊ตฌ๋ถ ๊ธฐํธ. ์๋ก์ด ๊ฒ์์ ์ํ๋์ง ์์ต๋๋ค. ๋น ๋ชฉ๋ก์ ๋น ๋ฌธ์์ด์ ์ ๊ณตํฉ๋๋ค.
- ์ง์ ๋ ๋ก์ปฌ ๋ฐ์ดํฐ๋ง ์์ ํ๊ฑฐ๋ ํ์ํฉ๋๋ค. ์ด ๋ช ๋ น์๋ ์๋ฒ ํ์ธ์ด ์์ต๋๋ค.
๊ฐ ์์ ๋ ๋ณ๋์ ํ์ผ .csx๋ก ์ ์ฅํ๊ณ IDE์์ ์คํํ ์ ์์ต๋๋ค. UO ๊ฐ์ฒด์ ๋๊ธฐ ๊ธฐ๋ฅ์ ํ์ฌ ๊ฒ์ ์ธ์
์ ํธ์คํธ๋ฅผ ์ ๊ณตํฉ๋๋ค. ๋ฐ๋ชจ serial ์ด๋ฆ, ์ขํ, ์ฃผ์๋ฅผ ์์ ์ ๊ฒ์ผ๋ก ๋ฐ๊พธ์ธ์.
์ด ์ฝ๋๋ฅผ ๋ณ๋์ .csx ํ์ผ๋ก ์คํํ์ธ์. ์ธ์๋ ํธ์ถ์ ์ง์ ํ์๋ฉ๋๋ค. ์์ ์ ์ด๋ฆ, serial, ์ฃผ์๋ฅผ ์์ ์ ๊ฐ์ผ๋ก ๋ฐ๊พธ์ธ์.
๋ช ๋ น์ ๋ ๋ฆฝ๋ ๋ฌธ์ ๋๋ค. ์์ ๋ฉ์์ง๋ ํธ์ถ ์์์ ๋ํ๋ด๋ฉฐ ์๋ฒ ๋์์ ์๋ฃ๋ฅผ ํ์ธํ์ง ์์ต๋๋ค.
UO.Print("Calling UO.MFGI");
UO.MFGI();๋งค๊ฐ๋ณ์์ ์คํ ํ๋ฆ:
- ํ์ฌ ๊ฒ์ ๊ฒฐ๊ณผ ๋ชฉ๋ก์ ์ธ์ํฉ๋๋ค.
UO.MFGI();๋งค๊ฐ๋ณ์์ ์คํ ํ๋ฆ:
- ExecuteLegacyManualAlias๋ GetFoundItems๋ฅผ ์ฝ๊ณ , ๊ฐ serial์ ํ์์ 0xXXXXXXXX๋ก ์ง์ ํ๊ณ , ์ค์ "|"๋ก ์ฐ๊ฒฐํฉ๋๋ค. ๊ตฌ๋ถ ๊ธฐํธ. ์๋ก์ด ๊ฒ์์ ์ํ๋์ง ์์ต๋๋ค. ๋น ๋ชฉ๋ก์ ๋น ๋ฌธ์์ด์ ์ ๊ณตํฉ๋๋ค.
return RunScenario();
object? RunScenario()
{
UO.FindType("0x0E21");
UO.MFGI();
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.MFGI();
UO.Print(UO.GetArrayLength(UO.GetFoundItems()));
return null;
}
}C#์ ๋์๋ฌธ์๋ฅผ ๊ตฌ๋ถํฉ๋๋ค. ์ ํํ UO ์ด๋ฆ์ ์ฌ์ฉํ์ธ์. ์ซ์ ํ๋๊ทธ๋ 0๊ณผ ๋น๊ตํ๊ณ ๋ฐํ ํ์์ด bool์ผ ๋๋ง bool์ ์ฌ์ฉํ์ธ์.
๋งค๊ฐ๋ณ์: ๋งค๊ฐ๋ณ์๊ฐ ์์ต๋๋ค.
๊ฒฐ๊ณผ: void / Unit.
ํธ์ถ ์:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias. -
InjectionScript.Runtime.InjectionApiUO.SystemMessage:SystemMessage(string.Join(" | ", bridge.GetFoundItems().Select(id => $"0x{id:X8}"))). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetFoundItems:bridge.GetFoundItems().
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
case "mfgi":
SystemMessage(string.Join(" | ", bridge.GetFoundItems().Select(id => $"0x{id:X8}")));
break;ะฃะบัะฐัะฝััะบะฐ ยท ะ ัััะบะธะน ยท English ยท Deutsch ยท Franรงais ยท Italiano ยท Espaรฑol ยท ็น้ซไธญๆ ยท ๆฅๆฌ่ช ยท ํ๊ตญ์ด
void UO.SelectIgnoreList(object? list);ํ์ฑ ๋ช ๋ช ๋ ๊ฒ์ ํํฐ๋ฅผ ํ ๊ธํฉ๋๋ค. ์ ์ฅ๋ ๊ท์น์ ์ญ์ ํ์ง ์๊ณ ๋ง์ด๋, ์ ๋ ฌ ๋ฐ ํ๊ฒํ ๊ฐ์ ์์ธ ์งํฉ์ ๋ณ๊ฒฝํ๋ ๊ฒ์ด ์ ์ฉํฉ๋๋ค. ์ด ๋ช ๋ น์ ๊ฒ์ ์์ฒด๋ฅผ ์ํํ์ง ์์ต๋๋ค.
-
listโ ๋น์ด ์์ง ์์ ์์์ ์ด๋ฆ(์: "loot_skip") ์ด๋ฆ์ ๋์๋ฌธ์๋ฅผ ๊ตฌ๋ถํ์ง ์์ต๋๋ค. ์ด๋ ์์ดํ ์ ์ด๋ฆ๋, serial ์ปจํ ์ด๋์ ์ด๋ฆ๋, FindList์ ์ด๋ฆ๋ ์๋๋๋ค. ์ฌ๊ธฐ์๋ ๋น ๋ฌธ์์ด ""๋ ํ์ฉ๋ฉ๋๋ค. ๋ช ๋ช ๋ ๊ท์น์ ๋นํ์ฑํํฉ๋๋ค.
void - ๊ฐ์ด ์์ต๋๋ค. var ๊ฒฐ๊ณผ = ๋ฐ ํ์ธ =true ์์ด ๋ณ๋์ ์ค์ ์ฌ์ฉํ์ธ์. ์ด ๋ช ๋ น์ ๋ก์ปฌ ํํฐ๋ฅผ ๋ณ๊ฒฝํฉ๋๋ค. ํญ๋ชฉ ์๋ฅผ ๋ฐํํ์ง ์์ผ๋ฉฐ ์๋ฒ์ ์๋ฌด ๊ฒ๋ ๋ณด๋ด์ง ์์ต๋๋ค.
- ์กด์ฌํ์ง ์๋ ์ด๋ฆ์ ๋น ํํฐ๋ฅผ ์ ํํฉ๋๋ค. ์ด ์ด๋ฆ์ ๊ฐ์ง ๋ฆ์ AddIgnoreList๊ฐ ๋ค์ ๊ฒ์์์ ํ๋ํ๊ธฐ ์์ํฉ๋๋ค. Regular Ignore(serial)๋ ์ ํ ์ฌ๋ถ์ ์๊ด์์ด ๊ณ์ ๋์ํฉ๋๋ค.
- ๋ช ๋ช ๋ ๋ชฉ๋ก์๋ graphic/type + hue ๊ท์น์ด ํฌํจ๋์ด ์๊ณ ์ผ๋ฐ Ignore์๋ ํน์ serial ๊ท์น์ด ํฌํจ๋์ด ์์ต๋๋ค. ์ด๋ค์ ์๋ก ๋ค๋ฅธ ํํฐ์ ๋๋ค. ๊ฒ์์ด ์ง์๋๋ฉด ๊ฒฐํฉ๋ฉ๋๋ค. ๊ฐ์ฒด๋ ๊ณ์ ํ์๋๊ณ ์ง์ UseObject/MoveItem์ ์ก์ธ์คํ ์ ์์ต๋๋ค. ์ด๋ Hide ๋๋ ํ์ ๊ธ์ง๊ฐ ์๋๋๋ค.
- ๋ชฉ๋ก ์ด๋ฆ์ ๋์๋ฌธ์๋ฅผ ๊ตฌ๋ถํ์ง ์์ต๋๋ค. ๊ฐ์ฅ์๋ฆฌ ๊ณต๊ฐ์ด ์ ๊ฑฐ๋ฉ๋๋ค. ํ๋์ ๋ช ๋ช ๋ ๋ชฉ๋ก์ด ํ์ฑํ๋์ด ์์ผ๋ฉฐ ์ด๊ธฐ์๋ ๊ธฐ๋ณธ๊ฐ์ ๋๋ค. AddIgnoreList๋ ์๋์ผ๋ก ์ ํ๋์ง ์์ต๋๋ค. SelectIgnoreList("")์ ๋ช ๋ช ๋ ํํฐ๋ง ๋นํ์ฑํํฉ๋๋ค.
- ๊ท์น์ ์ถ๊ฐ๋ ํ์ ์ ๋ก๋๋ ํญ๋ชฉ์ ํฌํจํ์ฌ ์๋ก์ด ๊ฒ์์ ์ ์ฉ๋ฉ๋๋ค. ์ด๋ฏธ ์์ ๋ ๋ฐฐ์ด๊ณผ ์ด์ ๊ฒฐ๊ณผ FindCount๋ ์๋ก์ด ๊ฒ์์ด ์ด๋ฃจ์ด์ง ๋๊น์ง ๋ค์ ๊ณ์ฐ๋์ง ์์ต๋๋ค. ๋ชจ๋ ๊ฒ์ ์ ์ธํ๋ ค๋ ๊ฒฝ์ฐ๊ฐ ์๋๋ฉด -1,-1 ๊ท์น์ด ์๋ ๋ชฉ๋ก์ ์ ํํ์ง ๋ง์ธ์.
- ํํฐ๋ FindType/FindTypeEx/FindTypesArrayEx, FindList, FindAtCoord, FindNotoriety, Count/CountEx ๋ฐ ํ์ฅ ์ ํ ํญ๋ชฉ GetMobiles, GetWorldItems, UseType์ ๊ณ ๋ คํฉ๋๋ค. WaitTarget, Attack/AttackNearest/FindMan. includeIgnored=true(์ ๊ณต๋ ๊ฒฝ์ฐ)๋ serial ๋ฐ type/hue๋ฅผ ๋ชจ๋ ์ฐํํฉ๋๋ค. ์ธ์๊ฐ ์๋ ์ ์ฒด ์ด๊ฑฐํ GetContent/GetEquipment, GetWorldItems() ๋ฐ ๋์ฌ FindMobile(human,near,...) ๋ ์ด๋ฌํ ๊ท์น์ ์ฌ์ฉํ์ง ์์ต๋๋ค.
- GetIgnoreList๋ ๋ช ์์ ์ผ๋ก ์ถ๊ฐ๋ serial๋ง ๋ฐํํฉ๋๋ค. ๋ช ๋ช ๋ ๋ชฉ๋ก์ ํ์ ์ด ๋ฐฐ์ด์ ํฌํจ๋์ง ์์ต๋๋ค. IgnoreReset๋ ์ ์ฒด serial ํํฐ๋ฅผ ์ง์ฐ๊ณ , IgnoreOff(serial)๋ ํ๋์ serial-์์ธ๋ฅผ ์ ๊ฑฐํฉ๋๋ค. ๋ช ๋ช ๋ ๊ท์น์ ์ ์ง๋ฉ๋๋ค. ์ธ์๊ฐ ์๋ ClearIgnoreList()๋ ๋ ๋ณด๊ธฐ๋ฅผ ๋ชจ๋ ์ง์๋๋ค.
- ์ํ๋ ํด๋ผ์ด์ธํธ ํ๋กํ ์คํฌ๋ฆฝํธ์ ์ผ๋ฐ ์ํ์ ์ํฉ๋๋ค. ๋ณ๊ฒฝ ์ฌํญ์ ์ด ์ํ์ ๋ค๋ฅธ ์คํฌ๋ฆฝํธ์ ์ํฅ์ ๋ฏธ์นฉ๋๋ค. ์ค์ ์ ์ ์ฅ๋ ์ค๋ ์ท์ ํฌํจ๋ฉ๋๋ค. ๊ท์น์ ๋ณ๊ฒฝํ ํ ๋ค๋ฅธ ์คํฌ๋ฆฝํธ๋ ์ด๋ฏธ ์ด์ ์ ์ฐ์ ์ค๋ ์ท์ผ๋ก ๊ฒ์์ ์ํํ ์ ์์ต๋๋ค. ๋ค์ ๊ฒ์์์๋ ์ ๋ฐ์ดํธ๊ฐ ํ์๋ฉ๋๋ค.
- ์ผ๋ฐ ํด๋ผ์ด์ธํธ ํธ์คํธ์์ ์ด ์ํ ๋ฐ์ดํฐ๋ GetPersistentState ๊ด๋ฆฌ์์์ ๊ฐ์ ธ์ค๋ฉฐ ๋์ผํ ์๋/ํ๋กํ์ ์คํฌ๋ฆฝํธ/์ฑํ /๋งคํฌ๋ก์ ๊ณตํต๋๋ฉฐ ํ๋์ ์คํฌ๋ฆฝํธ์ ์ํ์ง ์์ต๋๋ค. ๋ค๋ฅธ ํ๋ก์ธ์ค ๋๋ ๋ช ๋ฐฑํ ๋ณ๋์ InjectionRuntimeState๊ฐ ๋ค๋ฅธ ์ํ๋ฅผ ๊ฐ์ต๋๋ค. ํ๋กํ์ ๋ก๋/์ญ์ ํ๋ฉด ํ๋กํ์ ๋์ฒดํ ์ ์์ต๋๋ค. ์ ์ฅ๋ serial๋ ์ฌ์ ํ ๋ก๋๋ ์ธ๊ณ์ ๋น๊ตํ์ฌ ํ์ธ๋ฉ๋๋ค.
๊ฐ ์์ ๋ ๋ณ๋์ ํ์ผ .csx๋ก ์ ์ฅํ๊ณ IDE์์ ์คํํ ์ ์์ต๋๋ค. UO ๊ฐ์ฒด์ ๋๊ธฐ ๊ธฐ๋ฅ์ ํ์ฌ ๊ฒ์ ์ธ์
์ ํธ์คํธ๋ฅผ ์ ๊ณตํฉ๋๋ค. ๋ฐ๋ชจ serial ์ด๋ฆ, ์ขํ, ์ฃผ์๋ฅผ ์์ ์ ๊ฒ์ผ๋ก ๋ฐ๊พธ์ธ์.
์ด ์ฝ๋๋ฅผ ๋ณ๋์ .csx ํ์ผ๋ก ์คํํ์ธ์. ์ธ์๋ ํธ์ถ์ ์ง์ ํ์๋ฉ๋๋ค. ์์ ์ ์ด๋ฆ, serial, ์ฃผ์๋ฅผ ์์ ์ ๊ฐ์ผ๋ก ๋ฐ๊พธ์ธ์.
๋ช ๋ น์ ๋ ๋ฆฝ๋ ๋ฌธ์ ๋๋ค. ์์ ๋ฉ์์ง๋ ํธ์ถ ์์์ ๋ํ๋ด๋ฉฐ ์๋ฒ ๋์์ ์๋ฃ๋ฅผ ํ์ธํ์ง ์์ต๋๋ค.
UO.Print("Calling UO.SelectIgnoreList");
UO.SelectIgnoreList("SORT");๋งค๊ฐ๋ณ์์ ์คํ ํ๋ฆ:
- SORT์ sort๋ ํ๋์ ๋ชฉ๋ก์ ๋๋ค. ๊ฒ์์์๋ ํ์ฉ๋ ์ฒซ ๋ฒ์งธ ๋ฐฐ๋ญ ๊ฐ์ฒด๋ฅผ ์ ํํฉ๋๋ค. ์ด๋ฆ์ ์ ์ฅํด๋ ์ ์ก๋์ง๋ ์์ต๋๋ค.
UO.AddIgnoreList("sort", 0x0EED);
UO.SelectIgnoreList("SORT");
var item = UO.FindType(-1, -1, "backpack");
if (Truth(item != ""))
{
UO.AddObject("sort_candidate", item);
}
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()
{
UO.SelectIgnoreList("");
var gold = UO.FindType(0x0EED, -1, "backpack");
if (Truth(gold != ""))
{
UO.AddObject("gold_candidate", gold);
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;๋งค๊ฐ๋ณ์์ ์คํ ํ๋ฆ:
- ๋์ค์ ๊ท์น์ ์ถ๊ฐํ๊ธฐ ์ ์ ๋น์ด ์์ต๋๋ค. ์ผ๋จ ์ถ๊ฐ๋๋ฉด ๋ฐฉ๊ธ ๋ํ๋ ๊ธ ๋๋ฏธ๋ผ๋ ๋ค์ ๊ฒ์์ ํต๊ณผํ์ง ๋ชปํฉ๋๋ค.
return new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
UO.SelectIgnoreList("later");
UO.AddIgnoreList("later", 0x0EED);
var item = UO.FindType(0x0EED, -1, "ground");
if (Truth(item == ""))
{
UO.Print("Gold is excluded by the selected rule");
}
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์ ์ฌ์ฉํ์ธ์.
๋งค๊ฐ๋ณ์: list (Any)
๊ฒฐ๊ณผ: void / Unit.
ํธ์ถ ์:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias. -
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias::Text:Text(0).
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
case "selectignorelist": state.SelectedIgnoreList = Text(0).Trim(); break;ะฃะบัะฐัะฝััะบะฐ ยท ะ ัััะบะธะน ยท English ยท Deutsch ยท Franรงais ยท Italiano ยท Espaรฑol ยท ็น้ซไธญๆ ยท ๆฅๆฌ่ช ยท ํ๊ตญ์ด
void UO.SetBadLocation(object? x, object? y);๋ค์ ๊ฒฝ๋ก MoveXY, NewMoveXY, MoveXYZ, PMove์ ๋ํ ๊ธ์ง ์ ๋ชฉ๋ก์ X/Y๋ฅผ ์ถ๊ฐํ๊ณ GetPathArray/GetPathArray3D๋ฅผ ์์ฒญํฉ๋๋ค.
-
xโ ์ ์ธ๋ ์ ์ ์๋ X. -
yโ ์ ์ธ๋ ์ ์ ์๋ Y.
void - ๋ฐํ ๊ฐ์ด ์์ต๋๋ค. ๋ณ๋์ ํ์ ์ผ๋ก ์ ํํ์ธ์. true/false ๋๋ ๊ฑธ์ ์๊ฐ ์๋๋๋ค.
- ํค๋ X/Y, ์นด๋ ์์, Z๋ก ๊ตฌ์ฑ๋ฉ๋๋ค. ์ขํ๋ 0..65535 ๋ด์ ์ ์์ฌ์ผ ํฉ๋๋ค. ๋ฒ์๋ฅผ ๋ฒ์ด๋๋ฉด ์คํฌ๋ฆฝํธ ์ค๋ฅ๊ฐ ๋ฐ์ํฉ๋๋ค.
- ํธ์ถ ์คํฌ๋ฆฝํธ์ ๋ฐํ์์๋ ๊ธ์ง ์ฌํญ์ด ์ ์ฉ๋ฉ๋๋ค. ์ ๊ฒฝ๋ก๋ ์์ฒญ์ ์ด์ ๋ํ ์ค๋ ์ท์ ๋ฐ์ต๋๋ค. ์ด๋ฏธ ์คํ ์ค์ธ ๊ฒฝ๋ก๋ ๋ด๋ถ ์ฌ๊ณ์ฐ์ ํฌํจํ์ฌ ์ค๋ ์ท์ ์ ์ฅํฉ๋๋ค. ๋ชฉ๋ก์ ๋ณ๊ฒฝํ ํ ์๋ก์ด ๊ฒฝ๋ก๋ฅผ ์์ํ์ธ์.
- ์ด๋ ๋งต ๋ณ๊ฒฝ์ด ์๋๋๋ค. ์ผ๋ฐ์ ์ธ ์๋ ์ด๋ ๋ฐ ๊ธฐํ ๋ฐํ์ ๊ฒฝ๋ก๋ ์ด ๊ธ์ง๋ฅผ ๋ฐ์ง ์์ต๋๋ค. ๊ธ์ง๋ก ํ์๋์ด ์์ด๋ ์๋ ์ฌ๊ฐํ์ ๋ ๋ ์ ์์ต๋๋ค.
- ์ผ๋ฐ ํด๋ผ์ด์ธํธ ํธ์คํธ์์ ์ด ์ํ ๋ฐ์ดํฐ๋ GetPersistentState ๊ด๋ฆฌ์์์ ๊ฐ์ ธ์ค๋ฉฐ ๋์ผํ ์๋/ํ๋กํ์ ์คํฌ๋ฆฝํธ/์ฑํ /๋งคํฌ๋ก์ ๊ณตํต๋๋ฉฐ ํ๋์ ์คํฌ๋ฆฝํธ์ ์ํ์ง ์์ต๋๋ค. ๋ค๋ฅธ ํ๋ก์ธ์ค ๋๋ ๋ช ๋ฐฑํ ๋ณ๋์ InjectionRuntimeState๊ฐ ๋ค๋ฅธ ์ํ๋ฅผ ๊ฐ์ต๋๋ค. ํ๋กํ์ ๋ก๋/์ญ์ ํ๋ฉด ํ๋กํ์ ๋์ฒดํ ์ ์์ต๋๋ค. ์ ์ฅ๋ serial๋ ์ฌ์ ํ ๋ก๋๋ ์ธ๊ณ์ ๋น๊ตํ์ฌ ํ์ธ๋ฉ๋๋ค.
๊ฐ ์์ ๋ ๋ณ๋์ ํ์ผ .csx๋ก ์ ์ฅํ๊ณ IDE์์ ์คํํ ์ ์์ต๋๋ค. UO ๊ฐ์ฒด์ ๋๊ธฐ ๊ธฐ๋ฅ์ ํ์ฌ ๊ฒ์ ์ธ์
์ ํธ์คํธ๋ฅผ ์ ๊ณตํฉ๋๋ค. ๋ฐ๋ชจ serial ์ด๋ฆ, ์ขํ, ์ฃผ์๋ฅผ ์์ ์ ๊ฒ์ผ๋ก ๋ฐ๊พธ์ธ์.
์ด ์ฝ๋๋ฅผ ๋ณ๋์ .csx ํ์ผ๋ก ์คํํ์ธ์. ์ธ์๋ ํธ์ถ์ ์ง์ ํ์๋ฉ๋๋ค. ์์ ์ ์ด๋ฆ, serial, ์ฃผ์๋ฅผ ์์ ์ ๊ฐ์ผ๋ก ๋ฐ๊พธ์ธ์.
๋ช ๋ น์ ๋ ๋ฆฝ๋ ๋ฌธ์ ๋๋ค. ์์ ๋ฉ์์ง๋ ํธ์ถ ์์์ ๋ํ๋ด๋ฉฐ ์๋ฒ ๋์์ ์๋ฃ๋ฅผ ํ์ธํ์ง ์์ต๋๋ค.
UO.Print("Calling UO.SetBadLocation");
UO.SetBadLocation(UO.GetX() + 1, UO.GetY());๋งค๊ฐ๋ณ์์ ์คํ ํ๋ฆ:
- X/Y - ๋ฌธ์์ ๋์ชฝ ์ ์ ๋๋ค.
- ์ํ๊ฐ ๊ฐ๋ฅํ๋ฉด ๋ค๋ฅธ ์ ์ฒด ๊ฒฝ๋ก๊ฐ ๋ฐํ๋ฉ๋๋ค. ์บ๋ฆญํฐ๊ฐ ์์ง์ด์ง ์์ต๋๋ค.
UO.SetBadLocation(UO.GetX() + 1, UO.GetY());
var path = UO.GetPathArray(UO.GetX() + 3, UO.GetY(), true, 0);
UO.Print(Convert.ToString(ArrayLength(path)));
int ArrayLength(object? value) => value is System.Array array ? array.Length : 0;๋งค๊ฐ๋ณ์์ ์คํ ํ๋ฆ:
- ํธ์ถํ ๋๋ง๋ค ํ๋์ X/Y ์์ด ์ถ๊ฐ๋ฉ๋๋ค.
- ํ ์์ ๋ฐ๋ณตํ๋ค๊ณ ํด์ ๋ณ๋์ ๋ ๋ฒ์งธ ๊ธ์ง ์ฌํญ์ด ์์ฑ๋์ง๋ ์์ต๋๋ค. Z๋ ๋งค๊ฐ๋ณ์๊ฐ ์๋๋๋ค.
return RunScenario();
object? RunScenario()
{
UO.SetBadLocation(1445, 1690);
UO.SetBadLocation(1445, 1691);
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()
{
int x = UO.GetX() + 1;
int y = UO.GetY();
UO.SetBadLocation(x, y);
UO.Print($"Marked known blocked location: {x},{y}");
return null;
}
}C#์ ๋์๋ฌธ์๋ฅผ ๊ตฌ๋ถํฉ๋๋ค. ์ ํํ UO ์ด๋ฆ์ ์ฌ์ฉํ์ธ์. ์ซ์ ํ๋๊ทธ๋ 0๊ณผ ๋น๊ตํ๊ณ ๋ฐํ ํ์์ด bool์ผ ๋๋ง bool์ ์ฌ์ฉํ์ธ์.
๋งค๊ฐ๋ณ์: x (Any), y (Any)
๊ฒฐ๊ณผ: void / Unit.
ํธ์ถ ์:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0).
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
case "setbadlocation":
{
int x = Arg(0), y = Arg(1);
if (x < 0 || x > ushort.MaxValue || y < 0 || y > ushort.MaxValue)
throw new NativeSubrutineException("UO.SetBadLocation requires world X/Y in 0..65535.");
state.BadLocations.Add(x + "," + y);
return InjectionValue.Unit;
}ะฃะบัะฐัะฝััะบะฐ ยท ะ ัััะบะธะน ยท English ยท Deutsch ยท Franรงais ยท Italiano ยท Espaรฑol ยท ็น้ซไธญๆ ยท ๆฅๆฌ่ช ยท ํ๊ตญ์ด
void UO.SetBadObject(object? objType, object? color, object? radius);๋ค์ ๊ฒฝ๋ก์์ ์ ์ธํ๊ณ graphic ๋ฐ hue์ ์ํด ์ ํ๋ ๋ก๋๋ ์ธ๊ณ ๊ฐ์ฒด ์ฃผ๋ณ์ ์ ๊ฒฝ๋ก๋ฅผ ์ฟผ๋ฆฌํฉ๋๋ค.
-
objType- ์์ดํ ์ ๊ทธ๋ํฝ/type, 0..65535. 0xFFFF ๋๋ -1๋ ๋ชจ๋ ์ ํ์ ํ์ฉํฉ๋๋ค. ์ด๋ serial ํน์ ์ธ์คํด์ค๊ฐ ์๋๋๋ค. -
colorโ ์์ดํ ์ ์์, 0..65535. 0xFFFF ๋๋ -1๋ ๋ชจ๋ ์์์ ํ์ฉํฉ๋๋ค. 0์ ์ ํํ hue 0์ ์๋ฏธํฉ๋๋ค. -
radiusโ ์ ์ ๋ฐ๊ฒฝ, 0..255 ํฌํจ. 0๋ ํญ๋ชฉ ์ ์ ์ ์ธํฉ๋๋ค. R์ ๋๊ฐ์ ์ ์ ํฌํจํ์ฌ ์ฃผ๋ณ์ ์ ์ฌ๊ฐํ max(abs(dx),abs(dy)) <= R์ ์ ์ธํฉ๋๋ค.
void - ๋ฐํ ๊ฐ์ด ์์ต๋๋ค. ๋ณ๋์ ํ์ ์ผ๋ก ์ ํํ์ธ์. true/false ๋๋ ๊ฑธ์ ์๊ฐ ์๋๋๋ค.
- ๋งค๊ฐ๋ณ์๋ ํ์์ ๋๋ค. ๋ฒ์๊ฐ ์ ์ ํ์ง ์์ผ๋ฉด ์ซ์๊ฐ ์๋์ผ๋ก ์๋ฆฌ์ง ์๊ณ ์คํฌ๋ฆฝํธ ์ค๋ฅ๊ฐ ๋ฐ์ํฉ๋๋ค.
- ๊ท์น์ ํ์ฌ ๋ฐํ์์ ๋์ ๋ฉ๋๋ค. ์ผ์น ๊ท์น์ด ๊ฒฐํฉ๋ฉ๋๋ค. ๊ฐ์ฅ ํฐ ๋ฐ๊ฒฝ์ด ํ๋์ ํญ๋ชฉ์ ์ ์ฉ๋ฉ๋๋ค. ClearBadObjectList๋ ์ด๋ฌํ ๋ชจ๋ ๊ท์น์ ์ ๊ฑฐํฉ๋๋ค.
- ํด๋ผ์ด์ธํธ๊ฐ ์ ๊ทผํ ์ ์๋ ๋ฌธ์ ํฌํจํ์ฌ ์ปจํ ์ด๋=0๋ก ๋ก๋๋ ๋์ ํญ๋ชฉ์ด ๊ณ ๋ ค๋ฉ๋๋ค. ์ปจํ ์ด๋ ๋ด๋ถ์ ํญ๋ชฉ, NPC ๋ฐ ์ง๋ ํต๊ณ๋ ์ด ํํฐ์ ์ํด ์ ํ๋์ง ์์ต๋๋ค. ๋ฌธ์์ ๊ฒฝ์ฐ avoidMobiles๋ฅผ ์ฌ์ฉํ๊ณ , ๊ฐ๋ณ ์ ์ ๊ฒฝ์ฐ SetBadLocation๋ฅผ ์ฌ์ฉํฉ๋๋ค.
- MoveXY/NewMoveXY/MoveXYZ/PMove ๋๋ GetPathArray/GetPathArray3D๋ฅผ ์์ํ๋ฉด ํญ๋ชฉ์ ๊ท์น๊ณผ ์์น์ ๋ํ ์ค๋ ์ท์ด ์์ฑ๋ฉ๋๋ค. ์ธ๊ณ์ ๋ชฉ๋ก์ ์ถ๊ฐ๋ก ๋ณ๊ฒฝํด๋ ์ด ์ค๋ ์ท์ ๋ณ๊ฒฝ๋์ง ์์ต๋๋ค. ์๋ก์ด ์ถ์๋ ์๋ก์ด ๋ฐ์ดํฐ๋ฅผ ๋ฐ์ต๋๋ค.
- ํํฐ๋ ์๋ฒ์ ์๋ฌด ๊ฒ๋ ๋ณด๋ด์ง ์์ผ๋ฉฐ ๋ซํ ์ปจํ ์ด๋์ ์ฝํ ์ธ ๋ฅผ ๊ฐ์ ๋ก ๋ก๋ํ์ง ์์ผ๋ฉฐ ์๋ ์ด๋์ ๋ณ๊ฒฝํ์ง ์์ต๋๋ค. X/Y ๊ท์น์๋ ๋ณ๋์ Z ์ ํ์ด ์์ต๋๋ค.
- ์ผ๋ฐ ํด๋ผ์ด์ธํธ ํธ์คํธ์์ ์ด ์ํ ๋ฐ์ดํฐ๋ GetPersistentState ๊ด๋ฆฌ์์์ ๊ฐ์ ธ์ค๋ฉฐ ๋์ผํ ์๋/ํ๋กํ์ ์คํฌ๋ฆฝํธ/์ฑํ /๋งคํฌ๋ก์ ๊ณตํต๋๋ฉฐ ํ๋์ ์คํฌ๋ฆฝํธ์ ์ํ์ง ์์ต๋๋ค. ๋ค๋ฅธ ํ๋ก์ธ์ค ๋๋ ๋ช ๋ฐฑํ ๋ณ๋์ InjectionRuntimeState๊ฐ ๋ค๋ฅธ ์ํ๋ฅผ ๊ฐ์ต๋๋ค. ํ๋กํ์ ๋ก๋/์ญ์ ํ๋ฉด ํ๋กํ์ ๋์ฒดํ ์ ์์ต๋๋ค. ์ ์ฅ๋ serial๋ ์ฌ์ ํ ๋ก๋๋ ์ธ๊ณ์ ๋น๊ตํ์ฌ ํ์ธ๋ฉ๋๋ค.
๊ฐ ์์ ๋ ๋ณ๋์ ํ์ผ .csx๋ก ์ ์ฅํ๊ณ IDE์์ ์คํํ ์ ์์ต๋๋ค. UO ๊ฐ์ฒด์ ๋๊ธฐ ๊ธฐ๋ฅ์ ํ์ฌ ๊ฒ์ ์ธ์
์ ํธ์คํธ๋ฅผ ์ ๊ณตํฉ๋๋ค. ๋ฐ๋ชจ serial ์ด๋ฆ, ์ขํ, ์ฃผ์๋ฅผ ์์ ์ ๊ฒ์ผ๋ก ๋ฐ๊พธ์ธ์.
์ด ์ฝ๋๋ฅผ ๋ณ๋์ .csx ํ์ผ๋ก ์คํํ์ธ์. ์ธ์๋ ํธ์ถ์ ์ง์ ํ์๋ฉ๋๋ค. ์์ ์ ์ด๋ฆ, serial, ์ฃผ์๋ฅผ ์์ ์ ๊ฐ์ผ๋ก ๋ฐ๊พธ์ธ์.
๋ช ๋ น์ ๋ ๋ฆฝ๋ ๋ฌธ์ ๋๋ค. ์์ ๋ฉ์์ง๋ ํธ์ถ ์์์ ๋ํ๋ด๋ฉฐ ์๋ฒ ๋์์ ์๋ฃ๋ฅผ ํ์ธํ์ง ์์ต๋๋ค.
UO.Print("Calling UO.SetBadObject");
UO.SetBadObject(0x398C, 0xFFFF, 1);๋งค๊ฐ๋ณ์์ ์คํ ํ๋ฆ:
- ObjType=0x398C - ์ graphic: ์๋ฒ์ ์๋ ์ฅ์ ๋ฌผ ์ ํ์ผ๋ก ๋ฐ๊ฟ๋๋ค. Color=0xFFFF๋ ์ํ๋ ์์์ ์ ํํฉ๋๋ค. Radius=1๋ ์ผ์นํ๋ ๊ฐ ํญ๋ชฉ ์ฃผ์์ 3ร3 ์ฌ๊ฐํ์ ์ ๊ฑฐํฉ๋๋ค.
- NewMoveXY๋ ์ ํํ X/Y๋ก ๋์ชฝ์ผ๋ก 5๊ฐ ์ ๋ก ์ด๋ํ๋ฉฐ ๋๋ณด๋ก ์ฝ๋ฐฑ ์์ด ์๊ฐ ์ ํ=5000 ms๋ก ์ด๋ํฉ๋๋ค. ok=1๋ ๋ชฉํ ๋ฌ์ฑ์ ์๋ฏธํฉ๋๋ค. 0๋ ์ฐํ๋ฅผ ํ์ธํ์ง ์์ต๋๋ค.
UO.SetBadObject(0x398C, 0xFFFF, 1);
var ok = UO.NewMoveXY(UO.GetX() + 5, UO.GetY(), true, 0, false, 0, 5000);
UO.Print(Convert.ToString(ok));๋งค๊ฐ๋ณ์์ ์คํ ํ๋ฆ:
- Color=0x0044๋ hue๋ง ์ ํํ๊ณ Radius=0๋ ํญ๋ชฉ์ด ์ฐจ์งํ๋ ์ ๋ง ์ ์ธํฉ๋๋ค. ClearBadObjectList๋ ์ด์ ์ ํ ๋ฐ ์์ ๊ท์น์ ์ ๊ฑฐํฉ๋๋ค.
- GetPathArray๋ ์์ ์ ํฌํจํ์ฌ [x,y,z] ํญ๋ชฉ์ ๋ฐํํฉ๋๋ค. ๋น ๋ฐฐ์ด์ ํ์ฌ ์ ์ฝ ์กฐ๊ฑด์ ๋ฐ๋ผ ์ ์ฒด ๊ฒฝ๋ก๊ฐ ์์์ ์๋ฏธํฉ๋๋ค. ์บ๋ฆญํฐ๋ ๊ทธ๋๋ก ์ ์ง๋ฉ๋๋ค.
return RunScenario();
object? RunScenario()
{
UO.ClearBadObjectList();
UO.SetBadObject(0x398C, 0x0044, 0);
var path = UO.GetPathArray(UO.GetX() + 4, UO.GetY(), true, 0);
UO.Print("Path records: " + Convert.ToString(ArrayLength(path)));
return null;
}
int ArrayLength(object? value) => value is System.Array array ? array.Length : 0;๋งค๊ฐ๋ณ์์ ์คํ ํ๋ฆ:
- ObjType=-1 ๋ฐ Color=-1๋ ๋ชจ๋ ์์ผ๋์นด๋์ ๋๋ค. Radius=0๋ ๋ก๋๋ ๋ชจ๋ ์๋ ์์ดํ ์ ์ ์ ์ ์ธํ์ง๋ง NPC ๋๋ ๊ฐ๋ฐฉ์ ๋ด์ฉ๋ฌผ์ ์ ์ธํฉ๋๋ค.
- ์ ๋ฆฌ๋ ํฅํ ์์ฒญ์ ์ ์ฉ๋ฉ๋๋ค. ์ด๋ฏธ ์์ ๋ ๊ฒฝ๋ก๊ฐ ์ ์ฅ๋ฉ๋๋ค. ์ด๋ ํ์ฑ ๊ฒฝ๋ก๊ฐ ์๋ ์ขํ ๋ฐฐ์ด์ ๋๋ค.
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.SetBadObject(-1, -1, 0);
var path = UO.GetPathArray(UO.GetX() + 2, UO.GetY(), true, 0);
UO.ClearBadObjectList();
UO.Print(Convert.ToString(ArrayLength(path)));
return null;
}
int ArrayLength(object? value) => value is System.Array array ? array.Length : 0;
}C#์ ๋์๋ฌธ์๋ฅผ ๊ตฌ๋ถํฉ๋๋ค. ์ ํํ UO ์ด๋ฆ์ ์ฌ์ฉํ์ธ์. ์ซ์ ํ๋๊ทธ๋ 0๊ณผ ๋น๊ตํ๊ณ ๋ฐํ ํ์์ด bool์ผ ๋๋ง bool์ ์ฌ์ฉํ์ธ์.
๋งค๊ฐ๋ณ์: objType (Any), color (Any), radius (Any)
๊ฒฐ๊ณผ: void / Unit.
ํธ์ถ ์:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
InjectionScript.Runtime.InjectionApiUO.ResolveType:ResolveType(arguments[0]). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(1).
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
case "setbadobject":
{
int type = ResolveType(arguments[0]), hue = Arg(1), radius = Arg(2);
if (type < -1 || type > ushort.MaxValue || hue < -1 || hue > ushort.MaxValue || radius < 0 || radius > byte.MaxValue)
throw new NativeSubrutineException("UO.SetBadObject requires type/color 0..65535 (or -1) and radius 0..255.");
state.BadObjects.Add(type + "," + hue + "," + radius);
return InjectionValue.Unit;
}