载入中...
搜索中...
未找到
InventoryResourceAccount.cpp
浏览该文件的文档.
28 eve::DiagnosticCode::InvalidArgument, "inventory account requires a validated non-empty CostSpec", "cost"));
55 eve::Diagnostic::error(eve::DiagnosticCode::Conflict, "inventory resource reservation is no longer active",
93 eve::DiagnosticCode::InvariantViolation, "inventory item quantity must not be negative", resource.value()));
97eve::Result<std::int64_t> InventoryResourceAccount::activeReservationsFor(const ResourceId& resource) const {
143 eve::DiagnosticCode::InvariantViolation, "inventory resource reservation id exhausted", "reservation"));
146 const auto [it, inserted] = reservations_.emplace(id, ReservationRecord{cost, ReservationState::Active});
149 eve::DiagnosticCode::Conflict, "inventory resource reservation id was already used", "reservation"));
186 eve::DiagnosticCode::PreconditionViolation, "inventory debit would make item quantity negative",
192 eve::DiagnosticCode::Failed, "inventory debit was not applied in full", item.resource.value()));
204 return eve::Result<void>::failure(eve::Diagnostic::error(eve::DiagnosticCode::PreconditionViolation,
261 return eve::Result<Receipt>::success(std::move(receipt), eve::Status::success(eve::StatusCode::Applied));
272 return eve::Result<Receipt>::success(std::move(receipt), eve::Status::success(eve::StatusCode::Applied));
297 eve::DiagnosticCode::InvalidArgument, "inventory resource reservation is invalid", "reservation"));
298 if (reservation.account != accountNonce_) return eve::Result<Receipt>::failure(foreignReservation());
305 if (it->second.state != ReservationState::Active) return eve::Result<Receipt>::failure(terminalReservation());
311 Receipt receipt{accountNonce_, nextReceipt_, reservation.id, ReceiptOperation::Debit, it->second.cost};
316 return eve::Result<Receipt>::success(std::move(receipt), eve::Status::success(eve::StatusCode::Applied));
323 eve::DiagnosticCode::InvalidArgument, "inventory resource reservation is invalid", "reservation"));
324 if (reservation.account != accountNonce_) return eve::Result<void>::failure(foreignReservation());
331 if (it->second.state != ReservationState::Active) return eve::Result<void>::failure(terminalReservation());
336eve::Result<CostSpec> ItemCostAdapter::itemCost(std::string_view itemId, std::int64_t quantity) {
340eve::Result<CostSpec> ItemCostAdapter::ammoCost(std::string_view ammoItemId, std::int64_t quantity) {
Resource-account and cost adapters backed by Bag item stacks.
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
static Result failure(Status status)
Construct a failed result from a structured status.
Definition Result.h:175
static Status failure(StatusCode code, Diagnostic diagnostic)
Construct a failed status with one diagnostic.
Definition Status.h:84
static Status success(StatusCode code=StatusCode::Ok)
Construct a successful status with an explicit non-error outcome.
Definition Status.h:81
constexpr std::uint64_t value() const noexcept
Returns the underlying value at an explicit protocol boundary.
Definition StrongUint64.h:26
eve::Result< eve::resource::Reservation > reserve(const eve::resource::CostSpec &cost) override
Reserve all items of a cost without changing visible balances.
Definition InventoryResourceAccount.cpp:135
eve::Result< eve::resource::Receipt > debit(const eve::resource::CostSpec &cost) override
Atomically debit all items immediately.
Definition InventoryResourceAccount.cpp:248
eve::Result< eve::resource::Receipt > credit(const eve::resource::CostSpec &cost) override
Atomically credit all items immediately.
Definition InventoryResourceAccount.cpp:264
eve::Result< void > rollback(const eve::resource::Reservation &reservation) override
Release one active reservation without changing balances.
Definition InventoryResourceAccount.cpp:319
eve::Result< eve::resource::Receipt > commit(const eve::resource::Reservation &reservation) override
Commit one active reservation as an atomic debit.
Definition InventoryResourceAccount.cpp:293
InventoryResourceAccount(Bag &bag)
Bind the adapter to one caller-owned inventory bag.
Definition InventoryResourceAccount.cpp:81
eve::Result< eve::resource::Affordability > canAfford(const eve::resource::CostSpec &cost) const override
Query whether a cost can be paid from currently available funds.
Definition InventoryResourceAccount.cpp:114
static int addItem(Bag *bag, const std::string &itemId, int quantity)
返回实际放入数量(可能部分成功)。
Definition InventorySystem.cpp:366
static bool canAdd(Bag *bag, const std::string &itemId, int quantity, std::string *reason=nullptr)
Can add.
Definition InventorySystem.cpp:350
static int removeItem(Bag *bag, const std::string &itemId, int quantity)
Definition InventorySystem.cpp:551
static eve::Result< eve::resource::CostSpec > itemCost(std::string_view itemId, std::int64_t quantity)
Build a positive cost for an inventory item.
Definition InventoryResourceAccount.cpp:336
static eve::Result< eve::resource::CostSpec > ammoCost(std::string_view ammoItemId, std::int64_t quantity)
Build a positive cost for ammunition stored as an item stack.
Definition InventoryResourceAccount.cpp:340
constexpr bool isZero() const noexcept
Whether this nonce is invalid/zero.
Definition ResourceAccount.h:246
Non-negative integral quantity used by resource accounts.
Definition ResourceAccount.h:75
const std::vector< ResourceCost > & items() const noexcept
Return canonical items as a read-only borrowed view.
Definition ResourceAccount.h:185
bool isValid() const noexcept
Whether this value contains a validated non-empty cost.
Definition ResourceAccount.h:175
Strong identity of a resource kind, such as mana or gold.
Definition ResourceAccount.h:40
运行时容器:固定格数的背包 / 箱子 / 商店栏等。 行为由 InventorySystem 提供;本类暴露便于脚本绑定的薄封装方法。
Definition AvatarInstance.h:37
eve::Result< AccountNonce > allocateAccountNonce()
Allocate a process-local account identity for a credential issuer.
Definition ResourceAccount.cpp:27
eve::detail::StrongUint64< eve::detail::ResourceReceiptIdTag > ReceiptId
Process-local id of an applied resource operation.
Definition ResourceAccount.h:261
ReceiptOperation
Operation represented by a receipt returned from an account.
Definition ResourceAccount.h:221
std::vector< DiagnosticDetail > DiagnosticDetails
Owning collection of diagnostic details with stable insertion order.
Definition Diagnostic.h:88
@ InvalidArgument
@ NotFound
@ PreconditionViolation
@ Unsupported
@ InvariantViolation
@ Failed
@ Conflict
@ NotFound
@ Applied
@ Rejected
@ Failed
@ Conflict
Receipt proving one atomic debit or credit was applied.
Definition ResourceAccount.h:294
Reservation credential returned by a successful reserve operation.
Definition ResourceAccount.h:279