KO Runtime Helpers 2 - LIHACHTETAN/ClassicUO-Bad-Newbie-CSharp-Scripts-IDE GitHub Wiki
ะฃะบัะฐัะฝััะบะฐ ยท ะ ัััะบะธะน ยท English ยท Deutsch ยท Franรงais ยท Italiano ยท Espaรฑol ยท ็น้ซไธญๆ ยท ๆฅๆฌ่ช ยท ํ๊ตญ์ด
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
์ด ๋ถ๊ธฐ๋ ์ง์ ๋ ๋ช ๋ น ์ด๋ฆ๋ง ์ฒ๋ฆฌํฉ๋๋ค.
๋งค๊ฐ๋ณ์: ๋งค๊ฐ๋ณ์๊ฐ ์์ต๋๋ค.
์์ค: Project_Full/src/ClassicUO.CSharp/CSharpCallbacks.cs:431.
๊ฒฐ๊ณผ: false; true.
์กฐ๊ฑด: words.Length == 0; words.Length > offset && Exists(words[offset]); words.Length > offset && events is ICSharpScriptHost scriptHost && (offset == 1 || scriptHost.HasCSharpScript(words[offset])); words[0].Equals("_exec", StringComparison.OrdinalIgnoreCase).
ํธ์ถ:
-
ClassicUO.CSharp.CSharpCallbacks.CommandWords:CommandWords(Convert.ToString(arguments[0]) ?? ""). -
ClassicUO.CSharp.CSharpCallbacks.Exists:Exists(words[offset]). -
ClassicUO.CSharp.CSharpCallbacks.Start:Start(words[offset], words.Skip(offset + 1).ToArray()).
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
case "Exec":
var words = CommandWords(Convert.ToString(arguments[0]) ?? "");
if (words.Length == 0) return false;
int offset = words[0].Equals("exec", StringComparison.OrdinalIgnoreCase) || words[0].Equals("_exec", StringComparison.OrdinalIgnoreCase) ? 1 : 0;
if (words.Length > offset && Exists(words[offset]))
{ Start(words[offset], words.Skip(offset + 1).ToArray()); return true; }
if (words.Length > offset && events is ICSharpScriptHost scriptHost
&& (offset == 1 || scriptHost.HasCSharpScript(words[offset])))
{
string command = Convert.ToString(arguments[0]) ?? "";
if (words[0].Equals("_exec", StringComparison.OrdinalIgnoreCase)) command = "exec" + command.TrimStart()[5..];
scriptHost.ExecuteCSharpScript(command); return true;
}
return false;์ด ๋ถ๊ธฐ๋ ์ง์ ๋ ๋ช ๋ น ์ด๋ฆ๋ง ์ฒ๋ฆฌํฉ๋๋ค.
๋งค๊ฐ๋ณ์: ๋งค๊ฐ๋ณ์๊ฐ ์์ต๋๋ค.
์์ค: Project_Full/src/ClassicUO.CSharp/CSharpCallbacks.cs:423.
๊ฒฐ๊ณผ: true.
ํธ์ถ:
-
ClassicUO.CSharp.CSharpCallbacks.SetStateEvent:SetStateEvent([arguments[0], !string.IsNullOrWhiteSpace(Convert.ToString(arguments[1])), true, arguments[1]]).
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
case "SetEventProc":
SetStateEvent([arguments[0], !string.IsNullOrWhiteSpace(Convert.ToString(arguments[1])), true, arguments[1]]);
return true;ํ์๋ ํธ์ถ ๋ฐ ์ํ ๋ณ๊ฒฝ์ ์ํํฉ๋๋ค.
๋งค๊ฐ๋ณ์: string name
์์ค: Project_Full/src/ClassicUO.CSharp/CSharpCallbacks.cs:217.
public bool Cancel(string name)
๊ฒฐ๊ณผ: bool.
ํธ์ถ:
Verifyactive.Where(call => call.Name.Equals((name ?? "").Trim(), StringComparison.OrdinalIgnoreCase)).ToArrayactive.Wherecall.Name.Equals(name ?? "").Trimcall.Cancellation.Cancel
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
public bool Cancel(string name)
{
Verify();
Invocation[] calls;
lock (sync) calls = active.Where(call => call.Name.Equals((name ?? "").Trim(), StringComparison.OrdinalIgnoreCase)).ToArray();
foreach (var call in calls)
try { call.Cancellation.Cancel(); } catch (ObjectDisposedException) { }
return calls.Length != 0;
}ํ์๋ ํธ์ถ ๋ฐ ์ํ ๋ณ๊ฒฝ์ ์ํํฉ๋๋ค.
๋งค๊ฐ๋ณ์: object?[] arguments
์์ค: Project_Full/src/ClassicUO.CSharp/CSharpCallbacks.cs:344.
private void SetStateEvent(object?[] arguments)
๊ฒฐ๊ณผ: void.
์กฐ๊ฑด:
name.Length == 0!Flag(arguments[1])sourceName == ""arguments.Length == 3
ํธ์ถ:
EventNameRemoveStateFlagname.ToLowerInvariantnativeConvert.ToStringNumberConversions.TryStr2IntHandlerNamename.EqualsReadMobilesReadStateVerifySubscribeTrigger
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
private void SetStateEvent(object?[] arguments)
{
string name = EventName(arguments[0]);
if (name.Length == 0) return;
RemoveState(name);
if (!Flag(arguments[1])) return;
string? sourceName = name.ToLowerInvariant() switch
{
"changehitpoints" => "UO.HitPointsChanged", "changemana" => "UO.ManaChanged", "changestamina" => "UO.StaminaChanged",
"death" or "seenewplayer" => null,
_ => ""
};
if (sourceName == "")
{
native("Print", [$"SetEvent: unsupported event '{name}'. Supported: SeeNewPlayer, Death, ChangeHitPoints, ChangeMana, ChangeStamina."]);
return;
}
bool repeat = true;
string handler = "";
if (arguments.Length == 3)
{
string text = Convert.ToString(arguments[2]) ?? "";
if (text.Length != 0 && !NumberConversions.TryStr2Int(text, out _) && arguments[2] is not bool)
handler = HandlerName(arguments[2]);
else repeat = Flag(arguments[2]);
}
if (arguments.Length == 4) { repeat = Flag(arguments[2]); handler = HandlerName(arguments[3]); }
var state = new StateEvent(name, repeat, handler);
if (events is null || sourceName is null)
{
if (name.Equals("SeeNewPlayer", StringComparison.OrdinalIgnoreCase)) state.Mobiles = ReadMobiles();
else state.Last = ReadState(name);
}
lock (sync)
{
Verify();
if (events is not null && sourceName is not null)
state.Subscription = Subscribe(sourceName, _ => { Trigger(state); return Task.CompletedTask; });
stateEvents[name] = state;
}
}ํ์๋ ํธ์ถ ๋ฐ ์ํ ๋ณ๊ฒฝ์ ์ํํฉ๋๋ค.
๋งค๊ฐ๋ณ์: BackNewbieItemRule rule, string listId
์์ค: Project_Full/src/ClassicUO.Client/Configuration/BackNewbieRuleList.cs:23.
internal static bool BelongsTo(BackNewbieItemRule rule, string listId)
๊ฒฐ๊ณผ: bool.
ํธ์ถ:
string.Equalsstring.IsNullOrEmpty
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
internal static bool BelongsTo(BackNewbieItemRule rule, string listId) => rule != null
&& string.Equals(string.IsNullOrEmpty(rule.ListId) ? DefaultId : rule.ListId,
listId, StringComparison.Ordinal);ํ์๋ ํธ์ถ ๋ฐ ์ํ ๋ณ๊ฒฝ์ ์ํํฉ๋๋ค.
๋งค๊ฐ๋ณ์: World world, uint serial, bool force = false
์์ค: Project_Full/src/ClassicUO.Client/Game/GameActions.cs:734.
public static void RequestMobileStatus(World world, uint serial, bool force = false)
๊ฒฐ๊ณผ: void.
์กฐ๊ฑด:
world.InGameent != nullforceent.HitsRequest >= HitsRequestStatus.Pending
ํธ์ถ:
world.GetSendCloseStatusSerialHelper.IsValidSocket.Send_StatusRequest
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
public static void RequestMobileStatus(World world, uint serial, bool force = false)
{
if (world.InGame)
{
Entity ent = world.Get(serial);
if (ent != null)
{
if (force)
{
if (ent.HitsRequest >= HitsRequestStatus.Pending)
{
SendCloseStatus(world, serial);
}
}
if (ent.HitsRequest < HitsRequestStatus.Received)
{
ent.HitsRequest = HitsRequestStatus.Pending;
force = true;
}
}
if (force && SerialHelper.IsValid(serial))
{
//ent = ent ?? World.Player;
//ent.AddMessage(MessageType.Regular, $"PACKET SENT: 0x{serial:X8}", 3, 0x34, true, TextType.OBJECT);
Socket.Send_StatusRequest(serial);
}
}
}ํ์๋ ํธ์ถ ๋ฐ ์ํ ๋ณ๊ฒฝ์ ์ํํฉ๋๋ค.
๋งค๊ฐ๋ณ์: World world
์์ค: Project_Full/src/ClassicUO.Client/Game/GameActions.cs:933.
public static void UsePrimaryAbility(World world)
๊ฒฐ๊ณผ: void.
์กฐ๊ฑด:
world?.Player == null((byte) ability & 0x80) == 0
ํธ์ถ:
SendAbility
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
public static void UsePrimaryAbility(World world)
{
if (world?.Player == null)
return;
ref var ability = ref world.Player.Abilities[0];
if (((byte) ability & 0x80) == 0)
{
for (int i = 0; i < 2; i++)
{
world.Player.Abilities[i] &= (Ability) 0x7F;
}
SendAbility(world, (byte)ability, true);
}
else
{
SendAbility(world, 0, true);
}
ability ^= (Ability) 0x80;
}ํ์๋ ํธ์ถ ๋ฐ ์ํ ๋ณ๊ฒฝ์ ์ํํฉ๋๋ค.
๋งค๊ฐ๋ณ์: int x, int y, int z, int map, int options
์์ค: Project_Full/src/ClassicUO.Client/Game/Managers/ClassicUOInjectionApiBridge.cs:3784.
public int CheckLosCell(int x, int y, int z, int map, int options)
๊ฒฐ๊ณผ: int.
์กฐ๊ฑด:
_world.Map == null || map != _world.MapIndexalgorithm < 1 || algorithm > 4!overlapsRaydata.IsWindow && allowWindow
ํธ์ถ:
InvokeMath.Max_world.Map.GetTileMath.AbsBlocks
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
public int CheckLosCell(int x, int y, int z, int map, int options) => Invoke(() =>
{
if (_world.Map == null || map != _world.MapIndex)
return 0;
int algorithm = options & 0xFF;
if (algorithm < 1 || algorithm > 4)
algorithm = 3;
bool useNoShoot = algorithm == 3 || (algorithm == 4 && (options & 0x200) != 0);
bool allowWindow = algorithm == 4 && (options & 0x400) != 0;
bool Blocks(StaticTiles data, int tileZ)
{
int height = Math.Max(1, (int)data.Height);
bool overlapsRay = z >= tileZ - 2 && z <= tileZ + height + 2;
if (!overlapsRay)
return false;
if (data.IsWindow && allowWindow)
return false;
return data.IsWall || data.IsImpassable || useNoShoot && data.IsNoShoot;
}
for (GameObject tile = _world.Map.GetTile(x, y); tile != null; tile = tile.TNext)
{
if (tile is Land land)
{
if (land.TileData.IsImpassable && Math.Abs(z - land.Z) <= 20)
return 0;
continue;
}
if (tile is Static staticTile && Blocks(staticTile.ItemData, staticTile.Z))
return 0;
if (tile is Multi multi && Blocks(multi.ItemData, multi.Z))
return 0;
if (tile is Item item && Blocks(item.ItemData, item.Z))
return 0;
}
return 1;
});์๋ ์กฐ๊ฑด์ ํ์ธํ๊ณ ํ์๋ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํฉ๋๋ค.
๋งค๊ฐ๋ณ์: data, tileZ
์์ค: Project_Full/src/ClassicUO.Client/Game/Managers/ClassicUOInjectionApiBridge.cs:3468.
bool Blocks(StaticTiles data, int tileZ)
๊ฒฐ๊ณผ: bool.
๊ฒฐ๊ณผ: false; data.IsWall || data.IsImpassable || useNoShoot && data.IsNoShoot.
ํธ์ถ: Math.Max.
์กฐ๊ฑด: !overlapsRay; data.IsWindow && allowWindow.
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
bool Blocks(StaticTiles data, int tileZ)
{
int height = Math.Max(1, (int)data.Height);
bool overlapsRay = z >= tileZ - 2 && z <= tileZ + height + 2;
if (!overlapsRay)
return false;
if (data.IsWindow && allowWindow)
return false;
return data.IsWall || data.IsImpassable || useNoShoot && data.IsNoShoot;
}ํ์๋ ํธ์ถ ๋ฐ ์ํ ๋ณ๊ฒฝ์ ์ํํฉ๋๋ค.
๋งค๊ฐ๋ณ์: ๋งค๊ฐ๋ณ์๊ฐ ์์ต๋๋ค.
์์ค: Project_Full/src/ClassicUO.Client/Game/Managers/ClassicUOInjectionApiBridge.cs:3893.
public void ClearUserStatics()
๊ฒฐ๊ณผ: void.
ํธ์ถ:
Invoke
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
public void ClearUserStatics() => Invoke(_manager.ClearUserStatics);ํ์๋ ํธ์ถ ๋ฐ ์ํ ๋ณ๊ฒฝ์ ์ํํฉ๋๋ค.
๋งค๊ฐ๋ณ์: int serial
์์ค: Project_Full/src/ClassicUO.Client/Game/Managers/ClassicUOInjectionApiBridge.cs:1815.
public void ClientHide(int serial)
๊ฒฐ๊ณผ: void.
์กฐ๊ฑด:
entity == null || entity.IsDestroyedentity.Serial == _world.Player?.Serial
ํธ์ถ:
Invoke_world.GetErrorHideLocally
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
public void ClientHide(int serial) => Invoke(() =>
{
Entity entity = _world.Get(unchecked((uint)serial)) as Entity;
if (entity == null || entity.IsDestroyed)
{
Error($"UO.ClientHide: object 0x{unchecked((uint)serial):X8} is not loaded.");
return;
}
if (entity.Serial == _world.Player?.Serial)
{
Error("UO.ClientHide: refusing to hide the player locally.");
return;
}
HideLocally(entity);
});ํ์๋ ํธ์ถ ๋ฐ ์ํ ๋ณ๊ฒฝ์ ์ํํฉ๋๋ค.
๋งค๊ฐ๋ณ์: ๋งค๊ฐ๋ณ์๊ฐ ์์ต๋๋ค.
์์ค: Project_Full/src/ClassicUO.Client/Game/Managers/ClassicUOInjectionApiBridge.cs:430.
public void DisconnectClient()
๊ฒฐ๊ณผ: void.
์กฐ๊ฑด:
!(_world.SessionControl?.AutoReconnect ?? Settings.GlobalSettings.Reconnect)_world.SessionControl is { } sessionSettings.GlobalSettings.ReconnectloginScene != null
ํธ์ถ:
Invoke_manager.BeginScriptControlledDisconnectsession.RequestDisconnect_manager.PrepareForReconnectClient.Game.GetScene<LoginScene>NetClient.Socket.Disconnect.GetScene<GameScene>.RequestReconnectPreservingYoko
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
public void DisconnectClient() => Invoke(() =>
{
// With AR enabled, let the automatic disconnect pause resume on
// login. With AR disabled, this worker must reach its own Connect.
if (!(_world.SessionControl?.AutoReconnect ?? Settings.GlobalSettings.Reconnect))
_manager.BeginScriptControlledDisconnect(_scriptKey);
if (_world.SessionControl is { } session)
{
session.RequestDisconnect();
_manager.PrepareForReconnect();
return;
}
LoginScene loginScene = Client.Game.GetScene<LoginScene>();
// Disconnect also cancels any active or in-flight transport.
NetClient.Socket.Disconnect();
_manager.PrepareForReconnect();
// Socket.Disconnect detaches its callback, so it does not trigger
// GameScene's normal connection-loss handler. Schedule the same
// preserving transition explicitly when automatic reconnect is on.
// With AR off, keep the worker alive for a later UO.Connect call.
if (Settings.GlobalSettings.Reconnect)
Client.Game?.GetScene<GameScene>()?.RequestReconnectPreservingYoko();
if (loginScene != null)
{
loginScene.Reconnect = Settings.GlobalSettings.Reconnect;
loginScene.PopupMessage = null;
loginScene.CurrentLoginStep = LoginSteps.Main;
}
});ํ์๋ ํธ์ถ ๋ฐ ์ํ ๋ณ๊ฒฝ์ ์ํํฉ๋๋ค.
๋งค๊ฐ๋ณ์: ๋งค๊ฐ๋ณ์๊ฐ ์์ต๋๋ค.
์์ค: Project_Full/src/ClassicUO.Client/Game/Managers/ClassicUOInjectionApiBridge.cs:790.
public int Dismount()
๊ฒฐ๊ณผ: int.
ํธ์ถ:
Invoke_manager.MountRequests.RequestNetClient.Socket.Send_UseObjectRequestMountedLayerSerialUnsafe
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
public int Dismount() => Invoke(() =>
{
_manager.MountRequests.Request(
_world, 0, mount: false,
serial => NetClient.Socket.Send_UseObjectRequest(serial), Environment.TickCount64);
return MountedLayerSerialUnsafe();
});ํ์๋ ํธ์ถ ๋ฐ ์ํ ๋ณ๊ฒฝ์ ์ํํฉ๋๋ค.
๋งค๊ฐ๋ณ์: int sourceContainerId, int targetContainerId, int delayMs
์์ค: Project_Full/src/ClassicUO.Client/Game/Managers/ClassicUOInjectionApiBridge.cs:1409.
public int EmptyContainer(int sourceContainerId, int targetContainerId, int delayMs)
๊ฒฐ๊ณผ: int.
์กฐ๊ฑด:
-
sourceContainerId == 0 || targetContainerId == 0 || sourceContainerId == targetContainerId -
!ready -
`source == null || source.IsDestroyed || _world.Get((uint)targetContainerId) == null
|| (!source.IsCorpse && !source.ItemData.IsContainer)` -
!requested
ํธ์ถ:
Invoke_world.Items.Get_world.GetGameActions.DoubleClickStopwatch.StartNewWaitErrorMoveContainerItems
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
public int EmptyContainer(int sourceContainerId, int targetContainerId, int delayMs)
{
if (sourceContainerId == 0 || targetContainerId == 0 || sourceContainerId == targetContainerId)
return 0;
bool ready = Invoke(() => _world.Items.Get((uint)sourceContainerId) is Item source
&& source.ContainerContentsReceived);
if (!ready)
{
bool requested = Invoke(() =>
{
Item source = _world.Items.Get((uint)sourceContainerId);
if (source == null || source.IsDestroyed || _world.Get((uint)targetContainerId) == null
|| (!source.IsCorpse && !source.ItemData.IsContainer)) return false;
GameActions.DoubleClick(_world, source.Serial);
return true;
});
if (!requested) return 0;
var elapsed = Stopwatch.StartNew();
while (elapsed.ElapsedMilliseconds < 3000)
{
Wait(25);
if (Invoke(() => _world.Items.Get((uint)sourceContainerId) is Item source
&& source.ContainerContentsReceived))
{ ready = true; break; }
}
if (!ready)
{
Error("UO.EmptyContainer: no complete container contents arrived within 3000 ms.");
return 0;
}
}
var result = MoveContainerItems(sourceContainerId, -1, -1, targetContainerId, -1, -1, 0, delayMs, false);
return result.Selected > 0 && result.Sent == result.Selected ? 1 : 0;
}ํ์๋ ํธ์ถ ๋ฐ ์ํ ๋ณ๊ฒฝ์ ์ํํฉ๋๋ค.
๋งค๊ฐ๋ณ์: ๋งค๊ฐ๋ณ์๊ฐ ์์ต๋๋ค.
์์ค: Project_Full/src/ClassicUO.Client/Game/Managers/ClassicUOInjectionApiBridge.cs:2274.
public void EquipLastWeapon()
๊ฒฐ๊ณผ: void.
์กฐ๊ฑด:
_lastRightHand != 0_lastLeftHand != 0
ํธ์ถ:
Equip
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
public void EquipLastWeapon()
{
if (_lastRightHand != 0) Equip((int)Layer.OneHanded, _lastRightHand);
if (_lastLeftHand != 0) Equip((int)Layer.TwoHanded, _lastLeftHand);
}์๋ ์กฐ๊ฑด์ ํ์ธํ๊ณ ํ์๋ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํฉ๋๋ค.
๋งค๊ฐ๋ณ์: entity
์์ค: Project_Full/src/ClassicUO.Client/Game/Managers/ClassicUOInjectionApiBridge.cs:2600.
bool MatchesZ(Entity entity)
๊ฒฐ๊ณผ: bool.
๊ฒฐ๊ณผ: true; Math.Abs(zEntity.Z - player.Z) <= effectiveMaxZ.
ํธ์ถ: _world.Get, Math.Abs.
์กฐ๊ฑด: player == null || effectiveMaxZ < 0; entity is Item && containerId > 1.
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
bool MatchesZ(Entity entity)
{
if (player == null || effectiveMaxZ < 0)
return true;
Entity zEntity = entity;
if (entity is Item && containerId > 1)
zEntity = _world.Get(unchecked((uint)containerId)) ?? entity;
return Math.Abs(zEntity.Z - player.Z) <= effectiveMaxZ;
}ํ์๋ ํธ์ถ ๋ฐ ์ํ ๋ณ๊ฒฝ์ ์ํํฉ๋๋ค.
๋งค๊ฐ๋ณ์: GameObject tile, int map
์์ค: Project_Full/src/ClassicUO.Client/Game/Managers/ClassicUOInjectionApiBridge.cs:1244.
private static string FormatTileInfo(GameObject tile, int map)
๊ฒฐ๊ณผ: string.
์กฐ๊ฑด:
tile is Land loadedLandtile is Static loadedStatic
ํธ์ถ:
tile.GetTypeFormatAvailableScalars
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
private static string FormatTileInfo(GameObject tile, int map)
{
string details = $"ObjectType={tile.GetType().Name}\n"
+ $"Graphic/Tile=0x{tile.Graphic:X4} ({tile.Graphic})\n"
+ $"Hue/Colour=0x{tile.Hue:X4} ({tile.Hue})\n"
+ $"X={tile.X} Y={tile.Y} Z={tile.Z} Map={map}\n"
+ $"PriorityZ={tile.PriorityZ}\n"
+ $"Distance={tile.Distance}\n"
+ $"AllowedToDraw={tile.AllowedToDraw}\n"
+ $"AlphaHue={tile.AlphaHue}";
string report = tile switch
{
Land land => details
+ $"\nName={land.TileData.Name ?? string.Empty}"
+ $"\nFlags={land.TileData.Flags}"
+ $"\nIsFlat={!land.IsStretched}"
+ $"\nNormalLeft={land.NormalLeft}"
+ $"\nNormalRight={land.NormalRight}"
+ $"\nNormalTop={land.NormalTop}"
+ $"\nNormalBottom={land.NormalBottom}"
+ $"\nMinZ={land.MinZ}"
+ $"\nAverageZ={land.AverageZ}"
+ $"\nYOffsets={land.YOffsets}",
Static staticTile => details
+ $"\nName={staticTile.ItemData.Name ?? string.Empty}"
+ $"\nFlags={staticTile.ItemData.Flags}"
+ $"\nHeight={staticTile.ItemData.Height}"
+ $"\nIsVegetation={staticTile.IsVegetation}",
Multi multi => details
+ $"\nState={multi.State}"
+ $"\nIsMovable={multi.IsMovable}",
_ => details
};
report += "\n" + FormatAvailableScalars("Tile", tile);
if (tile is Land loadedLand) report += FormatAvailableScalars("TileData", loadedLand.TileData);
else if (tile is Static loadedStatic) report += FormatAvailableScalars("TileData", loadedStatic.ItemData);
return report;
}ํ์๋ ํธ์ถ ๋ฐ ์ํ ๋ณ๊ฒฝ์ ์ํํฉ๋๋ค.
๋งค๊ฐ๋ณ์: int id
์์ค: Project_Full/src/ClassicUO.Client/Game/Managers/ClassicUOInjectionApiBridge.cs:245.
public string GetAltName(int id)
๊ฒฐ๊ณผ: string.
ํธ์ถ:
GetTitle
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
public string GetAltName(int id) => GetTitle(id);ํ์๋ ํธ์ถ ๋ฐ ์ํ ๋ณ๊ฒฝ์ ์ํํฉ๋๋ค.
๋งค๊ฐ๋ณ์: ๋งค๊ฐ๋ณ์๊ฐ ์์ต๋๋ค.
์์ค: Project_Full/src/ClassicUO.Client/Game/Managers/ClassicUOInjectionApiBridge.cs:3958.
public int GetAutoBuyDelay()
๊ฒฐ๊ณผ: int.
ํธ์ถ:
Invoke
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
public int GetAutoBuyDelay() => Invoke(() => ProfileManager.CurrentProfile?.BackNewbieAutoBuyDelay ?? 3);ํ์๋ ํธ์ถ ๋ฐ ์ํ ๋ณ๊ฒฝ์ ์ํํฉ๋๋ค.
๋งค๊ฐ๋ณ์: int containerId
์์ค: Project_Full/src/ClassicUO.Client/Game/Managers/ClassicUOInjectionApiBridge.cs:2502.
public int[] GetContent(int containerId)
๊ฒฐ๊ณผ: int[].
ํธ์ถ:
-
Invoke -
`_world.Items.Values
.Where(item => !item.IsDestroyed && (containerId == 0 ? item.OnGround : item.Container == (uint)containerId)) .Select(item => (int)item.Serial).ToArray` -
`_world.Items.Values
.Where(item => !item.IsDestroyed && (containerId == 0 ? item.OnGround : item.Container == (uint)containerId)) .Select` -
`_world.Items.Values
.Where`
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
public int[] GetContent(int containerId) => Invoke(() => _world.Items.Values
.Where(item => !item.IsDestroyed && (containerId == 0 ? item.OnGround : item.Container == (uint)containerId))
.Select(item => (int)item.Serial).ToArray());ํ์๋ ํธ์ถ ๋ฐ ์ํ ๋ณ๊ฒฝ์ ์ํํฉ๋๋ค.
๋งค๊ฐ๋ณ์: Control control
์์ค: Project_Full/src/ClassicUO.Client/Game/Managers/ClassicUOInjectionApiBridge.cs:4274.
private static string GetControlText(Control control)
๊ฒฐ๊ณผ: string.
ํธ์ถ:
โ
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
private static string GetControlText(Control control)
{
return control switch
{
SessionGumpControl logical => logical.Text,
Label label => label.Text,
HtmlControl html => html.Text,
StbTextBox textBox => textBox.Text,
Checkbox checkbox => checkbox.Text,
_ => null
};
}ํ์๋ ํธ์ถ ๋ฐ ์ํ ๋ณ๊ฒฝ์ ์ํํฉ๋๋ค.
๋งค๊ฐ๋ณ์: int id
์์ค: Project_Full/src/ClassicUO.Client/Game/Managers/ClassicUOInjectionApiBridge.cs:2965.
public int GetGraphics(int id)
๊ฒฐ๊ณผ: int.
ํธ์ถ:
WithEntity
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
public int GetGraphics(int id) => WithEntity(id, e => e.Graphic);ํ์๋ ํธ์ถ ๋ฐ ์ํ ๋ณ๊ฒฝ์ ์ํํฉ๋๋ค.
๋งค๊ฐ๋ณ์: int id
์์ค: Project_Full/src/ClassicUO.Client/Game/Managers/ClassicUOInjectionApiBridge.cs:328.
public int GetNotoriety(int id)
๊ฒฐ๊ณผ: int.
ํธ์ถ:
Invoke_world.Get
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
public int GetNotoriety(int id) => Invoke(() => (_world.Get(unchecked((uint)id)) as Mobile) is Mobile m ? (int)m.NotorietyFlag : 0);ํ์๋ ํธ์ถ ๋ฐ ์ํ ๋ณ๊ฒฝ์ ์ํํฉ๋๋ค.
๋งค๊ฐ๋ณ์: ๋งค๊ฐ๋ณ์๊ฐ ์์ต๋๋ค.
์์ค: Project_Full/src/ClassicUO.Client/Game/Managers/ClassicUOInjectionApiBridge.cs:3835.
public int[] GetQuestArrow()
๊ฒฐ๊ณผ: int[].
ํธ์ถ:
Invoke_world.CharacterPanels.QuestArrow
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
public int[] GetQuestArrow() => Invoke(() => _world.CharacterPanels.QuestArrow());ํ์๋ ํธ์ถ ๋ฐ ์ํ ๋ณ๊ฒฝ์ ์ํํฉ๋๋ค.
๋งค๊ฐ๋ณ์: ๋งค๊ฐ๋ณ์๊ฐ ์์ต๋๋ค.
์์ค: Project_Full/src/ClassicUO.Client/Game/Managers/ClassicUOInjectionApiBridge.cs:2496.
public int[] GetWorldItems()
๊ฒฐ๊ณผ: int[].
ํธ์ถ:
-
Invoke -
`_world.Items.Values
.Where(item => !item.IsDestroyed && item.OnGround) .Select(item => (int)item.Serial).ToArray` -
`_world.Items.Values
.Where(item => !item.IsDestroyed && item.OnGround) .Select` -
`_world.Items.Values
.Where`
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
public int[] GetWorldItems() => Invoke(() => _world.Items.Values
.Where(item => !item.IsDestroyed && item.OnGround)
.Select(item => (int)item.Serial).ToArray());ํ์๋ ํธ์ถ ๋ฐ ์ํ ๋ณ๊ฒฝ์ ์ํํฉ๋๋ค.
๋งค๊ฐ๋ณ์: int id
์์ค: Project_Full/src/ClassicUO.Client/Game/Managers/ClassicUOInjectionApiBridge.cs:232.
public int GetZ(int id)
๊ฒฐ๊ณผ: int.
ํธ์ถ:
WithEntity
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
public int GetZ(int id) => WithEntity(id, e => e.Z);ํ์๋ ํธ์ถ ๋ฐ ์ํ ๋ณ๊ฒฝ์ ์ํํฉ๋๋ค.
๋งค๊ฐ๋ณ์: string value
์์ค: Project_Full/src/ClassicUO.Client/Game/Managers/ClassicUOInjectionApiBridge.cs:2422.
private static string NormalizeAbilityName(string value)
๊ฒฐ๊ณผ: string.
ํธ์ถ:
-
`string.Concat(
(value ?? string.Empty).Where(char.IsLetterOrDigit)).ToUpperInvariant` -
string.Concat -
(value ?? string.Empty).Where
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
private static string NormalizeAbilityName(string value) => string.Concat(
(value ?? string.Empty).Where(char.IsLetterOrDigit)).ToUpperInvariant();ํ์๋ ํธ์ถ ๋ฐ ์ํ ๋ณ๊ฒฝ์ ์ํํฉ๋๋ค.
๋งค๊ฐ๋ณ์: string title, string text
์์ค: Project_Full/src/ClassicUO.Client/Game/Managers/ClassicUOInjectionApiBridge.cs:1119.
private void OpenInteractiveInfoGump(string title, string text)
๊ฒฐ๊ณผ: void.
์กฐ๊ฑด:
_interactiveCommands
ํธ์ถ:
_infoGumpOpener
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
private void OpenInteractiveInfoGump(string title, string text)
{
// The invocation origin determines presentation. Renderer presence
// alone must never make ordinary script queries open windows.
if (_interactiveCommands)
_infoGumpOpener(_world, title, text);
}ํ์๋ ํธ์ถ ๋ฐ ์ํ ๋ณ๊ฒฝ์ ์ํํฉ๋๋ค.
๋งค๊ฐ๋ณ์: ๋งค๊ฐ๋ณ์๊ฐ ์์ต๋๋ค.
์์ค: Project_Full/src/ClassicUO.Client/Game/Managers/ClassicUOInjectionApiBridge.cs:1715.
public void PartyAcceptInvite()
๊ฒฐ๊ณผ: void.
์กฐ๊ฑด:
_world.Party.Inviter == 0
ํธ์ถ:
InvokeGameActions.RequestPartyAccept
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
public void PartyAcceptInvite() => Invoke(() =>
{
if (_world.Party.Inviter == 0) return;
GameActions.RequestPartyAccept(_world.Party.Inviter);
_world.Party.Leader = _world.Party.Inviter;
_world.Party.Inviter = 0;
});ํ์๋ ํธ์ถ ๋ฐ ์ํ ๋ณ๊ฒฝ์ ์ํํฉ๋๋ค.
๋งค๊ฐ๋ณ์: Mobile mobile
์์ค: Project_Full/src/ClassicUO.Client/Game/Managers/ClassicUOInjectionApiBridge.cs:4161.
private void RegisterFound(Mobile mobile)
๊ฒฐ๊ณผ: void.
ํธ์ถ:
RegisterFoundSerial
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
private void RegisterFound(Mobile mobile)
{
_findCount++;
_findFullQuantity++;
RegisterFoundSerial(unchecked((int)mobile.Serial));
}ํ์๋ ํธ์ถ ๋ฐ ์ํ ๋ณ๊ฒฝ์ ์ํํฉ๋๋ค.
๋งค๊ฐ๋ณ์: bool tileTarget
์์ค: Project_Full/src/ClassicUO.Client/Game/Managers/ClassicUOInjectionApiBridge.cs:902.
public void RequestClientTarget(bool tileTarget)
๊ฒฐ๊ณผ: void.
์กฐ๊ฑด:
request != Volatile.Read(ref _clientTargetRequest)target == null || (!tileTarget && !(target is Entity))
ํธ์ถ:
Interlocked.IncrementArray.Empty<int>Invoke_clientTargetCancellation.UnregisterVolatile.Read_world.TargetManager.SetTargeting_cancellationToken.Register_manager.ReleaseObjectSelection
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
public void RequestClientTarget(bool tileTarget)
{
int request = Interlocked.Increment(ref _clientTargetRequest);
_clientTargetResponsePresent = false;
_clientTargetResponse = Array.Empty<int>();
Invoke(() =>
{
_clientTargetCancellation.Unregister();
Action<GameObject> callback = target =>
{
if (request != Volatile.Read(ref _clientTargetRequest))
return;
_clientTargetCancellation.Unregister();
if (target == null || (!tileTarget && !(target is Entity)))
_clientTargetResponse = Array.Empty<int>();
else
{
int serial = target is Entity entity ? (int)entity.Serial : 0;
_clientTargetResponse = new[] { serial, (int)target.Graphic, target.X, target.Y, target.Z };
}
_clientTargetResponsePresent = true;
};
_world.TargetManager.SetTargeting(callback, 0, TargetType.Neutral);
// Cancellation may run on a worker thread. Queue ownership-checked
// cleanup without waiting for the game thread or clearing a newer cursor.
_clientTargetCancellation = _cancellationToken.Register(
() => _manager.ReleaseObjectSelection(callback));
});
}ํ์๋ ํธ์ถ ๋ฐ ์ํ ๋ณ๊ฒฝ์ ์ํํฉ๋๋ค.
๋งค๊ฐ๋ณ์: string spellNameOrId
์์ค: Project_Full/src/ClassicUO.Client/Game/Managers/ClassicUOInjectionApiBridge.cs:2473.
public int ResolveSpell(string spellNameOrId)
๊ฒฐ๊ณผ: int.
ํธ์ถ:
ResolveClassicUOSpellId
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
public int ResolveSpell(string spellNameOrId) => ResolveClassicUOSpellId(spellNameOrId);ํ์๋ ํธ์ถ ๋ฐ ์ํ ๋ณ๊ฒฝ์ ์ํํฉ๋๋ค.
๋งค๊ฐ๋ณ์: int id, int entry
์์ค: Project_Full/src/ClassicUO.Client/Game/Managers/ClassicUOInjectionApiBridge.cs:709.
public void SetContextMenuHook(int id, int entry)
๊ฒฐ๊ณผ: void.
ํธ์ถ:
Invoke_manager.SetContextMenuHook
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
public void SetContextMenuHook(int id, int entry) => Invoke(() => _manager.SetContextMenuHook((uint)id, entry));ํ์๋ ํธ์ถ ๋ฐ ์ํ ๋ณ๊ฒฝ์ ์ํํฉ๋๋ค.
๋งค๊ฐ๋ณ์: string name, int quality, bool includeUi
์์ค: Project_Full/src/ClassicUO.Client/Game/Managers/ClassicUOInjectionApiBridge.cs:3982.
public int Snap(string name, int quality, bool includeUi)
๊ฒฐ๊ณผ: int.
ํธ์ถ:
InvokeRequireGameView("Snap").TakeScreenshotRequireGameView
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
public int Snap(string name, int quality, bool includeUi)
=> Invoke(() => RequireGameView("Snap").TakeScreenshot(name, quality, includeUi));ํ์๋ ํธ์ถ ๋ฐ ์ํ ๋ณ๊ฒฝ์ ์ํํฉ๋๋ค.
๋งค๊ฐ๋ณ์: ๋งค๊ฐ๋ณ์๊ฐ ์์ต๋๋ค.
์์ค: Project_Full/src/ClassicUO.Client/Game/Managers/ClassicUOInjectionApiBridge.cs:326.
public void StopAllScripts()
๊ฒฐ๊ณผ: void.
ํธ์ถ:
_manager.StopAll
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
public void StopAllScripts() => _manager.StopAll();ํ์๋ ํธ์ถ ๋ฐ ์ํ ๋ณ๊ฒฝ์ ์ํํฉ๋๋ค.
๋งค๊ฐ๋ณ์: string subrutineName
์์ค: Project_Full/src/ClassicUO.Client/Game/Managers/ClassicUOInjectionApiBridge.cs:2963.
public bool SubExists(string subrutineName)
๊ฒฐ๊ณผ: bool.
ํธ์ถ:
_manager.FindProcedureByName
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
public bool SubExists(string subrutineName) => _manager.FindProcedureByName(subrutineName) != null;ํ์๋ ํธ์ถ ๋ฐ ์ํ ๋ณ๊ฒฝ์ ์ํํฉ๋๋ค.
๋งค๊ฐ๋ณ์: ๋งค๊ฐ๋ณ์๊ฐ ์์ต๋๋ค.
์์ค: Project_Full/src/ClassicUO.Client/Game/Managers/ClassicUOInjectionApiBridge.cs:3985.
public void TrackOff()
๊ฒฐ๊ณผ: void.
ํธ์ถ:
Invoke_world.CharacterPanels.SetArrow
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
public void TrackOff() => Invoke(() => _world.CharacterPanels.SetArrow(SessionCharacterPanels.TrackSerial, false, 0, 0));ํ์๋ ํธ์ถ ๋ฐ ์ํ ๋ณ๊ฒฝ์ ์ํํฉ๋๋ค.
๋งค๊ฐ๋ณ์: int windowIndex
์์ค: Project_Full/src/ClassicUO.Client/Game/Managers/ClassicUOInjectionApiBridge.cs:642.
public int TradeContainer(int windowIndex)
๊ฒฐ๊ณผ: int.
ํธ์ถ:
InvokeFindTrade
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
public int TradeContainer(int windowIndex) => Invoke(() =>
{
ISessionTrade gump = FindTrade(windowIndex);
return (int)(gump?.ID1 ?? 0);
});ํ์๋ ํธ์ถ ๋ฐ ์ํ ๋ณ๊ฒฝ์ ์ํํฉ๋๋ค.
๋งค๊ฐ๋ณ์: string content, string filePath, string relativeFileName
์์ค: Project_Full/src/ClassicUO.Client/Game/Managers/YokoInjectionManager.cs:3954.
internal static IReadOnlyList<YokoProcedureInfo> DiscoverProcedures(string content, string filePath, string relativeFileName)
๊ฒฐ๊ณผ: IReadOnlyList<YokoProcedureInfo>.
์กฐ๊ฑด:
IsCompiledScriptFilePath(filePath)IsSupportedScriptFilePath(filePath)
ํธ์ถ:
IsCompiledScriptFilePathDiscoverCompiledProceduresIsSupportedScriptFilePathDiscoverCSharpAutoloadProceduresArray.Empty<YokoProcedureInfo>
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
internal static IReadOnlyList<YokoProcedureInfo> DiscoverProcedures(string content, string filePath, string relativeFileName)
{
string originalScript = content ?? string.Empty;
if (IsCompiledScriptFilePath(filePath)) return DiscoverCompiledProcedures(filePath, relativeFileName);
if (IsSupportedScriptFilePath(filePath))
{
return DiscoverCSharpAutoloadProcedures(originalScript, filePath, relativeFileName);
}
return Array.Empty<YokoProcedureInfo>();
}ํ์๋ ํธ์ถ ๋ฐ ์ํ ๋ณ๊ฒฝ์ ์ํํฉ๋๋ค.
๋งค๊ฐ๋ณ์: ushort graphic, ushort x, ushort y, short z, CancellationToken owner = default
์์ค: Project_Full/src/ClassicUO.Client/Game/Managers/YokoInjectionManager.cs:3296.
internal void QueueTargetTile(ushort graphic, ushort x, ushort y, short z, CancellationToken owner = default)
๊ฒฐ๊ณผ: void.
ํธ์ถ:
owner.ThrowIfCancellationRequested_pendingTargets.Enqueue
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
internal void QueueTargetTile(ushort graphic, ushort x, ushort y, short z, CancellationToken owner = default)
{
lock (_pendingTargetLock)
{
owner.ThrowIfCancellationRequested();
_pendingTargets.Enqueue(new PendingTarget(graphic, x, y, z, owner));
}
}ํ์๋ ํธ์ถ ๋ฐ ์ํ ๋ณ๊ฒฝ์ ์ํํฉ๋๋ค.
๋งค๊ฐ๋ณ์: string selector
์์ค: Project_Full/src/ClassicUO.Client/Game/Managers/YokoExecutionControl.cs:110.
internal int TerminateProcedures(string selector)
๊ฒฐ๊ณผ: int.
์กฐ๊ฑด:
-
all -
selector.Length == 0 -
`all || (selector.Length != 0
&& MatchesProcedureSelector(selector, request.Selector)) || selected.Any(run => MatchesProcedureSelector(run.Key, request.Selector))` -
run.TryStop()
ํธ์ถ:
-
.Trim -
selector.Equals -
.Stop -
.RequestStop -
`_running.Values.Where(run => run.IsProcedure
&& !run.Cancellation.IsCancellationRequested) .OrderByDescending(run => run.Sequence).Take(1).ToArray` -
`_running.Values.Where(run => run.IsProcedure
&& !run.Cancellation.IsCancellationRequested) .OrderByDescending(run => run.Sequence).Take` -
`_running.Values.Where(run => run.IsProcedure
&& !run.Cancellation.IsCancellationRequested) .OrderByDescending` -
_running.Values.Where -
`_running.Values.Where(run => all
|| MatchesProcedureSelector(selector, run.Key, run.Name)).ToArray` -
MatchesProcedureSelector -
_pendingLaunches.ToArray -
selected.Any -
_pendingLaunches.Remove -
_queuedRuns.TryRemove -
run.TryStop -
_queuedRuns.Clear -
ClearPendingTargets -
ClearGumpAutomation -
SetStatus -
ClientLanguageManager.TranslateUi -
string.Format
์ ์ฒด ์ฝ๋๋ ์์ค ํ์ผ์ ์์ผ๋ฉฐ ์๋๋ ์ ํํ ๋ฐ์ท์ ๋๋ค.
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
internal int TerminateProcedures(string selector)
{
selector = selector?.Trim() ?? string.Empty;
bool all = selector.Equals("all", StringComparison.OrdinalIgnoreCase);
if (all) _massMover?.Stop();
if (all) _vendorPricer?.Stop();
if (all) _follow?.RequestStop();
YokoRunningScript[] selected;
// โฆ
if (all) _launchGeneration++;
if (selector.Length == 0)
// โฆ
if (all || (selector.Length != 0
// โฆ
if (run.TryStop())
// โฆ
if (all)
// โฆ
else if (selector.Length != 0) ClearGumpAutomation(selector);
else foreach (var run in selected) ClearGumpAutomation(run.Key);
SetStatus(stopped + cancelledPending == 0
? ClientLanguageManager.TranslateUi("No matching C# routines are running.")
: string.Format(ClientLanguageManager.TranslateUi(
"Termination requested: {0} running, {1} pending."), stopped, cancelledPending));
return stopped + cancelledPending;
}ํ์๋ ํธ์ถ ๋ฐ ์ํ ๋ณ๊ฒฝ์ ์ํํฉ๋๋ค.
๋งค๊ฐ๋ณ์: uint serial
์์ค: Project_Full/src/ClassicUO.Client/Game/SerialHelper.cs:10.
public static bool IsValid(uint serial)
๊ฒฐ๊ณผ: bool.
ํธ์ถ:
โ
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static bool IsValid(uint serial)
{
return serial > 0 && serial < 0x80000000;
}ํ์๋ ํธ์ถ ๋ฐ ์ํ ๋ณ๊ฒฝ์ ์ํํฉ๋๋ค.
๋งค๊ฐ๋ณ์: uint serial
์์ค: Project_Full/src/ClassicUO.Client/Game/World.cs:525.
public Entity Get(uint serial)
๊ฒฐ๊ณผ: Entity.
์กฐ๊ฑด:
SerialHelper.IsMobile(serial)ent == nullent != null && ent.IsDestroyed
ํธ์ถ:
SerialHelper.IsMobileMobiles.GetItems.Get
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
public Entity Get(uint serial)
{
Entity ent;
if (SerialHelper.IsMobile(serial))
{
ent = Mobiles.Get(serial);
if (ent == null)
{
ent = Items.Get(serial);
}
}
else
{
ent = Items.Get(serial);
if (ent == null)
{
ent = Mobiles.Get(serial);
}
}
if (ent != null && ent.IsDestroyed)
{
ent = null;
}
return ent;
}ํ์๋ ํธ์ถ ๋ฐ ์ํ ๋ณ๊ฒฝ์ ์ํํฉ๋๋ค.
๋งค๊ฐ๋ณ์: ๋งค๊ฐ๋ณ์๊ฐ ์์ต๋๋ค.
์์ค: Project_Full/external/InjectionScript/src/InjectionScript/Runtime/InjectionApiUO.cs:5389.
public void ActivateHandle()
๊ฒฐ๊ณผ: void.
ํธ์ถ:
bridge.ActivateHandle
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
public void ActivateHandle() => bridge.ActivateHandle();ํ์๋ ํธ์ถ ๋ฐ ์ํ ๋ณ๊ฒฝ์ ์ํํฉ๋๋ค.
๋งค๊ฐ๋ณ์: int graphic, int x, int y, int z, int hue, int map
์์ค: Project_Full/external/InjectionScript/src/InjectionScript/Runtime/InjectionApiUO.cs:6403.
private int AddUserStatic(int graphic, int x, int y, int z, int hue, int map)
๊ฒฐ๊ณผ: int.
์กฐ๊ฑด:
graphic < 0 || graphic > ushort.MaxValue || x < 0 || y < 0 || map < 0
ํธ์ถ:
string.Joinbridge.AddUserStatic
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
private int AddUserStatic(int graphic, int x, int y, int z, int hue, int map)
{
if (graphic < 0 || graphic > ushort.MaxValue || x < 0 || y < 0 || map < 0)
return -1;
int id = state.NextUserStaticId++;
state.UserStatics[id] = string.Join("|", graphic, x, y, z, hue, map);
bridge.AddUserStatic(id, graphic, x, y, z, hue, map);
return id;
}ํ์๋ ํธ์ถ ๋ฐ ์ํ ๋ณ๊ฒฝ์ ์ํํฉ๋๋ค.
๋งค๊ฐ๋ณ์: ๋งค๊ฐ๋ณ์๊ฐ ์์ต๋๋ค.
์์ค: Project_Full/external/InjectionScript/src/InjectionScript/Runtime/InjectionApiUO.cs:6094.
public void BandageSelf()
๊ฒฐ๊ณผ: void.
์กฐ๊ฑด:
foundBandages != string.Empty
ํธ์ถ:
FindTypeWaitTargetSelfUseObjectSystemMessage
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
public void BandageSelf()
{
var foundBandages = FindType(new InjectionValue(0x0e21), new InjectionValue(0), new InjectionValue("my"));
if (foundBandages != string.Empty)
{
WaitTargetSelf();
UseObject(foundBandages);
}
else
SystemMessage("No bandages found.");
}ํ์๋ ํธ์ถ ๋ฐ ์ํ ๋ณ๊ฒฝ์ ์ํํฉ๋๋ค.
๋งค๊ฐ๋ณ์: InjectionValue id, InjectionValue color, InjectionValue msg
์์ค: Project_Full/external/InjectionScript/src/InjectionScript/Runtime/InjectionApiUO.cs:5458.
public void CharPrint(InjectionValue id, InjectionValue color, InjectionValue msg)
๊ฒฐ๊ณผ: void.
ํธ์ถ:
CharPrintGetObjectNumberConversions.ToInt
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
public void CharPrint(InjectionValue id, InjectionValue color, InjectionValue msg)
=> CharPrint(GetObject(id), NumberConversions.ToInt(color), (string)msg);ํ์๋ ํธ์ถ ๋ฐ ์ํ ๋ณ๊ฒฝ์ ์ํํฉ๋๋ค.
๋งค๊ฐ๋ณ์: InjectionValue msg
์์ค: Project_Full/external/InjectionScript/src/InjectionScript/Runtime/InjectionApiUO.cs:5452.
public void ConsolePrint(InjectionValue msg)
๊ฒฐ๊ณผ: void.
ํธ์ถ:
bridge.Printmsg.ToString
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
public void ConsolePrint(InjectionValue msg) => bridge.Print(msg.ToString());ํ์๋ ํธ์ถ ๋ฐ ์ํ ๋ณ๊ฒฝ์ ์ํํฉ๋๋ค.
๋งค๊ฐ๋ณ์: string name, RuntimeDictionary<EquipSet> equipSets, int[] supportedLayers, string successMessage, string missingMessage
์์ค: Project_Full/external/InjectionScript/src/InjectionScript/Runtime/InjectionApiUO.cs:5759.
private int Equip(string name, RuntimeDictionary<EquipSet> equipSets, int[] supportedLayers, string successMessage, string missingMessage)
๊ฒฐ๊ณผ: int.
์กฐ๊ฑด:
equipSets.TryGet(name, out var equipSet)bridge.IsOnline() == 0id == currentid != 0
ํธ์ถ:
equipSets.TryGetbridge.IsOnlineSystemMessageequipSet.GetAtLayerbridge.ObjAtLayeractions.EquipSavedItembridge.Equipbridge.UseObjectactions.UnequipItembridge.UnequipinjectionApi.Wait
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
private int Equip(string name, RuntimeDictionary<EquipSet> equipSets, int[] supportedLayers, string successMessage, string missingMessage)
{
if (equipSets.TryGet(name, out var equipSet))
{
if (bridge.IsOnline() == 0)
{
SystemMessage("Equipment set requires an active connection.");
return 0;
}
bool success = true;
foreach (var layer in supportedLayers)
{
var id = equipSet.GetAtLayer(layer);
int current = bridge.ObjAtLayer(layer);
if (id == current) continue;
int accepted;
if (id != 0)
{
if (bridge is IApiEquipmentSetActions actions)
accepted = actions.EquipSavedItem(layer, id, state.UseEquipForDress != 0);
else if (state.UseEquipForDress != 0)
accepted = bridge.Equip(layer, id);
else
{
// Older bridge implementations expose only a void
// use call; successful dispatch is all they report.
bridge.UseObject(id);
accepted = 1;
}
}
else
{
accepted = bridge is IApiEquipmentActions actions
? actions.UnequipItem(current) : bridge.Unequip(layer);
}
success &= accepted != 0;
if (accepted != 0 && state.DressSpeed > 0)
injectionApi.Wait(state.DressSpeed);
}
SystemMessage(success ? successMessage : "Some equipment set requests were rejected.");
return success ? 1 : 0;
}
SystemMessage(missingMessage);
return 0;
}์ด ๋ถ๊ธฐ๋ ์ง์ ๋ ๋ช ๋ น ์ด๋ฆ๋ง ์ฒ๋ฆฌํฉ๋๋ค.
๋งค๊ฐ๋ณ์: ๋งค๊ฐ๋ณ์๊ฐ ์์ต๋๋ค.
์์ค: Project_Full/external/InjectionScript/src/InjectionScript/Runtime/InjectionApiUO.cs:1776.
๊ฒฐ๊ณผ: InjectionValue.Unit.
ํธ์ถ:
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
case "addgumpignorebyid": state.IgnoredGumpIds.Add(Arg(0)); return InjectionValue.Unit;์ด ๋ถ๊ธฐ๋ ์ง์ ๋ ๋ช ๋ น ์ด๋ฆ๋ง ์ฒ๋ฆฌํฉ๋๋ค.
๋งค๊ฐ๋ณ์: ๋งค๊ฐ๋ณ์๊ฐ ์์ต๋๋ค.
์์ค: Project_Full/external/InjectionScript/src/InjectionScript/Runtime/InjectionApiUO.cs:1245.
๊ฒฐ๊ณผ: InjectionValue.Unit.
ํธ์ถ:
-
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Attack:bridge.Attack(Arg(0)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0).
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
case "attack": bridge.Attack(Arg(0)); return InjectionValue.Unit;์ด ๋ถ๊ธฐ๋ ์ง์ ๋ ๋ช ๋ น ์ด๋ฆ๋ง ์ฒ๋ฆฌํฉ๋๋ค.
๋งค๊ฐ๋ณ์: ๋งค๊ฐ๋ณ์๊ฐ ์์ต๋๋ค.
์์ค: Project_Full/external/InjectionScript/src/InjectionScript/Runtime/InjectionApiUO.cs:1593.
๊ฒฐ๊ณผ: InjectionValue.Unit.
ํธ์ถ:
-
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.CloseMenu:bridge.CloseMenu().
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
case "closemenu": bridge.CloseMenu(); return InjectionValue.Unit;์ด ๋ถ๊ธฐ๋ ์ง์ ๋ ๋ช ๋ น ์ด๋ฆ๋ง ์ฒ๋ฆฌํฉ๋๋ค.
๋งค๊ฐ๋ณ์: ๋งค๊ฐ๋ณ์๊ฐ ์์ต๋๋ค.
์์ค: Project_Full/external/InjectionScript/src/InjectionScript/Runtime/InjectionApiUO.cs:1987.
๊ฒฐ๊ณผ: new InjectionValue(Equip("__stealth_saved_set__", dressSets, dressLayers, "Clothing set requests processed.", "No clothing set with setdress.")).
ํธ์ถ:
-
InjectionScript.Runtime.InjectionApiUO.Equip:Equip("__stealth_saved_set__", dressSets, dressLayers, "Clothing set requests processed.", "No clothing set with setdress.").
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
case "dresssavedset":
case "equipdressset": return new InjectionValue(Equip("__stealth_saved_set__", dressSets, dressLayers, "Clothing set requests processed.", "No clothing set with setdress."));์ด ๋ถ๊ธฐ๋ ์ง์ ๋ ๋ช ๋ น ์ด๋ฆ๋ง ์ฒ๋ฆฌํฉ๋๋ค.
๋งค๊ฐ๋ณ์: ๋งค๊ฐ๋ณ์๊ฐ ์์ต๋๋ค.
์์ค: Project_Full/external/InjectionScript/src/InjectionScript/Runtime/InjectionApiUO.cs:1379.
๊ฒฐ๊ณผ: InjectionValue.Unit; new InjectionValue(bridge.GetFindDistance()).
์กฐ๊ฑด: arguments.Length > 0.
ํธ์ถ:
-
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.SetFindDistance:bridge.SetFindDistance(Arg(0)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetFindDistance:bridge.GetFindDistance().
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
case "finddistance":
if (arguments.Length > 0) { bridge.SetFindDistance(Arg(0)); return InjectionValue.Unit; }
return new InjectionValue(bridge.GetFindDistance());์ด ๋ถ๊ธฐ๋ ์ง์ ๋ ๋ช ๋ น ์ด๋ฆ๋ง ์ฒ๋ฆฌํฉ๋๋ค.
๋งค๊ฐ๋ณ์: ๋งค๊ฐ๋ณ์๊ฐ ์์ต๋๋ค.
์์ค: Project_Full/external/InjectionScript/src/InjectionScript/Runtime/InjectionApiUO.cs:1323.
๊ฒฐ๊ณผ: new InjectionValue(bridge.GetAutoSellDelay()).
ํธ์ถ:
-
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetAutoSellDelay:bridge.GetAutoSellDelay().
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
case "getautoselldelay":
return new InjectionValue(bridge.GetAutoSellDelay());์ด ๋ถ๊ธฐ๋ ์ง์ ๋ ๋ช ๋ น ์ด๋ฆ๋ง ์ฒ๋ฆฌํฉ๋๋ค.
๋งค๊ฐ๋ณ์: ๋งค๊ฐ๋ณ์๊ฐ ์์ต๋๋ค.
์์ค: Project_Full/external/InjectionScript/src/InjectionScript/Runtime/InjectionApiUO.cs:1387.
๊ฒฐ๊ณผ: new InjectionValue(bridge.GetFoundItems().Select(serial => new InjectionValue(serial)).ToArray()).
ํธ์ถ:
-
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetFoundItems:bridge.GetFoundItems().
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
case "getfounditems":
return new InjectionValue(bridge.GetFoundItems().Select(serial => new InjectionValue(serial)).ToArray());์ด ๋ถ๊ธฐ๋ ์ง์ ๋ ๋ช ๋ น ์ด๋ฆ๋ง ์ฒ๋ฆฌํฉ๋๋ค.
๋งค๊ฐ๋ณ์: ๋งค๊ฐ๋ณ์๊ฐ ์์ต๋๋ค.
์์ค: Project_Full/external/InjectionScript/src/InjectionScript/Runtime/InjectionApiUO.cs:1600.
๊ฒฐ๊ณผ: new InjectionValue(bridge.GetGumpSerial(Arg(0))).
ํธ์ถ:
-
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetGumpSerial:bridge.GetGumpSerial(Arg(0)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0).
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
case "getgumpserial": return new InjectionValue(bridge.GetGumpSerial(Arg(0)));์ด ๋ถ๊ธฐ๋ ์ง์ ๋ ๋ช ๋ น ์ด๋ฆ๋ง ์ฒ๋ฆฌํฉ๋๋ค.
๋งค๊ฐ๋ณ์: ๋งค๊ฐ๋ณ์๊ฐ ์์ต๋๋ค.
์์ค: Project_Full/external/InjectionScript/src/InjectionScript/Runtime/InjectionApiUO.cs:1568.
๊ฒฐ๊ณผ: new InjectionValue(bridge.GetHP(Arg(0, bridge.Self))).
ํธ์ถ:
-
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetHP:bridge.GetHP(Arg(0, bridge.Self)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0, bridge.Self). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Self:bridge.Self.
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
case "gethp": return new InjectionValue(bridge.GetHP(Arg(0, bridge.Self)));์ด ๋ถ๊ธฐ๋ ์ง์ ๋ ๋ช ๋ น ์ด๋ฆ๋ง ์ฒ๋ฆฌํฉ๋๋ค.
๋งค๊ฐ๋ณ์: ๋งค๊ฐ๋ณ์๊ฐ ์์ต๋๋ค.
์์ค: Project_Full/external/InjectionScript/src/InjectionScript/Runtime/InjectionApiUO.cs:1569.
๊ฒฐ๊ณผ: new InjectionValue(bridge.GetMaxHP(Arg(0, bridge.Self))).
ํธ์ถ:
-
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetMaxHP:bridge.GetMaxHP(Arg(0, bridge.Self)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0, bridge.Self). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Self:bridge.Self.
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
case "getmaxhp": return new InjectionValue(bridge.GetMaxHP(Arg(0, bridge.Self)));์ด ๋ถ๊ธฐ๋ ์ง์ ๋ ๋ช ๋ น ์ด๋ฆ๋ง ์ฒ๋ฆฌํฉ๋๋ค.
๋งค๊ฐ๋ณ์: ๋งค๊ฐ๋ณ์๊ฐ ์์ต๋๋ค.
์์ค: Project_Full/external/InjectionScript/src/InjectionScript/Runtime/InjectionApiUO.cs:1496.
๊ฒฐ๊ณผ: new InjectionValue(bridge.GetMaxStamina(Arg(0, bridge.Self))).
ํธ์ถ:
-
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetMaxStamina:bridge.GetMaxStamina(Arg(0, bridge.Self)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0, bridge.Self). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Self:bridge.Self.
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
case "getmaxstam": return new InjectionValue(bridge.GetMaxStamina(Arg(0, bridge.Self)));์ด ๋ถ๊ธฐ๋ ์ง์ ๋ ๋ช ๋ น ์ด๋ฆ๋ง ์ฒ๋ฆฌํฉ๋๋ค.
๋งค๊ฐ๋ณ์: ๋งค๊ฐ๋ณ์๊ฐ ์์ต๋๋ค.
์์ค: Project_Full/external/InjectionScript/src/InjectionScript/Runtime/InjectionApiUO.cs:1523.
๊ฒฐ๊ณผ: new InjectionValue(bridge.GetScriptPath(Arg(0))).
ํธ์ถ:
-
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetScriptPath:bridge.GetScriptPath(Arg(0)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0).
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
case "getscriptpath": return new InjectionValue(bridge.GetScriptPath(Arg(0)));์ด ๋ถ๊ธฐ๋ ์ง์ ๋ ๋ช ๋ น ์ด๋ฆ๋ง ์ฒ๋ฆฌํฉ๋๋ค.
๋งค๊ฐ๋ณ์: ๋งค๊ฐ๋ณ์๊ฐ ์์ต๋๋ค.
์์ค: Project_Full/external/InjectionScript/src/InjectionScript/Runtime/InjectionApiUO.cs:1521.
๊ฒฐ๊ณผ: new InjectionValue(bridge.GetScriptsList().Select(value => new InjectionValue(value)).ToArray()).
ํธ์ถ:
-
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetScriptsList:bridge.GetScriptsList().
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
case "getscriptslist": return new InjectionValue(bridge.GetScriptsList().Select(value => new InjectionValue(value)).ToArray());์ด ๋ถ๊ธฐ๋ ์ง์ ๋ ๋ช ๋ น ์ด๋ฆ๋ง ์ฒ๋ฆฌํฉ๋๋ค.
๋งค๊ฐ๋ณ์: ๋งค๊ฐ๋ณ์๊ฐ ์์ต๋๋ค.
์์ค: Project_Full/external/InjectionScript/src/InjectionScript/Runtime/InjectionApiUO.cs:1917.
๊ฒฐ๊ณผ: InjectionValue.Unit.
ํธ์ถ:
-
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GlobalChatJoin:bridge.GlobalChatJoin(Text(0)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Text:Text(0).
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
case "globalchatjoinchannel": bridge.GlobalChatJoin(Text(0)); return InjectionValue.Unit;์ด ๋ถ๊ธฐ๋ ์ง์ ๋ ๋ช ๋ น ์ด๋ฆ๋ง ์ฒ๋ฆฌํฉ๋๋ค.
๋งค๊ฐ๋ณ์: ๋งค๊ฐ๋ณ์๊ฐ ์์ต๋๋ค.
์์ค: Project_Full/external/InjectionScript/src/InjectionScript/Runtime/InjectionApiUO.cs:1909.
๊ฒฐ๊ณผ: InjectionValue.Unit.
ํธ์ถ:
-
InjectionScript.Runtime.InjectionApiUO.QueueGumpControl:QueueGumpControl("checkbox", Arg(0), Text(1)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Text:Text(1).
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
case "gumpautocheckbox": QueueGumpControl("checkbox", Arg(0), Text(1)); return InjectionValue.Unit;์ด ๋ถ๊ธฐ๋ ์ง์ ๋ ๋ช ๋ น ์ด๋ฆ๋ง ์ฒ๋ฆฌํฉ๋๋ค.
๋งค๊ฐ๋ณ์: ๋งค๊ฐ๋ณ์๊ฐ ์์ต๋๋ค.
์์ค: Project_Full/external/InjectionScript/src/InjectionScript/Runtime/InjectionApiUO.cs:1955.
๊ฒฐ๊ณผ: new InjectionValue(httpBody).
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
case "http_body": return new InjectionValue(httpBody);์ด ๋ถ๊ธฐ๋ ์ง์ ๋ ๋ช ๋ น ์ด๋ฆ๋ง ์ฒ๋ฆฌํฉ๋๋ค.
๋งค๊ฐ๋ณ์: ๋งค๊ฐ๋ณ์๊ฐ ์์ต๋๋ค.
์์ค: Project_Full/external/InjectionScript/src/InjectionScript/Runtime/InjectionApiUO.cs:1363.
๊ฒฐ๊ณผ: new InjectionValue(bridge.Poisoned(Arg(0, bridge.Self))).
ํธ์ถ:
-
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Poisoned:bridge.Poisoned(Arg(0, bridge.Self)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0, bridge.Self). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Self:bridge.Self.
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
case "ispoisoned": return new InjectionValue(bridge.Poisoned(Arg(0, bridge.Self)));์ด ๋ถ๊ธฐ๋ ์ง์ ๋ ๋ช ๋ น ์ด๋ฆ๋ง ์ฒ๋ฆฌํฉ๋๋ค.
๋งค๊ฐ๋ณ์: ๋งค๊ฐ๋ณ์๊ฐ ์์ต๋๋ค.
์์ค: Project_Full/external/InjectionScript/src/InjectionScript/Runtime/InjectionApiUO.cs:1494.
๊ฒฐ๊ณผ: new InjectionValue(bridge.MaxStamina).
ํธ์ถ:
-
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.MaxStamina:bridge.MaxStamina.
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
case "maxstam": return new InjectionValue(bridge.MaxStamina);์ด ๋ถ๊ธฐ๋ ์ง์ ๋ ๋ช ๋ น ์ด๋ฆ๋ง ์ฒ๋ฆฌํฉ๋๋ค.
๋งค๊ฐ๋ณ์: ๋งค๊ฐ๋ณ์๊ฐ ์์ต๋๋ค.
์์ค: Project_Full/external/InjectionScript/src/InjectionScript/Runtime/InjectionApiUO.cs:1265.
ํธ์ถ:
-
InjectionScript.Runtime.InjectionApiUO.GetObject:GetObject(ObjAtLayer(Text(0))). -
InjectionScript.Runtime.InjectionApiUO.ObjAtLayer:ObjAtLayer(Text(0)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Text:Text(0). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.ObjAtLayer:bridge.ObjAtLayer(Arg(0)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0).
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
case "objatlayer":
return new InjectionValue(arguments[0].Kind == InjectionValueKind.String
? GetObject(ObjAtLayer(Text(0))) : bridge.ObjAtLayer(Arg(0)));์ด ๋ถ๊ธฐ๋ ์ง์ ๋ ๋ช ๋ น ์ด๋ฆ๋ง ์ฒ๋ฆฌํฉ๋๋ค.
๋งค๊ฐ๋ณ์: ๋งค๊ฐ๋ณ์๊ฐ ์์ต๋๋ค.
์์ค: Project_Full/external/InjectionScript/src/InjectionScript/Runtime/InjectionApiUO.cs:1650.
๊ฒฐ๊ณผ: InjectionValue.Unit.
ํธ์ถ:
-
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.TargetToTile:bridge.TargetToTile(Arg(0), Arg(1), Arg(2), Arg(3)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(1). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(2). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(3).
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
case "targettotile":
bridge.TargetToTile(Arg(0), Arg(1), Arg(2), Arg(3)); return InjectionValue.Unit;์ด ๋ถ๊ธฐ๋ ์ง์ ๋ ๋ช ๋ น ์ด๋ฆ๋ง ์ฒ๋ฆฌํฉ๋๋ค.
๋งค๊ฐ๋ณ์: ๋งค๊ฐ๋ณ์๊ฐ ์์ต๋๋ค.
์์ค: Project_Full/external/InjectionScript/src/InjectionScript/Runtime/InjectionApiUO.cs:1682.
๊ฒฐ๊ณผ: InjectionValue.Unit.
ํธ์ถ:
-
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.ToggleFly:bridge.ToggleFly().
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
case "togglefly": bridge.ToggleFly(); return InjectionValue.Unit;์ด ๋ถ๊ธฐ๋ ์ง์ ๋ ๋ช ๋ น ์ด๋ฆ๋ง ์ฒ๋ฆฌํฉ๋๋ค.
๋งค๊ฐ๋ณ์: ๋งค๊ฐ๋ณ์๊ฐ ์์ต๋๋ค.
์์ค: Project_Full/external/InjectionScript/src/InjectionScript/Runtime/InjectionApiUO.cs:1676.
๊ฒฐ๊ณผ: InjectionValue.Unit.
ํธ์ถ:
-
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.UseObject:bridge.UseObject(bridge.Self). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Self:bridge.Self.
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
case "useselfpaperdollscroll": bridge.UseObject(bridge.Self); return InjectionValue.Unit;์ด ๋ถ๊ธฐ๋ ์ง์ ๋ ๋ช ๋ น ์ด๋ฆ๋ง ์ฒ๋ฆฌํฉ๋๋ค.
๋งค๊ฐ๋ณ์: ๋งค๊ฐ๋ณ์๊ฐ ์์ต๋๋ค.
์์ค: Project_Full/external/InjectionScript/src/InjectionScript/Runtime/InjectionApiUO.cs:1648.
๊ฒฐ๊ณผ: new InjectionValue(bridge.WaitForClientTargetResponse(Arg(0))).
ํธ์ถ:
-
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.WaitForClientTargetResponse:bridge.WaitForClientTargetResponse(Arg(0)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0).
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
case "waitforclienttargetresponse": return new InjectionValue(bridge.WaitForClientTargetResponse(Arg(0)));์ด ๋ถ๊ธฐ๋ ์ง์ ๋ ๋ช ๋ น ์ด๋ฆ๋ง ์ฒ๋ฆฌํฉ๋๋ค.
๋งค๊ฐ๋ณ์: ๋งค๊ฐ๋ณ์๊ฐ ์์ต๋๋ค.
์์ค: Project_Full/external/InjectionScript/src/InjectionScript/Runtime/InjectionApiUO.cs:1296.
๊ฒฐ๊ณผ: new InjectionValue(bridge.LastAttack).
ํธ์ถ:
-
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.LastAttack:bridge.LastAttack.
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
case "lastattack":
case "wartargetid": return new InjectionValue(bridge.LastAttack);ํ์๋ ํธ์ถ ๋ฐ ์ํ ๋ณ๊ฒฝ์ ์ํํฉ๋๋ค.
๋งค๊ฐ๋ณ์: InjectionValue[] values
์์ค: Project_Full/external/InjectionScript/src/InjectionScript/Runtime/InjectionApiUO.cs:4536.
private InjectionValue ExecuteEmptyContainer(InjectionValue[] values)
๊ฒฐ๊ณผ: InjectionValue.
์กฐ๊ฑด:
source == 0
ํธ์ถ:
Math.MaxNumberConversions.ToIntResolveTransferObjectbridge.SelectContainerResolveTransferDestinationbridge.EmptyContainer
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
private InjectionValue ExecuteEmptyContainer(InjectionValue[] values)
{
int delay = Math.Max(0, NumberConversions.ToInt(values[0]));
int source = values.Length > 1 ? ResolveTransferObject(values[1]) : 0;
if (source == 0) source = bridge.SelectContainer();
if (source == 0) return InjectionValue.Zero;
int destination = values.Length > 2 ? ResolveTransferDestination(values[2]) : bridge.Backpack;
return new InjectionValue(bridge.EmptyContainer(source, destination, delay));
}์ด ๋ถ๊ธฐ๋ ์ง์ ๋ ๋ช ๋ น ์ด๋ฆ๋ง ์ฒ๋ฆฌํฉ๋๋ค.
๋งค๊ฐ๋ณ์: ๋งค๊ฐ๋ณ์๊ฐ ์์ต๋๋ค.
์์ค: Project_Full/external/InjectionScript/src/InjectionScript/Runtime/InjectionApiUO.cs:2942.
์กฐ๊ฑด: arguments.Length > 1.
ํธ์ถ:
-
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.WaitTargetObject:bridge.WaitTargetObject(Arg(1)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias::Arg:Arg(1). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.UseObject:bridge.UseObject(Arg(0, bridge.GetLastObject())). -
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias::Arg:Arg(0, bridge.GetLastObject()). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetLastObject:bridge.GetLastObject().
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
case "dye":
if (arguments.Length > 1) bridge.WaitTargetObject(Arg(1));
bridge.UseObject(Arg(0, bridge.GetLastObject()));
break;์ด ๋ถ๊ธฐ๋ ์ง์ ๋ ๋ช ๋ น ์ด๋ฆ๋ง ์ฒ๋ฆฌํฉ๋๋ค.
๋งค๊ฐ๋ณ์: ๋งค๊ฐ๋ณ์๊ฐ ์์ต๋๋ค.
์์ค: Project_Full/external/InjectionScript/src/InjectionScript/Runtime/InjectionApiUO.cs:2976.
ํธ์ถ:
-
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.LoadHotkeys:bridge.LoadHotkeys().
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
case "loadhotkeys": bridge.LoadHotkeys(); break;ํ์๋ ํธ์ถ ๋ฐ ์ํ ๋ณ๊ฒฝ์ ์ํํฉ๋๋ค.
๋งค๊ฐ๋ณ์: InjectionValue id
์์ค: Project_Full/external/InjectionScript/src/InjectionScript/Runtime/InjectionApiUO.cs:5297.
public int FindCount(InjectionValue id)
๊ฒฐ๊ณผ: int.
ํธ์ถ:
bridge.GetQuantityGetObject
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
public int FindCount(InjectionValue id) => bridge.GetQuantity(GetObject(id));ํ์๋ ํธ์ถ ๋ฐ ์ํ ๋ณ๊ฒฝ์ ์ํํฉ๋๋ค.
๋งค๊ฐ๋ณ์: InjectionValue type, InjectionValue color, InjectionValue container, InjectionValue range
์์ค: Project_Full/external/InjectionScript/src/InjectionScript/Runtime/InjectionApiUO.cs:4724.
public string FindType(InjectionValue type, InjectionValue color, InjectionValue container, InjectionValue range)
๊ฒฐ๊ณผ: string.
์กฐ๊ฑด:
container.Kind == InjectionValueKind.String && container.String.Equals("my", StringComparison.OrdinalIgnoreCase)
ํธ์ถ:
container.String.EqualsFindTypeResolveTypeNumberConversions.ToIntConvertContainer
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
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);
}ํ์๋ ํธ์ถ ๋ฐ ์ํ ๋ณ๊ฒฝ์ ์ํํฉ๋๋ค.
๋งค๊ฐ๋ณ์: int id
์์ค: Project_Full/external/InjectionScript/src/InjectionScript/Runtime/InjectionApiUO.cs:3690.
public int GetDistance(int id)
๊ฒฐ๊ณผ: int.
ํธ์ถ:
bridge.GetDistance
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
public int GetDistance(int id) => bridge.GetDistance(id);ํ์๋ ํธ์ถ ๋ฐ ์ํ ๋ณ๊ฒฝ์ ์ํํฉ๋๋ค.
๋งค๊ฐ๋ณ์: InjectionValue number
์์ค: Project_Full/external/InjectionScript/src/InjectionScript/Runtime/InjectionApiUO.cs:3908.
public string GetEasyUO(InjectionValue number)
๊ฒฐ๊ณผ: string.
ํธ์ถ:
bridge.GetEasyUONumberConversions.ToInt
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
public string GetEasyUO(InjectionValue number) => bridge.GetEasyUO(NumberConversions.ToInt(number));ํ์๋ ํธ์ถ ๋ฐ ์ํ ๋ณ๊ฒฝ์ ์ํํฉ๋๋ค.
๋งค๊ฐ๋ณ์: ๋งค๊ฐ๋ณ์๊ฐ ์์ต๋๋ค.
์์ค: Project_Full/external/InjectionScript/src/InjectionScript/Runtime/InjectionApiUO.cs:5611.
public string GetFoundedTextColor()
๊ฒฐ๊ณผ: string.
ํธ์ถ:
โ
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
public string GetFoundedTextColor() => selectedJournalEntry != null ? $"0x{selectedJournalEntry.Color:X4}" : "0x0000";ํ์๋ ํธ์ถ ๋ฐ ์ํ ๋ณ๊ฒฝ์ ์ํํฉ๋๋ค.
๋งค๊ฐ๋ณ์: int id
์์ค: Project_Full/external/InjectionScript/src/InjectionScript/Runtime/InjectionApiUO.cs:3718.
public int GetNotoriety(int id)
๊ฒฐ๊ณผ: int.
ํธ์ถ:
bridge.GetNotoriety
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
public int GetNotoriety(int id) => bridge.GetNotoriety(id);ํ์๋ ํธ์ถ ๋ฐ ์ํ ๋ณ๊ฒฝ์ ์ํํฉ๋๋ค.
๋งค๊ฐ๋ณ์: string id
์์ค: Project_Full/external/InjectionScript/src/InjectionScript/Runtime/InjectionApiUO.cs:3678.
public int GetX(string id)
๊ฒฐ๊ณผ: int.
ํธ์ถ:
GetXGetObject
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
public int GetX(string id) => GetX(GetObject(id));ํ์๋ ํธ์ถ ๋ฐ ์ํ ๋ณ๊ฒฝ์ ์ํํฉ๋๋ค.
๋งค๊ฐ๋ณ์: ๋งค๊ฐ๋ณ์๊ฐ ์์ต๋๋ค.
์์ค: Project_Full/external/InjectionScript/src/InjectionScript/Runtime/InjectionApiUO.cs:3681.
public int GetY()
๊ฒฐ๊ณผ: int.
ํธ์ถ:
GetY
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
public int GetY() => GetY("self");ํ์๋ ํธ์ถ ๋ฐ ์ํ ๋ณ๊ฒฝ์ ์ํํฉ๋๋ค.
๋งค๊ฐ๋ณ์: int amount, string id
์์ค: Project_Full/external/InjectionScript/src/InjectionScript/Runtime/InjectionApiUO.cs:4489.
public int Grab(int amount, string id)
๊ฒฐ๊ณผ: int.
ํธ์ถ:
CompactGrab
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
public int Grab(int amount, string id) => CompactGrab(new[] { new InjectionValue(amount), new InjectionValue(id) });ํ์๋ ํธ์ถ ๋ฐ ์ํ ๋ณ๊ฒฝ์ ์ํํฉ๋๋ค.
๋งค๊ฐ๋ณ์: string source, InjectionValue mask
์์ค: Project_Full/external/InjectionScript/src/InjectionScript/Runtime/InjectionApiUO.cs:5191.
private static bool MatchesTextMask(string source, InjectionValue mask)
๊ฒฐ๊ณผ: bool.
์กฐ๊ฑด:
mask.Kind == InjectionValueKind.Unit || mask.Kind == InjectionValueKind.Anymask.Kind != InjectionValueKind.Stringraw.Length == 0 || raw == "-1" || raw.Equals("any", StringComparison.OrdinalIgnoreCase)wanted.Length > 0 && haystack.IndexOf(wanted, StringComparison.OrdinalIgnoreCase) >= 0
ํธ์ถ:
NumberConversions.ToInt(mask.String ?? string.Empty).Trimraw.Equalsraw.Splittoken.Trimhaystack.IndexOf
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
private static bool MatchesTextMask(string source, InjectionValue mask)
{
if (mask.Kind == InjectionValueKind.Unit || mask.Kind == InjectionValueKind.Any)
return true;
if (mask.Kind != InjectionValueKind.String)
return NumberConversions.ToInt(mask) <= 0;
string raw = (mask.String ?? string.Empty).Trim();
if (raw.Length == 0 || raw == "-1" || raw.Equals("any", StringComparison.OrdinalIgnoreCase))
return true;
string haystack = source ?? string.Empty;
foreach (string token in raw.Split(new[] { '|', ',', ';' }, StringSplitOptions.RemoveEmptyEntries))
{
string wanted = token.Trim();
if (wanted.Length > 0 && haystack.IndexOf(wanted, StringComparison.OrdinalIgnoreCase) >= 0)
return true;
}
return false;
}์๋ ์์ ๊ฐ์ ๋ฐํํฉ๋๋ค.
๋งค๊ฐ๋ณ์: ๋งค๊ฐ๋ณ์๊ฐ ์์ต๋๋ค.
์์ค: Project_Full/external/InjectionScript/src/InjectionScript/Runtime/InjectionApiUO.cs:2135.
bool IsCurrentRequest()
๊ฒฐ๊ณผ: bool.
๊ฒฐ๊ณผ: ownership == null || ownership.IsMovementRequestCurrent(requestId).
ํธ์ถ: ownership.IsMovementRequestCurrent.
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
bool IsCurrentRequest() => ownership == null || ownership.IsMovementRequestCurrent(requestId);ํ์๋ ํธ์ถ ๋ฐ ์ํ ๋ณ๊ฒฝ์ ์ํํฉ๋๋ค.
๋งค๊ฐ๋ณ์: InjectionValue value, bool allowGround = false
์์ค: Project_Full/external/InjectionScript/src/InjectionScript/Runtime/InjectionApiUO.cs:4546.
private int ResolveTransferDestination(InjectionValue value, bool allowGround = false)
๊ฒฐ๊ณผ: int.
์กฐ๊ฑด:
-
value.Kind == InjectionValueKind.String -
`name.Equals("self", StringComparison.OrdinalIgnoreCase)
|| name.Equals("my", StringComparison.OrdinalIgnoreCase) || name.Equals("backpack", StringComparison.OrdinalIgnoreCase)` -
bridge.Backpack > 0 -
`name.Equals("receiving", StringComparison.OrdinalIgnoreCase)
|| name.Equals("catchbag", StringComparison.OrdinalIgnoreCase)`
ํธ์ถ:
.Trimname.EqualsNumberConversions.TryStr2IntTryGetObjectResolveTransferObject
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
private int ResolveTransferDestination(InjectionValue value, bool allowGround = false)
{
// "self" as a transfer destination means the player's inventory.
// Keep normal object lookup unchanged: GetX('self') still means the player.
if (value.Kind == InjectionValueKind.String)
{
string name = value.String?.Trim() ?? string.Empty;
if (name.Equals("self", StringComparison.OrdinalIgnoreCase)
|| name.Equals("my", StringComparison.OrdinalIgnoreCase)
|| name.Equals("backpack", StringComparison.OrdinalIgnoreCase))
{
if (bridge.Backpack > 0) return bridge.Backpack;
throw new NativeSubrutineException("No player backpack is available.");
}
if (name.Equals("receiving", StringComparison.OrdinalIgnoreCase)
|| name.Equals("catchbag", StringComparison.OrdinalIgnoreCase))
{
int receiving = state.ReceivingContainer > 0 ? state.ReceivingContainer : bridge.Backpack;
if (receiving > 0) return receiving;
throw new NativeSubrutineException("No receiving container or player backpack is available.");
}
if (allowGround && name.Equals("ground", StringComparison.OrdinalIgnoreCase)) return 0;
// A missing named target must never become a ground drop merely
// because coordinates were supplied. Only explicit ground/0 does.
if (!NumberConversions.TryStr2Int(name, out int literal))
{
if (TryGetObject(name, out int serial) && serial > 0) return serial;
throw new NativeSubrutineException("Unknown transfer destination: " + name);
}
value = new InjectionValue(literal);
}
return ResolveTransferObject(value, allowGround);
}ํ์๋ ํธ์ถ ๋ฐ ์ํ ๋ณ๊ฒฝ์ ์ํํฉ๋๋ค.
๋งค๊ฐ๋ณ์: ๋งค๊ฐ๋ณ์๊ฐ ์์ต๋๋ค.
์์ค: Project_Full/external/InjectionScript/src/InjectionScript/Runtime/InjectionApiUO.cs:3897.
public int StealthCnt()
๊ฒฐ๊ณผ: int.
ํธ์ถ:
bridge.StealthCnt
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
public int StealthCnt() => bridge.StealthCnt();ํ์๋ ํธ์ถ ๋ฐ ์ํ ๋ณ๊ฒฝ์ ์ํํฉ๋๋ค.
๋งค๊ฐ๋ณ์: InjectionValue value, out int container
์์ค: Project_Full/external/InjectionScript/src/InjectionScript/Runtime/InjectionApiUO.cs:5006.
private bool TryResolveWorldItemQueryContainer(InjectionValue value, out int container)
๊ฒฐ๊ณผ: bool.
์กฐ๊ฑด:
value.Kind == InjectionValueKind.Stringtext.Equals("ground", StringComparison.OrdinalIgnoreCase)text.Equals("my", StringComparison.OrdinalIgnoreCase) || text.Equals("backpack", StringComparison.OrdinalIgnoreCase)!NumberConversions.TryStr2Int(text, out literal)
ํธ์ถ:
value.String.Trimtext.EqualsNumberConversions.TryStr2IntTryGetObject
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
private bool TryResolveWorldItemQueryContainer(InjectionValue value, out int container)
{
container = 0;
int literal;
if (value.Kind == InjectionValueKind.String)
{
string text = value.String.Trim();
if (text.Equals("ground", StringComparison.OrdinalIgnoreCase))
return true;
if (text.Equals("my", StringComparison.OrdinalIgnoreCase) || text.Equals("backpack", StringComparison.OrdinalIgnoreCase))
{
container = bridge.Backpack;
return container > 0;
}
if (!NumberConversions.TryStr2Int(text, out literal))
return TryGetObject(new InjectionValue(text), out container) && container > 0;
}
else if (value.Kind == InjectionValueKind.Integer)
literal = value.Integer;
else
return false;
// Preserve explicit numeric ground selectors; -1 is the legacy bag selector.
if (literal == 0 || literal == 1)
return true;
container = literal == -1 ? bridge.Backpack : literal;
return container > 0;
}ํ์๋ ํธ์ถ ๋ฐ ์ํ ๋ณ๊ฒฝ์ ์ํํฉ๋๋ค.
๋งค๊ฐ๋ณ์: int triggerId
์์ค: Project_Full/external/InjectionScript/src/InjectionScript/Runtime/InjectionApiUO.cs:3171.
public void WaitGump(int triggerId)
๊ฒฐ๊ณผ: void.
์กฐ๊ฑด:
bridge is IApiGumpAutomation automation
ํธ์ถ:
automation.QueueGumpButtonsbridge.WaitGumpSelect
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
public void WaitGump(int triggerId)
{
if (bridge is IApiGumpAutomation automation) automation.QueueGumpButtons(new[] { triggerId });
else bridge.WaitGumpSelect(triggerId, 30_000);
}ํ์๋ ํธ์ถ ๋ฐ ์ํ ๋ณ๊ฒฝ์ ์ํํฉ๋๋ค.
๋งค๊ฐ๋ณ์: string prompt1, string choice1, string prompt2, string choice2
์์ค: Project_Full/external/InjectionScript/src/InjectionScript/Runtime/InjectionApiUO.cs:3391.
public void WaitMenu(string prompt1, string choice1, string prompt2, string choice2)
๊ฒฐ๊ณผ: void.
ํธ์ถ:
bridge.WaitMenu
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
public void WaitMenu(string prompt1, string choice1, string prompt2, string choice2)
=> bridge.WaitMenu(prompt1, choice1, prompt2, choice2);ํ์๋ ํธ์ถ ๋ฐ ์ํ ๋ณ๊ฒฝ์ ์ํํฉ๋๋ค.
๋งค๊ฐ๋ณ์: InjectionValue type
์์ค: Project_Full/external/InjectionScript/src/InjectionScript/Runtime/InjectionApiUO.cs:4346.
public void WaitTargetGround(InjectionValue type)
๊ฒฐ๊ณผ: void.
ํธ์ถ:
WaitTargetGround
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
public void WaitTargetGround(InjectionValue type) => WaitTargetGround(type, new InjectionValue(-1));ํ์๋ ํธ์ถ ๋ฐ ์ํ ๋ณ๊ฒฝ์ ์ํํฉ๋๋ค.
๋งค๊ฐ๋ณ์: string id
์์ค: Project_Full/external/InjectionScript/src/InjectionScript/Runtime/InjectionApiUO.cs:4287.
public void WaitTargetObject(string id)
๊ฒฐ๊ณผ: void.
ํธ์ถ:
WaitTargetObjectGetObject
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
public void WaitTargetObject(string id) => WaitTargetObject(GetObject(id));ํ์๋ ํธ์ถ ๋ฐ ์ํ ๋ณ๊ฒฝ์ ์ํํฉ๋๋ค.
๋งค๊ฐ๋ณ์: ๋งค๊ฐ๋ณ์๊ฐ ์์ต๋๋ค.
์์ค: Project_Full/external/InjectionScript/src/InjectionScript/Runtime/InjectionApiUO.cs:5869.
public int WarMode()
๊ฒฐ๊ณผ: int.
ํธ์ถ:
bridge.WarMode
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
public int WarMode() => bridge.WarMode();ํธ์ถ ์ ์ ์ฅ๋ ์ฒ๋ฆฌ๊ธฐ delegate๋ฅผ ์คํํฉ๋๋ค. ๋ฑ๋ก ๋ฉ์๋๋ API๋ฅผ ๊ตฌ์ฑํ ๋ ์ด delegate๋ฅผ ๋ง๋ญ๋๋ค.
๋งค๊ฐ๋ณ์: ๋งค๊ฐ๋ณ์๊ฐ ์์ต๋๋ค.
์์ค: Project_Full/external/InjectionScript/src/InjectionScript/Runtime/InjectionApiUO.cs:1071.
๊ฒฐ๊ณผ: bridge.CharacterTitle.
ํธ์ถ:
-
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.CharacterTitle:bridge.CharacterTitle.
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
() => bridge.CharacterTitleํธ์ถ ์ ์ ์ฅ๋ ์ฒ๋ฆฌ๊ธฐ delegate๋ฅผ ์คํํฉ๋๋ค. ๋ฑ๋ก ๋ฉ์๋๋ API๋ฅผ ๊ตฌ์ฑํ ๋ ์ด delegate๋ฅผ ๋ง๋ญ๋๋ค.
๋งค๊ฐ๋ณ์: ๋งค๊ฐ๋ณ์๊ฐ ์์ต๋๋ค.
์์ค: Project_Full/external/InjectionScript/src/InjectionScript/Runtime/InjectionApiUO.cs:1056.
๊ฒฐ๊ณผ: bridge.GetDir(bridge.Self).
ํธ์ถ:
-
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetDir:bridge.GetDir(bridge.Self). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Self:bridge.Self.
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
() => bridge.GetDir(bridge.Self)ํธ์ถ ์ ์ ์ฅ๋ ์ฒ๋ฆฌ๊ธฐ delegate๋ฅผ ์คํํฉ๋๋ค. ๋ฑ๋ก ๋ฉ์๋๋ API๋ฅผ ๊ตฌ์ฑํ ๋ ์ด delegate๋ฅผ ๋ง๋ญ๋๋ค.
๋งค๊ฐ๋ณ์: ๋งค๊ฐ๋ณ์๊ฐ ์์ต๋๋ค.
์์ค: Project_Full/external/InjectionScript/src/InjectionScript/Runtime/InjectionApiUO.cs:1025.
๊ฒฐ๊ณผ: bridge.GetMaxHP(bridge.Self).
ํธ์ถ:
-
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetMaxHP:bridge.GetMaxHP(bridge.Self). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Self:bridge.Self.
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
() => bridge.GetMaxHP(bridge.Self)ํธ์ถ ์ ์ ์ฅ๋ ์ฒ๋ฆฌ๊ธฐ delegate๋ฅผ ์คํํฉ๋๋ค. ๋ฑ๋ก ๋ฉ์๋๋ API๋ฅผ ๊ตฌ์ฑํ ๋ ์ด delegate๋ฅผ ๋ง๋ญ๋๋ค.
๋งค๊ฐ๋ณ์: ๋งค๊ฐ๋ณ์๊ฐ ์์ต๋๋ค.
์์ค: Project_Full/external/InjectionScript/src/InjectionScript/Runtime/InjectionApiUO.cs:4649.
values
๊ฒฐ๊ณผ: values.
๊ฒฐ๊ณผ: CompactGetMobiles(values).
ํธ์ถ: CompactGetMobiles.
ํธ์ถ:
-
InjectionScript.Runtime.InjectionApiUO.CompactGetMobiles:CompactGetMobiles(values).
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
values => CompactGetMobiles(values)ํธ์ถ ์ ์ ์ฅ๋ ์ฒ๋ฆฌ๊ธฐ delegate๋ฅผ ์คํํฉ๋๋ค. ๋ฑ๋ก ๋ฉ์๋๋ API๋ฅผ ๊ตฌ์ฑํ ๋ ์ด delegate๋ฅผ ๋ง๋ญ๋๋ค.
๋งค๊ฐ๋ณ์: ๋งค๊ฐ๋ณ์๊ฐ ์์ต๋๋ค.
์์ค: Project_Full/external/InjectionScript/src/InjectionScript/Runtime/InjectionApiUO.cs:1049.
๊ฒฐ๊ณผ: bridge.FollowersMax.
ํธ์ถ:
-
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.FollowersMax:bridge.FollowersMax.
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
() => bridge.FollowersMaxํธ์ถ ์ ์ ์ฅ๋ ์ฒ๋ฆฌ๊ธฐ delegate๋ฅผ ์คํํฉ๋๋ค. ๋ฑ๋ก ๋ฉ์๋๋ API๋ฅผ ๊ตฌ์ฑํ ๋ ์ด delegate๋ฅผ ๋ง๋ญ๋๋ค.
๋งค๊ฐ๋ณ์: ๋งค๊ฐ๋ณ์๊ฐ ์์ต๋๋ค.
์์ค: Project_Full/external/InjectionScript/src/InjectionScript/Runtime/InjectionApiUO.cs:1042.
๊ฒฐ๊ณผ: bridge.Armor.
ํธ์ถ:
-
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Armor:bridge.Armor.
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
() => bridge.Armorํธ์ถ ์ ์ ์ฅ๋ ์ฒ๋ฆฌ๊ธฐ delegate๋ฅผ ์คํํฉ๋๋ค. ๋ฑ๋ก ๋ฉ์๋๋ API๋ฅผ ๊ตฌ์ฑํ ๋ ์ด delegate๋ฅผ ๋ง๋ญ๋๋ค.
๋งค๊ฐ๋ณ์: ๋งค๊ฐ๋ณ์๊ฐ ์์ต๋๋ค.
์์ค: Project_Full/external/InjectionScript/src/InjectionScript/Runtime/InjectionApiUO.cs:1044.
๊ฒฐ๊ณผ: bridge.ColdResistance.
ํธ์ถ:
-
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.ColdResistance:bridge.ColdResistance.
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
() => bridge.ColdResistanceํธ์ถ ์ ์ ์ฅ๋ ์ฒ๋ฆฌ๊ธฐ delegate๋ฅผ ์คํํฉ๋๋ค. ๋ฑ๋ก ๋ฉ์๋๋ API๋ฅผ ๊ตฌ์ฑํ ๋ ์ด delegate๋ฅผ ๋ง๋ญ๋๋ค.
๋งค๊ฐ๋ณ์: ๋งค๊ฐ๋ณ์๊ฐ ์์ต๋๋ค.
์์ค: Project_Full/external/InjectionScript/src/InjectionScript/Runtime/InjectionApiUO.cs:1046.
๊ฒฐ๊ณผ: bridge.EnergyResistance.
ํธ์ถ:
-
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.EnergyResistance:bridge.EnergyResistance.
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
() => bridge.EnergyResistanceํธ์ถ ์ ์ ์ฅ๋ ์ฒ๋ฆฌ๊ธฐ delegate๋ฅผ ์คํํฉ๋๋ค. ๋ฑ๋ก ๋ฉ์๋๋ API๋ฅผ ๊ตฌ์ฑํ ๋ ์ด delegate๋ฅผ ๋ง๋ญ๋๋ค.
๋งค๊ฐ๋ณ์: ๋งค๊ฐ๋ณ์๊ฐ ์์ต๋๋ค.
์์ค: Project_Full/external/InjectionScript/src/InjectionScript/Runtime/InjectionApiUO.cs:1053.
๊ฒฐ๊ณผ: bridge.GetX(bridge.Self).
ํธ์ถ:
-
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetX:bridge.GetX(bridge.Self). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Self:bridge.Self.
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
() => bridge.GetX(bridge.Self)ํธ์ถ ์ ์ ์ฅ๋ ์ฒ๋ฆฌ๊ธฐ delegate๋ฅผ ์คํํฉ๋๋ค. ๋ฑ๋ก ๋ฉ์๋๋ API๋ฅผ ๊ตฌ์ฑํ ๋ ์ด delegate๋ฅผ ๋ง๋ญ๋๋ค.
๋งค๊ฐ๋ณ์: ๋งค๊ฐ๋ณ์๊ฐ ์์ต๋๋ค.
์์ค: Project_Full/external/InjectionScript/src/InjectionScript/Runtime/InjectionApiUO.cs:1054.
๊ฒฐ๊ณผ: bridge.GetY(bridge.Self).
ํธ์ถ:
-
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetY:bridge.GetY(bridge.Self). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Self:bridge.Self.
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
() => bridge.GetY(bridge.Self)์๋ ์์ ๊ฐ์ ๋ฐํํฉ๋๋ค.
๋งค๊ฐ๋ณ์: ๋งค๊ฐ๋ณ์๊ฐ ์์ต๋๋ค.
์์ค: Project_Full/external/InjectionScript/src/InjectionScript/Runtime/InjectionApiUO.cs:1007.
๊ฒฐ๊ณผ: getter(bridge.Self).
ํธ์ถ:
-
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Self:bridge.Self.
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
() => getter(bridge.Self)์๋ ์์ ๊ฐ์ ๋ฐํํฉ๋๋ค.
๋งค๊ฐ๋ณ์: ๋งค๊ฐ๋ณ์๊ฐ ์์ต๋๋ค.
์์ค: Project_Full/external/InjectionScript/src/InjectionScript/Runtime/InjectionApiUO.cs:1013.
value
๊ฒฐ๊ณผ: value.
๊ฒฐ๊ณผ: getter(GetObject(value)).
ํธ์ถ: getter, GetObject.
ํธ์ถ:
-
InjectionScript.Runtime.InjectionApiUO.GetObject:GetObject(value).
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
value => getter(GetObject(value))์๋ ์์ ๊ฐ์ ๋ฐํํฉ๋๋ค.
๋งค๊ฐ๋ณ์: ๋งค๊ฐ๋ณ์๊ฐ ์์ต๋๋ค.
์์ค: Project_Full/external/InjectionScript/src/InjectionScript/Runtime/InjectionApiUO.cs:1013.
value
๊ฒฐ๊ณผ: value.
๊ฒฐ๊ณผ: getter(GetObject(value)).
ํธ์ถ: getter, GetObject.
ํธ์ถ:
-
InjectionScript.Runtime.InjectionApiUO.GetObject:GetObject(value).
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
value => getter(GetObject(value))ํ์๋ ํธ์ถ ๋ฐ ์ํ ๋ณ๊ฒฝ์ ์ํํฉ๋๋ค.
๋งค๊ฐ๋ณ์: int type, int hue
์์ค: Project_Full/external/InjectionScript/src/InjectionScript/Runtime/State/NamedIgnoreLists.cs:17.
public bool Matches(int type, int hue)
๊ฒฐ๊ณผ: bool.
ํธ์ถ:
rules.Contains
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
public bool Matches(int type, int hue) => rules.Contains((type, hue)) || rules.Contains((type, -1))
|| rules.Contains((-1, hue)) || rules.Contains((-1, -1));ํ์๋ ํธ์ถ ๋ฐ ์ํ ๋ณ๊ฒฝ์ ์ํํฉ๋๋ค.
๋งค๊ฐ๋ณ์: string name, int graphic
์์ค: Project_Full/external/InjectionScript/src/InjectionScript/Runtime/State/NamedTypes.cs:22.
public void Set(string name, int graphic)
๊ฒฐ๊ณผ: void.
์กฐ๊ฑด:
graphic < 0 || graphic > ushort.MaxValue
ํธ์ถ:
ValidateName
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
public void Set(string name, int graphic)
{
string key = ValidateName(name);
if (graphic < 0 || graphic > ushort.MaxValue)
throw new NativeSubrutineException("UO.AddType requires a graphic in 0..65535, not an object serial.");
lock (gate) values[key] = graphic;
}ํ์๋ ํธ์ถ ๋ฐ ์ํ ๋ณ๊ฒฝ์ ์ํํฉ๋๋ค.
๋งค๊ฐ๋ณ์: string name, string value
์์ค: Project_Full/external/InjectionScript/src/InjectionScript/Runtime/State/Globals.cs:85.
public void Set(string name, string value)
๊ฒฐ๊ณผ: void.
์กฐ๊ฑด:
filePath == nullFile.Exists(temporary)
ํธ์ถ:
ArgumentException.ThrowIfNullOrWhiteSpaceWithLockReadDirectory.CreateDirectoryPath.GetDirectoryNameGuid.NewGuid().ToStringGuid.NewGuidJsonSerializer.Serializestream.FlushFile.MoveFile.ExistsFile.Delete
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
public void Set(string name, string value)
{
ArgumentException.ThrowIfNullOrWhiteSpace(name);
value ??= string.Empty;
if (filePath == null) { lock (memoryLock) memory[name] = value; return; }
WithLock(() =>
{
var values = Read(); values[name] = value;
Directory.CreateDirectory(Path.GetDirectoryName(filePath));
string temporary = filePath + "." + Guid.NewGuid().ToString("N") + ".tmp";
try
{
using (var stream = new FileStream(temporary, FileMode.CreateNew, FileAccess.Write, FileShare.None))
{
JsonSerializer.Serialize(stream, values);
stream.Flush(flushToDisk: true);
}
File.Move(temporary, filePath, overwrite: true);
}
finally { if (File.Exists(temporary)) File.Delete(temporary); }
return 0;
});
}ํ์๋ ํธ์ถ ๋ฐ ์ํ ๋ณ๊ฒฝ์ ์ํํฉ๋๋ค.
๋งค๊ฐ๋ณ์: ๋งค๊ฐ๋ณ์๊ฐ ์์ต๋๋ค.
์์ค: Project_Full/external/InjectionScript/src/InjectionScript/Runtime/State/Globals.cs:119.
private Dictionary<string, string> Read()
๊ฒฐ๊ณผ: Dictionary<string, string>.
์กฐ๊ฑด:
!File.Exists(filePath)values == null
ํธ์ถ:
File.ExistsFile.OpenReadJsonSerializer.Deserialize<Dictionary<string, string>>
๋ด๋ถ ๊ตฌํ ์ฝ๋์ด๋ฉฐ ๋ ๋ฆฝ ์คํฌ๋ฆฝํธ๋ก ์คํํ ์ ์์ต๋๋ค.
private Dictionary<string, string> Read()
{
if (!File.Exists(filePath)) return new Dictionary<string, string>(StringComparer.Ordinal);
try
{
using var stream = File.OpenRead(filePath);
var values = JsonSerializer.Deserialize<Dictionary<string, string>>(stream);
if (values == null) throw new InvalidDataException("The shared C# global store contains no object.");
return new Dictionary<string, string>(values, StringComparer.Ordinal);
}
catch (JsonException error)
{ throw new InvalidDataException("The shared C# global store is invalid; existing data was preserved.", error); }
}