主题
C++ 接入指南
v2.1.0本指南介绍如何在 C++ 插件中接入 MoneyCore 经济系统。
📥 立即下载
只需 1 个头文件,完整 API 接口!
下载 money_api.h只需 1 个头文件,完整 API 接口!
📥 准备工作
1. 下载 API 文件
将 money_api.h 复制到你的插件 include/ 目录:
your_plugin/
├── include/
│ └── money_api.h ← 放这里
├── src/
│ └── main_plugin.cpp
└── CMakeLists.txt2. 包含头文件
cpp
#include "money_api.h"🚀 快速开始
获取服务
cpp
auto service = getServer().getServiceManager().load<IMoneyService>("MoneyService");
if (service) {
// 使用服务...
}完整示例
cpp
#include <endstone/plugin/plugin.h>
#include "money_api.h"
class MyShopPlugin : public endstone::Plugin {
public:
void onEnable() override {
getLogger().info("MyShopPlugin 已启动!");
}
bool buyItem(endstone::Player &player, const std::string &item, double price) {
auto service = getServer().getServiceManager().load<IMoneyService>("MoneyService");
if (!service) {
player.sendMessage("§c经济系统未加载!");
return false;
}
std::string playerName = player.getName();
// 尝试扣款
if (service->trySubMoney(playerName, price, "购买" + item)) {
player.sendMessage("§a购买成功!花费 " +
service->formatMoney(price) + " " +
service->getCurrencySuffix());
// 给予物品...
return true;
} else {
double bal = service->getMoney(playerName);
player.sendMessage("§c余额不足!当前余额: " +
service->formatMoney(bal) + " " +
service->getCurrencySuffix());
return false;
}
}
void showBalance(endstone::Player &player) {
auto service = getServer().getServiceManager().load<IMoneyService>("MoneyService");
if (!service) return;
double bal = service->getMoney(player.getName());
player.sendMessage("§e你的余额: §a" +
service->formatMoney(bal) + " " +
service->getCurrencySuffix());
}
};📋 常见用法
检查并扣款
cpp
// 推荐方式:原子操作
if (service->trySubMoney(playerName, 100, "购买道具")) {
// 扣款成功
giveItem(player, "diamond_sword");
} else {
// 余额不足
player.sendMessage("§c余额不足!");
}奖励玩家
cpp
service->addMoney(playerName, 500, "完成任务奖励");
player.sendMessage("§a获得 500 金币奖励!");获取排行榜
cpp
auto top = service->getTopPlayers(10);
for (int i = 0; i < top.size(); i++) {
getLogger().info("#{}: {} - {}",
i + 1,
top[i].first,
service->formatMoney(top[i].second));
}玩家间交易
cpp
if (service->transfer(fromPlayer, toPlayer, amount, "玩家交易")) {
// 转账成功
} else {
// 余额不足
}📋 API 方法一览
| 方法 | 返回值 | 说明 |
|---|---|---|
getMoney(playerName) | double | 获取余额 |
setMoney(playerName, amount) | void | 设置余额 |
addMoney(playerName, amount, reason) | void | 增加余额(有音效、记录) |
subMoney(playerName, amount, reason) | void | 扣除余额(有音效、记录) |
hasMoney(playerName, amount) | bool | 检查余额是否足够 |
trySubMoney(playerName, amount, reason) | bool | 尝试扣款 ✨推荐 |
transfer(from, to, amount, reason) | bool | 转账(原子操作) |
playerExists(playerName) | bool | 玩家是否存在 |
formatMoney(amount) | std::string | 格式化金额 |
getCurrencySuffix() | std::string | 获取货币后缀 |
getTopPlayers(limit) | std::vector<std::pair<std::string, double>> | 获取排行榜 |
getTotalEconomy() | double | 获取服务器总经济 |
⚠️ 注意事项
- 每次使用时获取服务 - 不要缓存服务指针,插件加载顺序不确定
- 检查服务是否存在 - MoneyCore 可能未安装
- 使用原子操作 - 推荐
trySubMoney而非hasMoney + subMoney - 提供操作原因 - 所有扣款/加款操作都应提供 reason
重要
不要在 onEnable() 中缓存服务指针!应该每次需要时调用 load<IMoneyService>。