KO API UO LimitMove - LIHACHTETAN/ClassicUO-Bad-Newbie-CSharp-Scripts-IDE GitHub Wiki

ะฃะบั€ะฐั—ะฝััŒะบะฐ ยท ะ ัƒััะบะธะน ยท English ยท Deutsch ยท Franรงais ยท Italiano ยท Espaรฑol ยท ็น้ซ”ไธญๆ–‡ ยท ๆ—ฅๆœฌ่ชž ยท ํ•œ๊ตญ์–ด

UO.LimitMove

int UO.LimitMove();
int UO.LimitMove(object? distance);

UO.LimitMove()๋Š” ๋ชฉ์ ์ง€๊นŒ์ง€์˜ ์ตœ๋Œ€ ํƒ€์ผ ๊ฑฐ๋ฆฌ๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. UO.LimitMove(distance)๋Š” ๊ฐ’์„ ๋ฐ”๊พธ๊ณ  ์ƒˆ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ์ดˆ๊นƒ๊ฐ’์€ 2000์ž…๋‹ˆ๋‹ค. 0์€ ๊ฑฐ๋ฆฌ ์ œํ•œ ํ•ด์ œ์ด๋ฉฐ, ์Œ์ˆ˜๋Š” ์˜ค๋ฅ˜๋ฅผ ๋ฐœ์ƒ์‹œํ‚ค๊ณ  ๊ธฐ์กด ๊ฐ’์„ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค.

๊ฑฐ๋ฆฌ๋Š” max(abs(targetX-startX), abs(targetY-startY))๋กœ ๊ณ„์‚ฐํ•ฉ๋‹ˆ๋‹ค. ์šฐํšŒ ๊ฒฝ๋กœ์˜ ๊ธธ์ด๊ฐ€ ์•„๋‹ˆ๋ผ ์ง€์ •ํ•œ ๋ชฉ์ ์ง€๊นŒ์ง€์˜ ๊ฑฐ๋ฆฌ์ž…๋‹ˆ๋‹ค. ๋ช…์‹œํ•œ maxDistance, maxSteps, timeout์€ ๊ณ„์† ์ ์šฉ๋ฉ๋‹ˆ๋‹ค.

MoveXY, NewMoveXY, MoveXYZ, PMove, Follow, GetPathArray/GetPathArray3D ๋ฐ Manager ์ง€๋„ ์ด๋™์— ์ ์šฉ๋ฉ๋‹ˆ๋‹ค. ๊ฒŒ์ž„ ์ฐฝ ์œ ๋ฌด์™€ ๊ด€๊ณ„์—†์ด ์ง€๋„ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์Šต๋‹ˆ๋‹ค. ์ด๋™์—๋Š” ํ™œ์„ฑ ๊ฒŒ์ž„ ์„ธ์…˜์ด ํ•„์š”ํ•˜๋ฉฐ ๋ฒฝ์ด๋‚˜ ์ง€๋„ ๊ฒฝ๊ณ„๋ฅผ ๋ฌด์‹œํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๊ฐ™์€ ํ”„๋กœํ•„์˜ ์Šคํฌ๋ฆฝํŠธ์™€ ์ง€๋„๊ฐ€ ์„ค์ •์„ ๊ณต์œ ํ•˜๋ฉฐ API ์ƒํƒœ์™€ ํ•จ๊ป˜ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค. ์ƒˆ ํ”„๋กœํ•„์€ 2000์œผ๋กœ ์‹œ์ž‘ํ•˜๋ฉฐ ๋‹ค๋ฅธ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‹คํ–‰ํ•ด๋„ ์„ ํƒํ•œ ๊ฐ’์€ ์ดˆ๊ธฐํ™”๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. UO.LimitMove(2000)์œผ๋กœ ๊ธฐ๋ณธ๊ฐ’์„ ๋ณต์›ํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ์ œ

int previousLimit = UO.LimitMove();
UO.LimitMove(2000);
UO.Print(UO.LimitMove().ToString());
UO.LimitMove(0);
int destinationX = 5000;
int destinationY = 1500;
int arrived = UO.NewMoveXY(destinationX, destinationY, true, 1, true);
UO.Print(arrived.ToString());
int previousLimit = UO.LimitMove();
try
{
    UO.LimitMove(6000);
    var route = UO.GetPathArray(5000, 1500, true, 1);
    UO.Print(route.Length.ToString());
}
finally
{
    UO.LimitMove(previousLimit);
}

๋‚ด๋ถ€ ํ•จ์ˆ˜

InjectionRuntimeState.LimitMove โ†’ InjectionApiUO.MoveToCanonical / BuildPortablePath โ†’ ClassicUOInjectionApiBridge.MoveTo โ†’ Pathfinder.WalkTo. NativeFollowController / WorldMapController โ†’ Pathfinder.WalkTo.

UO.LimitMove๋Š” ๋ชฉ์ ์ง€ ๊ฑฐ๋ฆฌ๋ฅผ ์ œํ•œํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ๋ณธ๊ฐ’์€ 2000์ด๊ณ  0์€ ๋ฌด์ œํ•œ์ž…๋‹ˆ๋‹ค. ์ˆจ๊ฒจ์ง„ 4096๊ฑธ์Œ/๋…ธ๋“œ ๋ฐ 10000๋…ธ๋“œ ์ œํ•œ์€ ์—†์Šต๋‹ˆ๋‹ค. ์ž‘์—…์€ ์ค‘๋‹จ ๊ฐ€๋Šฅํ•œ ๋‹จ์œ„๋กœ ๋‚˜๋‰ฉ๋‹ˆ๋‹ค. GetPathArray๋Š” moveThroughNPC ์ฒด๋ ฅ ๊ธฐ์ค€๊ณผ moveOpenDoor๋ฅผ ๋”ฐ๋ฆ…๋‹ˆ๋‹ค.

int savedLimit = UO.LimitMove();
try
{
    int applied = ApplyLimit(6000);
    UO.Print(applied.ToString());
}
finally { UO.LimitMove(savedLimit); }

int ApplyLimit(int distance)
{
    if (distance < 0) throw new ArgumentOutOfRangeException(nameof(distance));
    return UO.LimitMove(distance);
}
UO.Print(new MovementLimits(UO).Current().ToString());

class MovementLimits(ClassicUO.CSharp.CSharpGameApi api)
{
    public int Current() => api.LimitMove();
}