载入中...
搜索中...
未找到
EconomyControl.cpp
浏览该文件的文档.
26 return failure<const Value::Object*>(DiagnosticCode::InvalidArgument, "economy parameters must be an object",
31Result<std::string> text(const Value::Object& value, std::string_view name, std::string fallback = {}) {
35 return failure<std::string>(DiagnosticCode::InvalidArgument, "economy parameter must be a string",
78 DiagnosticCode::InvalidArgument, "economy publication needs valid instance and owner ids", "instance"));
95 Diagnostic::error(DiagnosticCode::NotFound, "that economy instance is not published", "instance"));
181Result<GameplayObservation> EconomyControl::observeGameplay(const GameplaySession& session, SubjectRef instance) const {
184 return failure<GameplayObservation>(DiagnosticCode::NotFound, "economy gameplay instance was not found",
198Result<std::vector<GameplayActionDescriptor>> EconomyControl::availableGameplayActions(const GameplaySession& session,
202 if (!observed) return Result<std::vector<GameplayActionDescriptor>>::failure(observed.status());
219 actions.push_back({id(kCredit), Value(Value::Object{{"type", stringType}, {"amount", integerType}})});
223Result<GameplayCommandReceipt> EconomyControl::submitGameplay(const GameplaySession& session, SubjectRef instance,
227 return failure<GameplayCommandReceipt>(DiagnosticCode::NotFound, "economy gameplay instance was not found",
233 return failure<GameplayCommandReceipt>(DiagnosticCode::InvalidArgument, "command id must not be empty",
237 DiagnosticCode::Conflict, "economy command was based on a stale observation", "command.expectedRevision");
264 DiagnosticCode::NotFound, "the ledger does not know that resource type", "command.parameters.type");
269 return failure<GameplayCommandReceipt>(DiagnosticCode::Failed, "the ledger rejected that spend",
289 return failure<GameplayCommandReceipt>(DiagnosticCode::Unsupported, "unsupported economy action",
302 {"instance", Value(entry->instance.format())}, {"detail", Value(detail)}, {"quantity", Value(applied)}});
325 Value(Value::Object{{"action", Value(action)}, {"detail", Value(detail)}, {"quantity", Value(applied)}});
326 return Result<GameplayCommandReceipt>::success(std::move(receipt), Status::success(StatusCode::Applied));
329Result<GameplayObservation> EconomyControl::advanceGameplay(const GameplaySession& session, SubjectRef instance,
333 return failure<GameplayObservation>(DiagnosticCode::NotFound, "economy gameplay instance was not found",
336 return failure<GameplayObservation>(DiagnosticCode::Conflict, "economy simulation tick must increase",
344Result<std::vector<GameplayEvent>> EconomyControl::gameplayEvents(const GameplaySession& session, SubjectRef instance,
350 return failure<std::vector<GameplayEvent>>(DiagnosticCode::NotFound, "economy gameplay instance was not found",
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
const std::string & format() const noexcept
Returns the canonical namespace:name representation.
Definition Identity.h:436
static std::optional< LogicalId > parse(std::string_view text)
Parses a scoped logical name.
Definition Identity.cpp:36
static Result failure(Status status)
Construct a failed result from a structured status.
Definition Result.h:175
static Status success(StatusCode code=StatusCode::Ok)
Construct a successful status with an explicit non-error outcome.
Definition Status.h:81
bool isValid() const noexcept
Return whether this reference is valid and non-nil.
Definition SubjectRef.h:38
EconomyControl()
Create an unpublished adapter and register it as the economy domain.
Definition EconomyControl.cpp:65
Result< GameplayCommandReceipt > submitGameplay(const GameplaySession &session, SubjectRef instance, const GameplayCommand &command) override
Validate authority and atomically submit one domain command.
Definition EconomyControl.cpp:223
Result< GameplayObservation > observeGameplay(const GameplaySession &session, SubjectRef instance) const override
Observe one provider-owned gameplay instance without mutation.
Definition EconomyControl.cpp:181
Result< void > unpublish(SubjectRef instance)
Drop one publication; NotFound when that instance is not published.
Definition EconomyControl.cpp:90
std::vector< SubjectRef > gameplayInstances() const override
Instances currently served, in publication order.
Definition EconomyControl.cpp:113
Result< void > publish(SubjectRef instance, SubjectRef owner, int player)
Publish one player ledger under a stable instance identity.
Definition EconomyControl.cpp:75
Result< std::vector< GameplayActionDescriptor > > availableGameplayActions(const GameplaySession &session, SubjectRef instance, SubjectRef subject) const override
Discover currently legal player-semantic actions for one subject.
Definition EconomyControl.cpp:198
std::string_view gameplayDomain() const noexcept override
Stable provider domain used for discovery and routing.
Definition EconomyControl.cpp:111
std::vector< SubjectRef > instances() const
Published instance identities, in publication order.
Definition EconomyControl.cpp:104
Result< GameplayObservation > advanceGameplay(const GameplaySession &session, SubjectRef instance, const SimulationStep &step) override
Advance one provider-owned instance using injected deterministic time.
Definition EconomyControl.cpp:329
Result< std::vector< GameplayEvent > > gameplayEvents(const GameplaySession &session, SubjectRef instance, std::uint64_t afterSequence) const override
Return events strictly newer than an instance-local sequence cursor.
Definition EconomyControl.cpp:344
static int credit(int player, const std::string &type, int amount)
入账并广播事件。
Definition EconomySystem.cpp:32
static bool debit(int player, const std::string &type, int amount)
出账并广播事件;余额不足返回 false。
Definition EconomySystem.cpp:40
static EconomyLedger::Snapshot snapshot(int player)
取一个玩家账本的完整只读快照(含未注册类型的余额与流水)。
Definition EconomySystem.cpp:56
static int getCap(int player, const std::string &type)
玩家该类型持有上限(0=不限)。
Definition EconomySystem.cpp:48
static const ResourceTypeDef * find(const std::string &id)
按 id 查询;未注册时返回 nullptr。
Definition ResourceType.cpp:19
static const ResourceTypeDef * typeAt(int index)
按 id 字典序返回第 index 个类型定义。
Definition ResourceType.cpp:27
std::variant< std::monostate, std::int64_t, double, std::string, bool > Value
Definition Database.h:26
Definition IEconomy.h:5
@ Renewable
@ Infinite
@ InvalidArgument
@ NotFound
@ PreconditionViolation
@ Unsupported
@ Failed
@ Conflict
@ NoOp
@ Applied
@ PlayerEquivalent
Owning evidence that a gameplay authority accepted one command.
Definition GameplayControl.h:62
std::uint64_t resultingRevision
Definition GameplayControl.h:66
One player-semantic command submitted to a domain authority.
Definition GameplayControl.h:52
Owning event projection safe across frames and process boundaries.
Definition GameplayControl.h:71
Immutable owning observation of one authoritative gameplay instance.
Definition GameplayControl.h:43
Owning authorization context shared by player, script and automation adapters.
Definition GameplayControl.h:30
Owning deterministic copy of all balance and accounting counters.
Definition EconomyLedger.h:17
std::map< std::string, int > income
Definition EconomyLedger.h:20
std::map< std::string, int > current
Definition EconomyLedger.h:18
std::map< std::string, int > expense
Definition EconomyLedger.h:21