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();
}