Skip to content
CISV2.0GET IT ON FAB

GET STARTEDTROUBLESHOOTING

Troubleshooting

Each section starts from a symptom. The checks run in the order given, from the cheapest to the most involved. Each section names the system page that explains the setting, and the Core concepts page explains the terms.

The plugin writes its messages to the log category CISLog. Its default level is Warning, so refusals of a use are hidden until you raise the level. Type log CISLog Log in the console, play again and look for CISLog lines in the Output Log.

These lines name the cause:

  • On the server, a refused use writes ServerRequestUse from <character>: the use of <object> is rejected (ECISUseRejectReason::<reason>), key <key>. The reason is one of the values in the table under “Works alone, fails online” below. No such line appears when the server cannot find the object at all, for example a destroyed object, or when the server runs its own use of that character. The player may then see the state snap back with no server line.
  • On the client, ClientRejectUse on <character>: the server rejected use <key> (ECISUseRejectReason::<reason>). appears only while the player’s use still waits for the server’s answer.
  • Two warnings show at the default level. ... called on a client; the change is local only. Call it on the server. means that SetObjectState or SetUsable ran on a client’s copy of the object. It is written once for each object. Component '<name>' (<class>) not found on <actor> (class <class>). Select the component again in the settings. means that a component reference names a component the actor does not have. An empty reference writes no warning. This warning appears once for each actor class and component name until the editor restarts.

The multiplayer guide, Object for multiplayer, shows where these lines appear in a test with two players.

First, check that the use key reaches the character: the Input Mapping Context with the use action must be added to the player. See Your own character.

Then check these in order:

  1. Try Use Object runs. The use button must call TryUseObject on the character’s UCISCharacterInteractionComponent when it is pressed, and TryInterruptObjectUsing when it is released. The hold then ends in a use once the use time has passed, unless the release call cancels it first. The hold also cancels by itself when the object stops being usable for the character: the character leaves its reach, turns away, or a Condition turns false. The use time is Override Object Use Time of the object when that is on, otherwise Time to Use Object of the character. The call does nothing while the character already uses or holds an object, and when no usable object is selected. See Character interaction component.
  2. The object is in reach of a trigger. The character finds an object only while one of its Trigger Components overlaps a component of the object. The object needs a component with collision that generates overlap events. See Character interaction component.
  3. The character stands within Interaction Distance of the object, measured flat from the object’s actor to the character’s feet. The default is 300. See Interaction object component.
  4. The character faces the object within half of Interaction Angle. Interaction Angle is 45 by default, so 22.5 degrees to each side. An object can override the angle. The point faced is the socket of Angle Detection Component, or the object’s root. See Character interaction component.
  5. The Visible Conditions pass, and then the Usable Conditions pass. The usable conditions are checked only while the object is visible, and a visible object must also have its usable flag on. See Conditions.
  6. The current state has an Action for the side. A side uses the first Action whose Required State Tag equals the object’s state. An empty tag matches an empty state only. See Actions.
  7. The demo objects accept only the demo character. Most of them have BP_InteractionObjectCondition_IsObjectRendered in Usable Conditions, and it lets only BP_CISCharacter use them. Test your own character with your own object. See The demo.

The prompt E | INTERACT on the demo map comes from the demo HUD BP_CISHUD, not from the plugin’s use logic. A use can work without that prompt.

  1. The Action of the side matches the state at the moment of the use (check 6 of “Nothing happens at the use button”). A state change made just before the use may have moved the object to a state that has no Action.
  2. Action Execution Type of the side decides when the Action starts. The default, StartAfterFinishMoveHandler, starts the Action only after the MoveHandler finishes its movement. If the movement never ends, because nothing calls FinishMovement, the Action never starts. StartParallelWithMoveHandler starts the Action with the movement. See Move handlers.
  3. The demo MoveHandlers move only BP_CISCharacter. With another character the Action still runs, but the character is not walked to the point. See Move handlers.
  4. Mesh Component On Object of a montage Action names the object’s component, and that component has the Anim Class of its animation. A skeletal mesh added in the editor needs its Anim Class set; without it the montage does not play on the object. See Two-sided door.
  5. A door or lever swings back as soon as its montage ends. The object’s Animation Blueprint must receive the new state through BPI_InteractionObject, from the object’s state-changed event. See Two-sided door.
  1. The Action calls FinishAction. A use lasts until it does, and the object’s state changes only when the Action finishes. See Actions.
  2. A MoveHandler that never calls FinishMovement stops the use before the Action starts, as described above. See Move handlers.
  3. Max Use Duration on the object ends a longer use as interrupted. The default, 0, means no limit. See Interaction object component.
  4. An interruption ends the use only when the object’s Object Interruption Type equals the type the input sends. A press or release of the use button ends a use only when the types match. See Character interaction component.

The server checks each use request of a remote client. A standalone game, a listen host’s own character and characters that the server runs are not checked. So a use that works alone can be refused online. The table gives each reason and what to check.

ReasonWhat to check
ObjectInvalidThe server cannot find the object. The object or its actor was destroyed on the server.
NotUsableThe object cannot be used now. Check its usable flag: a Blueprint, or a call of Set Usable, turned it off.
OccupiedAnother character is using the object. Check that every Action finishes, because a use lasts until FinishAction runs.
NoActionForStateNo Action of the side matches the object’s state. Check the Required State Tag of each Action and the Initial Object State.
OutOfRangeThe character stands farther than Interaction Distance plus the server tolerances. Check the distance and the tolerances in the project settings.
BadAngleThe character does not face the object within half of its Interaction Angle, or the object’s override of it, plus Angle Tolerance Degrees. Check those settings.
BadSideThe character does not stand within the requested side, or the side does not exist on the server. Check Interaction Angle Min, Interaction Angle Max and Angle Tolerance Degrees. Sides are not replicated, so every machine must build them from the same class defaults or Blueprint.
ConditionFailedA Condition checked on the server failed. Check the Visible and Usable Conditions of the object and the Server Validation of each Condition.
HoldTooShortThe button was released before the use time. The server accepts a shorter hold by Hold Time Tolerance.

Other checks for online games:

  • The object’s state reaches other players only when the object’s actor replicates. In Class Defaults, turn on Replicates. See Object for multiplayer.
  • A data object exists only on the machine of the player who controls the character, so a hint or an icon that the data object draws is seen only by that player. See Data objects.
  • A call of Set Object State on a client changes only that machine’s copy, and the Output Log warns once. Run the call on the server. See Interaction object component.
  • Server Validation of the project settings turned off makes the server confirm every request. The index checks of the side still run. See Multiplayer.

The warning Component '<name>' (<class>) not found on <actor> (class <class>). Select the component again in the settings. means that a component reference names a component the actor does not have now. The component was renamed or removed, or the reference points at another actor. An empty reference writes no warning, so check that the field is set. The warning appears once for each actor class and component name until the editor restarts. Select the component again in the reference’s settings, and check the Blueprint that holds it. See Component references.

  1. The character’s Data Object Class is BP_CISDataObject, the demo’s data object. The default, CISInteractionDataObject, draws no icons.
  2. The object’s own Data Object Class override, when it is on, replaces the character’s. Check that it is the class you expect.
  3. The demo’s data object draws icons only for objects built from BP_BaseInteractObject. Its Interaction Widget component must show WBP_InteractionObjectIcon. An object built from another class shows no icon, even with the right data object.
  4. The icon follows the object’s visibility: the object must be in reach, face the character, be usable and pass its Visible Conditions, and the character is not using an object. See Widgets and icons and Data objects.