载入中...
搜索中...
未找到
RPG.h
浏览该文件的文档.
1#pragma once
2#include "common/Export.h"
3
4
21#include "common/Module.h"
22#include "rpg/LevelSystem.h"
23#include "rpg/BattleVictory.h"
24#include "rpg/RPGActor.h"
25#include "rpg/StatusTypes.h"
26#include "rpg/SkillTypes.h"
27#include "rpg/VitalsSystem.h"
28
29#include <memory>
30#include <string>
31#include <vector>
32
33namespace eve {
34class SubjectRef;
35namespace inventory {
36class Bag;
37class EquipmentSet;
38}
39} // namespace eve
40
41namespace eve::rpg {
42
43struct SettlementContext;
44class Tracker;
45class Battle;
46class BattleControl;
47class ProductControl;
48class Party;
49class GameState;
50class WorldState;
51class StoryEventSession;
52class RpgStorySession;
53struct WorldLootRequest;
54
57public:
60 RPG() = default;
62 ~RPG() override = default;
63
73 RPGActor *newActor();
81 Party *newParty();
82
84 int registerEffectsFromJson(const std::string &json);
86 void clearEffectDefinitions();
88 int getEffectDefinitionCount();
89
91 int registerSkillsFromJson(const std::string &json);
93 void clearSkillDefinitions();
95 int getSkillDefinitionCount();
96
98 int registerQuestsFromJson(const std::string &json);
105 [[nodiscard]] eve::Result<int> replaceQuestsFromJson(const std::string &json);
106 void clearQuestDefinitions();
108 int getQuestDefinitionCount();
110 bool hasQuestDefinition(const std::string &id) const;
117 [[nodiscard]] eve::Result<int> claimQuestRewards(Tracker *tracker, GameState *gameState,
118 inventory::Bag *bag, const std::string &questId);
125 [[nodiscard]] eve::Result<int> collectWorldLoot(Tracker *tracker, GameState *gameState,
126 inventory::Bag *bag,
135 settleBattleVictory(RPGActor *actor, Tracker *tracker, GameState *gameState,
138 [[nodiscard]] eve::Result<int> buyFromShop(GameState *gameState, inventory::Bag *bag,
139 const std::string &currencyId,
140 const std::string &itemId, int quantity,
141 double unitPrice);
143 [[nodiscard]] eve::Result<int> sellToShop(GameState *gameState, inventory::Bag *bag,
144 const std::string &currencyId,
145 const std::string &itemId, int quantity,
146 double unitPrice);
148 [[nodiscard]] eve::Result<int> replaceShopOffersFromJson(const std::string &json);
150 int getShopOfferCount() const;
152 void clearShopOffers();
154 bool hasShopOffer(const std::string &offerId) const;
156 std::string getShopOfferId(int index) const;
158 std::string getShopOfferItemId(int index) const;
160 std::string getShopOfferName(int index) const;
162 std::string getShopOfferDescription(int index) const;
164 int getShopOfferBuyPrice(int index) const;
166 int getShopOfferSellPrice(int index) const;
168 [[nodiscard]] eve::Result<int> buyShopOffer(GameState *gameState, inventory::Bag *bag,
169 const std::string &currencyId,
170 const std::string &offerId, int quantity);
172 [[nodiscard]] eve::Result<int> sellShopOffer(GameState *gameState, inventory::Bag *bag,
173 const std::string &currencyId,
174 const std::string &offerId, int quantity);
176 [[nodiscard]] eve::Result<int> replaceEncountersFromJson(const std::string &json);
177 void clearEncounters();
179 bool hasEncounter(const std::string &encounterId) const;
181 int getEncounterMemberCount(const std::string &encounterId) const;
190 RPGActor *newEncounterActor(const std::string &encounterId);
199 RPGActor *newEncounterMemberActor(const std::string &encounterId, int memberIndex);
201 std::string getEncounterDisplayName(const std::string &encounterId) const;
203 double getEncounterMaxHp(const std::string &encounterId) const;
205 std::string getEncounterMemberDisplayName(const std::string &encounterId, int memberIndex) const;
207 double getEncounterMemberMaxHp(const std::string &encounterId, int memberIndex) const;
209 [[nodiscard]] eve::Result<int> replaceBattleTacticsFromJson(const std::string &json);
210 void clearBattleTactics();
212 [[nodiscard]] eve::Result<std::string> queueBattleTactic(Battle *battle, RPGActor *actor,
213 const std::string &tacticsId);
215 [[nodiscard]] eve::Result<int> replaceStoryEventsFromJson(const std::string &json);
217 void clearStoryEvents();
219 int getStoryEventCount() const;
221 bool hasStoryEvent(const std::string &eventId) const;
229 StoryEventSession *newStoryEventSession();
231 [[nodiscard]] eve::Result<int> replaceStoriesFromDnut(const std::string &source, const std::string &path);
233 void clearStories();
235 int getStoryCount() const;
237 bool hasStory(const std::string &storyId) const;
245 RpgStorySession *newStorySession();
248 settleEncounterVictory(RPGActor *actor, Tracker *tracker, GameState *gameState,
249 const std::string &encounterId, const std::string &mapId,
250 const std::string &objectId);
259 Tracker *newTracker();
260
262 int getLevelUpEventCount() const;
264 RPGActor *getLevelUpEventActor(int index) const;
266 int getLevelUpEventPreviousLevel(int index) const;
268 int getLevelUpEventNewLevel(int index) const;
269
271 int getVitalsEventCount() const;
273 RPGActor *getVitalsEventActor(int index) const;
275 std::string getVitalsEventResource(int index) const;
277 std::string getVitalsEventAction(int index) const;
279 double getVitalsEventAmount(int index) const;
281 std::string getVitalsEventSource(int index) const;
283 double getVitalsEventCurrent(int index) const;
285 double getVitalsEventMax(int index) const;
286
288 int registerItemStatsFromJson(const std::string &itemId, const std::string &json);
290 void clearItemStats(const std::string &itemId);
292 void clearAllItemStats();
294 int getItemStatCount();
296 int syncEquipModifiers(RPGActor *actor, inventory::EquipmentSet *equip);
297
299 int registerLootTablesFromJson(const std::string &json);
301 void clearLootTables();
303 int getLootTableCount();
305 int rollLoot(const std::string &tableId, inventory::Bag *bag, int seed);
306
308 int registerTraitsFromJson(const std::string &json);
310 void clearTraitDefinitions();
312 int getTraitDefinitionCount();
313
315 int registerClassesFromJson(const std::string &json);
317 void clearClassDefinitions();
319 int getClassDefinitionCount();
320
322 int registerSkillDamage(const std::string &skillId, const std::string &damageType,
323 const std::string &formula, const std::string &element,
324 double critChance, int hitChance);
326 void clearSkillDamage();
334 Battle *newBattle();
343 [[nodiscard]] Result<std::unique_ptr<BattleControl>> newBattleControl(Battle *battle,
344 SubjectRef instance);
351 [[nodiscard]] Result<std::unique_ptr<ProductControl>> newProductControl(
352 SubjectRef instance, GameState *gameState, Tracker *tracker, inventory::Bag *bag);
353
360 GameState *newGameState();
361
370 WorldState *newWorldState(GameState *gameState);
375 GameState *globalGameState();
376
378 void update(float dt);
379
381 int getTickEventCount() const;
390 RPGActor *getTickEventActor(int index) const;
392 int getTickEventInstanceId(int index) const;
394 std::string getTickEventEffectId(int index) const;
396 std::string getTickEventSource(int index) const;
398 int getTickEventStacks(int index) const;
399
401 int getStatusChangeEventCount() const;
410 RPGActor *getStatusChangeEventActor(int index) const;
412 int getStatusChangeEventInstanceId(int index) const;
414 std::string getStatusChangeEventEffectId(int index) const;
416 std::string getStatusChangeEventSource(int index) const;
418 std::string getStatusChangeEventAction(int index) const;
420 int getStatusChangeEventStacks(int index) const;
422 std::string getStatusChangeEventReason(int index) const;
423
425 int getCastEventCount() const;
434 RPGActor *getCastEventCaster(int index) const;
443 RPGActor *getCastEventTarget(int index) const;
445 std::string getCastEventSkillId(int index) const;
446
455 SettlementContext *newSettlementContext();
457 void runSettlement(const std::string &pipeline, SettlementContext *ctx);
459 int getSettlementStageCount(const std::string &pipeline);
461 bool hasSettlementStage(const std::string &pipeline, const std::string &stage);
463 bool setSettlementStageEnabled(const std::string &pipeline, const std::string &stage,
464 bool enabled);
466 bool setSettlementStagePriority(const std::string &pipeline, const std::string &stage,
467 int priority);
469 bool removeSettlementStage(const std::string &pipeline, const std::string &stage);
471 void clearSettlementPipeline(const std::string &pipeline);
472
473private:
474 std::vector<StatusTickEvent> ticks_;
475 std::vector<StatusChangeEvent> changes_;
476 std::vector<SkillCastEvent> casts_;
477 std::vector<LevelUpEvent> levelUps_;
478 std::vector<VitalsEvent> vitals_;
479};
480
481} // namespace eve::rpg
LogicalId itemId
Atomic post-battle progression and persistent-world settlement.
int priority
#define EVENGINE_API_PLATFORM
Definition Export.h:107
const GltfImportRequest & request
角色成长:等级 / 经验 / 升级。
std::string path
Definition PlayHost.cpp:110
std::uint32_t seed
Definition PointSet.cpp:807
std::string damageType
std::string element
uint32_t index
const UnitySourceAsset & source
当前资源(hp/mana...)的受伤 / 治疗 / 复活 / 死亡。
EVENGINE_API_FOUNDATION public API.
Definition Module.h:46
Move-only operation result carrying either a value or Status.
Definition Result.h:155
Strong, domain-neutral reference to a runtime subject.
Definition SubjectRef.h:26
格子型物品容器(脚本可直接操作)。
Definition Bag.h:21
EVENGINE_API_FOUNDATION public API.
Definition Equipment.h:19
一场回合制战斗(任意阵营数)。 @ownership 由调用方创建/销毁;Battle 不持有参与者的所有权(参与者为借用 ECS actor)。 @thread 在单一模拟线程上驱动整场战斗。
Definition Battle.h:54
一份游戏状态(开关/变量/独立变量)。
Definition GameState.h:25
Authoritative ordered relationship between stable party member IDs and RPG actors....
Definition Party.h:24
属性 / 状态 / 技能三表合一的 ECS 实体。
Definition RPGActor.h:34
RPG 模块(eve.RPG):Actor 工厂 + 定义注册 + 帧调度 + 事件缓存。
Definition RPG.h:56
RPG()=default
Rpg.
~RPG() override=default
Rpg.
Caller-owned cursor over one published .dnut story.
Definition RpgDialect.h:275
Caller-owned runtime cursor over a copied story-event definition.
Definition StoryEvent.h:68
一份任务进度 + 本实例事件队列。
Definition Tracker.h:26
Non-owning typed adapter for persistent per-map object lifecycle state.
Definition WorldState.h:19
constexpr int Party
Definition Battle.h:31
RPG 模块的基础实体:把属性 / 状态 / 技能三张表挂到一个 ECS 实体上。
::eve::SubjectRef SubjectRef
Strong reference to a runtime subject.
Definition Targeting.h:76
Build metadata (engine git commit, build time, third-party version).
Definition Build.cpp:16
bool enabled
Complete data needed to settle one victorious persistent encounter.
结算上下文:通用的读写数据袋,字段完全由调用方与各阶段自行约定。
Definition Settlement.h:35
Complete data needed to settle one persistent loot object.