{ "schemaVersion": 1, "commands": 802, "reviewed": 233, "pending": 569, "complete": false, "scope": "Review of primary source and implementation; cached references alone do not count as reviewed.", "entries": [ { "name": "Abs", "overloads": 1, "status": "reviewed-project-extension", "candidateSources": [], "sources": [ "https://learn.microsoft.com/en-us/dotnet/api/system.math.abs?view=net-10.0" ], "finding": "Absolute magnitude. Integer input keeps Integer except Int32.MinValue, which is promoted to Decimal 2147483648. Other inputs use BasicDouble before Math.Abs. Compared the primary .NET contract with InjectionApi.Register, BasicDouble, BasicAbs and BasicSgn as applicable. Integer, Decimal and invariant floating-point strings are accepted; unparseable strings/other kinds map to zero through BasicDouble. No shard traffic, target, movement or delay. Runtime Decimal uses Double. All ten locales contain parameter, domain, return-kind and non-Boolean notes plus three full examples and a complete helper. No UO alias is invented.", "tests": "RuntimeMathContractTests: 34 cases passed, including exact kinds, invariant string coercion, angles, Int32.MinValue Abs, sign, truncation, invalid-domain NaN, infinity and underflow. Full runtime 404/404 passed. API verifier executes 24 whitelisted scalar helper cases per root/locale (264 total), with all 286 pure calculations and 9696 parsed examples passing; gameplay examples are not executed." }, { "name": "ArrayContains", "overloads": 1, "status": "pending", "candidateSources": [] }, { "name": "ASC", "overloads": 2, "status": "pending", "candidateSources": [] }, { "name": "Atn", "overloads": 1, "status": "reviewed-project-extension", "candidateSources": [], "sources": [ "https://learn.microsoft.com/en-us/dotnet/api/system.math.atan?view=net-10.0" ], "finding": "Principal arctangent in radians in [-pi/2,pi/2]; Decimal result. Not atan2 and does not determine all quadrants. Compared the primary .NET contract with InjectionApi.Register, BasicDouble, BasicAbs and BasicSgn as applicable. Integer, Decimal and invariant floating-point strings are accepted; unparseable strings/other kinds map to zero through BasicDouble. No shard traffic, target, movement or delay. Runtime Decimal uses Double. All ten locales contain parameter, domain, return-kind and non-Boolean notes plus three full examples and a complete helper. No UO alias is invented.", "tests": "RuntimeMathContractTests: 34 cases passed, including exact kinds, invariant string coercion, angles, Int32.MinValue Abs, sign, truncation, invalid-domain NaN, infinity and underflow. Full runtime 404/404 passed. API verifier executes 24 whitelisted scalar helper cases per root/locale (264 total), with all 286 pure calculations and 9696 parsed examples passing; gameplay examples are not executed." }, { "name": "BasicMod", "overloads": 1, "status": "pending", "candidateSources": [] }, { "name": "BasicXor", "overloads": 1, "status": "pending", "candidateSources": [] }, { "name": "CBool", "overloads": 1, "status": "pending", "candidateSources": [] }, { "name": "CDbl", "overloads": 1, "status": "pending", "candidateSources": [] }, { "name": "Chr", "overloads": 1, "status": "pending", "candidateSources": [] }, { "name": "CInt", "overloads": 1, "status": "pending", "candidateSources": [] }, { "name": "CLng", "overloads": 1, "status": "pending", "candidateSources": [] }, { "name": "contains", "overloads": 1, "status": "pending", "candidateSources": [] }, { "name": "Cos", "overloads": 1, "status": "reviewed-project-extension", "candidateSources": [], "sources": [ "https://learn.microsoft.com/en-us/dotnet/api/system.math.cos?view=net-10.0" ], "finding": "Cosine of radians; Decimal result, NaN for non-finite angles. Results depend on floating-point approximation. Compared the primary .NET contract with InjectionApi.Register, BasicDouble, BasicAbs and BasicSgn as applicable. Integer, Decimal and invariant floating-point strings are accepted; unparseable strings/other kinds map to zero through BasicDouble. No shard traffic, target, movement or delay. Runtime Decimal uses Double. All ten locales contain parameter, domain, return-kind and non-Boolean notes plus three full examples and a complete helper. No UO alias is invented.", "tests": "RuntimeMathContractTests: 34 cases passed, including exact kinds, invariant string coercion, angles, Int32.MinValue Abs, sign, truncation, invalid-domain NaN, infinity and underflow. Full runtime 404/404 passed. API verifier executes 24 whitelisted scalar helper cases per root/locale (264 total), with all 286 pure calculations and 9696 parsed examples passing; gameplay examples are not executed." }, { "name": "CSng", "overloads": 1, "status": "pending", "candidateSources": [] }, { "name": "CStr", "overloads": 1, "status": "pending", "candidateSources": [] }, { "name": "Dictionary", "overloads": 2, "status": "reviewed-project-extension", "candidateSources": [], "sources": [ "https://learn.microsoft.com/en-us/dotnet/api/system.collections.generic.dictionary-2?view=net-8.0" ], "finding": "Dictionary is an object factory in this Basic dialect, not generic VB.NET syntax. Compared InjectionApi native registrations, DictionaryObject, CollectionArguments, IndexedValueSlot and ForScope to the primary .NET collection contract. Methods are called on an instance, not invented global Dictionary.Method commands. Indices are zero-based integral numbers; dictionary keys are finite numbers or ordinal text (1 equals 1.0, text 1 is distinct). Copy/snapshot operations copy only the outer container. Direct For Each deliberately rejects mutation on its next step; dictionary entries expose Key()/Value(). Stored values and counts are not Boolean; membership/removal report 1/0. No game/network operations.", "tests": "BasicCollectionTests 24/24, full runtime667/667 before metadata-only exports; client33/33 including780 executed Basic scripts across26guides/10locales, compiled member export and1363 example files loaded. Theia tests cover collection member snippets, parameter help, scope, private access, aliases and invalidation. API verifier checked13564 examples/54813 direct calls; dynamic calls have separate runtime/example tests. Native Scintilla and LSP collection completion are still being integrated, not certified here." }, { "name": "Exp", "overloads": 1, "status": "reviewed-project-extension", "candidateSources": [], "sources": [ "https://learn.microsoft.com/en-us/dotnet/api/system.math.exp?view=net-10.0" ], "finding": "Natural exponential, Decimal result; overflow positive infinity, negative infinity maps to zero, NaN stays NaN. Compared the primary .NET contract with InjectionApi.Register, BasicDouble, BasicAbs and BasicSgn as applicable. Integer, Decimal and invariant floating-point strings are accepted; unparseable strings/other kinds map to zero through BasicDouble. No shard traffic, target, movement or delay. Runtime Decimal uses Double. All ten locales contain parameter, domain, return-kind and non-Boolean notes plus three full examples and a complete helper. No UO alias is invented.", "tests": "RuntimeMathContractTests: 34 cases passed, including exact kinds, invariant string coercion, angles, Int32.MinValue Abs, sign, truncation, invalid-domain NaN, infinity and underflow. Full runtime 404/404 passed. API verifier executes 24 whitelisted scalar helper cases per root/locale (264 total), with all 286 pure calculations and 9696 parsed examples passing; gameplay examples are not executed." }, { "name": "File", "overloads": 1, "status": "pending", "candidateSources": [] }, { "name": "Fix", "overloads": 1, "status": "reviewed-project-extension", "candidateSources": [], "sources": [ "https://learn.microsoft.com/en-us/dotnet/api/system.math.truncate?view=net-10.0" ], "finding": "Truncation towards zero followed by an Integer cast. Unlike Math.Truncate itself, the BASIC binding returns Integer. Documentation restricts the result to finite Int32 range. Compared the primary .NET contract with InjectionApi.Register, BasicDouble, BasicAbs and BasicSgn as applicable. Integer, Decimal and invariant floating-point strings are accepted; unparseable strings/other kinds map to zero through BasicDouble. No shard traffic, target, movement or delay. Runtime Decimal uses Double. All ten locales contain parameter, domain, return-kind and non-Boolean notes plus three full examples and a complete helper. No UO alias is invented.", "tests": "RuntimeMathContractTests: 34 cases passed, including exact kinds, invariant string coercion, angles, Int32.MinValue Abs, sign, truncation, invalid-domain NaN, infinity and underflow. Full runtime 404/404 passed. API verifier executes 24 whitelisted scalar helper cases per root/locale (264 total), with all 286 pure calculations and 9696 parsed examples passing; gameplay examples are not executed." }, { "name": "GetArrayLength", "overloads": 1, "status": "pending", "candidateSources": [] }, { "name": "GetWord", "overloads": 2, "status": "pending", "candidateSources": [] }, { "name": "GetWordCount", "overloads": 2, "status": "pending", "candidateSources": [] }, { "name": "Hex", "overloads": 1, "status": "pending", "candidateSources": [] }, { "name": "InStr", "overloads": 2, "status": "pending", "candidateSources": [] }, { "name": "InStrRev", "overloads": 1, "status": "pending", "candidateSources": [] }, { "name": "Int", "overloads": 1, "status": "reviewed-project-extension", "candidateSources": [ "https://stealth.od.ua/api/Int/" ], "sources": [ "https://learn.microsoft.com/en-us/dotnet/api/microsoft.visualbasic.conversion.int" ], "finding": "Only Int(value) remains in Basic. Math.Floor rounds toward negative infinity and returns Int32 in this engine, unlike the multiple numeric result types in VB.NET. BasicDouble uses invariant numeric conversion and converts unrecognized values to 0. The character attribute requires UO.Int().", "tests": "ApiNamespaceTests; AttributeNames_KeepTheDifferentBareBasicIntAndStrOverloads; Int_and_Str_manual_examples_run_as_Basic_functions_in_every_language" }, { "name": "IsNumeric", "overloads": 1, "status": "pending", "candidateSources": [] }, { "name": "LCase", "overloads": 1, "status": "pending", "candidateSources": [] }, { "name": "left", "overloads": 1, "status": "pending", "candidateSources": [] }, { "name": "len", "overloads": 3, "status": "pending", "candidateSources": [] }, { "name": "List", "overloads": 2, "status": "reviewed-project-extension", "candidateSources": [], "sources": [ "https://learn.microsoft.com/en-us/dotnet/api/system.collections.generic.list-1?view=net-8.0" ], "finding": "List is an object factory in this Basic dialect, not generic VB.NET syntax. Compared InjectionApi native registrations, ListObject, CollectionArguments, IndexedValueSlot and ForScope to the primary .NET collection contract. Methods are called on an instance, not invented global List.Method commands. Indices are zero-based integral numbers; dictionary keys are finite numbers or ordinal text (1 equals 1.0, text 1 is distinct). Copy/snapshot operations copy only the outer container. Direct For Each deliberately rejects mutation on its next step; dictionary entries expose Key()/Value(). Stored values and counts are not Boolean; membership/removal report 1/0. No game/network operations.", "tests": "BasicCollectionTests 24/24, full runtime667/667 before metadata-only exports; client33/33 including780 executed Basic scripts across26guides/10locales, compiled member export and1363 example files loaded. Theia tests cover collection member snippets, parameter help, scope, private access, aliases and invalidation. API verifier checked13564 examples/54813 direct calls; dynamic calls have separate runtime/example tests. Native Scintilla and LSP collection completion are still being integrated, not certified here." }, { "name": "Log", "overloads": 1, "status": "reviewed-project-extension", "candidateSources": [], "sources": [ "https://learn.microsoft.com/en-us/dotnet/api/system.math.log?view=net-10.0" ], "finding": "Natural logarithm with one argument; Decimal result. Zero yields negative infinity, negative values NaN. No two-argument native BASIC overload; LogBase is an explicitly complete helper. Compared the primary .NET contract with InjectionApi.Register, BasicDouble, BasicAbs and BasicSgn as applicable. Integer, Decimal and invariant floating-point strings are accepted; unparseable strings/other kinds map to zero through BasicDouble. No shard traffic, target, movement or delay. Runtime Decimal uses Double. All ten locales contain parameter, domain, return-kind and non-Boolean notes plus three full examples and a complete helper. No UO alias is invented.", "tests": "RuntimeMathContractTests: 34 cases passed, including exact kinds, invariant string coercion, angles, Int32.MinValue Abs, sign, truncation, invalid-domain NaN, infinity and underflow. Full runtime 404/404 passed. API verifier executes 24 whitelisted scalar helper cases per root/locale (264 total), with all 286 pure calculations and 9696 parsed examples passing; gameplay examples are not executed." }, { "name": "LTrim", "overloads": 1, "status": "pending", "candidateSources": [] }, { "name": "MemoryStream", "overloads": 1, "status": "pending", "candidateSources": [] }, { "name": "message", "overloads": 1, "status": "pending", "candidateSources": [] }, { "name": "messagebox", "overloads": 1, "status": "pending", "candidateSources": [] }, { "name": "mid", "overloads": 2, "status": "pending", "candidateSources": [] }, { "name": "Now", "overloads": 1, "status": "pending", "candidateSources": [] }, { "name": "remain", "overloads": 1, "status": "pending", "candidateSources": [] }, { "name": "Replace", "overloads": 1, "status": "pending", "candidateSources": [] }, { "name": "RGB", "overloads": 1, "status": "pending", "candidateSources": [] }, { "name": "right", "overloads": 1, "status": "pending", "candidateSources": [] }, { "name": "Rnd", "overloads": 2, "status": "pending", "candidateSources": [] }, { "name": "Round", "overloads": 2, "status": "pending", "candidateSources": [] }, { "name": "RTrim", "overloads": 1, "status": "pending", "candidateSources": [] }, { "name": "Sgn", "overloads": 1, "status": "reviewed-project-extension", "candidateSources": [], "sources": [ "https://learn.microsoft.com/en-us/dotnet/api/system.math.sign?view=net-10.0" ], "finding": "Integer -1/0/1 according to the converted number sign. These are three numeric outcomes, not a Boolean. NaN raises an arithmetic error. Compared the primary .NET contract with InjectionApi.Register, BasicDouble, BasicAbs and BasicSgn as applicable. Integer, Decimal and invariant floating-point strings are accepted; unparseable strings/other kinds map to zero through BasicDouble. No shard traffic, target, movement or delay. Runtime Decimal uses Double. All ten locales contain parameter, domain, return-kind and non-Boolean notes plus three full examples and a complete helper. No UO alias is invented.", "tests": "RuntimeMathContractTests: 34 cases passed, including exact kinds, invariant string coercion, angles, Int32.MinValue Abs, sign, truncation, invalid-domain NaN, infinity and underflow. Full runtime 404/404 passed. API verifier executes 24 whitelisted scalar helper cases per root/locale (264 total), with all 286 pure calculations and 9696 parsed examples passing; gameplay examples are not executed." }, { "name": "Sin", "overloads": 1, "status": "reviewed-project-extension", "candidateSources": [], "sources": [ "https://learn.microsoft.com/en-us/dotnet/api/system.math.sin?view=net-10.0" ], "finding": "Sine of radians; Decimal result, NaN for non-finite angles. Degree conversion is a separately authored BASIC helper. Compared the primary .NET contract with InjectionApi.Register, BasicDouble, BasicAbs and BasicSgn as applicable. Integer, Decimal and invariant floating-point strings are accepted; unparseable strings/other kinds map to zero through BasicDouble. No shard traffic, target, movement or delay. Runtime Decimal uses Double. All ten locales contain parameter, domain, return-kind and non-Boolean notes plus three full examples and a complete helper. No UO alias is invented.", "tests": "RuntimeMathContractTests: 34 cases passed, including exact kinds, invariant string coercion, angles, Int32.MinValue Abs, sign, truncation, invalid-domain NaN, infinity and underflow. Full runtime 404/404 passed. API verifier executes 24 whitelisted scalar helper cases per root/locale (264 total), with all 286 pure calculations and 9696 parsed examples passing; gameplay examples are not executed." }, { "name": "sleep", "overloads": 1, "status": "pending", "candidateSources": [] }, { "name": "Space", "overloads": 1, "status": "pending", "candidateSources": [] }, { "name": "Sqr", "overloads": 1, "status": "reviewed-project-extension", "candidateSources": [], "sources": [ "https://learn.microsoft.com/en-us/dotnet/api/system.math.sqrt?view=net-10.0" ], "finding": "Square root, Decimal result; negatives yield NaN, positive infinity stays infinity. Sqr is the BASIC binding name, not squaring. Compared the primary .NET contract with InjectionApi.Register, BasicDouble, BasicAbs and BasicSgn as applicable. Integer, Decimal and invariant floating-point strings are accepted; unparseable strings/other kinds map to zero through BasicDouble. No shard traffic, target, movement or delay. Runtime Decimal uses Double. All ten locales contain parameter, domain, return-kind and non-Boolean notes plus three full examples and a complete helper. No UO alias is invented.", "tests": "RuntimeMathContractTests: 34 cases passed, including exact kinds, invariant string coercion, angles, Int32.MinValue Abs, sign, truncation, invalid-domain NaN, infinity and underflow. Full runtime 404/404 passed. API verifier executes 24 whitelisted scalar helper cases per root/locale (264 total), with all 286 pure calculations and 9696 parsed examples passing; gameplay examples are not executed." }, { "name": "str", "overloads": 3, "status": "reviewed-project-extension", "candidateSources": [ "https://stealth.od.ua/api/Str/" ], "sources": [ "https://learn.microsoft.com/en-us/dotnet/api/microsoft.visualbasic.conversion.str" ], "finding": "Only Str(value) remains in Basic. Integer, Decimal and String overloads return invariant text; String is unchanged and positive numeric output has no leading blank. VB.NET Str reserves a leading sign space. Character strength requires UO.Str().", "tests": "ApiNamespaceTests; AttributeNames_KeepTheDifferentBareBasicIntAndStrOverloads; Int_and_Str_manual_examples_run_as_Basic_functions_in_every_language" }, { "name": "StrComp", "overloads": 1, "status": "pending", "candidateSources": [] }, { "name": "String", "overloads": 2, "status": "pending", "candidateSources": [] }, { "name": "Tan", "overloads": 1, "status": "reviewed-project-extension", "candidateSources": [], "sources": [ "https://learn.microsoft.com/en-us/dotnet/api/system.math.tan?view=net-10.0" ], "finding": "Tangent of radians; Decimal result. Near pi/2 plus multiples of pi finite floating-point inputs can return very large finite values, not a guaranteed error or infinity. Compared the primary .NET contract with InjectionApi.Register, BasicDouble, BasicAbs and BasicSgn as applicable. Integer, Decimal and invariant floating-point strings are accepted; unparseable strings/other kinds map to zero through BasicDouble. No shard traffic, target, movement or delay. Runtime Decimal uses Double. All ten locales contain parameter, domain, return-kind and non-Boolean notes plus three full examples and a complete helper. No UO alias is invented.", "tests": "RuntimeMathContractTests: 34 cases passed, including exact kinds, invariant string coercion, angles, Int32.MinValue Abs, sign, truncation, invalid-domain NaN, infinity and underflow. Full runtime 404/404 passed. API verifier executes 24 whitelisted scalar helper cases per root/locale (264 total), with all 286 pure calculations and 9696 parsed examples passing; gameplay examples are not executed." }, { "name": "Timer", "overloads": 1, "status": "pending", "candidateSources": [] }, { "name": "Trim", "overloads": 1, "status": "pending", "candidateSources": [] }, { "name": "UCase", "overloads": 1, "status": "pending", "candidateSources": [] }, { "name": "UO.ActivateHandle", "overloads": 1, "status": "pending", "candidateSources": [] }, { "name": "UO.AddChatUserIgnore", "overloads": 1, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/AddChatUserIgnore/" ] }, { "name": "UO.AddDir", "overloads": 1, "status": "pending", "candidateSources": [] }, { "name": "UO.AddFigure", "overloads": 1, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/AddFigure/" ] }, { "name": "UO.AddFindList", "overloads": 2, "status": "pending", "candidateSources": [] }, { "name": "UO.AddGate", "overloads": 1, "status": "pending", "candidateSources": [] }, { "name": "UO.AddGumpIgnoreByID", "overloads": 1, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/AddGumpIgnoreByID/" ] }, { "name": "UO.AddGumpIgnoreBySerial", "overloads": 1, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/AddGumpIgnoreBySerial/" ] }, { "name": "UO.AddIgnoreList", "overloads": 2, "status": "pending", "candidateSources": [] }, { "name": "UO.AddJournalIgnore", "overloads": 1, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/AddJournalIgnore/" ] }, { "name": "UO.AddObject", "overloads": 2, "status": "pending", "candidateSources": [] }, { "name": "UO.AddRecall", "overloads": 1, "status": "pending", "candidateSources": [] }, { "name": "UO.AddStep", "overloads": 1, "status": "pending", "candidateSources": [] }, { "name": "UO.AddToJournal", "overloads": 1, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/AddToJournal/" ] }, { "name": "UO.AddToSystemJournal", "overloads": 1, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/AddToSystemJournal/" ] }, { "name": "UO.AddToSystemJournalEx", "overloads": 1, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/AddToSystemJournalEx/" ] }, { "name": "UO.AddType", "overloads": 2, "status": "pending", "candidateSources": [] }, { "name": "UO.AddUserStatic", "overloads": 2, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/AddUserStatic/" ] }, { "name": "UO.Alarm", "overloads": 1, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/Alarm/" ] }, { "name": "UO.Alive", "overloads": 2, "status": "project-extension", "candidateSources": [], "sources": [ "https://stealth.od.ua/api/IsDead/" ], "finding": "Project predicate: positive existing serial and no dead state. Existing items also return 1. Missing/destroyed objects return 0. Exists and the state read are separate snapshots.", "tests": "YokoCharacterQueryTests.CharacterQueries_StateAliasesSelectSelfOrExplicitObject; CharacterQueries_RejectDestroyedMobileBeforeDictionaryRemoval; CharacterQueries_FlightUsesModernFlagAndRejectsDestroyedMobile; static registration and bridge review" }, { "name": "UO.AllPrice", "overloads": 3, "status": "pending", "candidateSources": [] }, { "name": "UO.AlwaysRun", "overloads": 2, "status": "pending", "candidateSources": [] }, { "name": "UO.ApiNameExists", "overloads": 1, "status": "pending", "candidateSources": [] }, { "name": "UO.ApiParameterExists", "overloads": 1, "status": "pending", "candidateSources": [] }, { "name": "UO.ApiSignatureExists", "overloads": 1, "status": "pending", "candidateSources": [] }, { "name": "UO.Arm", "overloads": 1, "status": "pending", "candidateSources": [] }, { "name": "UO.Armor", "overloads": 1, "status": "reviewed-adaptation", "candidateSources": [ "https://stealth.od.ua/api/Armor/" ], "sources": [ "https://stealth.od.ua/api/Armor/", "https://raw.githubusercontent.com/ServUO/ServUO/pub57/Server/Network/Packets.cs" ], "finding": "Compared primary Stealth resistance/status meaning with ServUO MobileStatus encoding and the actual CharacterStatus/PlayerMobile fields. PhysicalResistance is signed Int16 widened to BASIC Integer; negative values are preserved, never clamped or converted to unsigned. Own live Player only, missing/destroyed Player zero, no network/status request or equipment calculation. Physical is server armor/status, not a locally computed damage percentage. Elemental fields are populated by status type>=4; there is no independent server-era gate. Older/compact packets retain previous elemental cache, new Player starts zero. Stealth elemental Word/era wording is not imposed on this signed client implementation. Get*/Resist* and bare/UO aliases have verified no-argument function/intrinsic forms. Ten translations describe returns, field availability, complete ResistanceAtLeast helper, three full examples and native reading stages. Generated compatibility return metadata now explicitly declares Integer for the reviewed resistance/counter branches. Previously nine UO functions appeared as Any/Variant despite always returning Integer. Gold retains its intentional mixed Integer/Decimal metadata. No argument shapes or dispatch behavior changed.", "tests": "YokoOwnStatusLifetimeTests cover every field alias and intrinsic, live negative values, missing/destroyed Player and no packets. YokoStatusPacketBoundaryTests: six baseline truncation failures reproduced; fixed body validation now preserves all prior fields/LastStatus, with compact/types1..6 compatibility and other-mobile forms (15 cases); related status suite55 passed. YokoResistanceTests:24 selector cases and506root/locale helper cards with4928 live/destroyed outcomes passed (25 tests total). Full example Main/gameplay is not executed. YokoApiSymbolIndexTests: ten added signature cases reproduced nine failures and one pre-existing Integer pass. Corrected metadata passed the combined 58 signature/resistance/counter tests. Inventory comparison confirms 1628 unchanged name/parameter shapes and exactly nine Any-to-Integer changes." }, { "name": "UO.Attack", "overloads": 3, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/Attack/" ] }, { "name": "UO.AttackNearest", "overloads": 9, "status": "pending", "candidateSources": [] }, { "name": "UO.AutoBuy", "overloads": 1, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/AutoBuy/" ] }, { "name": "UO.AutoBuyEx", "overloads": 1, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/AutoBuyEx/" ] }, { "name": "UO.AutoMenu", "overloads": 1, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/AutoMenu/" ] }, { "name": "UO.AutoSell", "overloads": 1, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/AutoSell/" ] }, { "name": "UO.Backpack", "overloads": 1, "status": "reviewed-project-extension", "candidateSources": [ "https://stealth.od.ua/api/Backpack/" ], "sources": [ "https://stealth.od.ua/api/Backpack/" ], "finding": "Compared the primary serial/zero contract with the exact zero-argument BASIC registration and concrete bridge. Self reads the current Player serial; Backpack finds a non-destroyed item on its Backpack layer. Missing or destroyed Player yields zero; missing/destroyed bag yields zero. Present dead/ghost Player keeps its ID. These are local-world queries, not socket-connectivity or server-permission probes. All 32 bits are retained. The return is Integer, not Boolean/type/layer/count. Quoted self in transfer destinations is distinct from UO.Self(). Intrinsics are evaluated on each unshadowed read. Ten locale cards contain three scripts, all parameters (none), snapshots/change caveats and full IsOwnSerial helper plus concrete internal stages.", "tests": "OwnIdentity 5 cases: live function/intrinsic agreement, Integer kind, absent Player, destroyed Player, destroyed/missing backpack, no network side effect. Baseline had 2 failures/3 passes; after bridge fix all 5 passed. Full manual parser verified 9758 examples, 37354 direct calls, 286 pure calculations with zero errors; these do not execute gameplay." }, { "name": "UO.BandageSelf", "overloads": 1, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/BandageSelf/" ] }, { "name": "UO.BookClearText", "overloads": 1, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/BookClearText/" ] }, { "name": "UO.BookGetPageText", "overloads": 1, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/BookGetPageText/" ] }, { "name": "UO.BookSetHeader", "overloads": 1, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/BookSetHeader/" ] }, { "name": "UO.BookSetPageText", "overloads": 1, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/BookSetPageText/" ] }, { "name": "UO.BookSetText", "overloads": 1, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/BookSetText/" ] }, { "name": "UO.Bow", "overloads": 1, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/Bow/" ] }, { "name": "UO.BoxHack", "overloads": 1, "status": "pending", "candidateSources": [] }, { "name": "UO.Buy", "overloads": 5, "status": "pending", "candidateSources": [] }, { "name": "UO.CalcDir", "overloads": 1, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/CalcDir/" ] }, { "name": "UO.CallSub", "overloads": 1, "status": "pending", "candidateSources": [] }, { "name": "UO.CancelAllMenuHooks", "overloads": 1, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/CancelAllMenuHooks/" ] }, { "name": "UO.CancelGump", "overloads": 2, "status": "pending", "candidateSources": [] }, { "name": "UO.CancelMenu", "overloads": 1, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/CancelMenu/" ] }, { "name": "UO.CancelMove", "overloads": 1, "status": "pending", "candidateSources": [] }, { "name": "UO.CancelTarget", "overloads": 1, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/CancelTarget/" ] }, { "name": "UO.CancelTrade", "overloads": 1, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/CancelTrade/" ] }, { "name": "UO.CancelWaitTarget", "overloads": 1, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/CancelWaitTarget/" ] }, { "name": "UO.CanChangeName", "overloads": 1, "status": "corrected-adaptation", "candidateSources": [], "sources": [ "https://stealth.od.ua/api/MobileCanBeRenamed/" ], "finding": "Historical name for the same loaded Mobile.IsRenamable field.", "tests": "ObjectPredicates_*; bridge/dispatch source review" }, { "name": "UO.Cast", "overloads": 8, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/Cast/" ] }, { "name": "UO.CastAbility", "overloads": 2, "status": "pending", "candidateSources": [] }, { "name": "UO.CastToObject", "overloads": 1, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/CastToObject/" ] }, { "name": "UO.ChangeJournalLength", "overloads": 1, "status": "pending", "candidateSources": [] }, { "name": "UO.ChangeProfile", "overloads": 1, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/ChangeProfile/" ] }, { "name": "UO.CharacterTitle", "overloads": 1, "status": "pending", "candidateSources": [] }, { "name": "UO.CharName", "overloads": 1, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/CharName/" ] }, { "name": "UO.CharPrint", "overloads": 4, "status": "pending", "candidateSources": [] }, { "name": "UO.CharTitle", "overloads": 1, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/CharTitle/" ] }, { "name": "UO.CheckLag", "overloads": 3, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/CheckLag/" ] }, { "name": "UO.CheckLOS", "overloads": 1, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/CheckLOS/" ] }, { "name": "UO.CircleTrans", "overloads": 2, "status": "pending", "candidateSources": [] }, { "name": "UO.ClearBadLocationList", "overloads": 1, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/ClearBadLocationList/" ] }, { "name": "UO.ClearBadObjectList", "overloads": 1, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/ClearBadObjectList/" ] }, { "name": "UO.ClearChatUserIgnore", "overloads": 1, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/ClearChatUserIgnore/" ] }, { "name": "UO.ClearContextMenu", "overloads": 1, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/ClearContextMenu/" ] }, { "name": "UO.ClearFigures", "overloads": 1, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/ClearFigures/" ] }, { "name": "UO.ClearFindList", "overloads": 2, "status": "pending", "candidateSources": [] }, { "name": "UO.ClearGumpsIgnore", "overloads": 1, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/ClearGumpsIgnore/" ] }, { "name": "UO.ClearIgnoreList", "overloads": 2, "status": "pending", "candidateSources": [] }, { "name": "UO.ClearInfoWindow", "overloads": 1, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/ClearInfoWindow/" ] }, { "name": "UO.ClearJournal", "overloads": 1, "status": "reviewed-adaptation", "candidateSources": [ "https://stealth.od.ua/api/ClearJournal/" ], "sources": [ "https://stealth.od.ua/api/ClearJournal/" ], "finding": "Unit; clears the shared Classic UO journal including System, search count and this runtime selection. Other runtimes retain immutable selections but their current index becomes -1.", "tests": "YokoInjectionFindTypeWorldTests.Journal_*; YokoInjectionCompatibilityTests.Journal_*/Stealth_Journal_Properties_Use_The_Last_Real_Matched_Line" }, { "name": "UO.ClearJournalIgnore", "overloads": 1, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/ClearJournalIgnore/" ] }, { "name": "UO.ClearShopList", "overloads": 1, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/ClearShopList/" ] }, { "name": "UO.ClearSystemJournal", "overloads": 1, "status": "reviewed-adaptation", "candidateSources": [ "https://stealth.od.ua/api/ClearSystemJournal/" ], "sources": [ "https://stealth.od.ua/api/ClearSystemJournal/" ], "finding": "Unit; removes entries whose Name is System, case-insensitively, from the shared buffer. Clears this runtime selection. No separate Stealth system pane.", "tests": "YokoInjectionFindTypeWorldTests.Journal_*; YokoInjectionCompatibilityTests.Journal_*/Stealth_Journal_Properties_Use_The_Last_Real_Matched_Line" }, { "name": "UO.ClearUserStatics", "overloads": 1, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/ClearUserStatics/" ] }, { "name": "UO.Click", "overloads": 1, "status": "pending", "candidateSources": [] }, { "name": "UO.ClickOnObject", "overloads": 1, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/ClickOnObject/" ] }, { "name": "UO.ClientHide", "overloads": 1, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/ClientHide/" ] }, { "name": "UO.ClientMarkChar", "overloads": 1, "status": "pending", "candidateSources": [] }, { "name": "UO.ClientPrint", "overloads": 1, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/ClientPrint/" ] }, { "name": "UO.ClientPrintEx", "overloads": 1, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/ClientPrintEx/" ] }, { "name": "UO.ClientRequestObjectTarget", "overloads": 1, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/ClientRequestObjectTarget/" ] }, { "name": "UO.ClientRequestTileTarget", "overloads": 1, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/ClientRequestTileTarget/" ] }, { "name": "UO.ClientTargetResponse", "overloads": 1, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/ClientTargetResponse/" ] }, { "name": "UO.ClientTargetResponsePresent", "overloads": 1, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/ClientTargetResponsePresent/" ] }, { "name": "UO.CloseClientGump", "overloads": 1, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/CloseClientGump/" ] }, { "name": "UO.CloseClientUIWindow", "overloads": 1, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/CloseClientUIWindow/" ] }, { "name": "UO.CloseHandle", "overloads": 1, "status": "pending", "candidateSources": [] }, { "name": "UO.CloseMenu", "overloads": 1, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/CloseMenu/" ] }, { "name": "UO.CloseSimpleGump", "overloads": 1, "status": "reviewed-adaptation", "candidateSources": [ "https://stealth.od.ua/api/CloseSimpleGump/" ], "sources": [ "https://stealth.od.ua/api/CloseSimpleGump/" ], "finding": "Fixed strict zero-based window selection, preserves NoClose and returns Unit. Only closes locally. Legacy CancelGump retains selected/ID selector behavior separately.", "tests": "YokoCommandEndToEndTests; Stealth_Gump_Api_Uses_The_Active_ClassicUo_Gumps; YokoIdeRuntimeProbe" }, { "name": "UO.CloseUO", "overloads": 1, "status": "pending", "candidateSources": [] }, { "name": "UO.ColdResist", "overloads": 1, "status": "reviewed-adaptation", "candidateSources": [ "https://stealth.od.ua/api/ColdResist/" ], "sources": [ "https://stealth.od.ua/api/ColdResist/", "https://raw.githubusercontent.com/ServUO/ServUO/pub57/Server/Network/Packets.cs" ], "finding": "Compared primary Stealth resistance/status meaning with ServUO MobileStatus encoding and the actual CharacterStatus/PlayerMobile fields. ColdResistance is signed Int16 widened to BASIC Integer; negative values are preserved, never clamped or converted to unsigned. Own live Player only, missing/destroyed Player zero, no network/status request or equipment calculation. Physical is server armor/status, not a locally computed damage percentage. Elemental fields are populated by status type>=4; there is no independent server-era gate. Older/compact packets retain previous elemental cache, new Player starts zero. Stealth elemental Word/era wording is not imposed on this signed client implementation. Get*/Resist* and bare/UO aliases have verified no-argument function/intrinsic forms. Ten translations describe returns, field availability, complete ResistanceAtLeast helper, three full examples and native reading stages. Generated compatibility return metadata now explicitly declares Integer for the reviewed resistance/counter branches. Previously nine UO functions appeared as Any/Variant despite always returning Integer. Gold retains its intentional mixed Integer/Decimal metadata. No argument shapes or dispatch behavior changed.", "tests": "YokoOwnStatusLifetimeTests cover every field alias and intrinsic, live negative values, missing/destroyed Player and no packets. YokoStatusPacketBoundaryTests: six baseline truncation failures reproduced; fixed body validation now preserves all prior fields/LastStatus, with compact/types1..6 compatibility and other-mobile forms (15 cases); related status suite55 passed. YokoResistanceTests:24 selector cases and506root/locale helper cards with4928 live/destroyed outcomes passed (25 tests total). Full example Main/gameplay is not executed. YokoApiSymbolIndexTests: ten added signature cases reproduced nine failures and one pre-existing Integer pass. Corrected metadata passed the combined 58 signature/resistance/counter tests. Inventory comparison confirms 1628 unchanged name/parameter shapes and exactly nine Any-to-Integer changes." }, { "name": "UO.ColorPrint", "overloads": 1, "status": "pending", "candidateSources": [] }, { "name": "UO.ConColor", "overloads": 1, "status": "pending", "candidateSources": [] }, { "name": "UO.ConfirmTrade", "overloads": 1, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/ConfirmTrade/" ] }, { "name": "UO.Connect", "overloads": 1, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/Connect/" ] }, { "name": "UO.Connected", "overloads": 1, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/Connected/" ] }, { "name": "UO.ConnectedTime", "overloads": 1, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/ConnectedTime/" ] }, { "name": "UO.ConsoleEntryReply", "overloads": 1, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/ConsoleEntryReply/" ] }, { "name": "UO.ConsoleEntryUnicodeReply", "overloads": 1, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/ConsoleEntryUnicodeReply/" ] }, { "name": "UO.ConsolePrint", "overloads": 1, "status": "pending", "candidateSources": [] }, { "name": "UO.ContainerOf", "overloads": 1, "status": "pending", "candidateSources": [] }, { "name": "UO.ContainerOff", "overloads": 1, "status": "pending", "candidateSources": [] }, { "name": "UO.ConvertIntegerToFlags", "overloads": 1, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/ConvertIntegerToFlags/" ] }, { "name": "UO.Count", "overloads": 3, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/Count/" ] }, { "name": "UO.CountEx", "overloads": 1, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/CountEx/" ] }, { "name": "UO.CountGround", "overloads": 2, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/CountGround/" ] }, { "name": "UO.Date", "overloads": 1, "status": "pending", "candidateSources": [] }, { "name": "UO.Dead", "overloads": 2, "status": "corrected", "candidateSources": [ "https://stealth.od.ua/api/Dead/" ], "sources": [ "https://stealth.od.ua/api/IsDead/", "https://stealth.od.ua/api/Dead/" ], "finding": "Integer 1/0 reflects Mobile.IsDead, not HP==0; absent/destroyed mobile returns 0. Both no-argument self and explicit object forms are project extensions of the separate Stealth names.", "tests": "YokoCharacterQueryTests.CharacterQueries_StateAliasesSelectSelfOrExplicitObject; CharacterQueries_RejectDestroyedMobileBeforeDictionaryRemoval; CharacterQueries_FlightUsesModernFlagAndRejectsDestroyedMobile; static registration and bridge review" }, { "name": "UO.DeleteFindList", "overloads": 3, "status": "pending", "candidateSources": [] }, { "name": "UO.DeleteIgnoreList", "overloads": 3, "status": "pending", "candidateSources": [] }, { "name": "UO.DeleteJournal", "overloads": 2, "status": "reviewed-adaptation", "candidateSources": [], "sources": [ "https://forum.yoko.com.ua/viewtopic.php?p=27633", "https://stealth.od.ua/api/ClearJournal/" ], "finding": "Unit; no argument clears all shared entries, text argument removes matching substrings case-insensitively. Clears this runtime selection; not server data or log files.", "tests": "YokoInjectionFindTypeWorldTests.Journal_*; YokoInjectionCompatibilityTests.Journal_*/Stealth_Journal_Properties_Use_The_Last_Real_Matched_Line" }, { "name": "UO.DeleteObject", "overloads": 1, "status": "pending", "candidateSources": [] }, { "name": "UO.Dex", "overloads": 1, "status": "reviewed-project-extension", "candidateSources": [ "https://stealth.od.ua/api/Dex/" ], "sources": [ "https://stealth.od.ua/api/Dex/", "https://stealth.od.ua/api/GetDex/" ], "finding": "Dexterity current points, Integer, from the actual PlayerMobile field (ushort), zero for missing/destroyed Player. Compared current primary Stealth own/ObjID contracts with RegisterCharacterGetterAliases, ExecuteStealthCompatibility, numeric conversion and concrete bridge. Only GetStr/GetInt/GetDex have ObjID overloads; other names here are zero-argument. The object overload only has own-character data: foreign serial returns zero, even for another loaded mobile. This project limitation is explicitly documented rather than guessing values or claiming a remote status request. No network packet or built-in delay. Bare Int(value) and Str(value) are distinct BASIC operations and their mixed cards were not replaced by these attribute-only contracts. Unshadowed intrinsics are fresh reads. Numeric attribute results are not Boolean; the complete AttributeAtLeast helper returns comparison 1/0. Ten translations contain exact arguments, return meaning, coercion, native stages, three diverse complete examples, and a fourth serial/alias example for object overloads.", "tests": "YokoAttributeTests: 13 cases passed. All attribute aliases/functions/intrinsics and six object forms (bare/UO GetStr/GetInt/GetDex), current update, 65535, missing/destroyed Player, foreign item/unknown serial, numeric/hex/self/AddObject names, no packets, and mixed BASIC Int/Str behavior. Six destroyed-player regressions reproduced before the fix. Complete helpers extracted from all 242 root/locale cards executed at 0,79,80,81,65535 and with a destroyed Player (1452 assertions of helper results), with no gameplay Main execution. Reviewed IDE result-kind cases passed." }, { "name": "UO.Dexterity", "overloads": 1, "status": "reviewed-project-extension", "candidateSources": [], "sources": [ "https://stealth.od.ua/api/Dex/", "https://stealth.od.ua/api/GetDex/" ], "finding": "Dexterity current points, Integer, from the actual PlayerMobile field (ushort), zero for missing/destroyed Player. Compared current primary Stealth own/ObjID contracts with RegisterCharacterGetterAliases, ExecuteStealthCompatibility, numeric conversion and concrete bridge. Only GetStr/GetInt/GetDex have ObjID overloads; other names here are zero-argument. The object overload only has own-character data: foreign serial returns zero, even for another loaded mobile. This project limitation is explicitly documented rather than guessing values or claiming a remote status request. No network packet or built-in delay. Bare Int(value) and Str(value) are distinct BASIC operations and their mixed cards were not replaced by these attribute-only contracts. Unshadowed intrinsics are fresh reads. Numeric attribute results are not Boolean; the complete AttributeAtLeast helper returns comparison 1/0. Ten translations contain exact arguments, return meaning, coercion, native stages, three diverse complete examples, and a fourth serial/alias example for object overloads.", "tests": "YokoAttributeTests: 13 cases passed. All attribute aliases/functions/intrinsics and six object forms (bare/UO GetStr/GetInt/GetDex), current update, 65535, missing/destroyed Player, foreign item/unknown serial, numeric/hex/self/AddObject names, no packets, and mixed BASIC Int/Str behavior. Six destroyed-player regressions reproduced before the fix. Complete helpers extracted from all 242 root/locale cards executed at 0,79,80,81,65535 and with a destroyed Player (1452 assertions of helper results), with no gameplay Main execution. Reviewed IDE result-kind cases passed." }, { "name": "UO.Dir", "overloads": 1, "status": "pending", "candidateSources": [] }, { "name": "UO.Direction", "overloads": 1, "status": "pending", "candidateSources": [] }, { "name": "UO.Disarm", "overloads": 1, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/Disarm/" ] }, { "name": "UO.Disconnect", "overloads": 1, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/Disconnect/" ] }, { "name": "UO.DisconnectedTime", "overloads": 1, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/DisconnectedTime/" ] }, { "name": "UO.Dismount", "overloads": 1, "status": "pending", "candidateSources": [] }, { "name": "UO.Dist", "overloads": 1, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/Dist/" ] }, { "name": "UO.Drag", "overloads": 4, "status": "pending", "candidateSources": [] }, { "name": "UO.DragItem", "overloads": 1, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/DragItem/" ] }, { "name": "UO.Dress", "overloads": 1, "status": "pending", "candidateSources": [] }, { "name": "UO.DressSavedSet", "overloads": 1, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/DressSavedSet/" ] }, { "name": "UO.DressSpeed", "overloads": 2, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/DressSpeed/" ] }, { "name": "UO.Drop", "overloads": 4, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/Drop/" ] }, { "name": "UO.DropCheckCoord", "overloads": 2, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/DropCheckCoord/" ] }, { "name": "UO.DropDelay", "overloads": 2, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/DropDelay/" ] }, { "name": "UO.DropHere", "overloads": 1, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/DropHere/" ] }, { "name": "UO.DropItem", "overloads": 1, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/DropItem/" ] }, { "name": "UO.Dump", "overloads": 2, "status": "pending", "candidateSources": [] }, { "name": "UO.Dye", "overloads": 2, "status": "pending", "candidateSources": [] }, { "name": "UO.EasyObject", "overloads": 2, "status": "pending", "candidateSources": [] }, { "name": "UO.EmoteAction", "overloads": 1, "status": "pending", "candidateSources": [] }, { "name": "UO.EmptyContainer", "overloads": 3, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/EmptyContainer/" ] }, { "name": "UO.EnergyResist", "overloads": 1, "status": "reviewed-adaptation", "candidateSources": [ "https://stealth.od.ua/api/EnergyResist/" ], "sources": [ "https://stealth.od.ua/api/EnergyResist/", "https://raw.githubusercontent.com/ServUO/ServUO/pub57/Server/Network/Packets.cs" ], "finding": "Compared primary Stealth resistance/status meaning with ServUO MobileStatus encoding and the actual CharacterStatus/PlayerMobile fields. EnergyResistance is signed Int16 widened to BASIC Integer; negative values are preserved, never clamped or converted to unsigned. Own live Player only, missing/destroyed Player zero, no network/status request or equipment calculation. Physical is server armor/status, not a locally computed damage percentage. Elemental fields are populated by status type>=4; there is no independent server-era gate. Older/compact packets retain previous elemental cache, new Player starts zero. Stealth elemental Word/era wording is not imposed on this signed client implementation. Get*/Resist* and bare/UO aliases have verified no-argument function/intrinsic forms. Ten translations describe returns, field availability, complete ResistanceAtLeast helper, three full examples and native reading stages. Generated compatibility return metadata now explicitly declares Integer for the reviewed resistance/counter branches. Previously nine UO functions appeared as Any/Variant despite always returning Integer. Gold retains its intentional mixed Integer/Decimal metadata. No argument shapes or dispatch behavior changed.", "tests": "YokoOwnStatusLifetimeTests cover every field alias and intrinsic, live negative values, missing/destroyed Player and no packets. YokoStatusPacketBoundaryTests: six baseline truncation failures reproduced; fixed body validation now preserves all prior fields/LastStatus, with compact/types1..6 compatibility and other-mobile forms (15 cases); related status suite55 passed. YokoResistanceTests:24 selector cases and506root/locale helper cards with4928 live/destroyed outcomes passed (25 tests total). Full example Main/gameplay is not executed. YokoApiSymbolIndexTests: ten added signature cases reproduced nine failures and one pre-existing Integer pass. Corrected metadata passed the combined 58 signature/resistance/counter tests. Inventory comparison confirms 1628 unchanged name/parameter shapes and exactly nine Any-to-Integer changes." }, { "name": "UO.Equip", "overloads": 3, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/Equip/" ] }, { "name": "UO.EquipDressSet", "overloads": 1, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/EquipDressSet/" ] }, { "name": "UO.EquipItems", "overloads": 1, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/EquipItems/" ] }, { "name": "UO.EquipLastWeapon", "overloads": 1, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/EquipLastWeapon/" ] }, { "name": "UO.EquipT", "overloads": 2, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/Equipt/" ] }, { "name": "UO.EUO2ID", "overloads": 1, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/EUO2ID/" ] }, { "name": "UO.EUO2Inj", "overloads": 1, "status": "pending", "candidateSources": [] }, { "name": "UO.EUO2Type", "overloads": 1, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/EUO2Type/" ] }, { "name": "UO.Exec", "overloads": 1, "status": "pending", "candidateSources": [] }, { "name": "UO.Exists", "overloads": 2, "status": "reviewed-adaptation", "candidateSources": [], "sources": [ "https://stealth.od.ua/api/IsObjectExists/" ], "finding": "World.Get returns a live locally loaded item/mobile or null. Does not query the server or prove remote existence.", "tests": "ObjectPredicates_*; bridge/dispatch source review" }, { "name": "UO.ExtChangeProfile", "overloads": 3, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/ExtChangeProfile/" ] }, { "name": "UO.ExtendedInfo", "overloads": 1, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/ExtendedInfo/" ] }, { "name": "UO.FillInfoWindow", "overloads": 1, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/FillInfoWindow/" ] }, { "name": "UO.FillNewWindow", "overloads": 1, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/FillNewWindow/" ] }, { "name": "UO.FilterSpeech", "overloads": 2, "status": "pending", "candidateSources": [] }, { "name": "UO.FilterWeather", "overloads": 2, "status": "pending", "candidateSources": [] }, { "name": "UO.FindAnyType", "overloads": 31, "status": "pending", "candidateSources": [] }, { "name": "UO.FindAtCoord", "overloads": 1, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/FindAtCoord/" ] }, { "name": "UO.FindByNotoriety", "overloads": 31, "status": "pending", "candidateSources": [] }, { "name": "UO.FindCount", "overloads": 2, "status": "reviewed-project-extension", "candidateSources": [ "https://stealth.od.ua/api/FindCount/" ], "sources": [ "https://stealth.od.ua/api/FindCount/" ], "finding": "No arguments count distinct objects. The user-requested ID overload reads that item's current Amount and leaves search results unchanged.", "tests": "YokoInjectionFindTypeWorldTests" }, { "name": "UO.FindDistance", "overloads": 2, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/FindDistance/" ] }, { "name": "UO.FindFullQuantity", "overloads": 1, "status": "reviewed", "candidateSources": [ "https://stealth.od.ua/api/FindFullQuantity/" ], "sources": [ "https://stealth.od.ua/api/FindFullQuantity/" ], "finding": "Sum of units in the latest search snapshot; objects with no stack add one. Distinct from the number of objects.", "tests": "YokoInjectionFindTypeWorldTests" }, { "name": "UO.FindItem", "overloads": 1, "status": "reviewed", "candidateSources": [ "https://stealth.od.ua/api/FindItem/" ], "sources": [ "https://stealth.od.ua/api/FindItem/" ], "finding": "Numeric serial selected by the latest search, or 0; same object selected by FindType. Latest found refers to the latest search, not a requirement to reverse local enumeration.", "tests": "YokoInjectionFindTypeWorldTests" }, { "name": "UO.FindList", "overloads": 7, "status": "pending", "candidateSources": [] }, { "name": "UO.FindMan", "overloads": 8, "status": "pending", "candidateSources": [] }, { "name": "UO.FindMobile", "overloads": 6, "status": "pending", "candidateSources": [] }, { "name": "UO.FindNotoriety", "overloads": 6, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/FindNotoriety/" ] }, { "name": "UO.FindQuantity", "overloads": 1, "status": "reviewed", "candidateSources": [ "https://stealth.od.ua/api/FindQuantity/" ], "sources": [ "https://stealth.od.ua/api/FindQuantity/" ], "finding": "Current quantity of the object selected by FindItem; 0 when absent, 1 for a known mobile. Does not sum other stacks.", "tests": "YokoInjectionFindTypeWorldTests" }, { "name": "UO.FindType", "overloads": 14, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/FindType/" ] }, { "name": "UO.FindTypeEx", "overloads": 1, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/FindTypeEx/" ] }, { "name": "UO.FindTypesArrayEx", "overloads": 1, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/FindTypesArrayEx/" ] }, { "name": "UO.FindVertical", "overloads": 2, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/FindVertical/" ] }, { "name": "UO.FireResist", "overloads": 1, "status": "reviewed-adaptation", "candidateSources": [ "https://stealth.od.ua/api/FireResist/" ], "sources": [ "https://stealth.od.ua/api/FireResist/", "https://raw.githubusercontent.com/ServUO/ServUO/pub57/Server/Network/Packets.cs" ], "finding": "Compared primary Stealth resistance/status meaning with ServUO MobileStatus encoding and the actual CharacterStatus/PlayerMobile fields. FireResistance is signed Int16 widened to BASIC Integer; negative values are preserved, never clamped or converted to unsigned. Own live Player only, missing/destroyed Player zero, no network/status request or equipment calculation. Physical is server armor/status, not a locally computed damage percentage. Elemental fields are populated by status type>=4; there is no independent server-era gate. Older/compact packets retain previous elemental cache, new Player starts zero. Stealth elemental Word/era wording is not imposed on this signed client implementation. Get*/Resist* and bare/UO aliases have verified no-argument function/intrinsic forms. Ten translations describe returns, field availability, complete ResistanceAtLeast helper, three full examples and native reading stages. Generated compatibility return metadata now explicitly declares Integer for the reviewed resistance/counter branches. Previously nine UO functions appeared as Any/Variant despite always returning Integer. Gold retains its intentional mixed Integer/Decimal metadata. No argument shapes or dispatch behavior changed.", "tests": "YokoOwnStatusLifetimeTests cover every field alias and intrinsic, live negative values, missing/destroyed Player and no packets. YokoStatusPacketBoundaryTests: six baseline truncation failures reproduced; fixed body validation now preserves all prior fields/LastStatus, with compact/types1..6 compatibility and other-mobile forms (15 cases); related status suite55 passed. YokoResistanceTests:24 selector cases and506root/locale helper cards with4928 live/destroyed outcomes passed (25 tests total). Full example Main/gameplay is not executed. YokoApiSymbolIndexTests: ten added signature cases reproduced nine failures and one pre-existing Integer pass. Corrected metadata passed the combined 58 signature/resistance/counter tests. Inventory comparison confirms 1628 unchanged name/parameter shapes and exactly nine Any-to-Integer changes." }, { "name": "UO.FixTalk", "overloads": 1, "status": "pending", "candidateSources": [] }, { "name": "UO.FixWalk", "overloads": 1, "status": "pending", "candidateSources": [] }, { "name": "UO.Flying", "overloads": 2, "status": "project-extension", "candidateSources": [], "sources": [], "finding": "Project state family reads Mobile.IsFlying: requires protocol >=7.0.0.0 and bit 0x04. Not derived from Z. Destroyed/missing mobiles return 0. Kept separate from the modern poison field.", "tests": "YokoCharacterQueryTests.CharacterQueries_StateAliasesSelectSelfOrExplicitObject; CharacterQueries_RejectDestroyedMobileBeforeDictionaryRemoval; CharacterQueries_FlightUsesModernFlagAndRejectsDestroyedMobile; static registration and bridge review" }, { "name": "UO.Followers", "overloads": 1, "status": "reviewed-adaptation", "candidateSources": [], "sources": [ "https://stealth.od.ua/api/PetsCurrent/", "https://raw.githubusercontent.com/ServUO/ServUO/pub57/Server/Network/Packets.cs", "https://stealth.od.ua/forum/viewtopic.php?p=6278" ], "finding": "Reads occupied follower control slots from own status type>=3. Verified packet byte matches Player.Followers, not world-mobile enumeration. A creature may consume multiple slots; owner/taming/summon eligibility is server-defined. Clarifies loose pet-count wording in current primary page using server encoding and historical official slot documentation. Own live Player only; missing/destroyed Player yields 0. Exact no-argument aliases, functions and intrinsics verified without packets. Compact packets preserve counters; a new Player starts at zero. Ten authored translations explain units, all supported forms, numbers versus Boolean, full helper parameters/results, three scripts and real Register/Invoke/CharacterStatus/Clear stages. CanCarry/CanAddFollower use extra <= maximum - current to avoid addition overflow. Helpers check the local cache and do not grant server permission.", "tests": "YokoStatusCounterTests: seven packet/formula/boundary tests and one manual-helper test passed. All 28 aliases, functions and intrinsics checked with UInt16/Byte maxima and compact-cache preservation. Complete CanCarry/LuckAtLeast/CanAddFollower definitions extracted from 308 root/locale cards: 17600 live/destroyed helper outcomes for zero limits, overcapacity, negative/large inputs and thresholds. Main/gameplay was not executed. Existing OwnStatusLifetime tests cover missing/destroyed read guards. The last full client suite of 1474 tests passed before these eight new counter tests. This batch preserves runtime dispatch behavior; generated return metadata is corrected separately." }, { "name": "UO.FollowersMax", "overloads": 1, "status": "reviewed-adaptation", "candidateSources": [], "sources": [ "https://stealth.od.ua/api/PetsMax/", "https://raw.githubusercontent.com/ServUO/ServUO/pub57/Server/Network/Packets.cs", "https://stealth.od.ua/forum/viewtopic.php?p=6278" ], "finding": "Reads total permitted control slots from own status type >= 3, not free capacity. Current can exceed maximum; no clamp in the getter. The capacity helper subtracts current from maximum and rejects insufficient capacity or a zero limit. No pet IDs or creature action. Own live Player only; missing/destroyed Player yields 0. Exact no-argument aliases, functions and intrinsics verified without packets. Compact packets preserve counters; a new Player starts at zero. Ten authored translations explain units, all supported forms, numbers versus Boolean, full helper parameters/results, three scripts and real Register/Invoke/CharacterStatus/Clear stages. CanCarry/CanAddFollower use extra <= maximum - current to avoid addition overflow. Helpers check the local cache and do not grant server permission.", "tests": "YokoStatusCounterTests: seven packet/formula/boundary tests and one manual-helper test passed. All 28 aliases, functions and intrinsics checked with UInt16/Byte maxima and compact-cache preservation. Complete CanCarry/LuckAtLeast/CanAddFollower definitions extracted from 308 root/locale cards: 17600 live/destroyed helper outcomes for zero limits, overcapacity, negative/large inputs and thresholds. Main/gameplay was not executed. Existing OwnStatusLifetime tests cover missing/destroyed read guards. The last full client suite of 1474 tests passed before these eight new counter tests. This batch preserves runtime dispatch behavior; generated return metadata is corrected separately." }, { "name": "UO.FontColor", "overloads": 1, "status": "pending", "candidateSources": [] }, { "name": "UO.Forget", "overloads": 1, "status": "pending", "candidateSources": [] }, { "name": "UO.FoundedParamId", "overloads": 1, "status": "reviewed-adaptation", "candidateSources": [ "https://stealth.od.ua/api/FoundedParamId/" ], "sources": [ "https://stealth.od.ua/api/FoundedParamId/" ], "finding": "Project alias of the zero-based matched pipe-alternative index, not speaker/type. Public page is ambiguous about parameter ID. Retain tested native Yoko pattern semantics and explicitly distinguish LineID/LineMsgType.", "tests": "YokoInjectionFindTypeWorldTests.Journal_*; YokoInjectionCompatibilityTests.Journal_*/Stealth_Journal_Properties_Use_The_Last_Real_Matched_Line" }, { "name": "UO.Frozen", "overloads": 2, "status": "reviewed-project-extension", "candidateSources": [], "sources": [ "https://stealth.od.ua/api/Paralyzed/", "https://stealth.od.ua/api/IsParalyzed/" ], "finding": "Paralyzed and the retained state-query aliases share GetLocked/IsParalyzed. Both no-argument self and one-object forms are supported, unlike the split reference API. Returns Integer 1/0; removed false positives for destroyed mobiles; query does not apply or cure paralysis.", "tests": "ObjectPredicates_ParalysisAliasesShareSelfAndExplicitObjectSemantics; ObjectPredicates_MetadataReportsNumericBooleanAndPreservesNamedLayerUnion" }, { "name": "UO.FunRunning", "overloads": 1, "status": "pending", "candidateSources": [] }, { "name": "UO.GameServerIPString", "overloads": 1, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/GameServerIPString/" ] }, { "name": "UO.Gate", "overloads": 2, "status": "pending", "candidateSources": [] }, { "name": "UO.GetAbilityID", "overloads": 1, "status": "pending", "candidateSources": [] }, { "name": "UO.GetAbilityName", "overloads": 1, "status": "pending", "candidateSources": [] }, { "name": "UO.GetActiveAbility", "overloads": 1, "status": "reviewed", "candidateSources": [ "https://stealth.od.ua/api/GetActiveAbility/" ], "sources": [ "https://stealth.od.ua/api/GetActiveAbility/" ], "finding": "English active ability name as String, or the String 0 with none/no player. Reads the armed flag on primary then secondary ability; not the result of a combat hit.", "tests": "YokoInjectionCompatibilityTests" }, { "name": "UO.GetAlive", "overloads": 2, "status": "project-extension", "candidateSources": [], "sources": [ "https://stealth.od.ua/api/IsDead/" ], "finding": "Project predicate: positive existing serial and no dead state. Existing items also return 1. Missing/destroyed objects return 0. Exists and the state read are separate snapshots.", "tests": "YokoCharacterQueryTests.CharacterQueries_StateAliasesSelectSelfOrExplicitObject; CharacterQueries_RejectDestroyedMobileBeforeDictionaryRemoval; CharacterQueries_FlightUsesModernFlagAndRejectsDestroyedMobile; static registration and bridge review" }, { "name": "UO.GetAltName", "overloads": 1, "status": "reviewed-adaptation", "candidateSources": [ "https://stealth.od.ua/api/GetAltName/" ], "sources": [ "https://stealth.od.ua/api/GetAltName/" ], "finding": "String alias of the client's Mobile.Title. Empty for an unknown title or a non-mobile; does not initiate a click. Destroyed mobiles are now rejected before their dictionary entries are removed; GetAltName shares GetTitle.", "tests": "YokoInjectionCompatibilityTests; CharacterQueries_TextRejectsDestroyedMobile" }, { "name": "UO.GetArmor", "overloads": 1, "status": "reviewed-adaptation", "candidateSources": [], "sources": [ "https://stealth.od.ua/api/Armor/", "https://raw.githubusercontent.com/ServUO/ServUO/pub57/Server/Network/Packets.cs" ], "finding": "Compared primary Stealth resistance/status meaning with ServUO MobileStatus encoding and the actual CharacterStatus/PlayerMobile fields. PhysicalResistance is signed Int16 widened to BASIC Integer; negative values are preserved, never clamped or converted to unsigned. Own live Player only, missing/destroyed Player zero, no network/status request or equipment calculation. Physical is server armor/status, not a locally computed damage percentage. Elemental fields are populated by status type>=4; there is no independent server-era gate. Older/compact packets retain previous elemental cache, new Player starts zero. Stealth elemental Word/era wording is not imposed on this signed client implementation. Get*/Resist* and bare/UO aliases have verified no-argument function/intrinsic forms. Ten translations describe returns, field availability, complete ResistanceAtLeast helper, three full examples and native reading stages.", "tests": "YokoOwnStatusLifetimeTests cover every field alias and intrinsic, live negative values, missing/destroyed Player and no packets. YokoStatusPacketBoundaryTests: six baseline truncation failures reproduced; fixed body validation now preserves all prior fields/LastStatus, with compact/types1..6 compatibility and other-mobile forms (15 cases); related status suite55 passed. YokoResistanceTests:24 selector cases and506root/locale helper cards with4928 live/destroyed outcomes passed (25 tests total). Full example Main/gameplay is not executed." }, { "name": "UO.GetArrayLength", "overloads": 1, "status": "pending", "candidateSources": [] }, { "name": "UO.GetARStatus", "overloads": 1, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/GetARStatus/" ] }, { "name": "UO.GetAutoBuyDelay", "overloads": 1, "status": "corrected", "candidateSources": [ "https://stealth.od.ua/api/GetAutoBuyDelay/" ], "sources": [ "https://stealth.od.ua/api/GetAutoBuyDelay/" ], "finding": "Integer milliseconds from the current shared profile, including valid zero. Removed stale per-script fallback that hid a zero set by another script or UI. Default 3 without profile.", "tests": "Auto_Trade_Delay_Getter_Uses_Current_Profile_Value_Including_Zero" }, { "name": "UO.GetAutoSellDelay", "overloads": 1, "status": "corrected", "candidateSources": [ "https://stealth.od.ua/api/GetAutoSellDelay/" ], "sources": [ "https://stealth.od.ua/api/GetAutoSellDelay/" ], "finding": "Integer milliseconds from the current shared profile, including valid zero. Removed stale per-script fallback that hid a zero set by another script or UI. Default 3 without profile.", "tests": "Auto_Trade_Delay_Getter_Uses_Current_Profile_Value_Including_Zero" }, { "name": "UO.GetBuffBarInfo", "overloads": 1, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/GetBuffBarInfo/" ] }, { "name": "UO.GetCharsListForShard", "overloads": 1, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/GetCharsListForShard/" ] }, { "name": "UO.GetCliloc", "overloads": 1, "status": "reviewed", "candidateSources": [ "https://stealth.od.ua/api/GetCliloc/" ], "sources": [ "https://stealth.od.ua/api/GetCliloc/" ], "finding": "Same text and bridge route as GetTooltip. Cliloc message IDs are not returned by this command.", "tests": "Stealth_Tooltip_And_Cliloc_Commands_Return_Client_Data_And_Forward_Parameters" }, { "name": "UO.GetClilocByID", "overloads": 1, "status": "reviewed-adaptation", "candidateSources": [ "https://stealth.od.ua/api/GetClilocByID/" ], "sources": [ "https://stealth.od.ua/api/GetClilocByID/" ], "finding": "Localized String with substitutions. BASIC registration requires both arguments and accepts an array or one scalar. Missing local cliloc emits ClilocLoader diagnostic text; unavailable loader returns empty.", "tests": "Stealth_Tooltip_And_Cliloc_Commands_Return_Client_Data_And_Forward_Parameters" }, { "name": "UO.GetColdResist", "overloads": 1, "status": "reviewed-adaptation", "candidateSources": [], "sources": [ "https://stealth.od.ua/api/ColdResist/", "https://raw.githubusercontent.com/ServUO/ServUO/pub57/Server/Network/Packets.cs" ], "finding": "Compared primary Stealth resistance/status meaning with ServUO MobileStatus encoding and the actual CharacterStatus/PlayerMobile fields. ColdResistance is signed Int16 widened to BASIC Integer; negative values are preserved, never clamped or converted to unsigned. Own live Player only, missing/destroyed Player zero, no network/status request or equipment calculation. Physical is server armor/status, not a locally computed damage percentage. Elemental fields are populated by status type>=4; there is no independent server-era gate. Older/compact packets retain previous elemental cache, new Player starts zero. Stealth elemental Word/era wording is not imposed on this signed client implementation. Get*/Resist* and bare/UO aliases have verified no-argument function/intrinsic forms. Ten translations describe returns, field availability, complete ResistanceAtLeast helper, three full examples and native reading stages.", "tests": "YokoOwnStatusLifetimeTests cover every field alias and intrinsic, live negative values, missing/destroyed Player and no packets. YokoStatusPacketBoundaryTests: six baseline truncation failures reproduced; fixed body validation now preserves all prior fields/LastStatus, with compact/types1..6 compatibility and other-mobile forms (15 cases); related status suite55 passed. YokoResistanceTests:24 selector cases and506root/locale helper cards with4928 live/destroyed outcomes passed (25 tests total). Full example Main/gameplay is not executed." }, { "name": "UO.GetColor", "overloads": 2, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/GetColor/" ] }, { "name": "UO.GetContent", "overloads": 1, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/GetContent/" ] }, { "name": "UO.GetContextMenu", "overloads": 1, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/GetContextMenu/" ] }, { "name": "UO.GetDead", "overloads": 2, "status": "corrected", "candidateSources": [], "sources": [ "https://stealth.od.ua/api/IsDead/", "https://stealth.od.ua/api/Dead/" ], "finding": "Integer 1/0 reflects Mobile.IsDead, not HP==0; absent/destroyed mobile returns 0. Both no-argument self and explicit object forms are project extensions of the separate Stealth names.", "tests": "YokoCharacterQueryTests.CharacterQueries_StateAliasesSelectSelfOrExplicitObject; CharacterQueries_RejectDestroyedMobileBeforeDictionaryRemoval; CharacterQueries_FlightUsesModernFlagAndRejectsDestroyedMobile; static registration and bridge review" }, { "name": "UO.GetDex", "overloads": 2, "status": "reviewed-project-extension", "candidateSources": [ "https://stealth.od.ua/api/GetDex/" ], "sources": [ "https://stealth.od.ua/api/Dex/", "https://stealth.od.ua/api/GetDex/" ], "finding": "Dexterity current points, Integer, from the actual PlayerMobile field (ushort), zero for missing/destroyed Player. Compared current primary Stealth own/ObjID contracts with RegisterCharacterGetterAliases, ExecuteStealthCompatibility, numeric conversion and concrete bridge. Only GetStr/GetInt/GetDex have ObjID overloads; other names here are zero-argument. The object overload only has own-character data: foreign serial returns zero, even for another loaded mobile. This project limitation is explicitly documented rather than guessing values or claiming a remote status request. No network packet or built-in delay. Bare Int(value) and Str(value) are distinct BASIC operations and their mixed cards were not replaced by these attribute-only contracts. Unshadowed intrinsics are fresh reads. Numeric attribute results are not Boolean; the complete AttributeAtLeast helper returns comparison 1/0. Ten translations contain exact arguments, return meaning, coercion, native stages, three diverse complete examples, and a fourth serial/alias example for object overloads.", "tests": "YokoAttributeTests: 13 cases passed. All attribute aliases/functions/intrinsics and six object forms (bare/UO GetStr/GetInt/GetDex), current update, 65535, missing/destroyed Player, foreign item/unknown serial, numeric/hex/self/AddObject names, no packets, and mixed BASIC Int/Str behavior. Six destroyed-player regressions reproduced before the fix. Complete helpers extracted from all 242 root/locale cards executed at 0,79,80,81,65535 and with a destroyed Player (1452 assertions of helper results), with no gameplay Main execution. Reviewed IDE result-kind cases passed." }, { "name": "UO.GetDexterity", "overloads": 1, "status": "reviewed-project-extension", "candidateSources": [], "sources": [ "https://stealth.od.ua/api/Dex/", "https://stealth.od.ua/api/GetDex/" ], "finding": "Dexterity current points, Integer, from the actual PlayerMobile field (ushort), zero for missing/destroyed Player. Compared current primary Stealth own/ObjID contracts with RegisterCharacterGetterAliases, ExecuteStealthCompatibility, numeric conversion and concrete bridge. Only GetStr/GetInt/GetDex have ObjID overloads; other names here are zero-argument. The object overload only has own-character data: foreign serial returns zero, even for another loaded mobile. This project limitation is explicitly documented rather than guessing values or claiming a remote status request. No network packet or built-in delay. Bare Int(value) and Str(value) are distinct BASIC operations and their mixed cards were not replaced by these attribute-only contracts. Unshadowed intrinsics are fresh reads. Numeric attribute results are not Boolean; the complete AttributeAtLeast helper returns comparison 1/0. Ten translations contain exact arguments, return meaning, coercion, native stages, three diverse complete examples, and a fourth serial/alias example for object overloads.", "tests": "YokoAttributeTests: 13 cases passed. All attribute aliases/functions/intrinsics and six object forms (bare/UO GetStr/GetInt/GetDex), current update, 65535, missing/destroyed Player, foreign item/unknown serial, numeric/hex/self/AddObject names, no packets, and mixed BASIC Int/Str behavior. Six destroyed-player regressions reproduced before the fix. Complete helpers extracted from all 242 root/locale cards executed at 0,79,80,81,65535 and with a destroyed Player (1452 assertions of helper results), with no gameplay Main execution. Reviewed IDE result-kind cases passed." }, { "name": "UO.GetDir", "overloads": 3, "status": "corrected", "candidateSources": [], "sources": [ "https://stealth.od.ua/api/GetDirection/" ], "finding": "Returns Integer Direction & Direction.Mask for the selected mobile; unknown/destroyed mobile returns 0. Zero can also be a valid direction/status; not a Boolean. Run bit is excluded from direction.", "tests": "CharacterQueries_RejectDestroyedMobileBeforeDictionaryRemoval; concrete bridge review" }, { "name": "UO.GetDirection", "overloads": 2, "status": "corrected", "candidateSources": [ "https://stealth.od.ua/api/GetDirection/" ], "sources": [ "https://stealth.od.ua/api/GetDirection/" ], "finding": "Returns Integer Direction & Direction.Mask for the selected mobile; unknown/destroyed mobile returns 0. Zero can also be a valid direction/status; not a Boolean. Run bit is excluded from direction.", "tests": "CharacterQueries_RejectDestroyedMobileBeforeDictionaryRemoval; concrete bridge review" }, { "name": "UO.GetDistance", "overloads": 6, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/GetDistance/" ] }, { "name": "UO.GetEasyUO", "overloads": 1, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/GetEasyUO/" ] }, { "name": "UO.GetEnergyResist", "overloads": 1, "status": "reviewed-adaptation", "candidateSources": [], "sources": [ "https://stealth.od.ua/api/EnergyResist/", "https://raw.githubusercontent.com/ServUO/ServUO/pub57/Server/Network/Packets.cs" ], "finding": "Compared primary Stealth resistance/status meaning with ServUO MobileStatus encoding and the actual CharacterStatus/PlayerMobile fields. EnergyResistance is signed Int16 widened to BASIC Integer; negative values are preserved, never clamped or converted to unsigned. Own live Player only, missing/destroyed Player zero, no network/status request or equipment calculation. Physical is server armor/status, not a locally computed damage percentage. Elemental fields are populated by status type>=4; there is no independent server-era gate. Older/compact packets retain previous elemental cache, new Player starts zero. Stealth elemental Word/era wording is not imposed on this signed client implementation. Get*/Resist* and bare/UO aliases have verified no-argument function/intrinsic forms. Ten translations describe returns, field availability, complete ResistanceAtLeast helper, three full examples and native reading stages.", "tests": "YokoOwnStatusLifetimeTests cover every field alias and intrinsic, live negative values, missing/destroyed Player and no packets. YokoStatusPacketBoundaryTests: six baseline truncation failures reproduced; fixed body validation now preserves all prior fields/LastStatus, with compact/types1..6 compatibility and other-mobile forms (15 cases); related status suite55 passed. YokoResistanceTests:24 selector cases and506root/locale helper cards with4928 live/destroyed outcomes passed (25 tests total). Full example Main/gameplay is not executed." }, { "name": "UO.GetEquipment", "overloads": 1, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/GetEquipment/" ] }, { "name": "UO.GetFindedList", "overloads": 1, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/GetFindedList/" ] }, { "name": "UO.GetFireResist", "overloads": 1, "status": "reviewed-adaptation", "candidateSources": [], "sources": [ "https://stealth.od.ua/api/FireResist/", "https://raw.githubusercontent.com/ServUO/ServUO/pub57/Server/Network/Packets.cs" ], "finding": "Compared primary Stealth resistance/status meaning with ServUO MobileStatus encoding and the actual CharacterStatus/PlayerMobile fields. FireResistance is signed Int16 widened to BASIC Integer; negative values are preserved, never clamped or converted to unsigned. Own live Player only, missing/destroyed Player zero, no network/status request or equipment calculation. Physical is server armor/status, not a locally computed damage percentage. Elemental fields are populated by status type>=4; there is no independent server-era gate. Older/compact packets retain previous elemental cache, new Player starts zero. Stealth elemental Word/era wording is not imposed on this signed client implementation. Get*/Resist* and bare/UO aliases have verified no-argument function/intrinsic forms. Ten translations describe returns, field availability, complete ResistanceAtLeast helper, three full examples and native reading stages.", "tests": "YokoOwnStatusLifetimeTests cover every field alias and intrinsic, live negative values, missing/destroyed Player and no packets. YokoStatusPacketBoundaryTests: six baseline truncation failures reproduced; fixed body validation now preserves all prior fields/LastStatus, with compact/types1..6 compatibility and other-mobile forms (15 cases); related status suite55 passed. YokoResistanceTests:24 selector cases and506root/locale helper cards with4928 live/destroyed outcomes passed (25 tests total). Full example Main/gameplay is not executed." }, { "name": "UO.GetFlags", "overloads": 1, "status": "pending", "candidateSources": [] }, { "name": "UO.GetFlying", "overloads": 2, "status": "project-extension", "candidateSources": [], "sources": [], "finding": "Project state family reads Mobile.IsFlying: requires protocol >=7.0.0.0 and bit 0x04. Not derived from Z. Destroyed/missing mobiles return 0. Kept separate from the modern poison field.", "tests": "YokoCharacterQueryTests.CharacterQueries_StateAliasesSelectSelfOrExplicitObject; CharacterQueries_RejectDestroyedMobileBeforeDictionaryRemoval; CharacterQueries_FlightUsesModernFlagAndRejectsDestroyedMobile; static registration and bridge review" }, { "name": "UO.GetFollowers", "overloads": 1, "status": "reviewed-adaptation", "candidateSources": [], "sources": [ "https://stealth.od.ua/api/PetsCurrent/", "https://raw.githubusercontent.com/ServUO/ServUO/pub57/Server/Network/Packets.cs", "https://stealth.od.ua/forum/viewtopic.php?p=6278" ], "finding": "Reads occupied follower control slots from own status type>=3. Verified packet byte matches Player.Followers, not world-mobile enumeration. A creature may consume multiple slots; owner/taming/summon eligibility is server-defined. Clarifies loose pet-count wording in current primary page using server encoding and historical official slot documentation. Own live Player only; missing/destroyed Player yields 0. Exact no-argument aliases, functions and intrinsics verified without packets. Compact packets preserve counters; a new Player starts at zero. Ten authored translations explain units, all supported forms, numbers versus Boolean, full helper parameters/results, three scripts and real Register/Invoke/CharacterStatus/Clear stages. CanCarry/CanAddFollower use extra <= maximum - current to avoid addition overflow. Helpers check the local cache and do not grant server permission.", "tests": "YokoStatusCounterTests: seven packet/formula/boundary tests and one manual-helper test passed. All 28 aliases, functions and intrinsics checked with UInt16/Byte maxima and compact-cache preservation. Complete CanCarry/LuckAtLeast/CanAddFollower definitions extracted from 308 root/locale cards: 17600 live/destroyed helper outcomes for zero limits, overcapacity, negative/large inputs and thresholds. Main/gameplay was not executed. Existing OwnStatusLifetime tests cover missing/destroyed read guards. The last full client suite of 1474 tests passed before these eight new counter tests. This batch preserves runtime dispatch behavior; generated return metadata is corrected separately." }, { "name": "UO.GetFollowersMax", "overloads": 1, "status": "reviewed-adaptation", "candidateSources": [], "sources": [ "https://stealth.od.ua/api/PetsMax/", "https://raw.githubusercontent.com/ServUO/ServUO/pub57/Server/Network/Packets.cs", "https://stealth.od.ua/forum/viewtopic.php?p=6278" ], "finding": "Reads total permitted control slots from own status type >= 3, not free capacity. Current can exceed maximum; no clamp in the getter. The capacity helper subtracts current from maximum and rejects insufficient capacity or a zero limit. No pet IDs or creature action. Own live Player only; missing/destroyed Player yields 0. Exact no-argument aliases, functions and intrinsics verified without packets. Compact packets preserve counters; a new Player starts at zero. Ten authored translations explain units, all supported forms, numbers versus Boolean, full helper parameters/results, three scripts and real Register/Invoke/CharacterStatus/Clear stages. CanCarry/CanAddFollower use extra <= maximum - current to avoid addition overflow. Helpers check the local cache and do not grant server permission.", "tests": "YokoStatusCounterTests: seven packet/formula/boundary tests and one manual-helper test passed. All 28 aliases, functions and intrinsics checked with UInt16/Byte maxima and compact-cache preservation. Complete CanCarry/LuckAtLeast/CanAddFollower definitions extracted from 308 root/locale cards: 17600 live/destroyed helper outcomes for zero limits, overcapacity, negative/large inputs and thresholds. Main/gameplay was not executed. Existing OwnStatusLifetime tests cover missing/destroyed read guards. The last full client suite of 1474 tests passed before these eight new counter tests. This batch preserves runtime dispatch behavior; generated return metadata is corrected separately." }, { "name": "UO.GetFoundedText", "overloads": 1, "status": "reviewed-adaptation", "candidateSources": [], "sources": [ "https://forum.yoko.com.ua/viewtopic.php?p=27633", "https://stealth.od.ua/api/Journal/" ], "finding": "String — текст выбранной записи; пустая строка без выбора. Пустой текст допустим у существующей записи. Selected fields are captured together; later incoming/recycled entries do not replace them. Current indices are resolved by identity; -1 on eviction. Native behavior was checked in bridge-backed tests.", "tests": "YokoInjectionFindTypeWorldTests.Journal_*; YokoInjectionCompatibilityTests.Journal_*/Stealth_Journal_Properties_Use_The_Last_Real_Matched_Line" }, { "name": "UO.GetFoundedTextColor", "overloads": 1, "status": "reviewed-adaptation", "candidateSources": [], "sources": [ "https://forum.yoko.com.ua/viewtopic.php?p=27633", "https://stealth.od.ua/api/LineTextColor/" ], "finding": "String — UO hue в формате 0x0044 (4 hex-цифры). Без выбора — 0x0000; hue=0 также допустим у сообщения. Это не RGB. Selected fields are captured together; later incoming/recycled entries do not replace them. Current indices are resolved by identity; -1 on eviction. Native behavior was checked in bridge-backed tests.", "tests": "YokoInjectionFindTypeWorldTests.Journal_*; YokoInjectionCompatibilityTests.Journal_*/Stealth_Journal_Properties_Use_The_Last_Real_Matched_Line" }, { "name": "UO.GetFoundedTextID", "overloads": 1, "status": "reviewed-adaptation", "candidateSources": [], "sources": [ "https://forum.yoko.com.ua/viewtopic.php?p=27633", "https://stealth.od.ua/api/FoundedParamId/" ], "finding": "Zero-based matched nonempty trimmed pipe alternative; first matching alternative wins. Zero also means no recorded alternative; search success must be checked separately.", "tests": "YokoInjectionFindTypeWorldTests.Journal_*; YokoInjectionCompatibilityTests.Journal_*/Stealth_Journal_Properties_Use_The_Last_Real_Matched_Line" }, { "name": "UO.GetFoundedTextIndex", "overloads": 1, "status": "reviewed-adaptation", "candidateSources": [], "sources": [ "https://forum.yoko.com.ua/viewtopic.php?p=27633", "https://stealth.od.ua/api/LineIndex/" ], "finding": "Integer — текущий индекс от 0 (самая новая строка). -1 означает, что выбора нет либо выбранная запись уже удалена/вытеснена. Это не результат InJournal: из индекса не нужно вычитать 1. Selected fields are captured together; later incoming/recycled entries do not replace them. Current indices are resolved by identity; -1 on eviction. Native behavior was checked in bridge-backed tests.", "tests": "YokoInjectionFindTypeWorldTests.Journal_*; YokoInjectionCompatibilityTests.Journal_*/Stealth_Journal_Properties_Use_The_Last_Real_Matched_Line" }, { "name": "UO.GetFoundedTextSerial", "overloads": 1, "status": "reviewed-adaptation", "candidateSources": [], "sources": [ "https://forum.yoko.com.ua/viewtopic.php?p=27633", "https://stealth.od.ua/api/LineID/" ], "finding": "String — serial автора в формате 0x00001234 (8 hex-цифр). Без выбора — 0x00000000. Это не type предмета и не индекс журнала. Selected fields are captured together; later incoming/recycled entries do not replace them. Current indices are resolved by identity; -1 on eviction. Native behavior was checked in bridge-backed tests.", "tests": "YokoInjectionFindTypeWorldTests.Journal_*; YokoInjectionCompatibilityTests.Journal_*/Stealth_Journal_Properties_Use_The_Last_Real_Matched_Line" }, { "name": "UO.GetFoundedTextTimer", "overloads": 1, "status": "reviewed-adaptation", "candidateSources": [], "sources": [ "https://forum.yoko.com.ua/viewtopic.php?p=27633", "https://stealth.od.ua/api/LineTime/" ], "finding": "Integer — момент записи в миллисекундах от начала runtime, совместимый с Now(). Записи до начала дают 0. Без выбора также 0; неверная календарная метка даёт -1. Это не прошедшее время и не десятые доли секунды UO.Timer(). Selected fields are captured together; later incoming/recycled entries do not replace them. Current indices are resolved by identity; -1 on eviction. Native behavior was checked in bridge-backed tests.", "tests": "YokoInjectionFindTypeWorldTests.Journal_*; YokoInjectionCompatibilityTests.Journal_*/Stealth_Journal_Properties_Use_The_Last_Real_Matched_Line" }, { "name": "UO.GetFoundItems", "overloads": 1, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/GetFoundItems/" ] }, { "name": "UO.GetFrozen", "overloads": 2, "status": "reviewed-project-extension", "candidateSources": [], "sources": [ "https://stealth.od.ua/api/Paralyzed/", "https://stealth.od.ua/api/IsParalyzed/" ], "finding": "Paralyzed and the retained state-query aliases share GetLocked/IsParalyzed. Both no-argument self and one-object forms are supported, unlike the split reference API. Returns Integer 1/0; removed false positives for destroyed mobiles; query does not apply or cure paralysis.", "tests": "ObjectPredicates_ParalysisAliasesShareSelfAndExplicitObjectSemantics; ObjectPredicates_MetadataReportsNumericBooleanAndPreservesNamedLayerUnion" }, { "name": "UO.GetGlobal", "overloads": 2, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/GetGlobal/" ] }, { "name": "UO.GetGold", "overloads": 1, "status": "reviewed-project-extension", "candidateSources": [], "sources": [ "https://stealth.od.ua/api/Gold/" ], "finding": "Primary Gold returns the unsigned Cardinal status amount. Verified CharacterStatus stores UInt32 in Player.Gold. Fixed BASIC amount overflow without changing IApiBridge.Gold Int32 ABI: ReadGoldValue restores the unsigned bit pattern and returns Integer through Int32.MaxValue, otherwise Decimal(Double), exact for all UInt32 values. All four aliases, functions and intrinsics use this path. The legacy public C# Gold() method and bridge still carry Int32 bits; public BASIC queries expose a nonnegative numeric amount. Missing/destroyed Player yields Integer zero. Not an inventory/stack/bank enumeration, Boolean or approval to buy. Ten translations document exact no-argument forms, mixed numeric kind, large literal notation, unsafe forced Int32 conversion, full CanAfford helper and native stages.", "tests": "YokoGoldAmountTests: five UInt32 boundary cases across four function/intrinsic aliases, with zero/destroyed Player and no packets. Baseline two large-amount failures, three passes; all five pass after widening. Full CanAfford examples extracted from44root/locale cards: each checked across four balances and seven prices, plus destroyed Player (1276 helper outcomes), no Main/gameplay execution. Combined gold/lifetime/external-manual26 tests pass; runtime404 and LSP54 pass. Manual verifier10526parsed examples,40974direct calls,286pure calculations,0errors. Gameplay examples are not generally executed." }, { "name": "UO.GetGraphic", "overloads": 3, "status": "pending", "candidateSources": [] }, { "name": "UO.GetGump", "overloads": 4, "status": "pending", "candidateSources": [] }, { "name": "UO.GetGumpButtonsDescription", "overloads": 1, "status": "reviewed-adaptation", "candidateSources": [ "https://stealth.od.ua/api/GetGumpButtonsDescription/" ], "sources": [ "https://stealth.od.ua/api/GetGumpButtonsDescription/" ], "finding": "Array of ordinary Button descriptions; radio controls are excluded. Invalid index returns []; SilentMode=0 also displays nonempty result.", "tests": "YokoCommandEndToEndTests; Stealth_Gump_Api_Uses_The_Active_ClassicUo_Gumps; YokoIdeRuntimeProbe" }, { "name": "UO.GetGumpCount", "overloads": 1, "status": "reviewed-adaptation", "candidateSources": [], "sources": [ "https://stealth.od.ua/api/GetGumpsCount/" ], "finding": "Native alias of the active server-window count; same current UI ordering as GetGumpsCount.", "tests": "YokoCommandEndToEndTests; Stealth_Gump_Api_Uses_The_Active_ClassicUo_Gumps; YokoIdeRuntimeProbe" }, { "name": "UO.GetGumpFullLines", "overloads": 1, "status": "reviewed-adaptation", "candidateSources": [ "https://stealth.od.ua/api/GetGumpFullLines/" ], "sources": [ "https://stealth.od.ua/api/GetGumpFullLines/" ], "finding": "Array of current live descendant control descriptions, excluding disposed controls. Not a serialized original layout packet; fields supported by each description are documented. SilentMode=0 also displays the result.", "tests": "YokoCommandEndToEndTests; Stealth_Gump_Api_Uses_The_Active_ClassicUo_Gumps; YokoIdeRuntimeProbe" }, { "name": "UO.GetGumpID", "overloads": 1, "status": "reviewed-adaptation", "candidateSources": [ "https://stealth.od.ua/api/GetGumpID/" ], "sources": [ "https://stealth.od.ua/api/GetGumpID/" ], "finding": "32-bit gump type ID by strict zero-based index, zero for invalid index. BASIC Integer preserves high bits as signed negative values.", "tests": "YokoCommandEndToEndTests; Stealth_Gump_Api_Uses_The_Active_ClassicUo_Gumps; YokoIdeRuntimeProbe" }, { "name": "UO.GetGumpInfo", "overloads": 1, "status": "reviewed-adaptation", "candidateSources": [ "https://stealth.od.ua/api/GetGumpInfo/" ], "sources": [ "https://stealth.od.ua/api/GetGumpInfo/" ], "finding": "Atomic single-game-thread snapshot, [] if invalid or ignored. BASIC keeps the established five-field array [serial,id,texts,buttons,controlDescriptions], not Pascal named fields. Descriptions reflect live controls rather than a raw layout record; documented format adaptation.", "tests": "YokoCommandEndToEndTests; Stealth_Gump_Api_Uses_The_Active_ClassicUo_Gumps; YokoIdeRuntimeProbe" }, { "name": "UO.GetGumpsCount", "overloads": 1, "status": "reviewed-adaptation", "candidateSources": [ "https://stealth.od.ua/api/GetGumpsCount/" ], "sources": [ "https://stealth.od.ua/api/GetGumpsCount/" ], "finding": "Nonnegative count of active server windows. Local client windows are excluded. The project uses current UI order, not the chronological Stealth cache order; count-1 is a last index, not guaranteed newest.", "tests": "YokoCommandEndToEndTests; Stealth_Gump_Api_Uses_The_Active_ClassicUo_Gumps; YokoIdeRuntimeProbe" }, { "name": "UO.GetGumpSerial", "overloads": 1, "status": "reviewed-adaptation", "candidateSources": [ "https://stealth.od.ua/api/GetGumpSerial/" ], "sources": [ "https://stealth.od.ua/api/GetGumpSerial/" ], "finding": "32-bit serial by strict zero-based index, zero for invalid index. BASIC Integer preserves high bits as signed negative values. Serial uniqueness is server-dependent.", "tests": "YokoCommandEndToEndTests; Stealth_Gump_Api_Uses_The_Active_ClassicUo_Gumps; YokoIdeRuntimeProbe" }, { "name": "UO.GetGumpShortLines", "overloads": 1, "status": "reviewed-adaptation", "candidateSources": [ "https://stealth.od.ua/api/GetGumpShortLines/" ], "sources": [ "https://stealth.od.ua/api/GetGumpShortLines/" ], "finding": "Array of text and button-like control descriptions, no raw Pascal out parameter. SilentMode=0 also displays the result. Uses current UI ordering.", "tests": "YokoCommandEndToEndTests; Stealth_Gump_Api_Uses_The_Active_ClassicUo_Gumps; YokoIdeRuntimeProbe" }, { "name": "UO.GetGumpTextLines", "overloads": 1, "status": "reviewed-adaptation", "candidateSources": [ "https://stealth.od.ua/api/GetGumpTextLines/" ], "sources": [ "https://stealth.od.ua/api/GetGumpTextLines/" ], "finding": "Array of rendered control texts, excluding blank/whitespace entries. This is the project live-control view, not the Stealth raw server text pool. No output window side effect.", "tests": "YokoCommandEndToEndTests; Stealth_Gump_Api_Uses_The_Active_ClassicUo_Gumps; YokoIdeRuntimeProbe" }, { "name": "UO.GetHidden", "overloads": 2, "status": "corrected", "candidateSources": [], "sources": [ "https://stealth.od.ua/api/IsHidden/", "https://stealth.od.ua/api/Hidden/" ], "finding": "Integer 1/0 reads IsHidden. Fixed missing numeric overload of UO.Hidden and rejection of destroyed mobiles. Does not hide/reveal an object or test line of sight.", "tests": "YokoCharacterQueryTests.CharacterQueries_StateAliasesSelectSelfOrExplicitObject; CharacterQueries_RejectDestroyedMobileBeforeDictionaryRemoval; CharacterQueries_FlightUsesModernFlagAndRejectsDestroyedMobile; static registration and bridge review" }, { "name": "UO.GetHP", "overloads": 4, "status": "project-extension", "candidateSources": [ "https://stealth.od.ua/api/GetHP/" ], "sources": [ "https://stealth.od.ua/api/GetHP/", "https://stealth.od.ua/api/Life/" ], "finding": "Integer value of Hits, not a percentage or Boolean. Zero is valid and also means absent data. The zero-argument form selects self; explicit serial/registered-name forms are supported. Reads local data without an automatic status request; unlike Stealth GetHP, this client does not request missing stats as a side effect. Missing/destroyed entities return 0. HP fields may contain a relative server scale.", "tests": "YokoCharacterQueryTests; Character_Stats_And_Resists_Work_As_Functions_And_Parameters; static RegisterCharacterGetterAliases and concrete bridge field mapping review" }, { "name": "UO.GetIgnoreList", "overloads": 1, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/GetIgnoreList/" ] }, { "name": "UO.GetInfo", "overloads": 1, "status": "pending", "candidateSources": [] }, { "name": "UO.GetInt", "overloads": 2, "status": "reviewed-project-extension", "candidateSources": [ "https://stealth.od.ua/api/GetInt/" ], "sources": [ "https://stealth.od.ua/api/Int/", "https://stealth.od.ua/api/GetInt/" ], "finding": "Intelligence current points, Integer, from the actual PlayerMobile field (ushort), zero for missing/destroyed Player. Compared current primary Stealth own/ObjID contracts with RegisterCharacterGetterAliases, ExecuteStealthCompatibility, numeric conversion and concrete bridge. Only GetStr/GetInt/GetDex have ObjID overloads; other names here are zero-argument. The object overload only has own-character data: foreign serial returns zero, even for another loaded mobile. This project limitation is explicitly documented rather than guessing values or claiming a remote status request. No network packet or built-in delay. Bare Int(value) and Str(value) are distinct BASIC operations and their mixed cards were not replaced by these attribute-only contracts. Unshadowed intrinsics are fresh reads. Numeric attribute results are not Boolean; the complete AttributeAtLeast helper returns comparison 1/0. Ten translations contain exact arguments, return meaning, coercion, native stages, three diverse complete examples, and a fourth serial/alias example for object overloads.", "tests": "YokoAttributeTests: 13 cases passed. All attribute aliases/functions/intrinsics and six object forms (bare/UO GetStr/GetInt/GetDex), current update, 65535, missing/destroyed Player, foreign item/unknown serial, numeric/hex/self/AddObject names, no packets, and mixed BASIC Int/Str behavior. Six destroyed-player regressions reproduced before the fix. Complete helpers extracted from all 242 root/locale cards executed at 0,79,80,81,65535 and with a destroyed Player (1452 assertions of helper results), with no gameplay Main execution. Reviewed IDE result-kind cases passed." }, { "name": "UO.GetIntelligence", "overloads": 1, "status": "reviewed-project-extension", "candidateSources": [], "sources": [ "https://stealth.od.ua/api/Int/", "https://stealth.od.ua/api/GetInt/" ], "finding": "Intelligence current points, Integer, from the actual PlayerMobile field (ushort), zero for missing/destroyed Player. Compared current primary Stealth own/ObjID contracts with RegisterCharacterGetterAliases, ExecuteStealthCompatibility, numeric conversion and concrete bridge. Only GetStr/GetInt/GetDex have ObjID overloads; other names here are zero-argument. The object overload only has own-character data: foreign serial returns zero, even for another loaded mobile. This project limitation is explicitly documented rather than guessing values or claiming a remote status request. No network packet or built-in delay. Bare Int(value) and Str(value) are distinct BASIC operations and their mixed cards were not replaced by these attribute-only contracts. Unshadowed intrinsics are fresh reads. Numeric attribute results are not Boolean; the complete AttributeAtLeast helper returns comparison 1/0. Ten translations contain exact arguments, return meaning, coercion, native stages, three diverse complete examples, and a fourth serial/alias example for object overloads.", "tests": "YokoAttributeTests: 13 cases passed. All attribute aliases/functions/intrinsics and six object forms (bare/UO GetStr/GetInt/GetDex), current update, 65535, missing/destroyed Player, foreign item/unknown serial, numeric/hex/self/AddObject names, no packets, and mixed BASIC Int/Str behavior. Six destroyed-player regressions reproduced before the fix. Complete helpers extracted from all 242 root/locale cards executed at 0,79,80,81,65535 and with a destroyed Player (1452 assertions of helper results), with no gameplay Main execution. Reviewed IDE result-kind cases passed." }, { "name": "UO.GetJournal", "overloads": 1, "status": "reviewed-adaptation", "candidateSources": [], "sources": [ "https://forum.yoko.com.ua/viewtopic.php?p=27633", "https://stealth.od.ua/api/Journal/" ], "finding": "String — текст строки, либо пустая строка при неверном индексе/пустом журнале. У существующей строки текст тоже может быть пустым: после чтения LineIndex >= 0 подтверждает, что запись была выбрана. Это не количество строк. Selected fields are captured together; later incoming/recycled entries do not replace them. Current indices are resolved by identity; -1 on eviction. Native behavior was checked in bridge-backed tests.", "tests": "YokoInjectionFindTypeWorldTests.Journal_*; YokoInjectionCompatibilityTests.Journal_*/Stealth_Journal_Properties_Use_The_Last_Real_Matched_Line" }, { "name": "UO.GetJournalColor", "overloads": 1, "status": "reviewed-adaptation", "candidateSources": [], "sources": [ "https://forum.yoko.com.ua/viewtopic.php?p=27633", "https://stealth.od.ua/api/LineTextColor/" ], "finding": "String — UO hue как 0x0044; при неверном индексе 0x0000. Это не RGB. Selected fields are captured together; later incoming/recycled entries do not replace them. Current indices are resolved by identity; -1 on eviction. Native behavior was checked in bridge-backed tests.", "tests": "YokoInjectionFindTypeWorldTests.Journal_*; YokoInjectionCompatibilityTests.Journal_*/Stealth_Journal_Properties_Use_The_Last_Real_Matched_Line" }, { "name": "UO.GetJournalSerial", "overloads": 1, "status": "reviewed-adaptation", "candidateSources": [], "sources": [ "https://forum.yoko.com.ua/viewtopic.php?p=27633", "https://stealth.od.ua/api/LineID/" ], "finding": "String — serial автора как 0x00001234; при неверном индексе 0x00000000. Selected fields are captured together; later incoming/recycled entries do not replace them. Current indices are resolved by identity; -1 on eviction. Native behavior was checked in bridge-backed tests.", "tests": "YokoInjectionFindTypeWorldTests.Journal_*; YokoInjectionCompatibilityTests.Journal_*/Stealth_Journal_Properties_Use_The_Last_Real_Matched_Line" }, { "name": "UO.GetLandscapeTile", "overloads": 1, "status": "pending", "candidateSources": [] }, { "name": "UO.GetLandTileAt", "overloads": 2, "status": "pending", "candidateSources": [] }, { "name": "UO.GetLandTileData", "overloads": 1, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/GetLandTileData/" ] }, { "name": "UO.GetLandTilesArray", "overloads": 1, "status": "corrected", "candidateSources": [ "https://stealth.od.ua/api/GetLandTilesArray/" ], "sources": [ "https://stealth.od.ua/api/GetLandTilesArray/" ], "finding": "Six-argument Yoko form returns a dynamic Array of records, not the Pascal legacy count plus output argument. Inclusive reversed corners are normalized. Corrected int overflow in area validation, bounded coordinates/map and sliced scans (32 cells, soft approximately 1 ms); cancellation is checked and a facet change discards partial results. Exact type matching; Ex accepts arrays/scalars and empty arrays match all, repeated types do not duplicate records. Land rows are [graphic,X,Y,Z].", "tests": "TileSearchTests (22 cases); initialized-client map bounds plus 468 path checks; 30 real worker path queries and 10 tile scans of 1024 cells" }, { "name": "UO.GetLandTilesArrayEx", "overloads": 1, "status": "corrected", "candidateSources": [ "https://stealth.od.ua/api/GetLandTilesArrayEx/" ], "sources": [ "https://stealth.od.ua/api/GetLandTilesArrayEx/" ], "finding": "Six-argument Yoko form returns a dynamic Array of records, not the Pascal legacy count plus output argument. Inclusive reversed corners are normalized. Corrected int overflow in area validation, bounded coordinates/map and sliced scans (32 cells, soft approximately 1 ms); cancellation is checked and a facet change discards partial results. Exact type matching; Ex accepts arrays/scalars and empty arrays match all, repeated types do not duplicate records. Land rows are [graphic,X,Y,Z].", "tests": "TileSearchTests (22 cases); initialized-client map bounds plus 468 path checks; 30 real worker path queries and 10 tile scans of 1024 cells" }, { "name": "UO.GetLastMenuItems", "overloads": 1, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/GetLastMenuItems/" ] }, { "name": "UO.GetLayer", "overloads": 2, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/GetLayer/" ] }, { "name": "UO.GetLayerCount", "overloads": 1, "status": "reviewed-project-extension", "candidateSources": [ "https://stealth.od.ua/api/GetLayerCount/" ], "sources": [ "https://stealth.od.ua/api/GetLayerCount/" ], "finding": "Returns GetStaticTiles.Length / 3: record count, not an equipment layer, highest Z, or count of unique heights. The established Yoko bridge includes Static, Multi and Item records, wider than file-only statics; documented explicitly rather than silently removing existing results.", "tests": "TileSearchTests (22 cases); initialized-client map bounds plus 468 path checks; 30 real worker path queries and 10 tile scans of 1024 cells" }, { "name": "UO.GetLife", "overloads": 1, "status": "project-extension", "candidateSources": [], "sources": [ "https://stealth.od.ua/api/GetHP/", "https://stealth.od.ua/api/Life/" ], "finding": "Integer value of Hits, not a percentage or Boolean. Zero is valid and also means absent data. Only the zero-argument self form is registered; do not pass an object argument. Reads local data without an automatic status request; unlike Stealth GetHP, this client does not request missing stats as a side effect. Missing/destroyed entities return 0. HP fields may contain a relative server scale.", "tests": "YokoCharacterQueryTests; Character_Stats_And_Resists_Work_As_Functions_And_Parameters; static RegisterCharacterGetterAliases and concrete bridge field mapping review" }, { "name": "UO.GetLocked", "overloads": 1, "status": "corrected-adaptation", "candidateSources": [], "sources": [ "https://stealth.od.ua/api/IsParalyzed/" ], "finding": "Reads Mobile.IsParalyzed, not item locking. Destroyed and non-mobile objects return 0.", "tests": "ObjectPredicates_*; bridge/dispatch source review" }, { "name": "UO.GetLuck", "overloads": 1, "status": "reviewed-adaptation", "candidateSources": [], "sources": [ "https://stealth.od.ua/api/Luck/", "https://raw.githubusercontent.com/ServUO/ServUO/pub57/Server/Network/Packets.cs" ], "finding": "Reads current server luck points from own status type >= 4, UInt16 widened to nonnegative Integer through 65535. Not a probability, random value, resistance or loot guarantee. The primary Luck Integer meaning agrees; no local bonus or drop-chance calculation. Own live Player only; missing/destroyed Player yields 0. Exact no-argument aliases, functions and intrinsics verified without packets. Compact packets preserve counters; a new Player starts at zero. Ten authored translations explain units, all supported forms, numbers versus Boolean, full helper parameters/results, three scripts and real Register/Invoke/CharacterStatus/Clear stages. CanCarry/CanAddFollower use extra <= maximum - current to avoid addition overflow. Helpers check the local cache and do not grant server permission.", "tests": "YokoStatusCounterTests: seven packet/formula/boundary tests and one manual-helper test passed. All 28 aliases, functions and intrinsics checked with UInt16/Byte maxima and compact-cache preservation. Complete CanCarry/LuckAtLeast/CanAddFollower definitions extracted from 308 root/locale cards: 17600 live/destroyed helper outcomes for zero limits, overcapacity, negative/large inputs and thresholds. Main/gameplay was not executed. Existing OwnStatusLifetime tests cover missing/destroyed read guards. The last full client suite of 1474 tests passed before these eight new counter tests. This batch preserves runtime dispatch behavior; generated return metadata is corrected separately." }, { "name": "UO.GetMana", "overloads": 2, "status": "project-extension", "candidateSources": [ "https://stealth.od.ua/api/GetMana/" ], "sources": [ "https://stealth.od.ua/api/GetMana/", "https://stealth.od.ua/api/Mana/" ], "finding": "Integer value of Mana, not a percentage or Boolean. Zero is valid and also means absent data. The zero-argument form selects self; explicit serial/registered-name forms are supported. Reads local data without network traffic. Unknown/destroyed mobile returns 0; the server may not provide other mobiles’ values. Zero-argument own Mana/Stamina and their maxima now also reject destroyed Player through the game-thread CurrentPlayer read; object overloads already use World.Get. OwnStatusLifetime tests reproduced stale values, then passed for all affected function/intrinsic aliases without altering live values or sending packets.", "tests": "YokoCharacterQueryTests; Character_Stats_And_Resists_Work_As_Functions_And_Parameters; static RegisterCharacterGetterAliases and concrete bridge field mapping review" }, { "name": "UO.GetMapCell", "overloads": 1, "status": "reviewed-project-extension", "candidateSources": [ "https://stealth.od.ua/api/GetMapCell/" ], "sources": [ "https://stealth.od.ua/api/GetMapCell/" ], "finding": "Returns an Array [land graphic, base Z, low 32 tile flags], preserving existing first two positions. This project adds flags to the Stealth Tile/Z record. Empty Array for unavailable or other-facet cells. Map chunk axes are now checked separately before indexing so out-of-map Y cannot alias a neighboring column.", "tests": "TileSearchTests (22 cases); initialized-client map bounds plus 468 path checks; 30 real worker path queries and 10 tile scans of 1024 cells" }, { "name": "UO.GetMaxHP", "overloads": 4, "status": "project-extension", "candidateSources": [ "https://stealth.od.ua/api/GetMaxHP/" ], "sources": [ "https://stealth.od.ua/api/GetMaxHP/", "https://stealth.od.ua/api/MaxLife/" ], "finding": "Integer value of HitsMax, not a percentage or Boolean. Zero is valid and also means absent data. The zero-argument form selects self; explicit serial/registered-name forms are supported. Reads local data without an automatic status request; unlike Stealth GetHP, this client does not request missing stats as a side effect. Missing/destroyed entities return 0. HP fields may contain a relative server scale.", "tests": "YokoCharacterQueryTests; Character_Stats_And_Resists_Work_As_Functions_And_Parameters; static RegisterCharacterGetterAliases and concrete bridge field mapping review" }, { "name": "UO.GetMaxLife", "overloads": 1, "status": "project-extension", "candidateSources": [], "sources": [ "https://stealth.od.ua/api/GetMaxHP/", "https://stealth.od.ua/api/MaxLife/" ], "finding": "Integer value of HitsMax, not a percentage or Boolean. Zero is valid and also means absent data. Only the zero-argument self form is registered; do not pass an object argument. Reads local data without an automatic status request; unlike Stealth GetHP, this client does not request missing stats as a side effect. Missing/destroyed entities return 0. HP fields may contain a relative server scale.", "tests": "YokoCharacterQueryTests; Character_Stats_And_Resists_Work_As_Functions_And_Parameters; static RegisterCharacterGetterAliases and concrete bridge field mapping review" }, { "name": "UO.GetMaxMana", "overloads": 2, "status": "project-extension", "candidateSources": [ "https://stealth.od.ua/api/GetMaxMana/" ], "sources": [ "https://stealth.od.ua/api/GetMaxMana/", "https://stealth.od.ua/api/MaxMana/" ], "finding": "Integer value of ManaMax, not a percentage or Boolean. Zero is valid and also means absent data. The zero-argument form selects self; explicit serial/registered-name forms are supported. Reads local data without network traffic. Unknown/destroyed mobile returns 0; the server may not provide other mobiles’ values. Zero-argument own Mana/Stamina and their maxima now also reject destroyed Player through the game-thread CurrentPlayer read; object overloads already use World.Get. OwnStatusLifetime tests reproduced stale values, then passed for all affected function/intrinsic aliases without altering live values or sending packets.", "tests": "YokoCharacterQueryTests; Character_Stats_And_Resists_Work_As_Functions_And_Parameters; static RegisterCharacterGetterAliases and concrete bridge field mapping review" }, { "name": "UO.GetMaxStam", "overloads": 2, "status": "project-extension", "candidateSources": [ "https://stealth.od.ua/api/GetMaxStam/" ], "sources": [ "https://stealth.od.ua/api/GetMaxStam/", "https://stealth.od.ua/api/MaxStam/" ], "finding": "Integer value of StaminaMax, not a percentage or Boolean. Zero is valid and also means absent data. The zero-argument form selects self; explicit serial/registered-name forms are supported. Reads local data without network traffic. Unknown/destroyed mobile returns 0; the server may not provide other mobiles’ values. Zero-argument own Mana/Stamina and their maxima now also reject destroyed Player through the game-thread CurrentPlayer read; object overloads already use World.Get. OwnStatusLifetime tests reproduced stale values, then passed for all affected function/intrinsic aliases without altering live values or sending packets.", "tests": "YokoCharacterQueryTests; Character_Stats_And_Resists_Work_As_Functions_And_Parameters; static RegisterCharacterGetterAliases and concrete bridge field mapping review" }, { "name": "UO.GetMaxStamina", "overloads": 1, "status": "project-extension", "candidateSources": [], "sources": [ "https://stealth.od.ua/api/GetMaxStam/", "https://stealth.od.ua/api/MaxStam/" ], "finding": "Integer value of StaminaMax, not a percentage or Boolean. Zero is valid and also means absent data. Only the zero-argument self form is registered; do not pass an object argument. Reads local data without network traffic. Unknown/destroyed mobile returns 0; the server may not provide other mobiles’ values. Zero-argument own Mana/Stamina and their maxima now also reject destroyed Player through the game-thread CurrentPlayer read; object overloads already use World.Get. OwnStatusLifetime tests reproduced stale values, then passed for all affected function/intrinsic aliases without altering live values or sending packets.", "tests": "YokoCharacterQueryTests; Character_Stats_And_Resists_Work_As_Functions_And_Parameters; static RegisterCharacterGetterAliases and concrete bridge field mapping review" }, { "name": "UO.GetMaxWeight", "overloads": 1, "status": "reviewed-adaptation", "candidateSources": [], "sources": [ "https://stealth.od.ua/api/MaxWeight/", "https://raw.githubusercontent.com/ServUO/ServUO/pub57/Server/Network/Packets.cs" ], "finding": "Reads the WeightMax cache. Own status type >= 5 takes the server UInt16 value, even 0. Earlier extended status computes it once: protocol >= 5.0.0a uses 7 * (STR >> 1) + 40, otherwise STR * 4 + 25, stored as UInt16 with wrapping modulo 65536. Odd STR=101 gives 390 versus 429. The getter does not recalculate after an independent STR change. The primary generic 5.0+ formula is refined to the actual threshold and integer operation order. Own live Player only; missing/destroyed Player yields 0. Exact no-argument aliases, functions and intrinsics verified without packets. Compact packets preserve counters; a new Player starts at zero. Ten authored translations explain units, all supported forms, numbers versus Boolean, full helper parameters/results, three scripts and real Register/Invoke/CharacterStatus/Clear stages. CanCarry/CanAddFollower use extra <= maximum - current to avoid addition overflow. Helpers check the local cache and do not grant server permission.", "tests": "YokoStatusCounterTests: seven packet/formula/boundary tests and one manual-helper test passed. All 28 aliases, functions and intrinsics checked with UInt16/Byte maxima and compact-cache preservation. Complete CanCarry/LuckAtLeast/CanAddFollower definitions extracted from 308 root/locale cards: 17600 live/destroyed helper outcomes for zero limits, overcapacity, negative/large inputs and thresholds. Main/gameplay was not executed. Existing OwnStatusLifetime tests cover missing/destroyed read guards. The last full client suite of 1474 tests passed before these eight new counter tests. This batch preserves runtime dispatch behavior; generated return metadata is corrected separately." }, { "name": "UO.GetMenuItems", "overloads": 1, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/GetMenuItems/" ] }, { "name": "UO.GetMenuItemsEx", "overloads": 1, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/GetMenuItemsEx/" ] }, { "name": "UO.GetMobile", "overloads": 1, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/GetMobile/" ] }, { "name": "UO.GetMobiles", "overloads": 9, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/GetMobiles/" ] }, { "name": "UO.GetMultiAllParts", "overloads": 1, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/GetMultiAllParts/" ] }, { "name": "UO.GetMultiPartsAtPosition", "overloads": 1, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/GetMultiPartsAtPosition/" ] }, { "name": "UO.GetMultis", "overloads": 1, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/GetMultis/" ] }, { "name": "UO.GetName", "overloads": 4, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/GetName/" ] }, { "name": "UO.GetNextStepZ", "overloads": 1, "status": "corrected", "candidateSources": [ "https://stealth.od.ua/api/GetNextStepZ/" ], "sources": [ "https://stealth.od.ua/api/GetNextStepZ/" ], "finding": "Returns the Z component of CheckWorldStep, not its passability flag. Corrected offline and other-facet calls to return 0 before collision lookup. A candidate Z is not proof of passability; IsWorldCellPassable returns both fields. Use adjacent destination coordinates when checking a concrete step.", "tests": "TileSearchTests (22 cases); initialized-client map bounds plus 468 path checks; 30 real worker path queries and 10 tile scans of 1024 cells" }, { "name": "UO.GetNotoriety", "overloads": 4, "status": "corrected", "candidateSources": [ "https://stealth.od.ua/api/GetNotoriety/" ], "sources": [ "https://stealth.od.ua/api/GetNotoriety/" ], "finding": "Returns Integer NotorietyFlag for the selected mobile; unknown/destroyed mobile returns 0. Zero can also be a valid direction/status; not a Boolean. Run bit is excluded from direction.", "tests": "CharacterQueries_RejectDestroyedMobileBeforeDictionaryRemoval; concrete bridge review" }, { "name": "UO.GetParalisa", "overloads": 2, "status": "reviewed-project-extension", "candidateSources": [], "sources": [ "https://stealth.od.ua/api/Paralyzed/", "https://stealth.od.ua/api/IsParalyzed/" ], "finding": "Paralyzed and the retained state-query aliases share GetLocked/IsParalyzed. Both no-argument self and one-object forms are supported, unlike the split reference API. Returns Integer 1/0; removed false positives for destroyed mobiles; query does not apply or cure paralysis.", "tests": "ObjectPredicates_ParalysisAliasesShareSelfAndExplicitObjectSemantics; ObjectPredicates_MetadataReportsNumericBooleanAndPreservesNamedLayerUnion" }, { "name": "UO.GetParalysed", "overloads": 2, "status": "reviewed-project-extension", "candidateSources": [], "sources": [ "https://stealth.od.ua/api/Paralyzed/", "https://stealth.od.ua/api/IsParalyzed/" ], "finding": "Paralyzed and the retained state-query aliases share GetLocked/IsParalyzed. Both no-argument self and one-object forms are supported, unlike the split reference API. Returns Integer 1/0; removed false positives for destroyed mobiles; query does not apply or cure paralysis.", "tests": "ObjectPredicates_ParalysisAliasesShareSelfAndExplicitObjectSemantics; ObjectPredicates_MetadataReportsNumericBooleanAndPreservesNamedLayerUnion" }, { "name": "UO.GetParalyzed", "overloads": 2, "status": "reviewed-project-extension", "candidateSources": [], "sources": [ "https://stealth.od.ua/api/Paralyzed/", "https://stealth.od.ua/api/IsParalyzed/" ], "finding": "Paralyzed and the retained state-query aliases share GetLocked/IsParalyzed. Both no-argument self and one-object forms are supported, unlike the split reference API. Returns Integer 1/0; removed false positives for destroyed mobiles; query does not apply or cure paralysis.", "tests": "ObjectPredicates_ParalysisAliasesShareSelfAndExplicitObjectSemantics; ObjectPredicates_MetadataReportsNumericBooleanAndPreservesNamedLayerUnion" }, { "name": "UO.GetParent", "overloads": 1, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/GetParent/" ] }, { "name": "UO.GetPathArray", "overloads": 1, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/GetPathArray/" ] }, { "name": "UO.GetPathArray3D", "overloads": 7, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/GetPathArray3D/" ] }, { "name": "UO.GetPauseScriptOnDisconnectStatus", "overloads": 1, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/GetPauseScriptOnDisconnectStatus/" ] }, { "name": "UO.GetPetsCurrent", "overloads": 1, "status": "reviewed-adaptation", "candidateSources": [], "sources": [ "https://stealth.od.ua/api/PetsCurrent/", "https://raw.githubusercontent.com/ServUO/ServUO/pub57/Server/Network/Packets.cs", "https://stealth.od.ua/forum/viewtopic.php?p=6278" ], "finding": "Reads occupied follower control slots from own status type>=3. Verified packet byte matches Player.Followers, not world-mobile enumeration. A creature may consume multiple slots; owner/taming/summon eligibility is server-defined. Clarifies loose pet-count wording in current primary page using server encoding and historical official slot documentation. Own live Player only; missing/destroyed Player yields 0. Exact no-argument aliases, functions and intrinsics verified without packets. Compact packets preserve counters; a new Player starts at zero. Ten authored translations explain units, all supported forms, numbers versus Boolean, full helper parameters/results, three scripts and real Register/Invoke/CharacterStatus/Clear stages. CanCarry/CanAddFollower use extra <= maximum - current to avoid addition overflow. Helpers check the local cache and do not grant server permission.", "tests": "YokoStatusCounterTests: seven packet/formula/boundary tests and one manual-helper test passed. All 28 aliases, functions and intrinsics checked with UInt16/Byte maxima and compact-cache preservation. Complete CanCarry/LuckAtLeast/CanAddFollower definitions extracted from 308 root/locale cards: 17600 live/destroyed helper outcomes for zero limits, overcapacity, negative/large inputs and thresholds. Main/gameplay was not executed. Existing OwnStatusLifetime tests cover missing/destroyed read guards. The last full client suite of 1474 tests passed before these eight new counter tests. This batch preserves runtime dispatch behavior; generated return metadata is corrected separately." }, { "name": "UO.GetPetsMax", "overloads": 1, "status": "reviewed-adaptation", "candidateSources": [], "sources": [ "https://stealth.od.ua/api/PetsMax/", "https://raw.githubusercontent.com/ServUO/ServUO/pub57/Server/Network/Packets.cs", "https://stealth.od.ua/forum/viewtopic.php?p=6278" ], "finding": "Reads total permitted control slots from own status type >= 3, not free capacity. Current can exceed maximum; no clamp in the getter. The capacity helper subtracts current from maximum and rejects insufficient capacity or a zero limit. No pet IDs or creature action. Own live Player only; missing/destroyed Player yields 0. Exact no-argument aliases, functions and intrinsics verified without packets. Compact packets preserve counters; a new Player starts at zero. Ten authored translations explain units, all supported forms, numbers versus Boolean, full helper parameters/results, three scripts and real Register/Invoke/CharacterStatus/Clear stages. CanCarry/CanAddFollower use extra <= maximum - current to avoid addition overflow. Helpers check the local cache and do not grant server permission.", "tests": "YokoStatusCounterTests: seven packet/formula/boundary tests and one manual-helper test passed. All 28 aliases, functions and intrinsics checked with UInt16/Byte maxima and compact-cache preservation. Complete CanCarry/LuckAtLeast/CanAddFollower definitions extracted from 308 root/locale cards: 17600 live/destroyed helper outcomes for zero limits, overcapacity, negative/large inputs and thresholds. Main/gameplay was not executed. Existing OwnStatusLifetime tests cover missing/destroyed read guards. The last full client suite of 1474 tests passed before these eight new counter tests. This batch preserves runtime dispatch behavior; generated return metadata is corrected separately." }, { "name": "UO.GetPhysicalResist", "overloads": 1, "status": "reviewed-adaptation", "candidateSources": [], "sources": [ "https://stealth.od.ua/api/Armor/", "https://raw.githubusercontent.com/ServUO/ServUO/pub57/Server/Network/Packets.cs" ], "finding": "Compared primary Stealth resistance/status meaning with ServUO MobileStatus encoding and the actual CharacterStatus/PlayerMobile fields. PhysicalResistance is signed Int16 widened to BASIC Integer; negative values are preserved, never clamped or converted to unsigned. Own live Player only, missing/destroyed Player zero, no network/status request or equipment calculation. Physical is server armor/status, not a locally computed damage percentage. Elemental fields are populated by status type>=4; there is no independent server-era gate. Older/compact packets retain previous elemental cache, new Player starts zero. Stealth elemental Word/era wording is not imposed on this signed client implementation. Get*/Resist* and bare/UO aliases have verified no-argument function/intrinsic forms. Ten translations describe returns, field availability, complete ResistanceAtLeast helper, three full examples and native reading stages.", "tests": "YokoOwnStatusLifetimeTests cover every field alias and intrinsic, live negative values, missing/destroyed Player and no packets. YokoStatusPacketBoundaryTests: six baseline truncation failures reproduced; fixed body validation now preserves all prior fields/LastStatus, with compact/types1..6 compatibility and other-mobile forms (15 cases); related status suite55 passed. YokoResistanceTests:24 selector cases and506root/locale helper cards with4928 live/destroyed outcomes passed (25 tests total). Full example Main/gameplay is not executed." }, { "name": "UO.GetPing", "overloads": 2, "status": "pending", "candidateSources": [] }, { "name": "UO.GetPlayerStatusText", "overloads": 1, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/GetPlayerStatusText/" ] }, { "name": "UO.GetPoisoned", "overloads": 2, "status": "corrected", "candidateSources": [], "sources": [ "https://stealth.od.ua/api/IsPoisoned/", "https://stealth.od.ua/api/Poisoned/" ], "finding": "Integer 1/0 reads protocol-dependent IsPoisoned. Fixed destroyed-mobile lookup. Legacy bit 0x04 versus the separate SA poison field is retained; strength/duration are not returned.", "tests": "YokoCharacterQueryTests.CharacterQueries_StateAliasesSelectSelfOrExplicitObject; CharacterQueries_RejectDestroyedMobileBeforeDictionaryRemoval; CharacterQueries_FlightUsesModernFlagAndRejectsDestroyedMobile; static registration and bridge review" }, { "name": "UO.GetPoisonResist", "overloads": 1, "status": "reviewed-adaptation", "candidateSources": [], "sources": [ "https://stealth.od.ua/api/PoisonResist/", "https://raw.githubusercontent.com/ServUO/ServUO/pub57/Server/Network/Packets.cs" ], "finding": "Compared primary Stealth resistance/status meaning with ServUO MobileStatus encoding and the actual CharacterStatus/PlayerMobile fields. PoisonResistance is signed Int16 widened to BASIC Integer; negative values are preserved, never clamped or converted to unsigned. Own live Player only, missing/destroyed Player zero, no network/status request or equipment calculation. Physical is server armor/status, not a locally computed damage percentage. Elemental fields are populated by status type>=4; there is no independent server-era gate. Older/compact packets retain previous elemental cache, new Player starts zero. Stealth elemental Word/era wording is not imposed on this signed client implementation. Get*/Resist* and bare/UO aliases have verified no-argument function/intrinsic forms. Ten translations describe returns, field availability, complete ResistanceAtLeast helper, three full examples and native reading stages.", "tests": "YokoOwnStatusLifetimeTests cover every field alias and intrinsic, live negative values, missing/destroyed Player and no packets. YokoStatusPacketBoundaryTests: six baseline truncation failures reproduced; fixed body validation now preserves all prior fields/LastStatus, with compact/types1..6 compatibility and other-mobile forms (15 cases); related status suite55 passed. YokoResistanceTests:24 selector cases and506root/locale helper cards with4928 live/destroyed outcomes passed (25 tests total). Full example Main/gameplay is not executed." }, { "name": "UO.GetPrice", "overloads": 1, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/GetPrice/" ] }, { "name": "UO.GetProfile", "overloads": 1, "status": "pending", "candidateSources": [] }, { "name": "UO.GetQuantity", "overloads": 3, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/GetQuantity/" ] }, { "name": "UO.GetQuestArrow", "overloads": 1, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/GetQuestArrow/" ] }, { "name": "UO.GetRace", "overloads": 1, "status": "pending", "candidateSources": [] }, { "name": "UO.GetResist", "overloads": 1, "status": "reviewed-project-extension", "candidateSources": [], "sources": [ "https://stealth.od.ua/api/Armor/", "https://stealth.od.ua/api/FireResist/", "https://stealth.od.ua/api/ColdResist/", "https://stealth.od.ua/api/PoisonResist/", "https://stealth.od.ua/api/EnergyResist/", "https://raw.githubusercontent.com/ServUO/ServUO/pub57/Server/Network/Packets.cs" ], "finding": "Project selector extension over the same signed own-status fields. Exactly one required resistance argument. Numeric0..4 select physical/fire/cold/poison/energy. Strings physical/phys/armor/fire/cold/poison/energy are trimmed/case-insensitive; numeric strings and AddObject aliases are not resolved and return0. Decimal truncates towardzero; Array/Unit convert0; Boolean1/0 maps fire/physical. Unknown selector gives Integer0 without field read. Missing/destroyed Player also0. No atomic five-field snapshot, status request, target or side effect. Ten translations document all branches and limitations; helper intentionally checks player/minimum but is not a general selector validator.", "tests": "YokoResistanceTests24 selector cases cover all names/indices, signed extrema, zero, invalid/numeric strings, object aliases, Decimal, TRUE/FALSE, Array/Unit and destroyed Player with no packets. Complete selector helpers are extracted from22root/locale cards within506total, run against all5fields and unknown selector, 4thresholds and destroyedPlayer. Total25 resistance tests passed." }, { "name": "UO.GetResistCold", "overloads": 1, "status": "reviewed-adaptation", "candidateSources": [], "sources": [ "https://stealth.od.ua/api/ColdResist/", "https://raw.githubusercontent.com/ServUO/ServUO/pub57/Server/Network/Packets.cs" ], "finding": "Compared primary Stealth resistance/status meaning with ServUO MobileStatus encoding and the actual CharacterStatus/PlayerMobile fields. ColdResistance is signed Int16 widened to BASIC Integer; negative values are preserved, never clamped or converted to unsigned. Own live Player only, missing/destroyed Player zero, no network/status request or equipment calculation. Physical is server armor/status, not a locally computed damage percentage. Elemental fields are populated by status type>=4; there is no independent server-era gate. Older/compact packets retain previous elemental cache, new Player starts zero. Stealth elemental Word/era wording is not imposed on this signed client implementation. Get*/Resist* and bare/UO aliases have verified no-argument function/intrinsic forms. Ten translations describe returns, field availability, complete ResistanceAtLeast helper, three full examples and native reading stages.", "tests": "YokoOwnStatusLifetimeTests cover every field alias and intrinsic, live negative values, missing/destroyed Player and no packets. YokoStatusPacketBoundaryTests: six baseline truncation failures reproduced; fixed body validation now preserves all prior fields/LastStatus, with compact/types1..6 compatibility and other-mobile forms (15 cases); related status suite55 passed. YokoResistanceTests:24 selector cases and506root/locale helper cards with4928 live/destroyed outcomes passed (25 tests total). Full example Main/gameplay is not executed." }, { "name": "UO.GetResistEnergy", "overloads": 1, "status": "reviewed-adaptation", "candidateSources": [], "sources": [ "https://stealth.od.ua/api/EnergyResist/", "https://raw.githubusercontent.com/ServUO/ServUO/pub57/Server/Network/Packets.cs" ], "finding": "Compared primary Stealth resistance/status meaning with ServUO MobileStatus encoding and the actual CharacterStatus/PlayerMobile fields. EnergyResistance is signed Int16 widened to BASIC Integer; negative values are preserved, never clamped or converted to unsigned. Own live Player only, missing/destroyed Player zero, no network/status request or equipment calculation. Physical is server armor/status, not a locally computed damage percentage. Elemental fields are populated by status type>=4; there is no independent server-era gate. Older/compact packets retain previous elemental cache, new Player starts zero. Stealth elemental Word/era wording is not imposed on this signed client implementation. Get*/Resist* and bare/UO aliases have verified no-argument function/intrinsic forms. Ten translations describe returns, field availability, complete ResistanceAtLeast helper, three full examples and native reading stages.", "tests": "YokoOwnStatusLifetimeTests cover every field alias and intrinsic, live negative values, missing/destroyed Player and no packets. YokoStatusPacketBoundaryTests: six baseline truncation failures reproduced; fixed body validation now preserves all prior fields/LastStatus, with compact/types1..6 compatibility and other-mobile forms (15 cases); related status suite55 passed. YokoResistanceTests:24 selector cases and506root/locale helper cards with4928 live/destroyed outcomes passed (25 tests total). Full example Main/gameplay is not executed." }, { "name": "UO.GetResistFire", "overloads": 1, "status": "reviewed-adaptation", "candidateSources": [], "sources": [ "https://stealth.od.ua/api/FireResist/", "https://raw.githubusercontent.com/ServUO/ServUO/pub57/Server/Network/Packets.cs" ], "finding": "Compared primary Stealth resistance/status meaning with ServUO MobileStatus encoding and the actual CharacterStatus/PlayerMobile fields. FireResistance is signed Int16 widened to BASIC Integer; negative values are preserved, never clamped or converted to unsigned. Own live Player only, missing/destroyed Player zero, no network/status request or equipment calculation. Physical is server armor/status, not a locally computed damage percentage. Elemental fields are populated by status type>=4; there is no independent server-era gate. Older/compact packets retain previous elemental cache, new Player starts zero. Stealth elemental Word/era wording is not imposed on this signed client implementation. Get*/Resist* and bare/UO aliases have verified no-argument function/intrinsic forms. Ten translations describe returns, field availability, complete ResistanceAtLeast helper, three full examples and native reading stages.", "tests": "YokoOwnStatusLifetimeTests cover every field alias and intrinsic, live negative values, missing/destroyed Player and no packets. YokoStatusPacketBoundaryTests: six baseline truncation failures reproduced; fixed body validation now preserves all prior fields/LastStatus, with compact/types1..6 compatibility and other-mobile forms (15 cases); related status suite55 passed. YokoResistanceTests:24 selector cases and506root/locale helper cards with4928 live/destroyed outcomes passed (25 tests total). Full example Main/gameplay is not executed." }, { "name": "UO.GetResistPhysical", "overloads": 1, "status": "reviewed-adaptation", "candidateSources": [], "sources": [ "https://stealth.od.ua/api/Armor/", "https://raw.githubusercontent.com/ServUO/ServUO/pub57/Server/Network/Packets.cs" ], "finding": "Compared primary Stealth resistance/status meaning with ServUO MobileStatus encoding and the actual CharacterStatus/PlayerMobile fields. PhysicalResistance is signed Int16 widened to BASIC Integer; negative values are preserved, never clamped or converted to unsigned. Own live Player only, missing/destroyed Player zero, no network/status request or equipment calculation. Physical is server armor/status, not a locally computed damage percentage. Elemental fields are populated by status type>=4; there is no independent server-era gate. Older/compact packets retain previous elemental cache, new Player starts zero. Stealth elemental Word/era wording is not imposed on this signed client implementation. Get*/Resist* and bare/UO aliases have verified no-argument function/intrinsic forms. Ten translations describe returns, field availability, complete ResistanceAtLeast helper, three full examples and native reading stages.", "tests": "YokoOwnStatusLifetimeTests cover every field alias and intrinsic, live negative values, missing/destroyed Player and no packets. YokoStatusPacketBoundaryTests: six baseline truncation failures reproduced; fixed body validation now preserves all prior fields/LastStatus, with compact/types1..6 compatibility and other-mobile forms (15 cases); related status suite55 passed. YokoResistanceTests:24 selector cases and506root/locale helper cards with4928 live/destroyed outcomes passed (25 tests total). Full example Main/gameplay is not executed." }, { "name": "UO.GetResistPoison", "overloads": 1, "status": "reviewed-adaptation", "candidateSources": [], "sources": [ "https://stealth.od.ua/api/PoisonResist/", "https://raw.githubusercontent.com/ServUO/ServUO/pub57/Server/Network/Packets.cs" ], "finding": "Compared primary Stealth resistance/status meaning with ServUO MobileStatus encoding and the actual CharacterStatus/PlayerMobile fields. PoisonResistance is signed Int16 widened to BASIC Integer; negative values are preserved, never clamped or converted to unsigned. Own live Player only, missing/destroyed Player zero, no network/status request or equipment calculation. Physical is server armor/status, not a locally computed damage percentage. Elemental fields are populated by status type>=4; there is no independent server-era gate. Older/compact packets retain previous elemental cache, new Player starts zero. Stealth elemental Word/era wording is not imposed on this signed client implementation. Get*/Resist* and bare/UO aliases have verified no-argument function/intrinsic forms. Ten translations describe returns, field availability, complete ResistanceAtLeast helper, three full examples and native reading stages.", "tests": "YokoOwnStatusLifetimeTests cover every field alias and intrinsic, live negative values, missing/destroyed Player and no packets. YokoStatusPacketBoundaryTests: six baseline truncation failures reproduced; fixed body validation now preserves all prior fields/LastStatus, with compact/types1..6 compatibility and other-mobile forms (15 cases); related status suite55 passed. YokoResistanceTests:24 selector cases and506root/locale helper cards with4928 live/destroyed outcomes passed (25 tests total). Full example Main/gameplay is not executed." }, { "name": "UO.GetRun", "overloads": 2, "status": "corrected-adaptation", "candidateSources": [], "sources": [ "https://stealth.od.ua/api/IsRunning/" ], "finding": "Historical alias for Mobile.Direction Running bit; zero arguments choose self, one argument chooses object. Last flag can persist while stationary.", "tests": "ObjectPredicates_*; bridge/dispatch source review" }, { "name": "UO.GetRunMountTimer", "overloads": 1, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/GetRunMountTimer/" ] }, { "name": "UO.GetRunUnMountTimer", "overloads": 1, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/GetRunUnMountTimer/" ] }, { "name": "UO.GetScriptName", "overloads": 1, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/GetScriptName/" ] }, { "name": "UO.GetScriptPath", "overloads": 1, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/GetScriptPath/" ] }, { "name": "UO.GetScriptsCount", "overloads": 1, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/GetScriptsCount/" ] }, { "name": "UO.GetScriptsList", "overloads": 1, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/GetScriptsList/" ] }, { "name": "UO.GetScriptState", "overloads": 1, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/GetScriptState/" ] }, { "name": "UO.GetSerial", "overloads": 2, "status": "pending", "candidateSources": [] }, { "name": "UO.GetSex", "overloads": 1, "status": "pending", "candidateSources": [] }, { "name": "UO.GetShopList", "overloads": 1, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/GetShopList/" ] }, { "name": "UO.GetSkillCap", "overloads": 1, "status": "reviewed-project-extension", "candidateSources": [ "https://stealth.od.ua/api/GetSkillCap/" ], "sources": [ "https://stealth.od.ua/api/GetSkillCap/" ], "finding": "Matches base/effective/cap point meanings and 0/1/2 lock codes from the primary reference. Project supports both client-data names and strict decimal zero-based indices in skill selectors. Fixed-point tenths convert directly to Double; numeric index N cannot select N-1 or fall back to a name. Unknown skill reads value 0 or lock -1, including absent player. Stat index 0/1/2 means STR/DEX/INT; invalid stat reads -1, absent-player valid stat defaults to 0. Queries send no packets. Setters return Unit, send one packet and update the local lock; no server acknowledgement is inferred. Invalid indices/modes and absent player are ignored. Unlike the reference journal diagnostic for unknown skill names, this project silently ignores that case. Metadata uses Decimal for point getters and Integer for mode getters; SkillVal/BaseVal legacy scale is separate.", "tests": "YokoSkillQueryTests: 23 cases, 9 fixed-point boundaries with direct equality, invalid numeric/name selectors, three modes, exact skill/stat packets, all four setter aliases, absent player, and compiled result metadata. Baseline red defects retained in release-52013-skills-before.log." }, { "name": "UO.GetSkillCurrentValue", "overloads": 1, "status": "reviewed-project-extension", "candidateSources": [ "https://stealth.od.ua/api/GetSkillCurrentValue/" ], "sources": [ "https://stealth.od.ua/api/GetSkillCurrentValue/" ], "finding": "Matches base/effective/cap point meanings and 0/1/2 lock codes from the primary reference. Project supports both client-data names and strict decimal zero-based indices in skill selectors. Fixed-point tenths convert directly to Double; numeric index N cannot select N-1 or fall back to a name. Unknown skill reads value 0 or lock -1, including absent player. Stat index 0/1/2 means STR/DEX/INT; invalid stat reads -1, absent-player valid stat defaults to 0. Queries send no packets. Setters return Unit, send one packet and update the local lock; no server acknowledgement is inferred. Invalid indices/modes and absent player are ignored. Unlike the reference journal diagnostic for unknown skill names, this project silently ignores that case. Metadata uses Decimal for point getters and Integer for mode getters; SkillVal/BaseVal legacy scale is separate.", "tests": "YokoSkillQueryTests: 23 cases, 9 fixed-point boundaries with direct equality, invalid numeric/name selectors, three modes, exact skill/stat packets, all four setter aliases, absent player, and compiled result metadata. Baseline red defects retained in release-52013-skills-before.log." }, { "name": "UO.GetSkillLockState", "overloads": 1, "status": "reviewed-project-extension", "candidateSources": [ "https://stealth.od.ua/api/GetSkillLockState/" ], "sources": [ "https://stealth.od.ua/api/GetSkillLockState/" ], "finding": "Matches base/effective/cap point meanings and 0/1/2 lock codes from the primary reference. Project supports both client-data names and strict decimal zero-based indices in skill selectors. Fixed-point tenths convert directly to Double; numeric index N cannot select N-1 or fall back to a name. Unknown skill reads value 0 or lock -1, including absent player. Stat index 0/1/2 means STR/DEX/INT; invalid stat reads -1, absent-player valid stat defaults to 0. Queries send no packets. Setters return Unit, send one packet and update the local lock; no server acknowledgement is inferred. Invalid indices/modes and absent player are ignored. Unlike the reference journal diagnostic for unknown skill names, this project silently ignores that case. Metadata uses Decimal for point getters and Integer for mode getters; SkillVal/BaseVal legacy scale is separate.", "tests": "YokoSkillQueryTests: 23 cases, 9 fixed-point boundaries with direct equality, invalid numeric/name selectors, three modes, exact skill/stat packets, all four setter aliases, absent player, and compiled result metadata. Baseline red defects retained in release-52013-skills-before.log." }, { "name": "UO.GetSkillValue", "overloads": 1, "status": "reviewed-project-extension", "candidateSources": [ "https://stealth.od.ua/api/GetSkillValue/" ], "sources": [ "https://stealth.od.ua/api/GetSkillValue/" ], "finding": "Matches base/effective/cap point meanings and 0/1/2 lock codes from the primary reference. Project supports both client-data names and strict decimal zero-based indices in skill selectors. Fixed-point tenths convert directly to Double; numeric index N cannot select N-1 or fall back to a name. Unknown skill reads value 0 or lock -1, including absent player. Stat index 0/1/2 means STR/DEX/INT; invalid stat reads -1, absent-player valid stat defaults to 0. Queries send no packets. Setters return Unit, send one packet and update the local lock; no server acknowledgement is inferred. Invalid indices/modes and absent player are ignored. Unlike the reference journal diagnostic for unknown skill names, this project silently ignores that case. Metadata uses Decimal for point getters and Integer for mode getters; SkillVal/BaseVal legacy scale is separate.", "tests": "YokoSkillQueryTests: 23 cases, 9 fixed-point boundaries with direct equality, invalid numeric/name selectors, three modes, exact skill/stat packets, all four setter aliases, absent player, and compiled result metadata. Baseline red defects retained in release-52013-skills-before.log." }, { "name": "UO.GetStam", "overloads": 2, "status": "project-extension", "candidateSources": [ "https://stealth.od.ua/api/GetStam/" ], "sources": [ "https://stealth.od.ua/api/GetStam/", "https://stealth.od.ua/api/Stam/" ], "finding": "Integer value of Stamina, not a percentage or Boolean. Zero is valid and also means absent data. The zero-argument form selects self; explicit serial/registered-name forms are supported. Reads local data without network traffic. Unknown/destroyed mobile returns 0; the server may not provide other mobiles’ values. Zero-argument own Mana/Stamina and their maxima now also reject destroyed Player through the game-thread CurrentPlayer read; object overloads already use World.Get. OwnStatusLifetime tests reproduced stale values, then passed for all affected function/intrinsic aliases without altering live values or sending packets.", "tests": "YokoCharacterQueryTests; Character_Stats_And_Resists_Work_As_Functions_And_Parameters; static RegisterCharacterGetterAliases and concrete bridge field mapping review" }, { "name": "UO.GetStamina", "overloads": 1, "status": "project-extension", "candidateSources": [], "sources": [ "https://stealth.od.ua/api/GetStam/", "https://stealth.od.ua/api/Stam/" ], "finding": "Integer value of Stamina, not a percentage or Boolean. Zero is valid and also means absent data. Only the zero-argument self form is registered; do not pass an object argument. Reads local data without network traffic. Unknown/destroyed mobile returns 0; the server may not provide other mobiles’ values. Zero-argument own Mana/Stamina and their maxima now also reject destroyed Player through the game-thread CurrentPlayer read; object overloads already use World.Get. OwnStatusLifetime tests reproduced stale values, then passed for all affected function/intrinsic aliases without altering live values or sending packets.", "tests": "YokoCharacterQueryTests; Character_Stats_And_Resists_Work_As_Functions_And_Parameters; static RegisterCharacterGetterAliases and concrete bridge field mapping review" }, { "name": "UO.GetStaticArt", "overloads": 1, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/GetStaticArt/" ] }, { "name": "UO.GetStaticTileAt", "overloads": 2, "status": "pending", "candidateSources": [] }, { "name": "UO.GetStaticTileData", "overloads": 1, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/GetStaticTileData/" ] }, { "name": "UO.GetStaticTiles", "overloads": 1, "status": "pending", "candidateSources": [] }, { "name": "UO.GetStaticTilesArray", "overloads": 1, "status": "corrected", "candidateSources": [ "https://stealth.od.ua/api/GetStaticTilesArray/" ], "sources": [ "https://stealth.od.ua/api/GetStaticTilesArray/" ], "finding": "Six-argument Yoko form returns a dynamic Array of records, not the Pascal legacy count plus output argument. Inclusive reversed corners are normalized. Corrected int overflow in area validation, bounded coordinates/map and sliced scans (32 cells, soft approximately 1 ms); cancellation is checked and a facet change discards partial results. Exact type matching; Ex accepts arrays/scalars and empty arrays match all, repeated types do not duplicate records. Rows are [graphic,X,Y,Z,hue]. The established bridge includes Static/Multi/Item at loaded cells, a documented extension over file-only statics.", "tests": "TileSearchTests (22 cases); initialized-client map bounds plus 468 path checks; 30 real worker path queries and 10 tile scans of 1024 cells" }, { "name": "UO.GetStaticTilesArrayEx", "overloads": 1, "status": "corrected", "candidateSources": [ "https://stealth.od.ua/api/GetStaticTilesArrayEx/" ], "sources": [ "https://stealth.od.ua/api/GetStaticTilesArrayEx/" ], "finding": "Six-argument Yoko form returns a dynamic Array of records, not the Pascal legacy count plus output argument. Inclusive reversed corners are normalized. Corrected int overflow in area validation, bounded coordinates/map and sliced scans (32 cells, soft approximately 1 ms); cancellation is checked and a facet change discards partial results. Exact type matching; Ex accepts arrays/scalars and empty arrays match all, repeated types do not duplicate records. Rows are [graphic,X,Y,Z,hue]. The established bridge includes Static/Multi/Item at loaded cells, a documented extension over file-only statics.", "tests": "TileSearchTests (22 cases); initialized-client map bounds plus 468 path checks; 30 real worker path queries and 10 tile scans of 1024 cells" }, { "name": "UO.GetStatLockState", "overloads": 1, "status": "reviewed-project-extension", "candidateSources": [ "https://stealth.od.ua/api/GetStatLockState/" ], "sources": [ "https://stealth.od.ua/api/GetStatLockState/" ], "finding": "Matches base/effective/cap point meanings and 0/1/2 lock codes from the primary reference. Project supports both client-data names and strict decimal zero-based indices in skill selectors. Fixed-point tenths convert directly to Double; numeric index N cannot select N-1 or fall back to a name. Unknown skill reads value 0 or lock -1, including absent player. Stat index 0/1/2 means STR/DEX/INT; invalid stat reads -1, absent-player valid stat defaults to 0. Queries send no packets. Setters return Unit, send one packet and update the local lock; no server acknowledgement is inferred. Invalid indices/modes and absent player are ignored. Unlike the reference journal diagnostic for unknown skill names, this project silently ignores that case. Metadata uses Decimal for point getters and Integer for mode getters; SkillVal/BaseVal legacy scale is separate.", "tests": "YokoSkillQueryTests: 23 cases, 9 fixed-point boundaries with direct equality, invalid numeric/name selectors, three modes, exact skill/stat packets, all four setter aliases, absent player, and compiled result metadata. Baseline red defects retained in release-52013-skills-before.log." }, { "name": "UO.GetStatus", "overloads": 2, "status": "pending", "candidateSources": [] }, { "name": "UO.GetStr", "overloads": 2, "status": "reviewed-project-extension", "candidateSources": [ "https://stealth.od.ua/api/GetStr/" ], "sources": [ "https://stealth.od.ua/api/Str/", "https://stealth.od.ua/api/GetStr/" ], "finding": "Strength current points, Integer, from the actual PlayerMobile field (ushort), zero for missing/destroyed Player. Compared current primary Stealth own/ObjID contracts with RegisterCharacterGetterAliases, ExecuteStealthCompatibility, numeric conversion and concrete bridge. Only GetStr/GetInt/GetDex have ObjID overloads; other names here are zero-argument. The object overload only has own-character data: foreign serial returns zero, even for another loaded mobile. This project limitation is explicitly documented rather than guessing values or claiming a remote status request. No network packet or built-in delay. Bare Int(value) and Str(value) are distinct BASIC operations and their mixed cards were not replaced by these attribute-only contracts. Unshadowed intrinsics are fresh reads. Numeric attribute results are not Boolean; the complete AttributeAtLeast helper returns comparison 1/0. Ten translations contain exact arguments, return meaning, coercion, native stages, three diverse complete examples, and a fourth serial/alias example for object overloads.", "tests": "YokoAttributeTests: 13 cases passed. All attribute aliases/functions/intrinsics and six object forms (bare/UO GetStr/GetInt/GetDex), current update, 65535, missing/destroyed Player, foreign item/unknown serial, numeric/hex/self/AddObject names, no packets, and mixed BASIC Int/Str behavior. Six destroyed-player regressions reproduced before the fix. Complete helpers extracted from all 242 root/locale cards executed at 0,79,80,81,65535 and with a destroyed Player (1452 assertions of helper results), with no gameplay Main execution. Reviewed IDE result-kind cases passed." }, { "name": "UO.GetStrength", "overloads": 1, "status": "reviewed-project-extension", "candidateSources": [], "sources": [ "https://stealth.od.ua/api/Str/", "https://stealth.od.ua/api/GetStr/" ], "finding": "Strength current points, Integer, from the actual PlayerMobile field (ushort), zero for missing/destroyed Player. Compared current primary Stealth own/ObjID contracts with RegisterCharacterGetterAliases, ExecuteStealthCompatibility, numeric conversion and concrete bridge. Only GetStr/GetInt/GetDex have ObjID overloads; other names here are zero-argument. The object overload only has own-character data: foreign serial returns zero, even for another loaded mobile. This project limitation is explicitly documented rather than guessing values or claiming a remote status request. No network packet or built-in delay. Bare Int(value) and Str(value) are distinct BASIC operations and their mixed cards were not replaced by these attribute-only contracts. Unshadowed intrinsics are fresh reads. Numeric attribute results are not Boolean; the complete AttributeAtLeast helper returns comparison 1/0. Ten translations contain exact arguments, return meaning, coercion, native stages, three diverse complete examples, and a fourth serial/alias example for object overloads.", "tests": "YokoAttributeTests: 13 cases passed. All attribute aliases/functions/intrinsics and six object forms (bare/UO GetStr/GetInt/GetDex), current update, 65535, missing/destroyed Player, foreign item/unknown serial, numeric/hex/self/AddObject names, no packets, and mixed BASIC Int/Str behavior. Six destroyed-player regressions reproduced before the fix. Complete helpers extracted from all 242 root/locale cards executed at 0,79,80,81,65535 and with a destroyed Player (1452 assertions of helper results), with no gameplay Main execution. Reviewed IDE result-kind cases passed." }, { "name": "UO.GetSurfaceZ", "overloads": 1, "status": "reviewed-project-extension", "candidateSources": [ "https://stealth.od.ua/api/GetSurfaceZ/" ], "sources": [ "https://stealth.od.ua/api/GetSurfaceZ/" ], "finding": "Reads Land.AverageZ from the currently loaded facet, not a static floor or equipment layer. Integer 0 is both a valid height and the missing-data result. Compared against the official average-land-surface contract and concrete bridge.", "tests": "TileSearchTests (22 cases); initialized-client map bounds plus 468 path checks; 30 real worker path queries and 10 tile scans of 1024 cells" }, { "name": "UO.GetTileFlags", "overloads": 1, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/GetTileFlags/" ] }, { "name": "UO.GetTileHeight", "overloads": 1, "status": "pending", "candidateSources": [] }, { "name": "UO.GetTileLayer", "overloads": 1, "status": "pending", "candidateSources": [] }, { "name": "UO.GetTileName", "overloads": 1, "status": "pending", "candidateSources": [] }, { "name": "UO.GetTileXYM", "overloads": 1, "status": "pending", "candidateSources": [] }, { "name": "UO.GetTitle", "overloads": 1, "status": "reviewed-adaptation", "candidateSources": [ "https://stealth.od.ua/api/GetTitle/" ], "sources": [ "https://stealth.od.ua/api/GetTitle/" ], "finding": "String from Mobile.Title; no title stored for Items. Empty title is valid and does not establish object absence. Destroyed mobiles are now rejected before their dictionary entries are removed; GetAltName shares GetTitle.", "tests": "YokoInjectionCompatibilityTests; CharacterQueries_TextRejectsDestroyedMobile" }, { "name": "UO.GetTooltip", "overloads": 1, "status": "reviewed", "candidateSources": [ "https://stealth.od.ua/api/GetTooltip/" ], "sources": [ "https://stealth.od.ua/api/GetTooltip/" ], "finding": "Concatenated OPL name and data; requests unavailable data and waits up to 200 ms. Empty on no response.", "tests": "Stealth_Tooltip_And_Cliloc_Commands_Return_Client_Data_And_Forward_Parameters" }, { "name": "UO.GetTooltipRec", "overloads": 1, "status": "corrected", "candidateSources": [ "https://stealth.od.ua/api/GetTooltipRec/" ], "sources": [ "https://stealth.od.ua/api/GetTooltipRec/" ], "finding": "Previously lost all property parameters by returning only cliloc integers. Now returns BASIC rows [clilocID, parameters[]], retaining the structured data. Count is GetArrayLength(rows).", "tests": "Tooltip_Records_Preserve_Cliloc_Parameters_And_Return_Independent_Snapshots" }, { "name": "UO.GetTradeContainer", "overloads": 1, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/GetTradeContainer/" ] }, { "name": "UO.GetTradeOpponent", "overloads": 1, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/GetTradeOpponent/" ] }, { "name": "UO.GetTradeOpponentName", "overloads": 1, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/GetTradeOpponentName/" ] }, { "name": "UO.GetType", "overloads": 1, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/GetType/" ] }, { "name": "UO.GetUserCodepage", "overloads": 1, "status": "pending", "candidateSources": [] }, { "name": "UO.GetUserStatic", "overloads": 1, "status": "pending", "candidateSources": [] }, { "name": "UO.GetUserStatics", "overloads": 1, "status": "pending", "candidateSources": [] }, { "name": "UO.GetWalkMountTimer", "overloads": 1, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/GetWalkMountTimer/" ] }, { "name": "UO.GetWalkUnmountTimer", "overloads": 1, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/GetWalkUnmountTimer/" ] }, { "name": "UO.GetWeaponAbilities", "overloads": 1, "status": "pending", "candidateSources": [] }, { "name": "UO.GetWeight", "overloads": 1, "status": "reviewed-adaptation", "candidateSources": [], "sources": [ "https://stealth.od.ua/api/Weight/", "https://raw.githubusercontent.com/ServUO/ServUO/pub57/Server/Network/Packets.cs" ], "finding": "Reads server-reported total weight in stones, UInt16 widened to Integer; no inventory traversal or item count. Body/equipment/nested bags included according to shard rules, not locally recalculated. Own live Player only; missing/destroyed Player yields 0. Exact no-argument aliases, functions and intrinsics verified without packets. Compact packets preserve counters; a new Player starts at zero. Ten authored translations explain units, all supported forms, numbers versus Boolean, full helper parameters/results, three scripts and real Register/Invoke/CharacterStatus/Clear stages. CanCarry/CanAddFollower use extra <= maximum - current to avoid addition overflow. Helpers check the local cache and do not grant server permission.", "tests": "YokoStatusCounterTests: seven packet/formula/boundary tests and one manual-helper test passed. All 28 aliases, functions and intrinsics checked with UInt16/Byte maxima and compact-cache preservation. Complete CanCarry/LuckAtLeast/CanAddFollower definitions extracted from 308 root/locale cards: 17600 live/destroyed helper outcomes for zero limits, overcapacity, negative/large inputs and thresholds. Main/gameplay was not executed. Existing OwnStatusLifetime tests cover missing/destroyed read guards. The last full client suite of 1474 tests passed before these eight new counter tests. This batch preserves runtime dispatch behavior; generated return metadata is corrected separately." }, { "name": "UO.GetWord", "overloads": 2, "status": "pending", "candidateSources": [] }, { "name": "UO.GetWordCount", "overloads": 2, "status": "pending", "candidateSources": [] }, { "name": "UO.GetWorldCell", "overloads": 2, "status": "pending", "candidateSources": [] }, { "name": "UO.GetWorldItems", "overloads": 7, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/GetWorldItems/" ] }, { "name": "UO.GetWorldNum", "overloads": 1, "status": "pending", "candidateSources": [] }, { "name": "UO.GetWorldTilesArray", "overloads": 1, "status": "pending", "candidateSources": [] }, { "name": "UO.GetX", "overloads": 4, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/GetX/" ] }, { "name": "UO.GetY", "overloads": 4, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/GetY/" ] }, { "name": "UO.GetYellowBar", "overloads": 1, "status": "corrected-adaptation", "candidateSources": [], "sources": [ "https://stealth.od.ua/api/IsYellowHits/" ], "finding": "Historical name for the same Mobile.IsYellowHits field; not health count or theme color.", "tests": "ObjectPredicates_*; bridge/dispatch source review" }, { "name": "UO.GetZ", "overloads": 4, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/GetZ/" ] }, { "name": "UO.GListClear", "overloads": 1, "status": "pending", "candidateSources": [] }, { "name": "UO.GListGet", "overloads": 1, "status": "pending", "candidateSources": [] }, { "name": "UO.GListPosName", "overloads": 1, "status": "pending", "candidateSources": [] }, { "name": "UO.GListPosValue", "overloads": 1, "status": "pending", "candidateSources": [] }, { "name": "UO.GListSet", "overloads": 1, "status": "pending", "candidateSources": [] }, { "name": "UO.GListSize", "overloads": 1, "status": "pending", "candidateSources": [] }, { "name": "UO.GlobalChatActiveChannel", "overloads": 1, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/GlobalChatActiveChannel/" ] }, { "name": "UO.GlobalChatChannelsList", "overloads": 1, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/GlobalChatChannelsList/" ] }, { "name": "UO.GlobalChatJoinChannel", "overloads": 1, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/GlobalChatJoinChannel/" ] }, { "name": "UO.GlobalChatLeaveChannel", "overloads": 1, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/GlobalChatLeaveChannel/" ] }, { "name": "UO.GlobalChatSendMsg", "overloads": 1, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/GlobalChatSendMsg/" ] }, { "name": "UO.Gold", "overloads": 1, "status": "reviewed-project-extension", "candidateSources": [ "https://stealth.od.ua/api/Gold/" ], "sources": [ "https://stealth.od.ua/api/Gold/" ], "finding": "Primary Gold returns the unsigned Cardinal status amount. Verified CharacterStatus stores UInt32 in Player.Gold. Fixed BASIC amount overflow without changing IApiBridge.Gold Int32 ABI: ReadGoldValue restores the unsigned bit pattern and returns Integer through Int32.MaxValue, otherwise Decimal(Double), exact for all UInt32 values. All four aliases, functions and intrinsics use this path. The legacy public C# Gold() method and bridge still carry Int32 bits; public BASIC queries expose a nonnegative numeric amount. Missing/destroyed Player yields Integer zero. Not an inventory/stack/bank enumeration, Boolean or approval to buy. Ten translations document exact no-argument forms, mixed numeric kind, large literal notation, unsafe forced Int32 conversion, full CanAfford helper and native stages.", "tests": "YokoGoldAmountTests: five UInt32 boundary cases across four function/intrinsic aliases, with zero/destroyed Player and no packets. Baseline two large-amount failures, three passes; all five pass after widening. Full CanAfford examples extracted from44root/locale cards: each checked across four balances and seven prices, plus destroyed Player (1276 helper outcomes), no Main/gameplay execution. Combined gold/lifetime/external-manual26 tests pass; runtime404 and LSP54 pass. Manual verifier10526parsed examples,40974direct calls,286pure calculations,0errors. Gameplay examples are not generally executed." }, { "name": "UO.Grab", "overloads": 8, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/Grab/" ] }, { "name": "UO.Ground", "overloads": 1, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/Ground/" ] }, { "name": "UO.GumpAutoCheckBox", "overloads": 1, "status": "corrected", "candidateSources": [ "https://stealth.od.ua/api/GumpAutoCheckBox/" ], "sources": [ "https://stealth.od.ua/api/GumpAutoCheckBox/" ], "finding": "Registers one-shot control values, matches exact type and ID across existing and received/rebuilt server layouts. Fields precede automatic button replies. Previously only modified the selected/last existing window.", "tests": "YokoCommandEndToEndTests GumpAuto/WaitGump cases; YokoIdeRuntimeProbe incoming-layout fixture" }, { "name": "UO.GumpAutoRadiobutton", "overloads": 1, "status": "corrected", "candidateSources": [ "https://stealth.od.ua/api/GumpAutoRadiobutton/" ], "sources": [ "https://stealth.od.ua/api/GumpAutoRadiobutton/" ], "finding": "Registers one-shot control values, matches exact type and ID across existing and received/rebuilt server layouts. Fields precede automatic button replies. Previously only modified the selected/last existing window.", "tests": "YokoCommandEndToEndTests GumpAuto/WaitGump cases; YokoIdeRuntimeProbe incoming-layout fixture" }, { "name": "UO.GumpAutoTextEntry", "overloads": 1, "status": "corrected", "candidateSources": [ "https://stealth.od.ua/api/GumpAutoTextEntry/" ], "sources": [ "https://stealth.od.ua/api/GumpAutoTextEntry/" ], "finding": "Registers one-shot control values, matches exact type and ID across existing and received/rebuilt server layouts. Fields precede automatic button replies. Previously only modified the selected/last existing window.", "tests": "YokoCommandEndToEndTests GumpAuto/WaitGump cases; YokoIdeRuntimeProbe incoming-layout fixture" }, { "name": "UO.GumpExists", "overloads": 2, "status": "pending", "candidateSources": [] }, { "name": "UO.GumpObject", "overloads": 1, "status": "pending", "candidateSources": [] }, { "name": "UO.Help", "overloads": 1, "status": "pending", "candidateSources": [] }, { "name": "UO.HelpRequest", "overloads": 1, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/HelpRequest/" ] }, { "name": "UO.Hex2Int", "overloads": 1, "status": "pending", "candidateSources": [] }, { "name": "UO.Hidden", "overloads": 3, "status": "corrected", "candidateSources": [ "https://stealth.od.ua/api/Hidden/" ], "sources": [ "https://stealth.od.ua/api/IsHidden/", "https://stealth.od.ua/api/Hidden/" ], "finding": "Integer 1/0 reads IsHidden. Fixed missing numeric overload of UO.Hidden and rejection of destroyed mobiles. Does not hide/reveal an object or test line of sight.", "tests": "YokoCharacterQueryTests.CharacterQueries_StateAliasesSelectSelfOrExplicitObject; CharacterQueries_RejectDestroyedMobileBeforeDictionaryRemoval; CharacterQueries_FlightUsesModernFlagAndRejectsDestroyedMobile; static registration and bridge review" }, { "name": "UO.Hide", "overloads": 2, "status": "pending", "candidateSources": [] }, { "name": "UO.HighJournal", "overloads": 1, "status": "reviewed-adaptation", "candidateSources": [ "https://stealth.od.ua/api/HighJournal/" ], "sources": [ "https://stealth.od.ua/api/HighJournal/" ], "finding": "Adapted index range to Yoko Journal ordering: highest index=count-1 is oldest, -1 empty. Must not copy Stealth chronological ordering.", "tests": "YokoInjectionFindTypeWorldTests.Journal_*; YokoInjectionCompatibilityTests.Journal_*/Stealth_Journal_Properties_Use_The_Last_Real_Matched_Line" }, { "name": "UO.HP", "overloads": 1, "status": "project-extension", "candidateSources": [], "sources": [ "https://stealth.od.ua/api/GetHP/", "https://stealth.od.ua/api/Life/" ], "finding": "Integer value of Hits, not a percentage or Boolean. Zero is valid and also means absent data. Only the zero-argument self form is registered; do not pass an object argument. Reads local data without an automatic status request; unlike Stealth GetHP, this client does not request missing stats as a side effect. Missing/destroyed entities return 0. HP fields may contain a relative server scale.", "tests": "YokoCharacterQueryTests; Character_Stats_And_Resists_Work_As_Functions_And_Parameters; static RegisterCharacterGetterAliases and concrete bridge field mapping review" }, { "name": "UO.HTTP_Body", "overloads": 1, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/HTTP_Body/" ] }, { "name": "UO.HTTP_Get", "overloads": 2, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/HTTP_Get/" ] }, { "name": "UO.HTTP_Header", "overloads": 1, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/HTTP_Header/" ] }, { "name": "UO.HTTP_Post", "overloads": 1, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/HTTP_Post/" ] }, { "name": "UO.Ignore", "overloads": 4, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/Ignore/" ] }, { "name": "UO.IgnoreOff", "overloads": 1, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/IgnoreOff/" ] }, { "name": "UO.IgnoreReset", "overloads": 1, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/IgnoreReset/" ] }, { "name": "UO.Info", "overloads": 2, "status": "pending", "candidateSources": [] }, { "name": "UO.InfoColor", "overloads": 2, "status": "pending", "candidateSources": [] }, { "name": "UO.InfoFindList", "overloads": 1, "status": "pending", "candidateSources": [] }, { "name": "UO.InfoGump", "overloads": 2, "status": "pending", "candidateSources": [] }, { "name": "UO.InfoGumps", "overloads": 2, "status": "pending", "candidateSources": [] }, { "name": "UO.InfoTile", "overloads": 3, "status": "pending", "candidateSources": [] }, { "name": "UO.Inj2EUO", "overloads": 1, "status": "pending", "candidateSources": [] }, { "name": "UO.InJournal", "overloads": 8, "status": "corrected", "candidateSources": [ "https://stealth.od.ua/api/InJournal/" ], "sources": [ "https://forum.yoko.com.ua/viewtopic.php?p=27633", "https://stealth.od.ua/api/InJournal/" ], "finding": "Corrected no-match -1 to Yoko 0 (positive match is newest-relative index + 1), immutable selected record and high-bit serial filtering. Native one argument is case-sensitive; compact filters default case-insensitive. Stealth uses a different return origin.", "tests": "YokoInjectionFindTypeWorldTests.Journal_*; YokoInjectionCompatibilityTests.Journal_*/Stealth_Journal_Properties_Use_The_Last_Real_Matched_Line" }, { "name": "UO.InJournalBetweenTimes", "overloads": 6, "status": "corrected", "candidateSources": [ "https://stealth.od.ua/api/InJournalBetweenTimes/" ], "sources": [ "https://forum.yoko.com.ua/viewtopic.php?p=27633", "https://stealth.od.ua/api/InJournalBetweenTimes/" ], "finding": "Corrected start=0 to include the runtime start. Native BASIC times are integer Now() milliseconds, not Stealth TDateTime. End omitted/nonpositive means now; positive results follow Yoko index + 1, missing is 0.", "tests": "YokoInjectionFindTypeWorldTests.Journal_*; YokoInjectionCompatibilityTests.Journal_*/Stealth_Journal_Properties_Use_The_Last_Real_Matched_Line" }, { "name": "UO.InParty", "overloads": 1, "status": "reviewed-adaptation", "candidateSources": [ "https://stealth.od.ua/api/InParty/" ], "sources": [ "https://stealth.od.ua/api/InParty/" ], "finding": "This client uses Party.Leader !=0 rather than array length. Returns Integer 1/0, not member count.", "tests": "bridge/PartyManager/dispatch source review" }, { "name": "UO.Int", "overloads": 1, "status": "reviewed-project-extension", "candidateSources": [ "https://stealth.od.ua/api/Int/" ], "sources": [ "https://stealth.od.ua/api/Int/", "https://stealth.od.ua/api/GetInt/" ], "finding": "Intelligence current points, Integer, from the actual PlayerMobile field (ushort), zero for missing/destroyed Player. Compared current primary Stealth own/ObjID contracts with RegisterCharacterGetterAliases, ExecuteStealthCompatibility, numeric conversion and concrete bridge. Only GetStr/GetInt/GetDex have ObjID overloads; other names here are zero-argument. The object overload only has own-character data: foreign serial returns zero, even for another loaded mobile. This project limitation is explicitly documented rather than guessing values or claiming a remote status request. No network packet or built-in delay. Bare Int(value) and Str(value) are distinct BASIC operations and their mixed cards were not replaced by these attribute-only contracts. Unshadowed intrinsics are fresh reads. Numeric attribute results are not Boolean; the complete AttributeAtLeast helper returns comparison 1/0. Ten translations contain exact arguments, return meaning, coercion, native stages, three diverse complete examples, and a fourth serial/alias example for object overloads.", "tests": "YokoAttributeTests: 13 cases passed. All attribute aliases/functions/intrinsics and six object forms (bare/UO GetStr/GetInt/GetDex), current update, 65535, missing/destroyed Player, foreign item/unknown serial, numeric/hex/self/AddObject names, no packets, and mixed BASIC Int/Str behavior. Six destroyed-player regressions reproduced before the fix. Complete helpers extracted from all 242 root/locale cards executed at 0,79,80,81,65535 and with a destroyed Player (1452 assertions of helper results), with no gameplay Main execution. Reviewed IDE result-kind cases passed." }, { "name": "UO.Int2Hex", "overloads": 1, "status": "pending", "candidateSources": [] }, { "name": "UO.Intelligence", "overloads": 1, "status": "reviewed-project-extension", "candidateSources": [], "sources": [ "https://stealth.od.ua/api/Int/", "https://stealth.od.ua/api/GetInt/" ], "finding": "Intelligence current points, Integer, from the actual PlayerMobile field (ushort), zero for missing/destroyed Player. Compared current primary Stealth own/ObjID contracts with RegisterCharacterGetterAliases, ExecuteStealthCompatibility, numeric conversion and concrete bridge. Only GetStr/GetInt/GetDex have ObjID overloads; other names here are zero-argument. The object overload only has own-character data: foreign serial returns zero, even for another loaded mobile. This project limitation is explicitly documented rather than guessing values or claiming a remote status request. No network packet or built-in delay. Bare Int(value) and Str(value) are distinct BASIC operations and their mixed cards were not replaced by these attribute-only contracts. Unshadowed intrinsics are fresh reads. Numeric attribute results are not Boolean; the complete AttributeAtLeast helper returns comparison 1/0. Ten translations contain exact arguments, return meaning, coercion, native stages, three diverse complete examples, and a fourth serial/alias example for object overloads.", "tests": "YokoAttributeTests: 13 cases passed. All attribute aliases/functions/intrinsics and six object forms (bare/UO GetStr/GetInt/GetDex), current update, 65535, missing/destroyed Player, foreign item/unknown serial, numeric/hex/self/AddObject names, no packets, and mixed BASIC Int/Str behavior. Six destroyed-player regressions reproduced before the fix. Complete helpers extracted from all 242 root/locale cards executed at 0,79,80,81,65535 and with a destroyed Player (1452 assertions of helper results), with no gameplay Main execution. Reviewed IDE result-kind cases passed." }, { "name": "UO.InviteToParty", "overloads": 1, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/InviteToParty/" ] }, { "name": "UO.IsActiveSpellAbility", "overloads": 1, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/IsActiveSpellAbility/" ] }, { "name": "UO.IsAlive", "overloads": 2, "status": "project-extension", "candidateSources": [], "sources": [ "https://stealth.od.ua/api/IsDead/" ], "finding": "Project predicate: positive existing serial and no dead state. Existing items also return 1. Missing/destroyed objects return 0. Exists and the state read are separate snapshots.", "tests": "YokoCharacterQueryTests.CharacterQueries_StateAliasesSelectSelfOrExplicitObject; CharacterQueries_RejectDestroyedMobileBeforeDictionaryRemoval; CharacterQueries_FlightUsesModernFlagAndRejectsDestroyedMobile; static registration and bridge review" }, { "name": "UO.IsContainer", "overloads": 1, "status": "corrected", "candidateSources": [ "https://stealth.od.ua/api/IsContainer/" ], "sources": [ "https://stealth.od.ua/api/IsContainer/" ], "finding": "Reads the loaded item graphic tiledata Container flag, not UI openness or child count. Destroyed items return 0.", "tests": "ObjectPredicates_*; bridge/dispatch source review" }, { "name": "UO.IsDead", "overloads": 2, "status": "corrected", "candidateSources": [ "https://stealth.od.ua/api/IsDead/" ], "sources": [ "https://stealth.od.ua/api/IsDead/", "https://stealth.od.ua/api/Dead/" ], "finding": "Integer 1/0 reflects Mobile.IsDead, not HP==0; absent/destroyed mobile returns 0. Both no-argument self and explicit object forms are project extensions of the separate Stealth names.", "tests": "YokoCharacterQueryTests.CharacterQueries_StateAliasesSelectSelfOrExplicitObject; CharacterQueries_RejectDestroyedMobileBeforeDictionaryRemoval; CharacterQueries_FlightUsesModernFlagAndRejectsDestroyedMobile; static registration and bridge review" }, { "name": "UO.IsFemale", "overloads": 1, "status": "corrected", "candidateSources": [ "https://stealth.od.ua/api/IsFemale/" ], "sources": [ "https://stealth.od.ua/api/IsFemale/" ], "finding": "Reads Mobile.IsFemale as Integer 1/0. Missing, destroyed and non-mobile objects return 0.", "tests": "ObjectPredicates_*; bridge/dispatch source review" }, { "name": "UO.IsFlying", "overloads": 2, "status": "project-extension", "candidateSources": [], "sources": [], "finding": "Project state family reads Mobile.IsFlying: requires protocol >=7.0.0.0 and bit 0x04. Not derived from Z. Destroyed/missing mobiles return 0. Kept separate from the modern poison field.", "tests": "YokoCharacterQueryTests.CharacterQueries_StateAliasesSelectSelfOrExplicitObject; CharacterQueries_RejectDestroyedMobileBeforeDictionaryRemoval; CharacterQueries_FlightUsesModernFlagAndRejectsDestroyedMobile; static registration and bridge review" }, { "name": "UO.IsFrozen", "overloads": 2, "status": "reviewed-project-extension", "candidateSources": [], "sources": [ "https://stealth.od.ua/api/Paralyzed/", "https://stealth.od.ua/api/IsParalyzed/" ], "finding": "Paralyzed and the retained state-query aliases share GetLocked/IsParalyzed. Both no-argument self and one-object forms are supported, unlike the split reference API. Returns Integer 1/0; removed false positives for destroyed mobiles; query does not apply or cure paralysis.", "tests": "ObjectPredicates_ParalysisAliasesShareSelfAndExplicitObjectSemantics; ObjectPredicates_MetadataReportsNumericBooleanAndPreservesNamedLayerUnion" }, { "name": "UO.IsGump", "overloads": 1, "status": "reviewed-adaptation", "candidateSources": [ "https://stealth.od.ua/api/IsGump/" ], "sources": [ "https://stealth.od.ua/api/IsGump/" ], "finding": "Integer 1/0 for nonempty/empty active server-window list, not the window count.", "tests": "YokoCommandEndToEndTests; Stealth_Gump_Api_Uses_The_Active_ClassicUo_Gumps; YokoIdeRuntimeProbe" }, { "name": "UO.IsGumpCanBeClosed", "overloads": 1, "status": "reviewed-adaptation", "candidateSources": [ "https://stealth.od.ua/api/IsGumpCanBeClosed/" ], "sources": [ "https://stealth.od.ua/api/IsGumpCanBeClosed/" ], "finding": "Integer 1/0 from CanCloseWithRightClick at a strict index, zero if invalid; does not close or reply.", "tests": "YokoCommandEndToEndTests; Stealth_Gump_Api_Uses_The_Active_ClassicUo_Gumps; YokoIdeRuntimeProbe" }, { "name": "UO.IsHidden", "overloads": 2, "status": "corrected", "candidateSources": [ "https://stealth.od.ua/api/IsHidden/" ], "sources": [ "https://stealth.od.ua/api/IsHidden/", "https://stealth.od.ua/api/Hidden/" ], "finding": "Integer 1/0 reads IsHidden. Fixed missing numeric overload of UO.Hidden and rejection of destroyed mobiles. Does not hide/reveal an object or test line of sight.", "tests": "YokoCharacterQueryTests.CharacterQueries_StateAliasesSelectSelfOrExplicitObject; CharacterQueries_RejectDestroyedMobileBeforeDictionaryRemoval; CharacterQueries_FlightUsesModernFlagAndRejectsDestroyedMobile; static registration and bridge review" }, { "name": "UO.IsHouse", "overloads": 1, "status": "corrected", "candidateSources": [ "https://stealth.od.ua/api/IsHouse/" ], "sources": [ "https://stealth.od.ua/api/IsHouse/" ], "finding": "Reads Item.IsMulti, including ships and other multi structures, not just houses. Destroyed items return 0.", "tests": "ObjectPredicates_*; bridge/dispatch source review" }, { "name": "UO.IsMineTile", "overloads": 1, "status": "pending", "candidateSources": [] }, { "name": "UO.IsMovable", "overloads": 1, "status": "corrected-project-adaptation", "candidateSources": [ "https://stealth.od.ua/api/IsMovable/" ], "sources": [ "https://stealth.od.ua/api/IsMovable/" ], "finding": "Matches local Classic UO pickup classification: known live non-multi item; ground item rejected only when tile weight >90 without Movable flag. In-container items skip ground locking. Distance and server access are separate; reference weight wording does not override actual GameActions.PickUp rules.", "tests": "ObjectPredicates_*; bridge/dispatch source review" }, { "name": "UO.IsMoving", "overloads": 1, "status": "pending", "candidateSources": [] }, { "name": "UO.IsNpc", "overloads": 4, "status": "corrected", "candidateSources": [ "https://stealth.od.ua/api/IsNPC/" ], "sources": [ "https://stealth.od.ua/api/IsNPC/" ], "finding": "Recognizes all loaded live mobiles, including self and other players; excludes items and destroyed objects. It does not classify player versus NPC.", "tests": "ObjectPredicates_*; bridge/dispatch source review" }, { "name": "UO.IsObjectExists", "overloads": 1, "status": "reviewed", "candidateSources": [ "https://stealth.od.ua/api/IsObjectExists/" ], "sources": [ "https://stealth.od.ua/api/IsObjectExists/" ], "finding": "Same bridge Exists predicate as UO.Exists; returns Integer 1/0, rejects destroyed cache entries.", "tests": "ObjectPredicates_*; bridge/dispatch source review" }, { "name": "UO.IsOnline", "overloads": 1, "status": "pending", "candidateSources": [] }, { "name": "UO.IsParalysed", "overloads": 2, "status": "reviewed-project-extension", "candidateSources": [], "sources": [ "https://stealth.od.ua/api/Paralyzed/", "https://stealth.od.ua/api/IsParalyzed/" ], "finding": "Paralyzed and the retained state-query aliases share GetLocked/IsParalyzed. Both no-argument self and one-object forms are supported, unlike the split reference API. Returns Integer 1/0; removed false positives for destroyed mobiles; query does not apply or cure paralysis.", "tests": "ObjectPredicates_ParalysisAliasesShareSelfAndExplicitObjectSemantics; ObjectPredicates_MetadataReportsNumericBooleanAndPreservesNamedLayerUnion" }, { "name": "UO.IsParalyzed", "overloads": 2, "status": "reviewed-project-extension", "candidateSources": [ "https://stealth.od.ua/api/IsParalyzed/" ], "sources": [ "https://stealth.od.ua/api/Paralyzed/", "https://stealth.od.ua/api/IsParalyzed/" ], "finding": "Paralyzed and the retained state-query aliases share GetLocked/IsParalyzed. Both no-argument self and one-object forms are supported, unlike the split reference API. Returns Integer 1/0; removed false positives for destroyed mobiles; query does not apply or cure paralysis.", "tests": "ObjectPredicates_ParalysisAliasesShareSelfAndExplicitObjectSemantics; ObjectPredicates_MetadataReportsNumericBooleanAndPreservesNamedLayerUnion" }, { "name": "UO.IsPoisoned", "overloads": 2, "status": "corrected", "candidateSources": [ "https://stealth.od.ua/api/IsPoisoned/" ], "sources": [ "https://stealth.od.ua/api/IsPoisoned/", "https://stealth.od.ua/api/Poisoned/" ], "finding": "Integer 1/0 reads protocol-dependent IsPoisoned. Fixed destroyed-mobile lookup. Legacy bit 0x04 versus the separate SA poison field is retained; strength/duration are not returned.", "tests": "YokoCharacterQueryTests.CharacterQueries_StateAliasesSelectSelfOrExplicitObject; CharacterQueries_RejectDestroyedMobileBeforeDictionaryRemoval; CharacterQueries_FlightUsesModernFlagAndRejectsDestroyedMobile; static registration and bridge review" }, { "name": "UO.IsRunning", "overloads": 1, "status": "corrected-adaptation", "candidateSources": [ "https://stealth.od.ua/api/IsRunning/" ], "sources": [ "https://stealth.od.ua/api/IsRunning/" ], "finding": "Reads the latest Mobile.Direction Running bit; it is not an active path, velocity or remaining step count. Destroyed mobiles return 0.", "tests": "ObjectPredicates_*; bridge/dispatch source review" }, { "name": "UO.IsTrade", "overloads": 1, "status": "reviewed", "candidateSources": [ "https://stealth.od.ua/api/IsTrade/" ], "sources": [ "https://stealth.od.ua/api/IsTrade/" ], "finding": "True when at least one non-disposed TradingGump exists. Not vendor buy/sell UI or proof of confirmed trade.", "tests": "Object_And_Trade_Predicates_Use_Actual_Client_State; client bridge source review" }, { "name": "UO.IsTreeTile", "overloads": 1, "status": "pending", "candidateSources": [] }, { "name": "UO.IsWaitTargetActive", "overloads": 1, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/IsWaitTargetActive/" ] }, { "name": "UO.IsWarMode", "overloads": 1, "status": "corrected", "candidateSources": [ "https://stealth.od.ua/api/IsWarMode/" ], "sources": [ "https://stealth.od.ua/api/IsWarMode/" ], "finding": "Reads Mobile.InWarMode, not attack target or server attack outcome. Destroyed/mobile-missing entries return 0.", "tests": "ObjectPredicates_*; bridge/dispatch source review" }, { "name": "UO.IsWaterTile", "overloads": 1, "status": "pending", "candidateSources": [] }, { "name": "UO.IsWorldCellPassable", "overloads": 1, "status": "reviewed-project-extension", "candidateSources": [ "https://stealth.od.ua/api/IsWorldCellPassable/" ], "sources": [ "https://stealth.od.ua/api/IsWorldCellPassable/" ], "finding": "BASIC uses seven input arguments and returns [Integer passability,Integer destinationZ], adapting the Pascal Boolean/var output rather than mutating argument six. Only element zero is logical. Reads local loaded collision data, sends no packets and starts no route. Coordinates must be unsigned-word values inside current map dimensions, Z signed-byte, destination adjacent or identical. Invalid/destroyed/missing data returns [0,CurrZ]; valid identity returns [1,CurrZ] without collision. A far target is not a path query. World-step validation now precedes identity, subtraction and collision. Metadata is Array; GetNextStepZ separately remains Integer height. All seven internal function references and complete scalar helper are documented on ten locales.", "tests": "YokoWorldStepQueryTests: 19 cases (initial valid-fixture baseline 10 failures/2 passes), including invalid identity, missing dimensions, true map bounds, distant destination, other facet, destroyed player and result metadata. MobileVisibilityProbe: 481 real-map/path checks including all eight open directions, raised wall, valid identity and unchanged movement state; 17 visibility checks and worker queries passed." }, { "name": "UO.IsYellowHits", "overloads": 1, "status": "corrected-adaptation", "candidateSources": [ "https://stealth.od.ua/api/IsYellowHits/" ], "sources": [ "https://stealth.od.ua/api/IsYellowHits/" ], "finding": "Reads Mobile.IsYellowHits as Integer 1/0; no assumption all servers encode invulnerability this way. Destroyed/mobile-missing entries return 0.", "tests": "ObjectPredicates_*; bridge/dispatch source review" }, { "name": "UO.Journal", "overloads": 2, "status": "reviewed-adaptation", "candidateSources": [ "https://stealth.od.ua/api/Journal/" ], "sources": [ "https://forum.yoko.com.ua/viewtopic.php?p=27633", "https://stealth.od.ua/api/Journal/" ], "finding": "String — текст строки, либо пустая строка при неверном индексе/пустом журнале. У существующей строки текст тоже может быть пустым: после чтения LineIndex >= 0 подтверждает, что запись была выбрана. Это не количество строк. Selected fields are captured together; later incoming/recycled entries do not replace them. Current indices are resolved by identity; -1 on eviction. Native behavior was checked in bridge-backed tests.", "tests": "YokoInjectionFindTypeWorldTests.Journal_*; YokoInjectionCompatibilityTests.Journal_*/Stealth_Journal_Properties_Use_The_Last_Real_Matched_Line" }, { "name": "UO.JournalColor", "overloads": 1, "status": "reviewed-adaptation", "candidateSources": [], "sources": [ "https://forum.yoko.com.ua/viewtopic.php?p=27633", "https://stealth.od.ua/api/LineTextColor/" ], "finding": "String — UO hue как 0x0044; при неверном индексе 0x0000. Это не RGB. Selected fields are captured together; later incoming/recycled entries do not replace them. Current indices are resolved by identity; -1 on eviction. Native behavior was checked in bridge-backed tests.", "tests": "YokoInjectionFindTypeWorldTests.Journal_*; YokoInjectionCompatibilityTests.Journal_*/Stealth_Journal_Properties_Use_The_Last_Real_Matched_Line" }, { "name": "UO.JournalSerial", "overloads": 1, "status": "reviewed-adaptation", "candidateSources": [], "sources": [ "https://forum.yoko.com.ua/viewtopic.php?p=27633", "https://stealth.od.ua/api/LineID/" ], "finding": "String — serial автора как 0x00001234; при неверном индексе 0x00000000. Selected fields are captured together; later incoming/recycled entries do not replace them. Current indices are resolved by identity; -1 on eviction. Native behavior was checked in bridge-backed tests.", "tests": "YokoInjectionFindTypeWorldTests.Journal_*; YokoInjectionCompatibilityTests.Journal_*/Stealth_Journal_Properties_Use_The_Last_Real_Matched_Line" }, { "name": "UO.JournalTimer", "overloads": 1, "status": "reviewed-adaptation", "candidateSources": [], "sources": [ "https://forum.yoko.com.ua/viewtopic.php?p=27633", "https://stealth.od.ua/api/LineTime/" ], "finding": "Integer — метка записи в миллисекундах от начала runtime, совместимая с Now(). 0 для записи до запуска runtime; -1 для неверного индекса/времени. Это не возраст записи и не десятые секунды UO.Timer(). Selected fields are captured together; later incoming/recycled entries do not replace them. Current indices are resolved by identity; -1 on eviction. Native behavior was checked in bridge-backed tests.", "tests": "YokoInjectionFindTypeWorldTests.Journal_*; YokoInjectionCompatibilityTests.Journal_*/Stealth_Journal_Properties_Use_The_Last_Real_Matched_Line" }, { "name": "UO.KeyPress", "overloads": 3, "status": "pending", "candidateSources": [] }, { "name": "UO.LastAttack", "overloads": 1, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/LastAttack/" ] }, { "name": "UO.LastContainer", "overloads": 1, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/LastContainer/" ] }, { "name": "UO.LastGump", "overloads": 2, "status": "pending", "candidateSources": [] }, { "name": "UO.LastJournalMessage", "overloads": 1, "status": "reviewed-adaptation", "candidateSources": [ "https://stealth.od.ua/api/LastJournalMessage/" ], "sources": [ "https://stealth.od.ua/api/LastJournalMessage/" ], "finding": "String — текст новой записи; пустая строка, если журнала нет или сама запись содержит пустой текст. Selected fields are captured together; later incoming/recycled entries do not replace them. Current indices are resolved by identity; -1 on eviction. Native behavior was checked in bridge-backed tests.", "tests": "YokoInjectionFindTypeWorldTests.Journal_*; YokoInjectionCompatibilityTests.Journal_*/Stealth_Journal_Properties_Use_The_Last_Real_Matched_Line" }, { "name": "UO.LastMessage", "overloads": 1, "status": "reviewed-adaptation", "candidateSources": [], "sources": [ "https://forum.yoko.com.ua/viewtopic.php?p=27633" ], "finding": "String of newest entry, empty if absent. This original getter leaves selected Line*/GetFoundedText unchanged, unlike LastJournalMessage.", "tests": "YokoInjectionFindTypeWorldTests.Journal_*; YokoInjectionCompatibilityTests.Journal_*/Stealth_Journal_Properties_Use_The_Last_Real_Matched_Line" }, { "name": "UO.LastObject", "overloads": 1, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/LastObject/" ] }, { "name": "UO.LastStatus", "overloads": 1, "status": "reviewed-project-extension", "candidateSources": [ "https://stealth.od.ua/api/LastStatus/" ], "sources": [ "https://stealth.od.ua/api/LastStatus/", "https://forums.polserver.com/viewtopic.php?t=5153", "https://raw.githubusercontent.com/ServUO/ServUO/pub57/Server/Network/Packets.cs" ], "finding": "LastStatus is the serial of an accepted 0x11 status subject, not the most recent outbound request. Shared World state resets on Clear. Unknown/destroyed subjects and truncated basic payloads do not replace it. X/Y retain Entity coordinates at packet reception; no live lookup after movement/removal. These may be container coordinates for items. Compared the primary Stealth serial contract and the original Yoko release announcement describing retained lasttarget/laststatus coordinates. The exact BASIC adaptation, serial bit preservation, zero conventions, self/ClientMarkChar behavior and lack of atomic multi-call snapshot are documented separately. All forms return Integer and take zero parameters. Ten locales include three scripts and complete helpers with internal source references. Optional snapshot bridge interfaces preserve older external-bridge behavior. CharacterStatus now validates the complete required fixed body before any partial mutation: own status needs63bytes plus type-dependent4/18/3 fields; compact40 and other-mobile41 remain supported. Six truncation failures reproduced and fixed;15 status boundary tests and55 related regressions passed. Type6 optional trailer compatibility remains unchanged.", "tests": "YokoLastStatusTests: 13 passing cases covering requests, received packet, shared runtimes, truncated basic payloads, unknown/destroyed entity, high-bit serial, movement/removal snapshots, next response and Clear. Snapshot baseline failed 2/13 before fix." }, { "name": "UO.LastStatusX", "overloads": 1, "status": "reviewed-project-extension", "candidateSources": [], "sources": [ "https://stealth.od.ua/api/LastStatus/", "https://forums.polserver.com/viewtopic.php?t=5153", "https://raw.githubusercontent.com/ServUO/ServUO/pub57/Server/Network/Packets.cs" ], "finding": "LastStatus is the serial of an accepted 0x11 status subject, not the most recent outbound request. Shared World state resets on Clear. Unknown/destroyed subjects and truncated basic payloads do not replace it. X/Y retain Entity coordinates at packet reception; no live lookup after movement/removal. These may be container coordinates for items. Compared the primary Stealth serial contract and the original Yoko release announcement describing retained lasttarget/laststatus coordinates. The exact BASIC adaptation, serial bit preservation, zero conventions, self/ClientMarkChar behavior and lack of atomic multi-call snapshot are documented separately. All forms return Integer and take zero parameters. Ten locales include three scripts and complete helpers with internal source references. Optional snapshot bridge interfaces preserve older external-bridge behavior. CharacterStatus now validates the complete required fixed body before any partial mutation: own status needs63bytes plus type-dependent4/18/3 fields; compact40 and other-mobile41 remain supported. Six truncation failures reproduced and fixed;15 status boundary tests and55 related regressions passed. Type6 optional trailer compatibility remains unchanged.", "tests": "YokoLastStatusTests: 13 passing cases covering requests, received packet, shared runtimes, truncated basic payloads, unknown/destroyed entity, high-bit serial, movement/removal snapshots, next response and Clear. Snapshot baseline failed 2/13 before fix." }, { "name": "UO.LastStatusY", "overloads": 1, "status": "reviewed-project-extension", "candidateSources": [], "sources": [ "https://stealth.od.ua/api/LastStatus/", "https://forums.polserver.com/viewtopic.php?t=5153", "https://raw.githubusercontent.com/ServUO/ServUO/pub57/Server/Network/Packets.cs" ], "finding": "LastStatus is the serial of an accepted 0x11 status subject, not the most recent outbound request. Shared World state resets on Clear. Unknown/destroyed subjects and truncated basic payloads do not replace it. X/Y retain Entity coordinates at packet reception; no live lookup after movement/removal. These may be container coordinates for items. Compared the primary Stealth serial contract and the original Yoko release announcement describing retained lasttarget/laststatus coordinates. The exact BASIC adaptation, serial bit preservation, zero conventions, self/ClientMarkChar behavior and lack of atomic multi-call snapshot are documented separately. All forms return Integer and take zero parameters. Ten locales include three scripts and complete helpers with internal source references. Optional snapshot bridge interfaces preserve older external-bridge behavior. CharacterStatus now validates the complete required fixed body before any partial mutation: own status needs63bytes plus type-dependent4/18/3 fields; compact40 and other-mobile41 remain supported. Six truncation failures reproduced and fixed;15 status boundary tests and55 related regressions passed. Type6 optional trailer compatibility remains unchanged.", "tests": "YokoLastStatusTests: 13 passing cases covering requests, received packet, shared runtimes, truncated basic payloads, unknown/destroyed entity, high-bit serial, movement/removal snapshots, next response and Clear. Snapshot baseline failed 2/13 before fix." }, { "name": "UO.LastStepQUsedDoor", "overloads": 2, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/LastStepQUsedDoor/" ] }, { "name": "UO.LastTarget", "overloads": 1, "status": "reviewed-project-extension", "candidateSources": [ "https://stealth.od.ua/api/LastTarget/" ], "sources": [ "https://stealth.od.ua/api/LastTarget/", "https://forums.polserver.com/viewtopic.php?t=5153" ], "finding": "LastTarget stores an object serial; land/static targets have serial zero. X/Y retain selection coordinates, including land/statics, rather than following a moving or removed object. Unknown explicit serials clear saved coordinates. World.Clear resets selection even if scripts survive. Entity packet X/Y sentinels remain separate and unchanged. Compared the primary Stealth serial contract and the original Yoko release announcement describing retained lasttarget/laststatus coordinates. The exact BASIC adaptation, serial bit preservation, zero conventions, self/ClientMarkChar behavior and lack of atomic multi-call snapshot are documented separately. All forms return Integer and take zero parameters. Ten locales include three scripts and complete helpers with internal source references. Optional snapshot bridge interfaces preserve older external-bridge behavior. World.Clear now calls TargetManager.ClearWorldState, which clears the active cursor/callback and raw replay packet as well as LastTargetInfo. Normal Reset retains repeat-last history. Native TargetLast refuses a missing historical packet or a non-server cursor. ClearWorldState additionally notifies an active client callback once with null after resetting cursor/history; an already completed callback is not invoked again. ClientTargetResponsePresent becomes 1 with an empty result on world teardown.", "tests": "YokoLastTargetSnapshotTests: 6 cases, baseline 5 failures/1 pass; green with related direct/wait-target and LastTile regressions (28 cases including LastStatus). Uses real target dispatch and verifies packet length, protocol sentinels, entity movement/removal, both static/land and world cleanup. Target-history regression plus related status/tile/target suite:29 pass. The empty-history and client-callback cases reproduced unwanted packet sends before the guard. A regular reset/repeat test checks the new cursor ID and preserved payload; both preserveScripts modes verify World.Clear cleanup. The packet fixture is cumulative, and cleanup uses a separate normally initialized empty World seeded with its captured packet. Four teardown callback regressions: three real baseline failures and one existing completed-selection pass; all passed after cancellation notification was added. Both World.Clear preserve-script modes return an empty client response without waiting, and native callback cleanup emits no network packet." }, { "name": "UO.LastTargetX", "overloads": 1, "status": "reviewed-project-extension", "candidateSources": [], "sources": [ "https://stealth.od.ua/api/LastTarget/", "https://forums.polserver.com/viewtopic.php?t=5153" ], "finding": "LastTarget stores an object serial; land/static targets have serial zero. X/Y retain selection coordinates, including land/statics, rather than following a moving or removed object. Unknown explicit serials clear saved coordinates. World.Clear resets selection even if scripts survive. Entity packet X/Y sentinels remain separate and unchanged. Compared the primary Stealth serial contract and the original Yoko release announcement describing retained lasttarget/laststatus coordinates. The exact BASIC adaptation, serial bit preservation, zero conventions, self/ClientMarkChar behavior and lack of atomic multi-call snapshot are documented separately. All forms return Integer and take zero parameters. Ten locales include three scripts and complete helpers with internal source references. Optional snapshot bridge interfaces preserve older external-bridge behavior. World.Clear now calls TargetManager.ClearWorldState, which clears the active cursor/callback and raw replay packet as well as LastTargetInfo. Normal Reset retains repeat-last history. Native TargetLast refuses a missing historical packet or a non-server cursor. ClearWorldState additionally notifies an active client callback once with null after resetting cursor/history; an already completed callback is not invoked again. ClientTargetResponsePresent becomes 1 with an empty result on world teardown.", "tests": "YokoLastTargetSnapshotTests: 6 cases, baseline 5 failures/1 pass; green with related direct/wait-target and LastTile regressions (28 cases including LastStatus). Uses real target dispatch and verifies packet length, protocol sentinels, entity movement/removal, both static/land and world cleanup. Target-history regression plus related status/tile/target suite:29 pass. The empty-history and client-callback cases reproduced unwanted packet sends before the guard. A regular reset/repeat test checks the new cursor ID and preserved payload; both preserveScripts modes verify World.Clear cleanup. The packet fixture is cumulative, and cleanup uses a separate normally initialized empty World seeded with its captured packet. Four teardown callback regressions: three real baseline failures and one existing completed-selection pass; all passed after cancellation notification was added. Both World.Clear preserve-script modes return an empty client response without waiting, and native callback cleanup emits no network packet." }, { "name": "UO.LastTargetY", "overloads": 1, "status": "reviewed-project-extension", "candidateSources": [], "sources": [ "https://stealth.od.ua/api/LastTarget/", "https://forums.polserver.com/viewtopic.php?t=5153" ], "finding": "LastTarget stores an object serial; land/static targets have serial zero. X/Y retain selection coordinates, including land/statics, rather than following a moving or removed object. Unknown explicit serials clear saved coordinates. World.Clear resets selection even if scripts survive. Entity packet X/Y sentinels remain separate and unchanged. Compared the primary Stealth serial contract and the original Yoko release announcement describing retained lasttarget/laststatus coordinates. The exact BASIC adaptation, serial bit preservation, zero conventions, self/ClientMarkChar behavior and lack of atomic multi-call snapshot are documented separately. All forms return Integer and take zero parameters. Ten locales include three scripts and complete helpers with internal source references. Optional snapshot bridge interfaces preserve older external-bridge behavior. World.Clear now calls TargetManager.ClearWorldState, which clears the active cursor/callback and raw replay packet as well as LastTargetInfo. Normal Reset retains repeat-last history. Native TargetLast refuses a missing historical packet or a non-server cursor. ClearWorldState additionally notifies an active client callback once with null after resetting cursor/history; an already completed callback is not invoked again. ClientTargetResponsePresent becomes 1 with an empty result on world teardown.", "tests": "YokoLastTargetSnapshotTests: 6 cases, baseline 5 failures/1 pass; green with related direct/wait-target and LastTile regressions (28 cases including LastStatus). Uses real target dispatch and verifies packet length, protocol sentinels, entity movement/removal, both static/land and world cleanup. Target-history regression plus related status/tile/target suite:29 pass. The empty-history and client-callback cases reproduced unwanted packet sends before the guard. A regular reset/repeat test checks the new cursor ID and preserved payload; both preserveScripts modes verify World.Clear cleanup. The packet fixture is cumulative, and cleanup uses a separate normally initialized empty World seeded with its captured packet. Four teardown callback regressions: three real baseline failures and one existing completed-selection pass; all passed after cancellation notification was added. Both World.Clear preserve-script modes return an empty client response without waiting, and native callback cleanup emits no network packet." }, { "name": "UO.LastTile", "overloads": 2, "status": "pending", "candidateSources": [] }, { "name": "UO.Launch", "overloads": 4, "status": "pending", "candidateSources": [] }, { "name": "UO.LClick", "overloads": 1, "status": "pending", "candidateSources": [] }, { "name": "UO.LDblClick", "overloads": 1, "status": "pending", "candidateSources": [] }, { "name": "UO.Life", "overloads": 1, "status": "project-extension", "candidateSources": [ "https://stealth.od.ua/api/Life/" ], "sources": [ "https://stealth.od.ua/api/GetHP/", "https://stealth.od.ua/api/Life/" ], "finding": "Integer value of Hits, not a percentage or Boolean. Zero is valid and also means absent data. Only the zero-argument self form is registered; do not pass an object argument. Reads local data without an automatic status request; unlike Stealth GetHP, this client does not request missing stats as a side effect. Missing/destroyed entities return 0. HP fields may contain a relative server scale.", "tests": "YokoCharacterQueryTests; Character_Stats_And_Resists_Work_As_Functions_And_Parameters; static RegisterCharacterGetterAliases and concrete bridge field mapping review" }, { "name": "UO.Light", "overloads": 2, "status": "pending", "candidateSources": [] }, { "name": "UO.LineCount", "overloads": 1, "status": "reviewed-adaptation", "candidateSources": [ "https://stealth.od.ua/api/LineCount/" ], "sources": [ "https://stealth.od.ua/api/LineCount/" ], "finding": "Number of matched records from the last search, respecting all filters and limits. newestOnly caps it at 1. Not journal length or number of occurrences within one line.", "tests": "YokoInjectionFindTypeWorldTests.Journal_*; YokoInjectionCompatibilityTests.Journal_*/Stealth_Journal_Properties_Use_The_Last_Real_Matched_Line" }, { "name": "UO.LineID", "overloads": 1, "status": "reviewed-adaptation", "candidateSources": [ "https://stealth.od.ua/api/LineID/" ], "sources": [ "https://stealth.od.ua/api/LineID/" ], "finding": "Integer — 32-битный serial автора. Без выбора — 0. Старший бит может дать отрицательное число из-за signed Integer; GetFoundedTextSerial сохраняет полное hex-представление. Это не graphic/type. Selected fields are captured together; later incoming/recycled entries do not replace them. Current indices are resolved by identity; -1 on eviction. Native behavior was checked in bridge-backed tests.", "tests": "YokoInjectionFindTypeWorldTests.Journal_*; YokoInjectionCompatibilityTests.Journal_*/Stealth_Journal_Properties_Use_The_Last_Real_Matched_Line" }, { "name": "UO.LineIndex", "overloads": 1, "status": "reviewed-adaptation", "candidateSources": [ "https://stealth.od.ua/api/LineIndex/" ], "sources": [ "https://stealth.od.ua/api/LineIndex/" ], "finding": "Integer — текущий индекс от 0 (самая новая строка). -1 означает, что выбора нет либо выбранная запись уже удалена/вытеснена. Это не результат InJournal: из индекса не нужно вычитать 1. Selected fields are captured together; later incoming/recycled entries do not replace them. Current indices are resolved by identity; -1 on eviction. Native behavior was checked in bridge-backed tests.", "tests": "YokoInjectionFindTypeWorldTests.Journal_*; YokoInjectionCompatibilityTests.Journal_*/Stealth_Journal_Properties_Use_The_Last_Real_Matched_Line" }, { "name": "UO.LineMsgType", "overloads": 1, "status": "reviewed-adaptation", "candidateSources": [ "https://stealth.od.ua/api/LineMsgType/" ], "sources": [ "https://stealth.od.ua/api/LineMsgType/" ], "finding": "Actual Classic UO MessageType values, including Whisper=8, Yell=9, Guild=13. External reference examples list different values; preserve the client packet enum and document it.", "tests": "YokoInjectionFindTypeWorldTests.Journal_*; YokoInjectionCompatibilityTests.Journal_*/Stealth_Journal_Properties_Use_The_Last_Real_Matched_Line" }, { "name": "UO.LineName", "overloads": 1, "status": "reviewed-adaptation", "candidateSources": [ "https://stealth.od.ua/api/LineName/" ], "sources": [ "https://stealth.od.ua/api/LineName/" ], "finding": "String — имя автора выбранной записи, например System или имя персонажа; пустая строка без выбора/без имени. Имя не гарантирует уникальность персонажа. Selected fields are captured together; later incoming/recycled entries do not replace them. Current indices are resolved by identity; -1 on eviction. Native behavior was checked in bridge-backed tests.", "tests": "YokoInjectionFindTypeWorldTests.Journal_*; YokoInjectionCompatibilityTests.Journal_*/Stealth_Journal_Properties_Use_The_Last_Real_Matched_Line" }, { "name": "UO.LineTextColor", "overloads": 1, "status": "reviewed-adaptation", "candidateSources": [ "https://stealth.od.ua/api/LineTextColor/" ], "sources": [ "https://stealth.od.ua/api/LineTextColor/" ], "finding": "Integer — UO hue выбранной записи (0…65535); без выбора 0. Ноль допустим как цвет. Это не RGB и не ID автора. Selected fields are captured together; later incoming/recycled entries do not replace them. Current indices are resolved by identity; -1 on eviction. Native behavior was checked in bridge-backed tests.", "tests": "YokoInjectionFindTypeWorldTests.Journal_*; YokoInjectionCompatibilityTests.Journal_*/Stealth_Journal_Properties_Use_The_Last_Real_Matched_Line" }, { "name": "UO.LineTextFont", "overloads": 1, "status": "reviewed-adaptation", "candidateSources": [ "https://stealth.od.ua/api/LineTextFont/" ], "sources": [ "https://stealth.od.ua/api/LineTextFont/" ], "finding": "Integer — UO font ID выбранной записи (0…255 в клиенте); без выбора 0. Это ID игрового шрифта, не размер шрифта IDE. Selected fields are captured together; later incoming/recycled entries do not replace them. Current indices are resolved by identity; -1 on eviction. Native behavior was checked in bridge-backed tests.", "tests": "YokoInjectionFindTypeWorldTests.Journal_*; YokoInjectionCompatibilityTests.Journal_*/Stealth_Journal_Properties_Use_The_Last_Real_Matched_Line" }, { "name": "UO.LineTime", "overloads": 1, "status": "reviewed-adaptation", "candidateSources": [ "https://stealth.od.ua/api/LineTime/" ], "sources": [ "https://stealth.od.ua/api/LineTime/" ], "finding": "Decimal — OLE Automation Date, число дней от 30.12.1899, дробная часть задаёт время суток. Без выбора 0. Это не миллисекунды Now() и не целый Unix timestamp. Разность двух таких меток умножается на 86400000 для миллисекунд. Selected fields are captured together; later incoming/recycled entries do not replace them. Current indices are resolved by identity; -1 on eviction. Native behavior was checked in bridge-backed tests.", "tests": "YokoInjectionFindTypeWorldTests.Journal_*; YokoInjectionCompatibilityTests.Journal_*/Stealth_Journal_Properties_Use_The_Last_Real_Matched_Line" }, { "name": "UO.LineType", "overloads": 1, "status": "reviewed-adaptation", "candidateSources": [ "https://stealth.od.ua/api/LineType/" ], "sources": [ "https://stealth.od.ua/api/LineType/" ], "finding": "Actual Classic UO TextType category 0 CLIENT, 1 SYSTEM, 2 OBJECT, 3 GUILD_ALLY. Distinct from packet MessageType and object graphic.", "tests": "YokoInjectionFindTypeWorldTests.Journal_*; YokoInjectionCompatibilityTests.Journal_*/Stealth_Journal_Properties_Use_The_Last_Real_Matched_Line" }, { "name": "UO.LoadHotkeys", "overloads": 1, "status": "pending", "candidateSources": [] }, { "name": "UO.LOSOptions", "overloads": 2, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/LOSOptions/" ] }, { "name": "UO.LowJournal", "overloads": 1, "status": "reviewed-adaptation", "candidateSources": [ "https://stealth.od.ua/api/LowJournal/" ], "sources": [ "https://stealth.od.ua/api/LowJournal/" ], "finding": "Adapted index range to Yoko Journal ordering: lowest index=0 is newest, -1 empty. Must not describe this as oldest in the current client.", "tests": "YokoInjectionFindTypeWorldTests.Journal_*; YokoInjectionCompatibilityTests.Journal_*/Stealth_Journal_Properties_Use_The_Last_Real_Matched_Line" }, { "name": "UO.Luck", "overloads": 1, "status": "reviewed-adaptation", "candidateSources": [ "https://stealth.od.ua/api/Luck/" ], "sources": [ "https://stealth.od.ua/api/Luck/", "https://raw.githubusercontent.com/ServUO/ServUO/pub57/Server/Network/Packets.cs" ], "finding": "Reads current server luck points from own status type >= 4, UInt16 widened to nonnegative Integer through 65535. Not a probability, random value, resistance or loot guarantee. The primary Luck Integer meaning agrees; no local bonus or drop-chance calculation. Own live Player only; missing/destroyed Player yields 0. Exact no-argument aliases, functions and intrinsics verified without packets. Compact packets preserve counters; a new Player starts at zero. Ten authored translations explain units, all supported forms, numbers versus Boolean, full helper parameters/results, three scripts and real Register/Invoke/CharacterStatus/Clear stages. CanCarry/CanAddFollower use extra <= maximum - current to avoid addition overflow. Helpers check the local cache and do not grant server permission. Generated compatibility return metadata now explicitly declares Integer for the reviewed resistance/counter branches. Previously nine UO functions appeared as Any/Variant despite always returning Integer. Gold retains its intentional mixed Integer/Decimal metadata. No argument shapes or dispatch behavior changed.", "tests": "YokoStatusCounterTests: seven packet/formula/boundary tests and one manual-helper test passed. All 28 aliases, functions and intrinsics checked with UInt16/Byte maxima and compact-cache preservation. Complete CanCarry/LuckAtLeast/CanAddFollower definitions extracted from 308 root/locale cards: 17600 live/destroyed helper outcomes for zero limits, overcapacity, negative/large inputs and thresholds. Main/gameplay was not executed. Existing OwnStatusLifetime tests cover missing/destroyed read guards. The last full client suite of 1474 tests passed before these eight new counter tests. This batch preserves runtime dispatch behavior; generated return metadata is corrected separately. YokoApiSymbolIndexTests: ten added signature cases reproduced nine failures and one pre-existing Integer pass. Corrected metadata passed the combined 58 signature/resistance/counter tests. Inventory comparison confirms 1628 unchanged name/parameter shapes and exactly nine Any-to-Integer changes." }, { "name": "UO.MakeFakeItem", "overloads": 6, "status": "pending", "candidateSources": [] }, { "name": "UO.Mana", "overloads": 1, "status": "project-extension", "candidateSources": [ "https://stealth.od.ua/api/Mana/" ], "sources": [ "https://stealth.od.ua/api/GetMana/", "https://stealth.od.ua/api/Mana/" ], "finding": "Integer value of Mana, not a percentage or Boolean. Zero is valid and also means absent data. Only the zero-argument self form is registered; do not pass an object argument. Reads local data without network traffic. Unknown/destroyed mobile returns 0; the server may not provide other mobiles’ values. Zero-argument own Mana/Stamina and their maxima now also reject destroyed Player through the game-thread CurrentPlayer read; object overloads already use World.Get. OwnStatusLifetime tests reproduced stale values, then passed for all affected function/intrinsic aliases without altering live values or sending packets.", "tests": "YokoCharacterQueryTests; Character_Stats_And_Resists_Work_As_Functions_And_Parameters; static RegisterCharacterGetterAliases and concrete bridge field mapping review" }, { "name": "UO.MassMove", "overloads": 6, "status": "pending", "candidateSources": [] }, { "name": "UO.MassPriceMove", "overloads": 4, "status": "pending", "candidateSources": [] }, { "name": "UO.MaxHP", "overloads": 1, "status": "project-extension", "candidateSources": [], "sources": [ "https://stealth.od.ua/api/GetMaxHP/", "https://stealth.od.ua/api/MaxLife/" ], "finding": "Integer value of HitsMax, not a percentage or Boolean. Zero is valid and also means absent data. Only the zero-argument self form is registered; do not pass an object argument. Reads local data without an automatic status request; unlike Stealth GetHP, this client does not request missing stats as a side effect. Missing/destroyed entities return 0. HP fields may contain a relative server scale.", "tests": "YokoCharacterQueryTests; Character_Stats_And_Resists_Work_As_Functions_And_Parameters; static RegisterCharacterGetterAliases and concrete bridge field mapping review" }, { "name": "UO.MaxLife", "overloads": 1, "status": "project-extension", "candidateSources": [ "https://stealth.od.ua/api/MaxLife/" ], "sources": [ "https://stealth.od.ua/api/GetMaxHP/", "https://stealth.od.ua/api/MaxLife/" ], "finding": "Integer value of HitsMax, not a percentage or Boolean. Zero is valid and also means absent data. Only the zero-argument self form is registered; do not pass an object argument. Reads local data without an automatic status request; unlike Stealth GetHP, this client does not request missing stats as a side effect. Missing/destroyed entities return 0. HP fields may contain a relative server scale.", "tests": "YokoCharacterQueryTests; Character_Stats_And_Resists_Work_As_Functions_And_Parameters; static RegisterCharacterGetterAliases and concrete bridge field mapping review" }, { "name": "UO.MaxMana", "overloads": 1, "status": "project-extension", "candidateSources": [ "https://stealth.od.ua/api/MaxMana/" ], "sources": [ "https://stealth.od.ua/api/GetMaxMana/", "https://stealth.od.ua/api/MaxMana/" ], "finding": "Integer value of ManaMax, not a percentage or Boolean. Zero is valid and also means absent data. Only the zero-argument self form is registered; do not pass an object argument. Reads local data without network traffic. Unknown/destroyed mobile returns 0; the server may not provide other mobiles’ values. Zero-argument own Mana/Stamina and their maxima now also reject destroyed Player through the game-thread CurrentPlayer read; object overloads already use World.Get. OwnStatusLifetime tests reproduced stale values, then passed for all affected function/intrinsic aliases without altering live values or sending packets.", "tests": "YokoCharacterQueryTests; Character_Stats_And_Resists_Work_As_Functions_And_Parameters; static RegisterCharacterGetterAliases and concrete bridge field mapping review" }, { "name": "UO.MaxStam", "overloads": 1, "status": "project-extension", "candidateSources": [ "https://stealth.od.ua/api/MaxStam/" ], "sources": [ "https://stealth.od.ua/api/GetMaxStam/", "https://stealth.od.ua/api/MaxStam/" ], "finding": "Integer value of StaminaMax, not a percentage or Boolean. Zero is valid and also means absent data. Only the zero-argument self form is registered; do not pass an object argument. Reads local data without network traffic. Unknown/destroyed mobile returns 0; the server may not provide other mobiles’ values. Zero-argument own Mana/Stamina and their maxima now also reject destroyed Player through the game-thread CurrentPlayer read; object overloads already use World.Get. OwnStatusLifetime tests reproduced stale values, then passed for all affected function/intrinsic aliases without altering live values or sending packets.", "tests": "YokoCharacterQueryTests; Character_Stats_And_Resists_Work_As_Functions_And_Parameters; static RegisterCharacterGetterAliases and concrete bridge field mapping review" }, { "name": "UO.MaxStamina", "overloads": 1, "status": "project-extension", "candidateSources": [], "sources": [ "https://stealth.od.ua/api/GetMaxStam/", "https://stealth.od.ua/api/MaxStam/" ], "finding": "Integer value of StaminaMax, not a percentage or Boolean. Zero is valid and also means absent data. Only the zero-argument self form is registered; do not pass an object argument. Reads local data without network traffic. Unknown/destroyed mobile returns 0; the server may not provide other mobiles’ values. Zero-argument own Mana/Stamina and their maxima now also reject destroyed Player through the game-thread CurrentPlayer read; object overloads already use World.Get. OwnStatusLifetime tests reproduced stale values, then passed for all affected function/intrinsic aliases without altering live values or sending packets.", "tests": "YokoCharacterQueryTests; Character_Stats_And_Resists_Work_As_Functions_And_Parameters; static RegisterCharacterGetterAliases and concrete bridge field mapping review" }, { "name": "UO.MaxWeight", "overloads": 1, "status": "reviewed-adaptation", "candidateSources": [ "https://stealth.od.ua/api/MaxWeight/" ], "sources": [ "https://stealth.od.ua/api/MaxWeight/", "https://raw.githubusercontent.com/ServUO/ServUO/pub57/Server/Network/Packets.cs" ], "finding": "Reads the WeightMax cache. Own status type >= 5 takes the server UInt16 value, even 0. Earlier extended status computes it once: protocol >= 5.0.0a uses 7 * (STR >> 1) + 40, otherwise STR * 4 + 25, stored as UInt16 with wrapping modulo 65536. Odd STR=101 gives 390 versus 429. The getter does not recalculate after an independent STR change. The primary generic 5.0+ formula is refined to the actual threshold and integer operation order. Own live Player only; missing/destroyed Player yields 0. Exact no-argument aliases, functions and intrinsics verified without packets. Compact packets preserve counters; a new Player starts at zero. Ten authored translations explain units, all supported forms, numbers versus Boolean, full helper parameters/results, three scripts and real Register/Invoke/CharacterStatus/Clear stages. CanCarry/CanAddFollower use extra <= maximum - current to avoid addition overflow. Helpers check the local cache and do not grant server permission. Generated compatibility return metadata now explicitly declares Integer for the reviewed resistance/counter branches. Previously nine UO functions appeared as Any/Variant despite always returning Integer. Gold retains its intentional mixed Integer/Decimal metadata. No argument shapes or dispatch behavior changed.", "tests": "YokoStatusCounterTests: seven packet/formula/boundary tests and one manual-helper test passed. All 28 aliases, functions and intrinsics checked with UInt16/Byte maxima and compact-cache preservation. Complete CanCarry/LuckAtLeast/CanAddFollower definitions extracted from 308 root/locale cards: 17600 live/destroyed helper outcomes for zero limits, overcapacity, negative/large inputs and thresholds. Main/gameplay was not executed. Existing OwnStatusLifetime tests cover missing/destroyed read guards. The last full client suite of 1474 tests passed before these eight new counter tests. This batch preserves runtime dispatch behavior; generated return metadata is corrected separately. YokoApiSymbolIndexTests: ten added signature cases reproduced nine failures and one pre-existing Integer pass. Corrected metadata passed the combined 58 signature/resistance/counter tests. Inventory comparison confirms 1628 unchanged name/parameter shapes and exactly nine Any-to-Integer changes." }, { "name": "UO.MenuHookPresent", "overloads": 1, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/MenuHookPresent/" ] }, { "name": "UO.MenuPresent", "overloads": 1, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/MenuPresent/" ] }, { "name": "UO.MFGI", "overloads": 1, "status": "pending", "candidateSources": [] }, { "name": "UO.MobileCanBeRenamed", "overloads": 1, "status": "corrected", "candidateSources": [ "https://stealth.od.ua/api/MobileCanBeRenamed/" ], "sources": [ "https://stealth.od.ua/api/MobileCanBeRenamed/" ], "finding": "Reads Mobile.IsRenamable; does not rename or guarantee a later server response. Destroyed entries return 0.", "tests": "ObjectPredicates_*; bridge/dispatch source review" }, { "name": "UO.Morph", "overloads": 2, "status": "pending", "candidateSources": [] }, { "name": "UO.Mount", "overloads": 2, "status": "pending", "candidateSources": [] }, { "name": "UO.Move", "overloads": 1, "status": "pending", "candidateSources": [] }, { "name": "UO.moveBetweenTwoCorners", "overloads": 2, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/moveBetweenTwoCorners/" ] }, { "name": "UO.MoveBoat", "overloads": 1, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/MoveBoat/" ] }, { "name": "UO.moveCheckStamina", "overloads": 2, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/moveCheckStamina/" ] }, { "name": "UO.moveExitOnDisconnect", "overloads": 2, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/moveExitOnDisconnect/" ] }, { "name": "UO.moveHeuristicMult", "overloads": 2, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/moveHeuristicMult/" ] }, { "name": "UO.MoveItem", "overloads": 8, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/MoveItem/" ] }, { "name": "UO.MoveItems", "overloads": 1, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/MoveItems/" ] }, { "name": "UO.MoveOff", "overloads": 1, "status": "pending", "candidateSources": [] }, { "name": "UO.MoveOn", "overloads": 1, "status": "pending", "candidateSources": [] }, { "name": "UO.moveOpenDoor", "overloads": 2, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/moveOpenDoor/" ] }, { "name": "UO.MoverStop", "overloads": 1, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/MoverStop/" ] }, { "name": "UO.moveThroughCorner", "overloads": 2, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/moveThroughCorner/" ] }, { "name": "UO.moveThroughNPC", "overloads": 2, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/moveThroughNPC/" ] }, { "name": "UO.moveTurnCost", "overloads": 2, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/moveTurnCost/" ] }, { "name": "UO.MoveXY", "overloads": 1, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/MoveXY/" ] }, { "name": "UO.MoveXYZ", "overloads": 5, "status": "reviewed-project-extension", "candidateSources": [ "https://stealth.od.ua/api/MoveXYZ/" ], "sources": [ "https://stealth.od.ua/api/MoveXYZ/" ], "finding": "Both contracts require horizontal and vertical accuracy for arrival. Yoko returns Integer 1/0, accepts 6..10 arguments (optional timeout/maxSteps/avoidMobiles/openDoors), and has no StepCallback overload. Cancellation aborts the procedure. Timeout begins after route acceptance; do not advertise a hard whole-call deadline. Source checked against CompactMoveXYZ and MoveToCanonical.", "tests": "PathArrayTests; YokoInjectionCompatibilityTests; path ownership/world probes" }, { "name": "UO.Moving", "overloads": 1, "status": "pending", "candidateSources": [] }, { "name": "UO.Msg", "overloads": 1, "status": "pending", "candidateSources": [] }, { "name": "UO.Name", "overloads": 1, "status": "pending", "candidateSources": [] }, { "name": "UO.NewMoveXY", "overloads": 9, "status": "reviewed-project-extension", "candidateSources": [ "https://stealth.od.ua/api/newMoveXY/" ], "sources": [ "https://stealth.od.ua/api/newMoveXY/" ], "finding": "Arrival success/failure is Integer 1/0 in Yoko. Unlike the current Stealth documentation, Yoko uses Optimized to select heuristic/lookahead behavior, anchors target Z to starting character Z with default tolerance 255, and accepts a named callback plus bounded movement options. Callback observes changed local positions, not a promise of each server-confirmed step. Corrected the concrete callback bridge to preserve Integer X/Y/Z instead of strings, allowing arithmetic and numeric comparisons. Initial search and replanning now run in game-thread slices (at most 32 expansions and a soft approximately 1 ms budget per invocation); walking waits for the complete route. Explicit timeout includes pending search after acceptance; stopOnStuck ignores active planning but still detects a later movement stall. A complex collision expansion or cold map I/O can exceed the soft budget. Native PluginHost retains its synchronous compatibility mode. No NewMoveXYZ registration exists; explicit height uses MoveXYZ.", "tests": "PathArrayTests; YokoInjectionCompatibilityTests; YokoMovementCallbackTests (7 cases); TypedSubrutineCallsTests; IncrementalMovementTests (3 cases); 22 executed manual calculation checks; 463 initialized-client path checks including 36 sliced A* comparisons with independent Dijkstra, pending cancellation, position correction, denial and dynamic-obstacle replanning" }, { "name": "UO.Notoriety", "overloads": 1, "status": "pending", "candidateSources": [] }, { "name": "UO.NumGumpButton", "overloads": 1, "status": "reviewed-adaptation", "candidateSources": [ "https://stealth.od.ua/api/NumGumpButton/" ], "sources": [ "https://stealth.od.ua/api/NumGumpButton/" ], "finding": "Fixed strict zero-based window selection. Value is actual ButtonID, not control index. SwitchPage changes page locally; Activate replies. Returns Integer 1/0 for local success/missing window or button, not server confirmation.", "tests": "YokoCommandEndToEndTests; Stealth_Gump_Api_Uses_The_Active_ClassicUo_Gumps; YokoIdeRuntimeProbe" }, { "name": "UO.NumGumpCheckBox", "overloads": 1, "status": "reviewed-adaptation", "candidateSources": [ "https://stealth.od.ua/api/NumGumpCheckBox/" ], "sources": [ "https://stealth.od.ua/api/NumGumpCheckBox/" ], "finding": "Fixed strict window index and exact checkbox ID with no ordinal fallback. Returns 1/0 for exact state applied/control absent. Local state is sent on the later gump reply.", "tests": "YokoCommandEndToEndTests; Stealth_Gump_Api_Uses_The_Active_ClassicUo_Gumps; YokoIdeRuntimeProbe" }, { "name": "UO.NumGumpRadiobutton", "overloads": 1, "status": "reviewed-adaptation", "candidateSources": [ "https://stealth.od.ua/api/NumGumpRadiobutton/" ], "sources": [ "https://stealth.od.ua/api/NumGumpRadiobutton/" ], "finding": "Fixed strict window index and exact radio ID with no ordinal fallback. Selecting one clears its group peers. Returns 1/0 for local success/failure.", "tests": "YokoCommandEndToEndTests; Stealth_Gump_Api_Uses_The_Active_ClassicUo_Gumps; YokoIdeRuntimeProbe" }, { "name": "UO.NumGumpTextEntry", "overloads": 1, "status": "reviewed-adaptation", "candidateSources": [ "https://stealth.od.ua/api/NumGumpTextEntry/" ], "sources": [ "https://stealth.od.ua/api/NumGumpTextEntry/" ], "finding": "Fixed strict window index and exact text-entry ID with no ordinal fallback. Returns 1 only if the resulting field text exactly matches the request; normal input limits still apply.", "tests": "YokoCommandEndToEndTests; Stealth_Gump_Api_Uses_The_Active_ClassicUo_Gumps; YokoIdeRuntimeProbe" }, { "name": "UO.ObjAtLayer", "overloads": 2, "status": "corrected-project-extension", "candidateSources": [ "https://stealth.od.ua/api/ObjAtLayer/" ], "sources": [ "https://stealth.od.ua/api/ObjAtLayer/" ], "finding": "Numeric form returns Integer serial; native named-layer string form returns hex String or Integer 0. Numeric layers are validated 1..29 before enum conversion; 257 cannot wrap to layer 1. Unknown named layer raises a script error.", "tests": "ObjectPredicates_*; bridge/dispatch source review" }, { "name": "UO.ObjAtLayerEx", "overloads": 1, "status": "corrected", "candidateSources": [ "https://stealth.od.ua/api/ObjAtLayerEx/" ], "sources": [ "https://stealth.od.ua/api/ObjAtLayerEx/" ], "finding": "Numeric layer and mobile serial return Integer item serial or 0. Invalid layers cannot wrap. Dead cache entries cannot supply equipment; does not open/refresh equipment.", "tests": "ObjectPredicates_*; bridge/dispatch source review" }, { "name": "UO.Online", "overloads": 1, "status": "pending", "candidateSources": [] }, { "name": "UO.OpenContainer", "overloads": 2, "status": "pending", "candidateSources": [] }, { "name": "UO.OpenDoor", "overloads": 1, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/OpenDoor/" ] }, { "name": "UO.OpenIDE", "overloads": 2, "status": "pending", "candidateSources": [] }, { "name": "UO.Paralyzed", "overloads": 2, "status": "reviewed-project-extension", "candidateSources": [ "https://stealth.od.ua/api/Paralyzed/" ], "sources": [ "https://stealth.od.ua/api/Paralyzed/", "https://stealth.od.ua/api/IsParalyzed/" ], "finding": "Paralyzed and the retained state-query aliases share GetLocked/IsParalyzed. Both no-argument self and one-object forms are supported, unlike the split reference API. Returns Integer 1/0; removed false positives for destroyed mobiles; query does not apply or cure paralysis.", "tests": "ObjectPredicates_ParalysisAliasesShareSelfAndExplicitObjectSemantics; ObjectPredicates_MetadataReportsNumericBooleanAndPreservesNamedLayerUnion" }, { "name": "UO.PartyAcceptInvite", "overloads": 1, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/PartyAcceptInvite/" ] }, { "name": "UO.PartyCanLootMe", "overloads": 1, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/PartyCanLootMe/" ] }, { "name": "UO.PartyDeclineInvite", "overloads": 1, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/PartyDeclineInvite/" ] }, { "name": "UO.PartyLeave", "overloads": 1, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/PartyLeave/" ] }, { "name": "UO.PartyMembersList", "overloads": 1, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/PartyMembersList/" ] }, { "name": "UO.PartyPrivateMessageTo", "overloads": 1, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/PartyPrivateMessageTo/" ] }, { "name": "UO.PartySay", "overloads": 1, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/PartySay/" ] }, { "name": "UO.PauseResumeScript", "overloads": 1, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/PauseResumeScript/" ] }, { "name": "UO.PetsCurrent", "overloads": 1, "status": "reviewed-adaptation", "candidateSources": [ "https://stealth.od.ua/api/PetsCurrent/" ], "sources": [ "https://stealth.od.ua/api/PetsCurrent/", "https://raw.githubusercontent.com/ServUO/ServUO/pub57/Server/Network/Packets.cs", "https://stealth.od.ua/forum/viewtopic.php?p=6278" ], "finding": "Reads occupied follower control slots from own status type>=3. Verified packet byte matches Player.Followers, not world-mobile enumeration. A creature may consume multiple slots; owner/taming/summon eligibility is server-defined. Clarifies loose pet-count wording in current primary page using server encoding and historical official slot documentation. Own live Player only; missing/destroyed Player yields 0. Exact no-argument aliases, functions and intrinsics verified without packets. Compact packets preserve counters; a new Player starts at zero. Ten authored translations explain units, all supported forms, numbers versus Boolean, full helper parameters/results, three scripts and real Register/Invoke/CharacterStatus/Clear stages. CanCarry/CanAddFollower use extra <= maximum - current to avoid addition overflow. Helpers check the local cache and do not grant server permission. Generated compatibility return metadata now explicitly declares Integer for the reviewed resistance/counter branches. Previously nine UO functions appeared as Any/Variant despite always returning Integer. Gold retains its intentional mixed Integer/Decimal metadata. No argument shapes or dispatch behavior changed.", "tests": "YokoStatusCounterTests: seven packet/formula/boundary tests and one manual-helper test passed. All 28 aliases, functions and intrinsics checked with UInt16/Byte maxima and compact-cache preservation. Complete CanCarry/LuckAtLeast/CanAddFollower definitions extracted from 308 root/locale cards: 17600 live/destroyed helper outcomes for zero limits, overcapacity, negative/large inputs and thresholds. Main/gameplay was not executed. Existing OwnStatusLifetime tests cover missing/destroyed read guards. The last full client suite of 1474 tests passed before these eight new counter tests. This batch preserves runtime dispatch behavior; generated return metadata is corrected separately. YokoApiSymbolIndexTests: ten added signature cases reproduced nine failures and one pre-existing Integer pass. Corrected metadata passed the combined 58 signature/resistance/counter tests. Inventory comparison confirms 1628 unchanged name/parameter shapes and exactly nine Any-to-Integer changes." }, { "name": "UO.PetsMax", "overloads": 1, "status": "reviewed-adaptation", "candidateSources": [ "https://stealth.od.ua/api/PetsMax/" ], "sources": [ "https://stealth.od.ua/api/PetsMax/", "https://raw.githubusercontent.com/ServUO/ServUO/pub57/Server/Network/Packets.cs", "https://stealth.od.ua/forum/viewtopic.php?p=6278" ], "finding": "Reads total permitted control slots from own status type >= 3, not free capacity. Current can exceed maximum; no clamp in the getter. The capacity helper subtracts current from maximum and rejects insufficient capacity or a zero limit. No pet IDs or creature action. Own live Player only; missing/destroyed Player yields 0. Exact no-argument aliases, functions and intrinsics verified without packets. Compact packets preserve counters; a new Player starts at zero. Ten authored translations explain units, all supported forms, numbers versus Boolean, full helper parameters/results, three scripts and real Register/Invoke/CharacterStatus/Clear stages. CanCarry/CanAddFollower use extra <= maximum - current to avoid addition overflow. Helpers check the local cache and do not grant server permission. Generated compatibility return metadata now explicitly declares Integer for the reviewed resistance/counter branches. Previously nine UO functions appeared as Any/Variant despite always returning Integer. Gold retains its intentional mixed Integer/Decimal metadata. No argument shapes or dispatch behavior changed.", "tests": "YokoStatusCounterTests: seven packet/formula/boundary tests and one manual-helper test passed. All 28 aliases, functions and intrinsics checked with UInt16/Byte maxima and compact-cache preservation. Complete CanCarry/LuckAtLeast/CanAddFollower definitions extracted from 308 root/locale cards: 17600 live/destroyed helper outcomes for zero limits, overcapacity, negative/large inputs and thresholds. Main/gameplay was not executed. Existing OwnStatusLifetime tests cover missing/destroyed read guards. The last full client suite of 1474 tests passed before these eight new counter tests. This batch preserves runtime dispatch behavior; generated return metadata is corrected separately. YokoApiSymbolIndexTests: ten added signature cases reproduced nine failures and one pre-existing Integer pass. Corrected metadata passed the combined 58 signature/resistance/counter tests. Inventory comparison confirms 1628 unchanged name/parameter shapes and exactly nine Any-to-Integer changes." }, { "name": "UO.PhysicalResist", "overloads": 1, "status": "reviewed-adaptation", "candidateSources": [], "sources": [ "https://stealth.od.ua/api/Armor/", "https://raw.githubusercontent.com/ServUO/ServUO/pub57/Server/Network/Packets.cs" ], "finding": "Compared primary Stealth resistance/status meaning with ServUO MobileStatus encoding and the actual CharacterStatus/PlayerMobile fields. PhysicalResistance is signed Int16 widened to BASIC Integer; negative values are preserved, never clamped or converted to unsigned. Own live Player only, missing/destroyed Player zero, no network/status request or equipment calculation. Physical is server armor/status, not a locally computed damage percentage. Elemental fields are populated by status type>=4; there is no independent server-era gate. Older/compact packets retain previous elemental cache, new Player starts zero. Stealth elemental Word/era wording is not imposed on this signed client implementation. Get*/Resist* and bare/UO aliases have verified no-argument function/intrinsic forms. Ten translations describe returns, field availability, complete ResistanceAtLeast helper, three full examples and native reading stages.", "tests": "YokoOwnStatusLifetimeTests cover every field alias and intrinsic, live negative values, missing/destroyed Player and no packets. YokoStatusPacketBoundaryTests: six baseline truncation failures reproduced; fixed body validation now preserves all prior fields/LastStatus, with compact/types1..6 compatibility and other-mobile forms (15 cases); related status suite55 passed. YokoResistanceTests:24 selector cases and506root/locale helper cards with4928 live/destroyed outcomes passed (25 tests total). Full example Main/gameplay is not executed." }, { "name": "UO.Picking", "overloads": 1, "status": "pending", "candidateSources": [] }, { "name": "UO.PlayWav", "overloads": 2, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/PlayWav/" ] }, { "name": "UO.PMove", "overloads": 2, "status": "pending", "candidateSources": [] }, { "name": "UO.Poison", "overloads": 2, "status": "pending", "candidateSources": [] }, { "name": "UO.Poisoned", "overloads": 2, "status": "corrected", "candidateSources": [ "https://stealth.od.ua/api/Poisoned/" ], "sources": [ "https://stealth.od.ua/api/IsPoisoned/", "https://stealth.od.ua/api/Poisoned/" ], "finding": "Integer 1/0 reads protocol-dependent IsPoisoned. Fixed destroyed-mobile lookup. Legacy bit 0x04 versus the separate SA poison field is retained; strength/duration are not returned.", "tests": "YokoCharacterQueryTests.CharacterQueries_StateAliasesSelectSelfOrExplicitObject; CharacterQueries_RejectDestroyedMobileBeforeDictionaryRemoval; CharacterQueries_FlightUsesModernFlagAndRejectsDestroyedMobile; static registration and bridge review" }, { "name": "UO.PoisonResist", "overloads": 1, "status": "reviewed-adaptation", "candidateSources": [ "https://stealth.od.ua/api/PoisonResist/" ], "sources": [ "https://stealth.od.ua/api/PoisonResist/", "https://raw.githubusercontent.com/ServUO/ServUO/pub57/Server/Network/Packets.cs" ], "finding": "Compared primary Stealth resistance/status meaning with ServUO MobileStatus encoding and the actual CharacterStatus/PlayerMobile fields. PoisonResistance is signed Int16 widened to BASIC Integer; negative values are preserved, never clamped or converted to unsigned. Own live Player only, missing/destroyed Player zero, no network/status request or equipment calculation. Physical is server armor/status, not a locally computed damage percentage. Elemental fields are populated by status type>=4; there is no independent server-era gate. Older/compact packets retain previous elemental cache, new Player starts zero. Stealth elemental Word/era wording is not imposed on this signed client implementation. Get*/Resist* and bare/UO aliases have verified no-argument function/intrinsic forms. Ten translations describe returns, field availability, complete ResistanceAtLeast helper, three full examples and native reading stages. Generated compatibility return metadata now explicitly declares Integer for the reviewed resistance/counter branches. Previously nine UO functions appeared as Any/Variant despite always returning Integer. Gold retains its intentional mixed Integer/Decimal metadata. No argument shapes or dispatch behavior changed.", "tests": "YokoOwnStatusLifetimeTests cover every field alias and intrinsic, live negative values, missing/destroyed Player and no packets. YokoStatusPacketBoundaryTests: six baseline truncation failures reproduced; fixed body validation now preserves all prior fields/LastStatus, with compact/types1..6 compatibility and other-mobile forms (15 cases); related status suite55 passed. YokoResistanceTests:24 selector cases and506root/locale helper cards with4928 live/destroyed outcomes passed (25 tests total). Full example Main/gameplay is not executed. YokoApiSymbolIndexTests: ten added signature cases reproduced nine failures and one pre-existing Integer pass. Corrected metadata passed the combined 58 signature/resistance/counter tests. Inventory comparison confirms 1628 unchanged name/parameter shapes and exactly nine Any-to-Integer changes." }, { "name": "UO.PredictedDirection", "overloads": 1, "status": "reviewed-adaptation", "candidateSources": [ "https://stealth.od.ua/api/PredictedDirection/" ], "sources": [ "https://www.stealth.od.ua/api/PredictedDirection/" ], "finding": "Primary documentation describes position/direction after queued steps, not current coordinates. Reproduced and fixed four runtime branches that incorrectly read current position. Optional IPredictedMovementBridge preserves the existing IApiBridge ABI. Classic UO reads Mobile.GetEndPosition on the game thread: last queued Step, else current Player; missing/destroyed Player returns 0. Direction masks Running to 0..7; signed Z remains -128..127. O(1) peek without consuming queue, starting pathfinding, waiting for arrival or sending packets. Legacy external bridges without the new interface keep the documented current-position fallback. Compiled return metadata corrected to Integer. Authored all ten translations with no parameters, numeric versus Boolean distinction, world coordinates/direction mapping, uncertainty, non-atomic calls, three scripts, complete PredictionEquals(expected) helper and actual native read stages.", "tests": "YokoPredictedMovementTests: four regression cases failed before fix and passed afterwards; legacy bridge fallback passed. Added all eight directions with Running, signed Z endpoints and coordinate boundaries. Complete helper extracted and executed from 44 root/locale cards with seven outcomes each: queued match/mismatch, large input, empty-queue match/mismatch, destroyed Player including expected=0. Seven prediction tests and 29 IDE result metadata cases passed together (36/36). No gameplay Main executed; packet capture empty. Broader suites are still required after the newly requested language changes." }, { "name": "UO.PredictedX", "overloads": 1, "status": "reviewed-adaptation", "candidateSources": [ "https://stealth.od.ua/api/PredictedX/" ], "sources": [ "https://www.stealth.od.ua/api/PredictedX/" ], "finding": "Primary documentation describes position/direction after queued steps, not current coordinates. Reproduced and fixed four runtime branches that incorrectly read current position. Optional IPredictedMovementBridge preserves the existing IApiBridge ABI. Classic UO reads Mobile.GetEndPosition on the game thread: last queued Step, else current Player; missing/destroyed Player returns 0. Direction masks Running to 0..7; signed Z remains -128..127. O(1) peek without consuming queue, starting pathfinding, waiting for arrival or sending packets. Legacy external bridges without the new interface keep the documented current-position fallback. Compiled return metadata corrected to Integer. Authored all ten translations with no parameters, numeric versus Boolean distinction, world coordinates/direction mapping, uncertainty, non-atomic calls, three scripts, complete PredictionEquals(expected) helper and actual native read stages.", "tests": "YokoPredictedMovementTests: four regression cases failed before fix and passed afterwards; legacy bridge fallback passed. Added all eight directions with Running, signed Z endpoints and coordinate boundaries. Complete helper extracted and executed from 44 root/locale cards with seven outcomes each: queued match/mismatch, large input, empty-queue match/mismatch, destroyed Player including expected=0. Seven prediction tests and 29 IDE result metadata cases passed together (36/36). No gameplay Main executed; packet capture empty. Broader suites are still required after the newly requested language changes." }, { "name": "UO.PredictedY", "overloads": 1, "status": "reviewed-adaptation", "candidateSources": [ "https://stealth.od.ua/api/PredictedY/" ], "sources": [ "https://www.stealth.od.ua/api/PredictedY/" ], "finding": "Primary documentation describes position/direction after queued steps, not current coordinates. Reproduced and fixed four runtime branches that incorrectly read current position. Optional IPredictedMovementBridge preserves the existing IApiBridge ABI. Classic UO reads Mobile.GetEndPosition on the game thread: last queued Step, else current Player; missing/destroyed Player returns 0. Direction masks Running to 0..7; signed Z remains -128..127. O(1) peek without consuming queue, starting pathfinding, waiting for arrival or sending packets. Legacy external bridges without the new interface keep the documented current-position fallback. Compiled return metadata corrected to Integer. Authored all ten translations with no parameters, numeric versus Boolean distinction, world coordinates/direction mapping, uncertainty, non-atomic calls, three scripts, complete PredictionEquals(expected) helper and actual native read stages.", "tests": "YokoPredictedMovementTests: four regression cases failed before fix and passed afterwards; legacy bridge fallback passed. Added all eight directions with Running, signed Z endpoints and coordinate boundaries. Complete helper extracted and executed from 44 root/locale cards with seven outcomes each: queued match/mismatch, large input, empty-queue match/mismatch, destroyed Player including expected=0. Seven prediction tests and 29 IDE result metadata cases passed together (36/36). No gameplay Main executed; packet capture empty. Broader suites are still required after the newly requested language changes." }, { "name": "UO.PredictedZ", "overloads": 1, "status": "reviewed-adaptation", "candidateSources": [ "https://stealth.od.ua/api/PredictedZ/" ], "sources": [ "https://www.stealth.od.ua/api/PredictedZ/" ], "finding": "Primary documentation describes position/direction after queued steps, not current coordinates. Reproduced and fixed four runtime branches that incorrectly read current position. Optional IPredictedMovementBridge preserves the existing IApiBridge ABI. Classic UO reads Mobile.GetEndPosition on the game thread: last queued Step, else current Player; missing/destroyed Player returns 0. Direction masks Running to 0..7; signed Z remains -128..127. O(1) peek without consuming queue, starting pathfinding, waiting for arrival or sending packets. Legacy external bridges without the new interface keep the documented current-position fallback. Compiled return metadata corrected to Integer. Authored all ten translations with no parameters, numeric versus Boolean distinction, world coordinates/direction mapping, uncertainty, non-atomic calls, three scripts, complete PredictionEquals(expected) helper and actual native read stages.", "tests": "YokoPredictedMovementTests: four regression cases failed before fix and passed afterwards; legacy bridge fallback passed. Added all eight directions with Running, signed Z endpoints and coordinate boundaries. Complete helper extracted and executed from 44 root/locale cards with seven outcomes each: queued match/mismatch, large input, empty-queue match/mismatch, destroyed Player including expected=0. Seven prediction tests and 29 IDE result metadata cases passed together (36/36). No gameplay Main executed; packet capture empty. Broader suites are still required after the newly requested language changes." }, { "name": "UO.Press", "overloads": 3, "status": "pending", "candidateSources": [] }, { "name": "UO.Print", "overloads": 2, "status": "pending", "candidateSources": [] }, { "name": "UO.PrivateGetTile", "overloads": 1, "status": "pending", "candidateSources": [] }, { "name": "UO.ProfileName", "overloads": 1, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/ProfileName/" ] }, { "name": "UO.ProfileShardName", "overloads": 1, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/ProfileShardName/" ] }, { "name": "UO.ProxyIP", "overloads": 1, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/ProxyIP/" ] }, { "name": "UO.ProxyPort", "overloads": 1, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/ProxyPort/" ] }, { "name": "UO.QuestRequest", "overloads": 1, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/QuestRequest/" ] }, { "name": "UO.Race", "overloads": 1, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/Race/" ] }, { "name": "UO.Random", "overloads": 2, "status": "pending", "candidateSources": [] }, { "name": "UO.RClick", "overloads": 1, "status": "pending", "candidateSources": [] }, { "name": "UO.RDblClick", "overloads": 1, "status": "pending", "candidateSources": [] }, { "name": "UO.ReadStaticsXY", "overloads": 1, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/ReadStaticsXY/" ] }, { "name": "UO.Recall", "overloads": 2, "status": "pending", "candidateSources": [] }, { "name": "UO.ReceiveObjectName", "overloads": 2, "status": "pending", "candidateSources": [] }, { "name": "UO.RemoveEarrings", "overloads": 1, "status": "pending", "candidateSources": [] }, { "name": "UO.RemoveFigure", "overloads": 1, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/RemoveFigure/" ] }, { "name": "UO.RemoveFromParty", "overloads": 1, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/RemoveFromParty/" ] }, { "name": "UO.RemoveHat", "overloads": 1, "status": "pending", "candidateSources": [] }, { "name": "UO.RemoveNeckless", "overloads": 1, "status": "pending", "candidateSources": [] }, { "name": "UO.RemoveRing", "overloads": 1, "status": "pending", "candidateSources": [] }, { "name": "UO.RemoveUserStatic", "overloads": 1, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/RemoveUserStatic/" ] }, { "name": "UO.Rename", "overloads": 1, "status": "pending", "candidateSources": [] }, { "name": "UO.RenameMobile", "overloads": 1, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/RenameMobile/" ] }, { "name": "UO.ReqProfile", "overloads": 2, "status": "pending", "candidateSources": [] }, { "name": "UO.RequestContextMenu", "overloads": 1, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/RequestContextMenu/" ] }, { "name": "UO.RequestStats", "overloads": 1, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/RequestStats/" ] }, { "name": "UO.ReqVirtuesGump", "overloads": 1, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/ReqVirtuesGump/" ] }, { "name": "UO.Resend", "overloads": 1, "status": "pending", "candidateSources": [] }, { "name": "UO.ResetProfile", "overloads": 1, "status": "pending", "candidateSources": [] }, { "name": "UO.ResistCold", "overloads": 1, "status": "reviewed-adaptation", "candidateSources": [], "sources": [ "https://stealth.od.ua/api/ColdResist/", "https://raw.githubusercontent.com/ServUO/ServUO/pub57/Server/Network/Packets.cs" ], "finding": "Compared primary Stealth resistance/status meaning with ServUO MobileStatus encoding and the actual CharacterStatus/PlayerMobile fields. ColdResistance is signed Int16 widened to BASIC Integer; negative values are preserved, never clamped or converted to unsigned. Own live Player only, missing/destroyed Player zero, no network/status request or equipment calculation. Physical is server armor/status, not a locally computed damage percentage. Elemental fields are populated by status type>=4; there is no independent server-era gate. Older/compact packets retain previous elemental cache, new Player starts zero. Stealth elemental Word/era wording is not imposed on this signed client implementation. Get*/Resist* and bare/UO aliases have verified no-argument function/intrinsic forms. Ten translations describe returns, field availability, complete ResistanceAtLeast helper, three full examples and native reading stages.", "tests": "YokoOwnStatusLifetimeTests cover every field alias and intrinsic, live negative values, missing/destroyed Player and no packets. YokoStatusPacketBoundaryTests: six baseline truncation failures reproduced; fixed body validation now preserves all prior fields/LastStatus, with compact/types1..6 compatibility and other-mobile forms (15 cases); related status suite55 passed. YokoResistanceTests:24 selector cases and506root/locale helper cards with4928 live/destroyed outcomes passed (25 tests total). Full example Main/gameplay is not executed." }, { "name": "UO.ResistEnergy", "overloads": 1, "status": "reviewed-adaptation", "candidateSources": [], "sources": [ "https://stealth.od.ua/api/EnergyResist/", "https://raw.githubusercontent.com/ServUO/ServUO/pub57/Server/Network/Packets.cs" ], "finding": "Compared primary Stealth resistance/status meaning with ServUO MobileStatus encoding and the actual CharacterStatus/PlayerMobile fields. EnergyResistance is signed Int16 widened to BASIC Integer; negative values are preserved, never clamped or converted to unsigned. Own live Player only, missing/destroyed Player zero, no network/status request or equipment calculation. Physical is server armor/status, not a locally computed damage percentage. Elemental fields are populated by status type>=4; there is no independent server-era gate. Older/compact packets retain previous elemental cache, new Player starts zero. Stealth elemental Word/era wording is not imposed on this signed client implementation. Get*/Resist* and bare/UO aliases have verified no-argument function/intrinsic forms. Ten translations describe returns, field availability, complete ResistanceAtLeast helper, three full examples and native reading stages.", "tests": "YokoOwnStatusLifetimeTests cover every field alias and intrinsic, live negative values, missing/destroyed Player and no packets. YokoStatusPacketBoundaryTests: six baseline truncation failures reproduced; fixed body validation now preserves all prior fields/LastStatus, with compact/types1..6 compatibility and other-mobile forms (15 cases); related status suite55 passed. YokoResistanceTests:24 selector cases and506root/locale helper cards with4928 live/destroyed outcomes passed (25 tests total). Full example Main/gameplay is not executed." }, { "name": "UO.ResistFire", "overloads": 1, "status": "reviewed-adaptation", "candidateSources": [], "sources": [ "https://stealth.od.ua/api/FireResist/", "https://raw.githubusercontent.com/ServUO/ServUO/pub57/Server/Network/Packets.cs" ], "finding": "Compared primary Stealth resistance/status meaning with ServUO MobileStatus encoding and the actual CharacterStatus/PlayerMobile fields. FireResistance is signed Int16 widened to BASIC Integer; negative values are preserved, never clamped or converted to unsigned. Own live Player only, missing/destroyed Player zero, no network/status request or equipment calculation. Physical is server armor/status, not a locally computed damage percentage. Elemental fields are populated by status type>=4; there is no independent server-era gate. Older/compact packets retain previous elemental cache, new Player starts zero. Stealth elemental Word/era wording is not imposed on this signed client implementation. Get*/Resist* and bare/UO aliases have verified no-argument function/intrinsic forms. Ten translations describe returns, field availability, complete ResistanceAtLeast helper, three full examples and native reading stages.", "tests": "YokoOwnStatusLifetimeTests cover every field alias and intrinsic, live negative values, missing/destroyed Player and no packets. YokoStatusPacketBoundaryTests: six baseline truncation failures reproduced; fixed body validation now preserves all prior fields/LastStatus, with compact/types1..6 compatibility and other-mobile forms (15 cases); related status suite55 passed. YokoResistanceTests:24 selector cases and506root/locale helper cards with4928 live/destroyed outcomes passed (25 tests total). Full example Main/gameplay is not executed." }, { "name": "UO.ResistPhysical", "overloads": 1, "status": "reviewed-adaptation", "candidateSources": [], "sources": [ "https://stealth.od.ua/api/Armor/", "https://raw.githubusercontent.com/ServUO/ServUO/pub57/Server/Network/Packets.cs" ], "finding": "Compared primary Stealth resistance/status meaning with ServUO MobileStatus encoding and the actual CharacterStatus/PlayerMobile fields. PhysicalResistance is signed Int16 widened to BASIC Integer; negative values are preserved, never clamped or converted to unsigned. Own live Player only, missing/destroyed Player zero, no network/status request or equipment calculation. Physical is server armor/status, not a locally computed damage percentage. Elemental fields are populated by status type>=4; there is no independent server-era gate. Older/compact packets retain previous elemental cache, new Player starts zero. Stealth elemental Word/era wording is not imposed on this signed client implementation. Get*/Resist* and bare/UO aliases have verified no-argument function/intrinsic forms. Ten translations describe returns, field availability, complete ResistanceAtLeast helper, three full examples and native reading stages.", "tests": "YokoOwnStatusLifetimeTests cover every field alias and intrinsic, live negative values, missing/destroyed Player and no packets. YokoStatusPacketBoundaryTests: six baseline truncation failures reproduced; fixed body validation now preserves all prior fields/LastStatus, with compact/types1..6 compatibility and other-mobile forms (15 cases); related status suite55 passed. YokoResistanceTests:24 selector cases and506root/locale helper cards with4928 live/destroyed outcomes passed (25 tests total). Full example Main/gameplay is not executed." }, { "name": "UO.ResistPoison", "overloads": 1, "status": "reviewed-adaptation", "candidateSources": [], "sources": [ "https://stealth.od.ua/api/PoisonResist/", "https://raw.githubusercontent.com/ServUO/ServUO/pub57/Server/Network/Packets.cs" ], "finding": "Compared primary Stealth resistance/status meaning with ServUO MobileStatus encoding and the actual CharacterStatus/PlayerMobile fields. PoisonResistance is signed Int16 widened to BASIC Integer; negative values are preserved, never clamped or converted to unsigned. Own live Player only, missing/destroyed Player zero, no network/status request or equipment calculation. Physical is server armor/status, not a locally computed damage percentage. Elemental fields are populated by status type>=4; there is no independent server-era gate. Older/compact packets retain previous elemental cache, new Player starts zero. Stealth elemental Word/era wording is not imposed on this signed client implementation. Get*/Resist* and bare/UO aliases have verified no-argument function/intrinsic forms. Ten translations describe returns, field availability, complete ResistanceAtLeast helper, three full examples and native reading stages.", "tests": "YokoOwnStatusLifetimeTests cover every field alias and intrinsic, live negative values, missing/destroyed Player and no packets. YokoStatusPacketBoundaryTests: six baseline truncation failures reproduced; fixed body validation now preserves all prior fields/LastStatus, with compact/types1..6 compatibility and other-mobile forms (15 cases); related status suite55 passed. YokoResistanceTests:24 selector cases and506root/locale helper cards with4928 live/destroyed outcomes passed (25 tests total). Full example Main/gameplay is not executed." }, { "name": "UO.Salute", "overloads": 1, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/Salute/" ] }, { "name": "UO.SaveConfig", "overloads": 1, "status": "pending", "candidateSources": [] }, { "name": "UO.SaveHotkeys", "overloads": 1, "status": "pending", "candidateSources": [] }, { "name": "UO.Say", "overloads": 1, "status": "pending", "candidateSources": [] }, { "name": "UO.SayU", "overloads": 1, "status": "pending", "candidateSources": [] }, { "name": "UO.ScanInt", "overloads": 1, "status": "pending", "candidateSources": [] }, { "name": "UO.SelectGump", "overloads": 1, "status": "pending", "candidateSources": [] }, { "name": "UO.SelectIgnoreList", "overloads": 1, "status": "pending", "candidateSources": [] }, { "name": "UO.Self", "overloads": 1, "status": "reviewed-project-extension", "candidateSources": [ "https://stealth.od.ua/api/Self/" ], "sources": [ "https://stealth.od.ua/api/Self/" ], "finding": "Compared the primary serial/zero contract with the exact zero-argument BASIC registration and concrete bridge. Self reads the current Player serial; Backpack finds a non-destroyed item on its Backpack layer. Missing or destroyed Player yields zero; missing/destroyed bag yields zero. Present dead/ghost Player keeps its ID. These are local-world queries, not socket-connectivity or server-permission probes. All 32 bits are retained. The return is Integer, not Boolean/type/layer/count. Quoted self in transfer destinations is distinct from UO.Self(). Intrinsics are evaluated on each unshadowed read. Ten locale cards contain three scripts, all parameters (none), snapshots/change caveats and full IsOwnSerial helper plus concrete internal stages.", "tests": "OwnIdentity 5 cases: live function/intrinsic agreement, Integer kind, absent Player, destroyed Player, destroyed/missing backpack, no network side effect. Baseline had 2 failures/3 passes; after bridge fix all 5 passed. Full manual parser verified 9758 examples, 37354 direct calls, 286 pure calculations with zero errors; these do not execute gameplay." }, { "name": "UO.Sell", "overloads": 3, "status": "pending", "candidateSources": [] }, { "name": "UO.SendGumpSelect", "overloads": 5, "status": "pending", "candidateSources": [] }, { "name": "UO.SendShopReply", "overloads": 1, "status": "pending", "candidateSources": [] }, { "name": "UO.ServerPrint", "overloads": 1, "status": "pending", "candidateSources": [] }, { "name": "UO.Set", "overloads": 2, "status": "pending", "candidateSources": [] }, { "name": "UO.SetARExtParams", "overloads": 4, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/SetARExtParams/" ] }, { "name": "UO.SetArm", "overloads": 1, "status": "pending", "candidateSources": [] }, { "name": "UO.SetARStatus", "overloads": 1, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/SetARStatus/" ] }, { "name": "UO.SetAutoBuyDelay", "overloads": 1, "status": "reviewed-adaptation", "candidateSources": [ "https://stealth.od.ua/api/SetAutoBuyDelay/" ], "sources": [ "https://stealth.od.ua/api/SetAutoBuyDelay/" ], "finding": "Unit; profile setting clamped to 0..65535 milliseconds and saved. Delay schedules the next allowed automatic operation after a sent request. Previously scheduled deadline is not recalculated.", "tests": "Auto_Trade_Delay_Getter_Uses_Current_Profile_Value_Including_Zero" }, { "name": "UO.SetAutoSellDelay", "overloads": 1, "status": "reviewed-adaptation", "candidateSources": [ "https://stealth.od.ua/api/SetAutoSellDelay/" ], "sources": [ "https://stealth.od.ua/api/SetAutoSellDelay/" ], "finding": "Unit; profile setting clamped to 0..65535 milliseconds and saved. Delay schedules the next allowed automatic operation after a sent request. Previously scheduled deadline is not recalculated.", "tests": "Auto_Trade_Delay_Getter_Uses_Current_Profile_Value_Including_Zero" }, { "name": "UO.SetBadLocation", "overloads": 1, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/SetBadLocation/" ] }, { "name": "UO.SetBadObject", "overloads": 1, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/SetBadObject/" ] }, { "name": "UO.SetCatchBag", "overloads": 2, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/SetCatchBag/" ] }, { "name": "UO.SetContextMenuHook", "overloads": 1, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/SetContextMenuHook/" ] }, { "name": "UO.SetDefault", "overloads": 1, "status": "pending", "candidateSources": [] }, { "name": "UO.SetDress", "overloads": 2, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/SetDress/" ] }, { "name": "UO.SetDressSpeed", "overloads": 1, "status": "pending", "candidateSources": [] }, { "name": "UO.SetEasyUO", "overloads": 1, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/SetEasyUO/" ] }, { "name": "UO.SetEvent", "overloads": 3, "status": "pending", "candidateSources": [] }, { "name": "UO.SetEventProc", "overloads": 1, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/SetEventProc/" ] }, { "name": "UO.SetGlobal", "overloads": 4, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/SetGlobal/" ] }, { "name": "UO.SetGump", "overloads": 2, "status": "pending", "candidateSources": [] }, { "name": "UO.SetJournalLine", "overloads": 3, "status": "reviewed-adaptation", "candidateSources": [ "https://stealth.od.ua/api/SetJournalLine/" ], "sources": [ "https://stealth.od.ua/api/SetJournalLine/" ], "finding": "Two arguments replace in-memory text at newest-relative index; invalid index ignored. One-argument legacy extension skips N oldest buffered records during search; unlike stable time boundaries this offset shifts on eviction. Snapshot selection is not rewritten by text replacement.", "tests": "YokoInjectionFindTypeWorldTests.Journal_*; YokoInjectionCompatibilityTests.Journal_*/Stealth_Journal_Properties_Use_The_Last_Real_Matched_Line" }, { "name": "UO.SetMulPath", "overloads": 1, "status": "pending", "candidateSources": [] }, { "name": "UO.SetPauseScriptOnDisconnectStatus", "overloads": 1, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/SetPauseScriptOnDisconnectStatus/" ] }, { "name": "UO.SetRec", "overloads": 1, "status": "pending", "candidateSources": [] }, { "name": "UO.SetReceivingContainer", "overloads": 3, "status": "pending", "candidateSources": [] }, { "name": "UO.SetRunMountTimer", "overloads": 1, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/SetRunMountTimer/" ] }, { "name": "UO.SetRunUnmountTimer", "overloads": 1, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/SetRunUnmountTimer/" ] }, { "name": "UO.SetScriptName", "overloads": 1, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/SetScriptName/" ] }, { "name": "UO.SetSeason", "overloads": 1, "status": "pending", "candidateSources": [] }, { "name": "UO.SetShowZ", "overloads": 1, "status": "pending", "candidateSources": [] }, { "name": "UO.SetSilentMode", "overloads": 1, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/SetSilentMode/" ] }, { "name": "UO.SetSkillLockState", "overloads": 1, "status": "reviewed-project-extension", "candidateSources": [ "https://stealth.od.ua/api/SetSkillLockState/" ], "sources": [ "https://stealth.od.ua/api/SetSkillLockState/" ], "finding": "Matches base/effective/cap point meanings and 0/1/2 lock codes from the primary reference. Project supports both client-data names and strict decimal zero-based indices in skill selectors. Fixed-point tenths convert directly to Double; numeric index N cannot select N-1 or fall back to a name. Unknown skill reads value 0 or lock -1, including absent player. Stat index 0/1/2 means STR/DEX/INT; invalid stat reads -1, absent-player valid stat defaults to 0. Queries send no packets. Setters return Unit, send one packet and update the local lock; no server acknowledgement is inferred. Invalid indices/modes and absent player are ignored. Unlike the reference journal diagnostic for unknown skill names, this project silently ignores that case. Metadata uses Decimal for point getters and Integer for mode getters; SkillVal/BaseVal legacy scale is separate.", "tests": "YokoSkillQueryTests: 23 cases, 9 fixed-point boundaries with direct equality, invalid numeric/name selectors, three modes, exact skill/stat packets, all four setter aliases, absent player, and compiled result metadata. Baseline red defects retained in release-52013-skills-before.log." }, { "name": "UO.SetStatLockState", "overloads": 1, "status": "reviewed-project-extension", "candidateSources": [ "https://stealth.od.ua/api/SetStatLockState/" ], "sources": [ "https://stealth.od.ua/api/SetStatLockState/" ], "finding": "Matches base/effective/cap point meanings and 0/1/2 lock codes from the primary reference. Project supports both client-data names and strict decimal zero-based indices in skill selectors. Fixed-point tenths convert directly to Double; numeric index N cannot select N-1 or fall back to a name. Unknown skill reads value 0 or lock -1, including absent player. Stat index 0/1/2 means STR/DEX/INT; invalid stat reads -1, absent-player valid stat defaults to 0. Queries send no packets. Setters return Unit, send one packet and update the local lock; no server acknowledgement is inferred. Invalid indices/modes and absent player are ignored. Unlike the reference journal diagnostic for unknown skill names, this project silently ignores that case. Metadata uses Decimal for point getters and Integer for mode getters; SkillVal/BaseVal legacy scale is separate.", "tests": "YokoSkillQueryTests: 23 cases, 9 fixed-point boundaries with direct equality, invalid numeric/name selectors, three modes, exact skill/stat packets, all four setter aliases, absent player, and compiled result metadata. Baseline red defects retained in release-52013-skills-before.log." }, { "name": "UO.SetStatState", "overloads": 1, "status": "reviewed-project-extension", "candidateSources": [ "https://stealth.od.ua/api/SetStatState/" ], "sources": [ "https://stealth.od.ua/api/SetStatLockState/" ], "finding": "Matches base/effective/cap point meanings and 0/1/2 lock codes from the primary reference. Project supports both client-data names and strict decimal zero-based indices in skill selectors. Fixed-point tenths convert directly to Double; numeric index N cannot select N-1 or fall back to a name. Unknown skill reads value 0 or lock -1, including absent player. Stat index 0/1/2 means STR/DEX/INT; invalid stat reads -1, absent-player valid stat defaults to 0. Queries send no packets. Setters return Unit, send one packet and update the local lock; no server acknowledgement is inferred. Invalid indices/modes and absent player are ignored. Unlike the reference journal diagnostic for unknown skill names, this project silently ignores that case. Metadata uses Decimal for point getters and Integer for mode getters; SkillVal/BaseVal legacy scale is separate.", "tests": "YokoSkillQueryTests: 23 cases, 9 fixed-point boundaries with direct equality, invalid numeric/name selectors, three modes, exact skill/stat packets, all four setter aliases, absent player, and compiled result metadata. Baseline red defects retained in release-52013-skills-before.log." }, { "name": "UO.SetWalkMountTimer", "overloads": 1, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/SetWalkMountTimer/" ] }, { "name": "UO.SetWalkUnmountTimer", "overloads": 1, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/SetWalkUnmountTimer/" ] }, { "name": "UO.SetWarMode", "overloads": 1, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/SetWarMode/" ] }, { "name": "UO.Sex", "overloads": 1, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/Sex/" ] }, { "name": "UO.ShardName", "overloads": 1, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/ShardName/" ] }, { "name": "UO.ShardPath", "overloads": 1, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/ShardPath/" ] }, { "name": "UO.Shop", "overloads": 1, "status": "pending", "candidateSources": [] }, { "name": "UO.ShowJournal", "overloads": 1, "status": "pending", "candidateSources": [] }, { "name": "UO.ShutdownWindows", "overloads": 1, "status": "pending", "candidateSources": [] }, { "name": "UO.SkillLockState", "overloads": 1, "status": "reviewed-project-extension", "candidateSources": [ "https://stealth.od.ua/api/SkillLockState/" ], "sources": [ "https://stealth.od.ua/api/SetSkillLockState/" ], "finding": "Matches base/effective/cap point meanings and 0/1/2 lock codes from the primary reference. Project supports both client-data names and strict decimal zero-based indices in skill selectors. Fixed-point tenths convert directly to Double; numeric index N cannot select N-1 or fall back to a name. Unknown skill reads value 0 or lock -1, including absent player. Stat index 0/1/2 means STR/DEX/INT; invalid stat reads -1, absent-player valid stat defaults to 0. Queries send no packets. Setters return Unit, send one packet and update the local lock; no server acknowledgement is inferred. Invalid indices/modes and absent player are ignored. Unlike the reference journal diagnostic for unknown skill names, this project silently ignores that case. Metadata uses Decimal for point getters and Integer for mode getters; SkillVal/BaseVal legacy scale is separate.", "tests": "YokoSkillQueryTests: 23 cases, 9 fixed-point boundaries with direct equality, invalid numeric/name selectors, three modes, exact skill/stat packets, all four setter aliases, absent player, and compiled result metadata. Baseline red defects retained in release-52013-skills-before.log." }, { "name": "UO.SkillVal", "overloads": 2, "status": "pending", "candidateSources": [] }, { "name": "UO.Snap", "overloads": 4, "status": "pending", "candidateSources": [] }, { "name": "UO.Snoop", "overloads": 2, "status": "pending", "candidateSources": [] }, { "name": "UO.Sound", "overloads": 1, "status": "pending", "candidateSources": [] }, { "name": "UO.Specmove", "overloads": 2, "status": "pending", "candidateSources": [] }, { "name": "UO.Stam", "overloads": 1, "status": "project-extension", "candidateSources": [ "https://stealth.od.ua/api/Stam/" ], "sources": [ "https://stealth.od.ua/api/GetStam/", "https://stealth.od.ua/api/Stam/" ], "finding": "Integer value of Stamina, not a percentage or Boolean. Zero is valid and also means absent data. Only the zero-argument self form is registered; do not pass an object argument. Reads local data without network traffic. Unknown/destroyed mobile returns 0; the server may not provide other mobiles’ values. Zero-argument own Mana/Stamina and their maxima now also reject destroyed Player through the game-thread CurrentPlayer read; object overloads already use World.Get. OwnStatusLifetime tests reproduced stale values, then passed for all affected function/intrinsic aliases without altering live values or sending packets.", "tests": "YokoCharacterQueryTests; Character_Stats_And_Resists_Work_As_Functions_And_Parameters; static RegisterCharacterGetterAliases and concrete bridge field mapping review" }, { "name": "UO.Stamina", "overloads": 1, "status": "project-extension", "candidateSources": [], "sources": [ "https://stealth.od.ua/api/GetStam/", "https://stealth.od.ua/api/Stam/" ], "finding": "Integer value of Stamina, not a percentage or Boolean. Zero is valid and also means absent data. Only the zero-argument self form is registered; do not pass an object argument. Reads local data without network traffic. Unknown/destroyed mobile returns 0; the server may not provide other mobiles’ values. Zero-argument own Mana/Stamina and their maxima now also reject destroyed Player through the game-thread CurrentPlayer read; object overloads already use World.Get. OwnStatusLifetime tests reproduced stale values, then passed for all affected function/intrinsic aliases without altering live values or sending packets.", "tests": "YokoCharacterQueryTests; Character_Stats_And_Resists_Work_As_Functions_And_Parameters; static RegisterCharacterGetterAliases and concrete bridge field mapping review" }, { "name": "UO.StartScript", "overloads": 1, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/StartScript/" ] }, { "name": "UO.StealthCnt", "overloads": 1, "status": "pending", "candidateSources": [] }, { "name": "UO.StealthInfo", "overloads": 1, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/StealthInfo/" ] }, { "name": "UO.StealthPath", "overloads": 1, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/StealthPath/" ] }, { "name": "UO.StealthProfilePath", "overloads": 1, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/StealthProfilePath/" ] }, { "name": "UO.Step", "overloads": 1, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/Step/" ] }, { "name": "UO.StepQ", "overloads": 4, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/StepQ/" ] }, { "name": "UO.StopAllScripts", "overloads": 1, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/StopAllScripts/" ] }, { "name": "UO.StopBoat", "overloads": 1, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/StopBoat/" ] }, { "name": "UO.StopScript", "overloads": 1, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/StopScript/" ] }, { "name": "UO.Str", "overloads": 1, "status": "reviewed-project-extension", "candidateSources": [ "https://stealth.od.ua/api/Str/" ], "sources": [ "https://stealth.od.ua/api/Str/", "https://stealth.od.ua/api/GetStr/" ], "finding": "Strength current points, Integer, from the actual PlayerMobile field (ushort), zero for missing/destroyed Player. Compared current primary Stealth own/ObjID contracts with RegisterCharacterGetterAliases, ExecuteStealthCompatibility, numeric conversion and concrete bridge. Only GetStr/GetInt/GetDex have ObjID overloads; other names here are zero-argument. The object overload only has own-character data: foreign serial returns zero, even for another loaded mobile. This project limitation is explicitly documented rather than guessing values or claiming a remote status request. No network packet or built-in delay. Bare Int(value) and Str(value) are distinct BASIC operations and their mixed cards were not replaced by these attribute-only contracts. Unshadowed intrinsics are fresh reads. Numeric attribute results are not Boolean; the complete AttributeAtLeast helper returns comparison 1/0. Ten translations contain exact arguments, return meaning, coercion, native stages, three diverse complete examples, and a fourth serial/alias example for object overloads.", "tests": "YokoAttributeTests: 13 cases passed. All attribute aliases/functions/intrinsics and six object forms (bare/UO GetStr/GetInt/GetDex), current update, 65535, missing/destroyed Player, foreign item/unknown serial, numeric/hex/self/AddObject names, no packets, and mixed BASIC Int/Str behavior. Six destroyed-player regressions reproduced before the fix. Complete helpers extracted from all 242 root/locale cards executed at 0,79,80,81,65535 and with a destroyed Player (1452 assertions of helper results), with no gameplay Main execution. Reviewed IDE result-kind cases passed." }, { "name": "UO.Strength", "overloads": 1, "status": "reviewed-project-extension", "candidateSources": [], "sources": [ "https://stealth.od.ua/api/Str/", "https://stealth.od.ua/api/GetStr/" ], "finding": "Strength current points, Integer, from the actual PlayerMobile field (ushort), zero for missing/destroyed Player. Compared current primary Stealth own/ObjID contracts with RegisterCharacterGetterAliases, ExecuteStealthCompatibility, numeric conversion and concrete bridge. Only GetStr/GetInt/GetDex have ObjID overloads; other names here are zero-argument. The object overload only has own-character data: foreign serial returns zero, even for another loaded mobile. This project limitation is explicitly documented rather than guessing values or claiming a remote status request. No network packet or built-in delay. Bare Int(value) and Str(value) are distinct BASIC operations and their mixed cards were not replaced by these attribute-only contracts. Unshadowed intrinsics are fresh reads. Numeric attribute results are not Boolean; the complete AttributeAtLeast helper returns comparison 1/0. Ten translations contain exact arguments, return meaning, coercion, native stages, three diverse complete examples, and a fourth serial/alias example for object overloads.", "tests": "YokoAttributeTests: 13 cases passed. All attribute aliases/functions/intrinsics and six object forms (bare/UO GetStr/GetInt/GetDex), current update, 65535, missing/destroyed Player, foreign item/unknown serial, numeric/hex/self/AddObject names, no packets, and mixed BASIC Int/Str behavior. Six destroyed-player regressions reproduced before the fix. Complete helpers extracted from all 242 root/locale cards executed at 0,79,80,81,65535 and with a destroyed Player (1452 assertions of helper results), with no gameplay Main execution. Reviewed IDE result-kind cases passed." }, { "name": "UO.SubExists", "overloads": 1, "status": "pending", "candidateSources": [] }, { "name": "UO.Target", "overloads": 4, "status": "pending", "candidateSources": [] }, { "name": "UO.TargetByResource", "overloads": 1, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/TargetByResource/" ] }, { "name": "UO.TargetID", "overloads": 1, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/TargetID/" ] }, { "name": "UO.Targeting", "overloads": 1, "status": "pending", "candidateSources": [] }, { "name": "UO.TargetPresent", "overloads": 1, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/TargetPresent/" ] }, { "name": "UO.TargetToObject", "overloads": 1, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/TargetToObject/" ] }, { "name": "UO.TargetToTile", "overloads": 1, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/TargetToTile/" ] }, { "name": "UO.TargetToXYZ", "overloads": 1, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/TargetToXYZ/" ] }, { "name": "UO.Terminate", "overloads": 2, "status": "pending", "candidateSources": [] }, { "name": "UO.TerminateAll", "overloads": 1, "status": "pending", "candidateSources": [] }, { "name": "UO.TextClear", "overloads": 1, "status": "pending", "candidateSources": [] }, { "name": "UO.TextClose", "overloads": 1, "status": "pending", "candidateSources": [] }, { "name": "UO.TextOpen", "overloads": 1, "status": "pending", "candidateSources": [] }, { "name": "UO.TextPrint", "overloads": 1, "status": "pending", "candidateSources": [] }, { "name": "UO.TicksAnim", "overloads": 1, "status": "pending", "candidateSources": [] }, { "name": "UO.TicksDead", "overloads": 1, "status": "pending", "candidateSources": [] }, { "name": "UO.TicksSkill", "overloads": 1, "status": "pending", "candidateSources": [] }, { "name": "UO.TicksSpell", "overloads": 1, "status": "pending", "candidateSources": [] }, { "name": "UO.TicksTarget", "overloads": 1, "status": "pending", "candidateSources": [] }, { "name": "UO.TicksUse", "overloads": 1, "status": "pending", "candidateSources": [] }, { "name": "UO.Time", "overloads": 1, "status": "pending", "candidateSources": [] }, { "name": "UO.Timer", "overloads": 1, "status": "pending", "candidateSources": [] }, { "name": "UO.ToggleFly", "overloads": 1, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/ToggleFly/" ] }, { "name": "UO.Track", "overloads": 3, "status": "pending", "candidateSources": [] }, { "name": "UO.TradeCheck", "overloads": 3, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/TradeCheck/" ] }, { "name": "UO.TradeContainer", "overloads": 1, "status": "pending", "candidateSources": [] }, { "name": "UO.TradeCount", "overloads": 1, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/TradeCount/" ] }, { "name": "UO.TradeName", "overloads": 1, "status": "pending", "candidateSources": [] }, { "name": "UO.TradeOpponent", "overloads": 1, "status": "pending", "candidateSources": [] }, { "name": "UO.Undress", "overloads": 1, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/Undress/" ] }, { "name": "UO.Unequip", "overloads": 2, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/Unequip/" ] }, { "name": "UO.UnequipItems", "overloads": 1, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/UnequipItems/" ] }, { "name": "UO.UnsetArm", "overloads": 1, "status": "pending", "candidateSources": [] }, { "name": "UO.UnsetCatchBag", "overloads": 1, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/UnsetCatchBag/" ] }, { "name": "UO.UnsetDress", "overloads": 1, "status": "pending", "candidateSources": [] }, { "name": "UO.UnsetReceivingContainer", "overloads": 1, "status": "pending", "candidateSources": [] }, { "name": "UO.UOAMessage", "overloads": 1, "status": "pending", "candidateSources": [] }, { "name": "UO.UOSay", "overloads": 1, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/UOSay/" ] }, { "name": "UO.UOSayColor", "overloads": 1, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/UOSayColor/" ] }, { "name": "UO.UpdateFigure", "overloads": 1, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/UpdateFigure/" ] }, { "name": "UO.UpdateObject", "overloads": 1, "status": "pending", "candidateSources": [] }, { "name": "UO.UseAbility", "overloads": 2, "status": "pending", "candidateSources": [] }, { "name": "UO.UseFromGround", "overloads": 2, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/UseFromGround/" ] }, { "name": "UO.UseItemOnMobile", "overloads": 1, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/UseItemOnMobile/" ] }, { "name": "UO.UseObject", "overloads": 3, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/UseObject/" ] }, { "name": "UO.UseOtherPaperdollScroll", "overloads": 1, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/UseOtherPaperdollScroll/" ] }, { "name": "UO.UsePrimaryAbility", "overloads": 1, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/UsePrimaryAbility/" ] }, { "name": "UO.UseProxy", "overloads": 1, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/UseProxy/" ] }, { "name": "UO.UseRec", "overloads": 1, "status": "pending", "candidateSources": [] }, { "name": "UO.UserObject", "overloads": 1, "status": "pending", "candidateSources": [] }, { "name": "UO.UserStaticExists", "overloads": 1, "status": "pending", "candidateSources": [] }, { "name": "UO.UseSecondaryAbility", "overloads": 1, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/UseSecondaryAbility/" ] }, { "name": "UO.UseSelfPaperdollScroll", "overloads": 1, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/UseSelfPaperdollScroll/" ] }, { "name": "UO.UseSkill", "overloads": 8, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/UseSkill/" ] }, { "name": "UO.UseType", "overloads": 11, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/UseType/" ] }, { "name": "UO.UseVirtue", "overloads": 1, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/UseVirtue/" ] }, { "name": "UO.UseWorldObject", "overloads": 1, "status": "pending", "candidateSources": [] }, { "name": "UO.VendorMenu", "overloads": 2, "status": "pending", "candidateSources": [] }, { "name": "UO.Version", "overloads": 1, "status": "pending", "candidateSources": [] }, { "name": "UO.Wait", "overloads": 1, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/Wait/" ] }, { "name": "UO.WaitForClientTargetResponse", "overloads": 1, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/WaitForClientTargetResponse/" ] }, { "name": "UO.WaitForTarget", "overloads": 1, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/WaitForTarget/" ] }, { "name": "UO.WaitGump", "overloads": 18, "status": "corrected", "candidateSources": [ "https://stealth.od.ua/api/WaitGump/" ], "sources": [ "https://stealth.od.ua/api/WaitGump/" ], "finding": "Searches existing Activate buttons and queues missing button IDs without blocking; ordered multi-button forms extend the native single-button contract. Previously blocked for 30 seconds and sent an unchecked ID to any new window. Cancellation and TerminateAll clear owned/pending work.", "tests": "YokoCommandEndToEndTests GumpAuto/WaitGump cases; YokoIdeRuntimeProbe incoming-layout fixture" }, { "name": "UO.WaitGumpCheck", "overloads": 3, "status": "pending", "candidateSources": [] }, { "name": "UO.WaitGumpEntry", "overloads": 3, "status": "pending", "candidateSources": [] }, { "name": "UO.Waiting", "overloads": 1, "status": "pending", "candidateSources": [] }, { "name": "UO.WaitingForJournalText", "overloads": 4, "status": "pending", "candidateSources": [] }, { "name": "UO.WaitingForMenu", "overloads": 5, "status": "pending", "candidateSources": [] }, { "name": "UO.WaitingMenu", "overloads": 1, "status": "pending", "candidateSources": [] }, { "name": "UO.WaitJournalLine", "overloads": 1, "status": "corrected", "candidateSources": [ "https://stealth.od.ua/api/WaitJournalLine/" ], "sources": [ "https://stealth.od.ua/api/WaitJournalLine/" ], "finding": "Corrected integer Now() timestamps being treated as an age or, at 20000..100000, an OLE date. Only Decimal dates use date conversion. Boolean; timeout 0 waits until match/cancellation, polling keeps the start boundary fixed.", "tests": "YokoInjectionFindTypeWorldTests.Journal_*; YokoInjectionCompatibilityTests.Journal_*/Stealth_Journal_Properties_Use_The_Last_Real_Matched_Line" }, { "name": "UO.WaitJournalLineSystem", "overloads": 1, "status": "corrected", "candidateSources": [ "https://stealth.od.ua/api/WaitJournalLineSystem/" ], "sources": [ "https://stealth.od.ua/api/WaitJournalLineSystem/" ], "finding": "Same corrected time conversion and Boolean contract as WaitJournalLine. System entries are adapted to author Name=System in the shared Classic UO journal, not a separate Stealth system pane.", "tests": "YokoInjectionFindTypeWorldTests.Journal_*; YokoInjectionCompatibilityTests.Journal_*/Stealth_Journal_Properties_Use_The_Last_Real_Matched_Line" }, { "name": "UO.WaitMenu", "overloads": 4, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/WaitMenu/" ] }, { "name": "UO.WaitTarget", "overloads": 7, "status": "pending", "candidateSources": [] }, { "name": "UO.WaitTargetGround", "overloads": 2, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/WaitTargetGround/" ] }, { "name": "UO.WaitTargetLast", "overloads": 1, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/WaitTargetLast/" ] }, { "name": "UO.WaitTargetObject", "overloads": 3, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/WaitTargetObject/" ] }, { "name": "UO.WaitTargetObjectType", "overloads": 2, "status": "pending", "candidateSources": [] }, { "name": "UO.WaitTargetSelf", "overloads": 1, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/WaitTargetSelf/" ] }, { "name": "UO.WaitTargetTile", "overloads": 3, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/WaitTargetTile/" ] }, { "name": "UO.WaitTargetType", "overloads": 2, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/WaitTargetType/" ] }, { "name": "UO.WaitTargetXYZ", "overloads": 1, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/WaitTargetXYZ/" ] }, { "name": "UO.WaitTextEntry", "overloads": 1, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/WaitTextEntry/" ] }, { "name": "UO.WarMode", "overloads": 2, "status": "pending", "candidateSources": [] }, { "name": "UO.WarTargetID", "overloads": 1, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/WarTargetID/" ] }, { "name": "UO.WearItem", "overloads": 1, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/WearItem/" ] }, { "name": "UO.Weight", "overloads": 1, "status": "reviewed-adaptation", "candidateSources": [ "https://stealth.od.ua/api/Weight/" ], "sources": [ "https://stealth.od.ua/api/Weight/", "https://raw.githubusercontent.com/ServUO/ServUO/pub57/Server/Network/Packets.cs" ], "finding": "Reads server-reported total weight in stones, UInt16 widened to Integer; no inventory traversal or item count. Body/equipment/nested bags included according to shard rules, not locally recalculated. Own live Player only; missing/destroyed Player yields 0. Exact no-argument aliases, functions and intrinsics verified without packets. Compact packets preserve counters; a new Player starts at zero. Ten authored translations explain units, all supported forms, numbers versus Boolean, full helper parameters/results, three scripts and real Register/Invoke/CharacterStatus/Clear stages. CanCarry/CanAddFollower use extra <= maximum - current to avoid addition overflow. Helpers check the local cache and do not grant server permission. Generated compatibility return metadata now explicitly declares Integer for the reviewed resistance/counter branches. Previously nine UO functions appeared as Any/Variant despite always returning Integer. Gold retains its intentional mixed Integer/Decimal metadata. No argument shapes or dispatch behavior changed.", "tests": "YokoStatusCounterTests: seven packet/formula/boundary tests and one manual-helper test passed. All 28 aliases, functions and intrinsics checked with UInt16/Byte maxima and compact-cache preservation. Complete CanCarry/LuckAtLeast/CanAddFollower definitions extracted from 308 root/locale cards: 17600 live/destroyed helper outcomes for zero limits, overcapacity, negative/large inputs and thresholds. Main/gameplay was not executed. Existing OwnStatusLifetime tests cover missing/destroyed read guards. The last full client suite of 1474 tests passed before these eight new counter tests. This batch preserves runtime dispatch behavior; generated return metadata is corrected separately. YokoApiSymbolIndexTests: ten added signature cases reproduced nine failures and one pre-existing Integer pass. Corrected metadata passed the combined 58 signature/resistance/counter tests. Inventory comparison confirms 1628 unchanged name/parameter shapes and exactly nine Any-to-Integer changes." }, { "name": "UO.WorldNum", "overloads": 1, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/WorldNum/" ] }, { "name": "UO.X", "overloads": 1, "status": "pending", "candidateSources": [] }, { "name": "UO.Y", "overloads": 1, "status": "pending", "candidateSources": [] }, { "name": "UO.Z", "overloads": 1, "status": "pending", "candidateSources": [] }, { "name": "val", "overloads": 1, "status": "pending", "candidateSources": [] }, { "name": "wait", "overloads": 1, "status": "pending", "candidateSources": [ "https://stealth.od.ua/api/Wait/" ] } ] }