Function: StartConversation(conversation, source, player, text[, mp3, key1, key2, language, can_close])
Attempts to display an actor conversation using owned choices from a builder.
Parameters:
conversation(Conversation): an open builder with at least one choice.source(Spawn): the original source actor.player(Player): the recipient Player.text(string): nonempty dialogue text.mp3(string, optional): voice asset path; defaults to an empty string.key1,key2(uint32, optional): voice keys; default to0.language(integer, optional): language identifier; defaults to0and uses the native 8-bit field.can_close(integer, optional): numeric0or1; defaults to1.
Returns: None.
Missing/invalid arguments, an empty builder, or no current matching Player connection leave the builder unconsumed. Once a valid send attempt begins, the builder is consumed before formatting or queue callbacks. It cannot be appended to or sent again, including from a nested callback. Create a new builder for another attempt. A missing formatter or rejected transport does not guarantee delivery and does not reopen the consumed builder.
The native call owns its choices, text and voice path and retains the original Player operation. A reconnect, Player replacement or scene change during preparation cannot redirect the request to a replacement. Displayed replies store copied values and weak original-source/session observations. A reply acquires the original source for its callback; retired/reused sources and stale or duplicate replies cannot select a successor menu's functions. Publishing a new menu from a reply callback and explicitly closing the claimed menu remain supported. The dialogue protocol supports at most 65,535 choices.