载入中...
搜索中...
未找到
DialogueFlow.cpp
浏览该文件的文档.
26bool buildPoolWorkspace(const std::unordered_map<std::string, DataValue>& sources, DataValue& root,
78 const bool ok = sq_gettype(vm, -2) == OT_STRING && SQ_SUCCEEDED(sq_getstring(vm, -2, &key)) && key &&
100 case StateValue::Kind::String: sq_pushstring(vm, value.asString().c_str(), value.asString().size()); break;
121 DialogueSelectionParticipant(eve::dnut::SequenceRuntime& runner, std::string routeId, eve::Value before)
125 [[nodiscard]] eve::Result<void> prepare(const eve::transaction::TransactionContext& context) override {
128 eve::Diagnostic::error(eve::DiagnosticCode::InvalidArgument, "dialogue choice transaction requires a transaction id", "transactionId", {}, "dialogue.flow"));
131 eve::Diagnostic::error(eve::DiagnosticCode::Conflict, "dialogue choice is not idle", "transaction.lifecycle", {}, "dialogue.flow"));
138 eve::Diagnostic::error(eve::DiagnosticCode::Conflict, "dialogue choice has no prepared stage", "transaction.lifecycle", {}, "dialogue.flow"));
145 eve::Diagnostic::error(eve::DiagnosticCode::Failed, error.empty() ? "dialogue choice selection failed" : error, "route", {}, "dialogue.flow"));
150 [[nodiscard]] eve::Result<void> rollback(const eve::transaction::TransactionContext&) override {
153 eve::Diagnostic::error(eve::DiagnosticCode::Conflict, "dialogue choice has no prepared stage to roll back", "transaction.lifecycle", {}, "dialogue.flow"));
157 [[nodiscard]] eve::Result<void> compensate(const eve::transaction::TransactionContext&) override {
160 eve::Diagnostic::error(eve::DiagnosticCode::Conflict, "dialogue choice is not committed", "transaction.lifecycle", {}, "dialogue.flow"));
164 eve::Diagnostic::error(eve::DiagnosticCode::Failed, restored.status().describe(), "route", {}, "dialogue.flow"));
198eve::Result<void> DialogueFlow::publishGameplay(const std::string& instanceId, const std::string& ownerId) {
210 return gameplay_->publish(eve::SubjectRef::fromPersistentId(*instance), eve::SubjectRef::fromPersistentId(*owner));
216 eve::Diagnostic::error(eve::DiagnosticCode::NotFound, "no dialogue instance is published", "instanceId"));
220 eve::DiagnosticCode::InvalidArgument, "the instance id must be a canonical persistent id", "instanceId"));
254 return eve::dnut::SequenceConditionOutcome{false, "expression_failed", evaluated.status().describe()};
259 return eve::dnut::SequenceConditionOutcome{value.asBool(), value.asBool() ? "" : "expression_false", {}};
273 if (operationRequestHandler_ || gameplayActionHandler_ || commandParticipantFactory_ || stateMutationProvider_ ||
299eve::Result<eve::MutationReceipt> DialogueFlow::applyStateMutations(std::span<const eve::StateMutation> mutations,
311 if (const auto it = sourceTexts_.find(path); it != sourceTexts_.end() && it->second == source) {
319 failureMessage_ = diagnostics_.empty() ? "conversation compilation failed" : diagnostics_.front().message;
334 failureMessage_ = "cannot load a dnut source while a conversation is active; use transactional reload";
342 if (!dialogue || (dialogue->replacePoolsFromData(poolWorkspace) == 0 && !dialogue->getLastPoolsError().empty())) {
343 failureMessage_ = dialogue ? dialogue->getLastPoolsError() : "dialogue pool runtime is unavailable";
358 auto it = std::find_if(assets_.begin(), assets_.end(), [&](const auto& old) { return old.id == asset.id; });
376 if (const auto cached = sourceTexts_.find(path); cached != sourceTexts_.end() && cached->second == source) {
385 failureMessage_ = diagnostics_.empty() ? "conversation compilation failed" : diagnostics_.front().message;
417 std::find_if(candidate.begin(), candidate.end(), [&](const auto& old) { return old.id == asset.id; });
425 failureMessage_ = diagnostics_.empty() ? "conversation workspace lint failed" : diagnostics_.front().message;
444 if (!buildPoolWorkspace(candidatePoolSources, candidatePoolWorkspace, failureMessage_)) return 0;
447 (dialogue->replacePoolsFromData(candidatePoolWorkspace) == 0 && !dialogue->getLastPoolsError().empty())) {
448 failureMessage_ = dialogue ? dialogue->getLastPoolsError() : "dialogue pool runtime is unavailable";
496 eve::Diagnostic::error(eve::DiagnosticCode::NotFound, "dnut source is not loaded", path, {}, "dialogue.flow"));
500 eve::Diagnostic::error(eve::DiagnosticCode::PreconditionViolation, failureMessage_, path, {}, "dialogue.flow"));
507 eve::Diagnostic::error(eve::DiagnosticCode::Conflict, failureMessage_, path, {}, "dialogue.flow"));
509 if (!dialogue || (dialogue->replacePoolsFromData(poolWorkspace) == 0 && !dialogue->getLastPoolsError().empty())) {
510 failureMessage_ = dialogue ? dialogue->getLastPoolsError() : "dialogue pool runtime is unavailable";
512 eve::Diagnostic::error(eve::DiagnosticCode::Failed, failureMessage_, path, {}, "dialogue.flow"));
536 if (!sequencePayloadString(node, "text").empty() && sequencePayloadString(node, "i18n").empty())
540 if (!sequencePayloadString(node, "speaker").empty() && sequencePayloadString(node, "voice").empty())
571 !gameplay ? static_cast<bool>(operationRequestHandler_) : static_cast<bool>(gameplayActionHandler_);
589 eve::Diagnostic::error(eve::DiagnosticCode::InvalidArgument, failureMessage_, "<dialogue-workspace>", {}, "dialogue.flow"));
593eve::Result<void> DialogueFlow::renameConversationChecked(const std::string& oldId, const std::string& newId) {
597 eve::Diagnostic::error(eve::DiagnosticCode::PreconditionViolation, failureMessage_, oldId, {}, "dialogue.flow"));
608 failureMessage_ = diagnostics_.empty() ? "conversation rename validation failed" : diagnostics_.front().message;
610 eve::Diagnostic::error(eve::DiagnosticCode::InvalidArgument, failureMessage_, oldId, {}, "dialogue.flow"));
624eve::Result<void> DialogueFlow::renameNodeChecked(const std::string& conversationId, const std::string& oldId,
629 eve::Diagnostic::error(eve::DiagnosticCode::PreconditionViolation, failureMessage_, conversationId + "/" + oldId, {}, "dialogue.flow"));
640 failureMessage_ = diagnostics_.empty() ? "node rename validation failed" : diagnostics_.front().message;
642 eve::Diagnostic::error(eve::DiagnosticCode::InvalidArgument, failureMessage_, conversationId + "/" + oldId, {}, "dialogue.flow"));
670eve::Result<int> dnutLoadResult(int count, const std::string& error, const std::string& sourceId) {
673 eve::DiagnosticCode::Failed, error.empty() ? "dnut load failed" : error, sourceId, {}, "dialogue.dnut"));
677eve::Result<int> DialogueFlow::loadDnutChecked(const std::string& source, const std::string& sourceId) {
681eve::Result<int> DialogueFlow::reloadDnutChecked(const std::string& source, const std::string& sourceId) {
693 auto it = std::find_if(assets_.begin(), assets_.end(), [&](const auto& old) { return old.id == asset.id; });
703eve::Result<int> DialogueFlow::importYarnChecked(const std::string& source, const std::string& path) {
713eve::Result<int> DialogueFlow::importTweeChecked(const std::string& source, const std::string& path) {
749std::string DialogueFlow::exportLocalizationCsv() const { return exportConversationLocalizationCsv(assets_); }
755 failureMessage_ = count > 0 || diagnostics_.empty() ? std::string{} : diagnostics_.front().message;
758 eve::Diagnostic::error(eve::DiagnosticCode::ParseError, failureMessage_, "dialogue.localization.csv", {}, "dialogue.flow"));
774 eve::Diagnostic::error(eve::DiagnosticCode::NotFound, "dialogue localization locale is unavailable",
783 eve::DiagnosticCode::NotFound, "dialogue localization key is missing from the exact locale: " + key,
794 return diagnostics_[static_cast<size_t>(index)].severity == ConversationDiagnostic::Severity::Error ? "error"
806ConversationDocument* DialogueFlow::newDocument(const std::string& id) const { return new ConversationDocument(id); }
817 eve::Diagnostic::error(eve::DiagnosticCode::InvalidArgument, failureMessage_, "authoring", {}, "dialogue.flow"));
830 diagnostics_.empty() ? "conversation document validation failed" : diagnostics_.front().message;
832 eve::Diagnostic::error(eve::DiagnosticCode::InvalidArgument, failureMessage_, "authoring", {}, "dialogue.flow"));
869 eve::Diagnostic::error(eve::DiagnosticCode::InvalidArgument, failureMessage_, "dialogue.bindings", {}, "dialogue.flow"));
875 eve::Diagnostic::error(eve::DiagnosticCode::NotFound, "conversation was not found: " + id, "dialogue." + id, {}, "dialogue.flow"));
887eve::Result<void> DialogueFlow::resumeCommandChecked(const std::string& requestId, eve::Value value) {
911 eve::Diagnostic::error(eve::DiagnosticCode::Unsupported, "dialogue choice state mutations require a StatePatch-compatible provider", "route.stateMutations", {}, "dialogue.flow"));
937 request.kind == CommandRequestKind::Operation ? &operationRequestHandler_ : &gameplayActionHandler_;
955 if (!request.payment.empty() && !commandParticipantFactory_ && request.stateMutations.empty()) {
990 std::make_unique<DialogueStateMutationParticipant>(*stateMutationProvider_, request.stateMutations);
994 auto committed = paymentAdapter_.execute(nextTransactionId("command"), request.payment, effects);
1007std::string DialogueFlow::getConversationId() const { return runner_.asset() ? runner_.asset()->id : std::string{}; }
1024std::string DialogueFlow::getText() {
1028 localization_.resolveText(sequencePayloadString(*node, "i18n"), locale_, sequencePayloadString(*node, "text"));
1029 return textRenderer_.render(localized, runner_.bindings(), runner_.locals(), [this](const std::string& rule) {
1049 return node ? localization_.resolveStatus(sequencePayloadString(*node, "i18n"), locale_) : std::string{};
1054 return node ? static_cast<float>(localization_.resolveDuration(sequencePayloadString(*node, "i18n"), locale_))
1073 eve::Diagnostic::error(eve::DiagnosticCode::InvalidArgument, "dialogue expression evaluator must be a closure owned by the active VM", "dialogue.expressionEvaluator", {}, "dialogue.flow"));
1087eve::Result<StateValue> DialogueFlow::evaluate(const std::string& expression, const StateValue& bindings,
1092 eve::DiagnosticCode::Unsupported, "dialogue expression evaluator is not configured", "expression", {},
1110 eve::DiagnosticCode::Failed, "dialogue expression evaluator raised an exception", "expression", {},
1117 eve::DiagnosticCode::InvalidArgument, "dialogue expression returned an unsupported value", "expression",
1164eve::Result<void> DialogueFlow::registerMigrationChecked(const std::string& assetId, int fromVersion,
1170void DialogueFlow::addToneRule(const std::string& expression, const std::string& prefix, const std::string& suffix,
1179 std::function<ConversationDocument*()>([]() -> ConversationDocument* { return new ConversationDocument(); }),
1231 return eve::script::projectResult(vm, value->reloadDnutChecked(source, sourceId), projectCount);
1247 cls.addFunc("removeSourceChecked", [vm = cls.getHandle()](DialogueFlow* value, const std::string& path) {
1271 cls.addFunc("importLocalizationCsvChecked", [vm = cls.getHandle()](DialogueFlow* value, const std::string& csv,
1278 cls.addFunc("validateLocalization", [vm = cls.getHandle()](DialogueFlow* value, eve::i18n::I18n* localization,
1284 eve::DiagnosticCode::InvalidArgument, "validateLocalization requires dialogue and i18n modules",
1307 "startChecked", [vm = cls.getHandle()](DialogueFlow* value, const std::string& id, ssq::Object bindings) {
1310 eve::Diagnostic::error(eve::DiagnosticCode::InvalidArgument, "dialogue flow must not be null", "dialogue", {}, "dialogue.flow")));
1316 eve::Diagnostic::error(eve::DiagnosticCode::InvalidArgument, "dialogue flow must not be null", "dialogue", {}, "dialogue.flow")));
1324 eve::Diagnostic::error(eve::DiagnosticCode::InvalidArgument, "dialogue flow must not be null", "dialogue", {}, "dialogue.flow")));
1331 cls.addFunc("select", [vm = cls.getHandle()](DialogueFlow* value, const std::string& routeId) {
1334 eve::Diagnostic::error(eve::DiagnosticCode::InvalidArgument, "dialogue flow must not be null", "dialogue", {}, "dialogue.flow")));
1355 cls.addFunc("setExpressionEvaluatorChecked", [vm = cls.getHandle()](DialogueFlow* value, ssq::Object fn) {
1363 cls.addFunc("restoreStateJsonChecked", [vm = cls.getHandle()](DialogueFlow* value, const std::string& json) {
1380 [vm = cls.getHandle()](DialogueFlow* self, const std::string& instanceId, const std::string& ownerId) {
1389 result.set("message", published.ok() ? std::string("published") : published.status().describe());
1392 cls.addFunc("unpublishGameplay", [vm = cls.getHandle()](DialogueFlow* self, const std::string& instanceId) {
1399 result.set("message", unpublished.ok() ? std::string("unpublished") : unpublished.status().describe());
Dialogue payload codecs for L1 sequence assets.
The single Squirrel projection for common Result, Status and Value.
Stable reference to a runtime gameplay subject.
static Diagnostic error(DiagnosticCode code, std::string message, std::string path={}, DiagnosticDetails details={}, std::string source={})
Construct an error diagnostic with the standard error severity.
Definition Diagnostic.h:125
bool ok() const noexcept
Whether this result represents a non-failure outcome.
Definition Result.h:480
void expect(std::string_view message) const
Require success for a void operation.
Definition Result.h:548
void ignore(std::string_view reason={}) const noexcept
Explicitly discard this result after documenting the reason.
Definition Result.h:537
const Status & status() const noexcept
Inspect the structured operation status.
Definition Result.h:487
static Result failure(Status status)
Construct a failed result from a structured status.
Definition Result.h:175
@ Float
@ String
@ Array
@ Object
static Status success(StatusCode code=StatusCode::Ok)
Construct a successful status with an explicit non-error outcome.
Definition Status.h:81
static SubjectRef fromPersistentId(PersistentId id) noexcept
Wrap a persistent identity without changing its bytes.
Definition SubjectRef.h:32
Value * find(const std::string &key) noexcept
Return an object member, or nullptr when absent.
Definition Value.cpp:124
Explain one condition evaluation in a UI- and log-friendly form.
Definition Condition.h:129
ConditionReasonCode reasonCode() const noexcept
Stable machine-readable reason code.
Definition Condition.h:139
static std::optional< Id128 > parse(std::string_view text) noexcept
Parses canonical UUID text.
Definition Identity.h:151
Mutable, UI-neutral conversation document for custom editor composition.
Definition ConversationAuthoring.h:13
const eve::dnut::SequenceAsset & asset() const
Return the editable runtime asset.
Definition ConversationAuthoring.h:21
Script-facing registry and runner for compiled .dnut conversations.
Definition DialogueFlow.h:42
eve::Result< void > startChecked(const std::string &id, ssq::Object bindings)
Start a conversation after validating script bindings.
Definition DialogueFlow.cpp:859
void clearExpressionEvaluator()
Definition DialogueFlow.cpp:1081
void clearIntegration()
Remove explicit providers and callbacks from the facade.
Definition DialogueFlow.cpp:297
std::vector< std::string > gameplayInstances() const
已发布的玩法实例标识(发布顺序)。
Definition DialogueFlow.cpp:230
void configureIntegration(IntegrationConfig config)
Configure every runner in this module facade in one operation.
Definition DialogueFlow.cpp:237
eve::Result< void > publishGameplay(const std::string &instanceId, const std::string &ownerId)
把本模块的对话运行器发布到共享玩法协议(eve_gameplay / MCP)。
Definition DialogueFlow.cpp:198
eve::Result< void > unpublishGameplay(const std::string &instanceId)
取消发布一个实例;该实例未发布(或 id 非法)时返回诊断。
Definition DialogueFlow.cpp:213
void setBindings(DialogueAccountBindings bindings)
Replace borrowed account bindings; no balance is copied.
Definition DialoguePayment.cpp:161
void setMutationProvider(eve::IStateMutation *provider) noexcept
Bind a borrowed mutation provider for this context's lifetime.
Definition DialogueState.h:151
eve::decision::ConditionResult evaluate(const eve::decision::Condition &condition) const
Evaluate an already compiled shared condition with explanation.
Definition DialogueState.cpp:336
void setQueryProvider(eve::IStateQuery *provider) noexcept
Bind a borrowed query provider for this context's lifetime.
Definition DialogueState.h:149
void setSubject(std::string subject)
Set the subject used for all future condition queries.
Definition DialogueState.cpp:299
Visual-novel style dialogue stage. Script: dlg <- eve.Dialogue();
Definition Dialogue.h:46
int replacePoolsFromData(const DataValue &root)
Atomically replace all pools from a validated unified dnut workspace.
Definition Dialogue.cpp:582
Caller-owned interpreter over a compiled sequence asset.
Definition SequenceRuntime.h:67
void setCommandDispatcher(SequenceCommandHandler dispatcher)
Install the catch-all command dispatcher used after named lookup.
Definition SequenceRuntime.h:196
const SequenceNode * currentNode() const
Borrowed current node, or nullptr. @lifetime Invalidated by the next transition.
Definition SequenceRuntime.cpp:74
void setConditionEvaluator(ConditionEvaluator evaluator)
Definition SequenceRuntime.h:188
void stop()
Stop and clear the active sequence without emitting Ended.
Definition SequenceRuntime.cpp:121
void clearCommandDispatcher()
Remove the catch-all command dispatcher.
Definition SequenceRuntime.h:198
eve::Result< void > captureState(eve::Value &out) const
Capture the complete cursor, bindings, locals and call stack.
Definition SequenceRuntime.cpp:534
eve::Result< void > advance()
Acknowledge a host-presented wait or handler-less Await step.
Definition SequenceRuntime.cpp:396
eve::Result< void > resumeCommand(std::string_view requestId, eve::StateValue result)
Resume the exact blocked command with a legacy state value.
Definition SequenceRuntime.cpp:492
void setStepRegistry(const StepKindRegistry *registry)
Bind the step vocabulary; passing nullptr disables non-core steps.
Definition SequenceRuntime.h:190
eve::Result< void > start(const SequenceAsset *asset, eve::Value bindings=eve::Value::Object{})
Begin a sequence at the asset entry node.
Definition SequenceRuntime.cpp:142
const SequenceAsset * asset() const
Borrowed active asset, or nullptr. @lifetime Owned by the caller of start.
Definition SequenceRuntime.h:218
const eve::Value & bindings() const
Definition SequenceRuntime.h:222
eve::Result< void > selectRouteForTransaction(std::string_view routeLabel)
Enter one already prepared choice route transactionally.
Definition SequenceRuntime.cpp:420
eve::Result< void > restoreState(const eve::Value &in)
Restore a captured cursor through the configured asset resolver.
Definition SequenceRuntime.cpp:554
void setAssetResolver(AssetResolver resolver)
Definition SequenceRuntime.h:187
bool hasInLanguage(const std::string &lang, const std::string &key) const
Return whether one exact locale owns key, without default-language substitution.
Definition I18n.cpp:484
Synchronous participant contract for one coordinator transaction.
Definition Transaction.h:128
Immutable context shared by every participant of one transaction.
Definition Transaction.h:30
const char * conditionReasonCodeName(ConditionReasonCode code) noexcept
Return the stable lowercase spelling of a condition reason code. @ownership Borrowed process-static t...
Definition Condition.cpp:82
Definition ConversationAuthoring.cpp:12
eve::Result< std::vector< eve::StateMutation > > decodeSequenceStateMutations(const eve::Value &payload)
Decode dialogue state mutations from one canonical payload object.
Definition DialogueSequence.cpp:126
eve::Result< void > renameConversationNode(std::vector< eve::dnut::SequenceAsset > &assets, const std::string &assetId, const std::string &oldId, const std::string &newId)
Rename one stable node and rewrite all references inside its asset.
Definition ConversationToolchain.cpp:96
eve::Value toCanonicalValue(const eve::StateValue &value)
Convert the legacy reload value into the canonical common value.
Definition DialogueState.cpp:203
std::string sequenceRoutePayloadString(const eve::dnut::SequenceRoute &route, std::string_view key)
Read an optional string from a route payload; missing or ill-typed values yield empty.
Definition DialogueSequence.cpp:113
eve::Result< void > lintConversationWorkspace(const std::vector< eve::dnut::SequenceAsset > &assets, const std::string &label, std::vector< ConversationDiagnostic > &diagnostics)
Lint a complete multi-file registry, including cross-asset call targets.
Definition ConversationToolchain.cpp:16
eve::StateValue toDialogueStateValue(const eve::Value &value)
Convert a canonical value to the legacy reload representation.
Definition DialogueState.cpp:225
eve::Result< DnutDocument > compileDnutDocument(const std::string &source, const std::string &path, std::vector< ConversationDiagnostic > &diagnostics)
Compile and lint the complete pools-plus-conversations dnut document.
Definition ConversationCompiler.cpp:26
std::string sequencePayloadString(const eve::dnut::SequenceNode &node, std::string_view key)
Read an optional string from a node payload; missing or ill-typed values yield empty.
Definition DialogueSequence.cpp:108
std::string exportConversationLocalizationCsv(const std::vector< eve::dnut::SequenceAsset > &assets)
Export stable line IDs and localization keys as RFC4180 CSV.
Definition ConversationCompiler.cpp:124
eve::Result< PaymentSpec > decodeSequencePayment(const eve::Value &payload)
Decode an optional dialogue payment from one canonical payload object.
Definition DialogueSequence.cpp:118
eve::Result< std::string > conversationStateToJson(const StateValue &state)
Serialize a dialogue state tree as JSON.
Definition ConversationPersistence.cpp:71
eve::Result< StateValue > conversationStateFromJson(const std::string &json)
Parse a JSON dialogue state tree.
Definition ConversationPersistence.cpp:85
eve::Result< std::vector< eve::dnut::SequenceAsset > > importYarnConversation(const std::string &source, const std::string &path, std::vector< ConversationDiagnostic > &diagnostics)
Import Yarn Spinner source through the canonical validated conversation schema.
Definition ConversationImporter.cpp:262
eve::Value DataValue
Canonical data value used by dialogue pools, conditions and scripts.
Definition Dialogue.h:36
eve::Result< std::vector< eve::dnut::SequenceAsset > > importTweeConversation(const std::string &source, const std::string &path, std::vector< ConversationDiagnostic > &diagnostics)
Import Twee 3 passage source through the canonical validated conversation schema.
Definition ConversationImporter.cpp:273
eve::Result< void > renameConversationAsset(std::vector< eve::dnut::SequenceAsset > &assets, const std::string &oldId, const std::string &newId)
Rename an asset and rewrite every cross-asset call target.
Definition ConversationToolchain.cpp:77
eve::Result< void > registerDialogueSequenceSteps(eve::dnut::StepKindRegistry ®istry)
Register dialogue's line, choice, and command contracts and validators.
Definition DialogueSequence.cpp:161
@ RolledBack
@ Dialogue
ssq::Table projectResult(HSQUIRRELVM vm, Result< void > &&result)
Consume and project a void native Result using the common schema.
Definition SquirrelBinding.cpp:470
Result< Value > valueFromSquirrel(HSQUIRRELVM vm, SQInteger index, const SquirrelValueOptions &options)
Convert one Squirrel value into the canonical owning Value tree.
Definition SquirrelBinding.cpp:342
@ InvalidArgument
@ NotFound
@ PreconditionViolation
@ Unsupported
@ Failed
@ ParseError
@ Conflict
@ Applied
Definition Container.h:602
Borrowed world and cross-domain callbacks used by all conversations in this facade.
Definition DialogueFlow.h:54
std::string subject
Stable world subject used by state-backed conditions.
Definition DialogueFlow.h:56
std::function< eve::Result< std::string >(const std::string &)> contentReader
Injected UTF-8 content reader used by loadDnutFileChecked.
Definition DialogueFlow.h:84
CommandRequestHandler operationHandler
Handler for requests whose kind is Operation.
Definition DialogueFlow.h:64
CommandParticipantFactory commandParticipantFactory
Optional factory used to stage an atomic operation or Action.
Definition DialogueFlow.h:78
std::function< eve::decision::ConditionResult(const eve::Value &)> conditionEvaluator
Optional custom condition evaluator; empty uses the shared adapter.
Definition DialogueFlow.h:62
DialogueAccountBindings accounts
Borrowed authoritative money/reputation account adapters.
Definition DialogueFlow.h:68
CommandRequestHandler gameplayActionHandler
Handler for requests whose kind is GameplayAction.
Definition DialogueFlow.h:66
eve::IStateMutation * stateMutation
Borrowed all-or-nothing world mutation provider.
Definition DialogueFlow.h:60
Canonical money/reputation cost attached to a dialogue choice or command.
Definition DialoguePayment.h:36
bool empty() const noexcept
Whether this specification contains no charge.
Definition DialoguePayment.h:43
Immutable, parameterized and versioned compiled sequence.
Definition SequenceAsset.h:77
Immutable request emitted by a generic command node.
Definition SequenceRuntime.h:33
Structured response returned by a generic command handler.
Definition SequenceRuntime.h:44
Outcome of one authored condition, as seen by the language core.
Definition SequenceRuntime.h:24
Correlation metadata shared by a mutation transaction.
Definition StateAccess.h:57