Zum Hauptinhalt springen

Implementation Limits

These constraints describe the current Cube Weapon 0.4 source. Distinguish declared APIs from implemented behavior when integrating the plugin.

Build State and Registration​

Import loads referenced assets and replaces WorkingBuild. It does not validate/register automatically. Add/remove/import do not invalidate previous flags. Successful validation registers a snapshot; a later failed validation does not remove that older snapshot.

Equip dereferences BuildRegistry.Find without checking for a missing key and does not revalidate or require bValidated/bUsable. Only submit an Equip with a build confirmed registered on authority.

Edits and validation target one WorkingBuild per Net component. Their BuildID is not an arbitrary registry-edit selector. Asynchronous loads are not serialized by QueueWeaponOperation; do not replace or mutate the working configuration while a dependent load/validation is pending.

Fetch replaces WorkingBuild and returns an empty structure for a missing registry key. DeleteBuild clears only a matching WorkingBuild; it does not call RemoveWeaponBuild or delete persisted project inventory data.

Request Validation​

FWeaponOpRequest.IsValid checks operation type and instanced-payload presence. It does not validate controller authorization or the contained payload's fields. Several handlers dereference typed payload pointers without guarding a wrong payload type.

CreateBuild deliberately has no payload and bypasses that validity check in the router. Normal Unequip also reaches the handler: its helper supplies an FEquipWeaponPayload without a socket, but the current router does not invoke FEquipWeaponPayload.IsValid for it. Custom validation must use operation-specific requirements.

Unequip Cleanup​

Unequip clears runtime entries, removes the character assignment and calls WeaponUnequipCallback. It does not destroy or detach the actor itself. It clears ActualUsedWeapon unconditionally, even if another assigned weapon was active. Complete retained-actor/pool cleanup in your integration.

Acquisition Handoff​

Internal acquisition spawns an actor but does not return its pointer/GUID or call an authority-side completion callback. WeaponAcquiredCallback is invoked in the owning client's OnRep_Owner only when ActorNetGuid is already valid.

OnRep_ActorNetGuid registers the actor but does not retry that acquisition callback. RepNotify ordering can therefore affect the handoff. Standalone, listen-host and authority flows need their own supported actor/GUID handoff; do not assume the owning-client callback runs in every mode.

Events and Accessors​

OnWorkingBuildCreated fires on client RepNotify when the GUID changes, including import/reset transitions. BuildCreatedCallback on I_WeaponController is not called by current build creation.

The data manager's HandleInitializationCompleted is empty; there is no Blueprint database-readiness event. Declared inventory/update delegates do not implement a complete transfer or scheduling pipeline.

AC_WeaponCharComp.GetBuildData, AddOrUpdateBuildData and RemoveBuildData only check GUID validity. GetBuildData leaves OutBuild unchanged. Use implemented fetch/callback paths instead.

Assembly and Validation Scope​

Part order affects validation because each part unlocks child slot tags as it is visited. Parent compatibility can fall back to a different provider with the same socket name. Runtime parent links are also resolved by socket-provider search, not directly by the build's ParentPartID.

Use correct parent IDs, provider-before-child order and unambiguous socket names. Explicit build validation does not guarantee mesh validity, component capacity, matching actor family or complete gameplay. Fixed component pools do not grow automatically.

Incomplete Gameplay​

  • InitializeWeapon's separate routed handler is empty; Equip uses the runtime builder's implemented initialization method.
  • Additional operation enum values without switch cases remain unsupported; there is no Drop operation.
  • Routed Attack handles Range; Melee and Throwable branches are empty.
  • Ranged TryFireShot consumes ammo and broadcasts OnWeaponFired but leaves projectile, muzzle flash, audio and recoil behavior as placeholders.
  • Reload changes its state and sets ActualAmmo to 100 under a development comment. ActualAmmo is not replicated.
  • Firemode toggles SemiAuto and FullAuto; authored BurstCount and other statistics are not all connected to gameplay.
  • Modifier Duration, bCanStack and MaxStacks are not enforced by the build-statistics pass. MagazineSizeAdd is not applied.
  • Side-effect definitions have no general trigger/chance/cooldown/stack executor in this source. Projectile asset classes declare no additional fields.

UI and Project Responsibilities​

CreateWeaponPartDragDropOp dereferences its controller after only recording a null error and assumes every non-master asset is a Weapon Part. Guard these inputs before calling it. AsyncResolveWeaponAsset uses the current play world without an explicit world-context argument.

SaveGame persistence, inventory transactions, world drop/pickup, full gameplay-state restoration, custom allocation and pool return remain project responsibilities. Server RPCs and request checks do not establish a comprehensive ownership/authorization policy for arbitrary client requests.