Skip to main content

B2Action_SelectErrandObject

  • Description
    * ===============
    * Opens the errand object picker so the player can ask the target character to fetch something.
    * Collects the carriable objects the target could pick up right now in its own site, sends them to BlueClient and
    * finishes immediately, so the conversation ends the moment the popup appears and the player is never locked into a wait.
    * The action does not queue anything on the target and does not pause the game: BlueClient owns the pause while the
    * popup lives, and B2PacketReceiver_UI::C_SelectErrandObject starts the errand Coop once the player confirms.
    * Because nothing is kept alive here, a save taken while the popup is open has no action state to restore.
    * Only the possessed character may hand out an errand, and only through a user-triggered play reason - autonomy and
    * SmartZoi are rejected so the picker can never open without a player asking for it.
    * The pick-up bag and the Coop id are not consumed here; they are forwarded to the popup and come back with the choice,
    * so both stay data-driven instead of hardcoded in the receiver.
    * ===============
    * Param:
    * S1: Pick-up InteractionBag used to gate the candidates, also reused when the choice is re-validated (PickUp)
    * S2: Coop played from the moment the player confirms until the object reaches the requester (Coop_Errand_HandOver).
    * It must be driven with CoopType HandOver, because the chosen object is carried into the scheduler as its
    * hand-over object and the fetch task resolves it back through the CoopHandOverObject target filter
    * F1: Search range around the runner in unreal units. 0 covers the whole site
    * F2: -
    * Note:
    * OnInit(): Reads the pick-up bag from Action.S1, the errand Coop from Action.S2 and the search range from Action.F1.
    * OnPlay(): Rejects anything but a user-triggered request from the possessed character, collects the candidates through
    * B2ErrandHelper, finishes without opening anything when there is nothing to fetch, then sends
    * S_OpenErrandObjectPicker and finishes right away.
PropertyTypeDescriptionMetadata
ActionIdFNameIdentifier of this action instance (used for interaction tracking and mission time accounting)
StateEB2ActionStateCurrent lifecycle state of this action
MergeTypeEB2ActionMergeTypeMerge type flags for this action (e.g. interaction merge, checked in Finish())
ResultEB2InteractionResultResult of this action once it stops playing (Finish/Failed/Canceled)
SelfEntityIdFB1EntityIdEntity id performing this action
TargetEntityIdFB1EntityIdEntity id targeted by this action
GrabEntityIdFB1EntityIdEntity id grabbed/carried by self entity for this action
NonTargetLocationFVectorLocation used for script/condition context when there is no target entity
ActionFB1ActionInfoAction table data (S1/S2/F1/F2, script id lists, etc.) driving this instance
TickCalcValuefloatAccumulated tick delta time since this action started ticking
CurrentNotifyIndexint32Index into Action.NotifyScriptIds for the next notify script to run
AsyncLoadAnimInfoTArrayAnimations to async-load for this action's start/notify/tick/finish/cancel scripts
AddActionTimeIntervalfloatInterval in seconds between OnTickAddActionExecuteTime() calls
AccumAddActionTimefloatElapsed time accumulator compared against AddActionTimeInterval
StartActionTickTimeint64Tick timestamp used to measure elapsed action execution time for mission tracking
ActionKeyFB2ActionKeyKey identifying this action's slot/queue within the interaction system
TimeTaskIdFB1TimeTaskIdId of the scheduled time task used for delayed Determine/Finish
IsForceCancelableboolWhether this action is force-cancelable, copied from Action.IsForceCancelable
IsFirstActionboolMarks the first action in an interaction sequence; set on actions[0] by FB2InteractionPlayer::LinkActions(), read by FB2ActionPlayer
bMultiFlagboolSet by looping actions (PlayAnim, BookRead, Eat, WaitTalkSequence) once a loop iteration completes; read/reset by FB2ActionPlayer to gate multi-interaction selection
TalkInstanceIdFB1TalkInstanceIdId of the talk instance this action is linked to, set externally by FB2InteractionPlayer::LinkActions()
TalkSubjectEntityIdFB1EntityIdEntity id of the talk subject linked to this action, set externally by FB2InteractionPlayer::LinkActions()/OnTalkSpaceParamChanged()
bIsWaitFinishEventboolCached copy of Action.IsWaitFinishAction taken at Init(); read directly by FB2ActionPlayer for sequencing (the IsWaitFinishAction() getter instead reads Action.IsWaitFinishAction live)
AutoInsertTypeEB2ActionAutoInsertTypeType of action that was auto-inserted before this one (e.g. WalkTo, ChangePosture)