游戏区服Config Data
1. Overview
游戏区服config data是一组与游戏区服相关的数据。它通常用于存储适用于整个游戏区服的config data,例如关卡经验坡道、伤害规则等。目前,开发者可以通过在门户上自定义一组键值对数据来构建游戏区服config data。游戏区服config data可以通过 CLI 工具 或在门户上手动修改。但是,它对于游戏客户端/服务器是只读的。
完成本教程后,您将学习以下内容:
如何在门户上自定义游戏区服config data。
如何在代码中查询游戏区服config data。
游戏区服config data
的用法与游戏config data
几乎相同,主要区别在于游戏区服config data
的范围仅限于游戏区服,而游戏config data
适用于整个游戏。
2. 自定义游戏区服config data
登录到门户网站,进入控制台,打开 Title Region > Config Data:
2.1 添加新的数据项
点击 Add
按钮添加新的数据项:
字段说明:
Key:道具名称,由字母、数字、下划线、空格组成,必须以字母开头,长度不能超过128个字符。
Is Json:道具值是否需要遵守JSON约束,如果开发者希望在代码中以
JsonValue
的形式访问该道具值,建议设置为true,在编辑值时会进行JSON约束检查。Server Only:道具是否只能由服务端访问。
True:游戏服务器可读,游戏客户端不可见。
False:游戏服务器和游戏客户端均可读。
Description:道具描述信息,仅用于道具管理,
PgosSDK
不可见。Value:道具值,最大字符长度为1048576(1*1024*1024)。
- 通过
PgosSDK
查询得到的字符串值为:- 如果
Is Json
为false:与Portal编辑框中的字符串相同。 - 如果
Is Json
为true:删除Portal编辑框中的空白字符后的字符串。
- 如果
- 通过
Item 值将以 FKVDataValue
结构体的形式呈现,开发者可以使用 AsStr
、AsInt32
、AsInt64
、AsFloat
、AsDouble
、AsJson
函数获取所需的数据格式。可创建的标题区域config data项数量上限为 1000 个。
2.2 编辑数据字段
如果开发者想要修改数据字段,点击操作
栏中的编辑
链接:
弹出编辑面板:
当 Is Json
设置为 true 时,Value
编辑框将检查 JSON 约束。
2.3 移除现有数据项
如果不再需要某些数据项,可以选中它们并点击移除按钮。已移除的条目无法通过PgosSDK
查询。
2.4 上传 JSON
标题区域config data可以通过本地的 JSON 文件导入,JSON 文件的内容是一个 JsonObject,与标题区域config data中的 key-value 一一对应,也就是说 JsonObject 中第一级的 key-value 将作为标题区域config data的 key-value,例如:
{
"AndroidPushSenderId": "594923569376",
"CharacterLevelRamp": {
"1": 0,
"2": 2725,
"3": 5440,
"4": 8155,
"5": 10875,
"6": 13595,
"7": 16310,
"8": 19035,
"9": 21750,
"10": 24465
},
"CommunityWebsite": "http://mygame.community.gl",
"MinimumInterstitialWait": "10.0",
"NPC Bios": [
{
"NPC ID": "Dave",
"Birthday": "6/15/74",
"Loyalty Reward": "5pc Discount"
},
{
"NPC ID": "Joan",
"Birthday": "9/24/83",
"Loyalty Reward": "Extra Slot"
}
],
"StandardStores": [
"Gem Store"
],
"StartingCharacterSlots": "3"
}
点击 Upload JSON
按钮:
上传完成后,您可以看到导入的数据项如下:
导入的 JSON 以补充+覆盖
的方式合并到 Title Region Config Data 中,即:
- 如果 key 不存在,则在末尾添加一个新项,并将
Server Only
设置为 true。 - 如果 key 已经存在,则覆盖其值,并保留其
Server Only
权限、描述和位置。
如果导入的项目值满足 JSON 约束,则 Is Json
将自动设置为 true。
2.5 下载 JSON
开发者可以选择一些项目并将其导出到本地 JSON 文件(如果未选择任何项目,则将导出所有项目)。
导出的 JSON 文件的格式与导入的格式相同:
如果
Is Json
为 true:则值将作为JsonValue
写入文件。如果
Is Json
为 false:则值将作为普通字符串值写入文件。
3. 查询游戏区服数据
查询游戏区服config data的指定key-value data,查询游戏区服config data的所有key-value data。
3.1 For 游戏客户端
API | 描述 |
---|---|
GetTitleRegionConfigKVData | 查询游戏区服config data的指定key-value data |
GetAllTitleRegionConfigKVData | 查询游戏区服config data的所有key-value data |
GetTitleRegionConfigKVData Client API
接口原型:
/**
* Query the specified key-value data of the title region config data.
*
* @param QueryKeys Keys to query
*/
void GetTitleRegionConfigKVData(
const TArray<FString>& QueryKeys,
TFunction<void(const FPgosResult& Ret, const FTitleRegionConfigKVDataQueryResult* Data)> Callback) const;
示例代码:
#include "PgosSDKCpp.h"
void SomeUObjectClass::SomeFunction()
{
auto TitleRegionConfigData = IPgosSDKCpp::Get().GetClientTitleRegionConfigDataAPI();
if (TitleRegionConfigData)
{
TArray<FString> QueryKeys = {TEXT("level_exp_ramp"), TEXT("use_cdn")};
TitleRegionConfigData->GetTitleRegionConfigKVData(QueryKeys, [](const FPgosResult& Ret, const FTitleRegionConfigKVDataQueryResult* Data) {
if (Ret.err_code == (int32)Pgos::PgosErrCode::kSuccess)
{
UE_LOG(LogTemp, Log, TEXT("GetTitleRegionConfigKVData Success"));
}
else
{
UE_LOG(LogTemp, Log, TEXT("GetTitleRegionConfigKVData Failed: err_code=%d, err_msg=%s"), Ret.err_code, *Ret.msg);
}
});
}
}
GetAllTitleRegionConfigKVData Client API
接口原型:
/**
* Query all key-value data of the title region config data.
*/
void GetAllTitleRegionConfigKVData(TFunction<void(const FPgosResult& Ret, const FTitleRegionConfigKVDataQueryResult* Data)> Callback) const;
示例代码:
#include "PgosSDKCpp.h"
void SomeUObjectClass::SomeFunction()
{
auto TitleRegionConfigData = IPgosSDKCpp::Get().GetClientTitleRegionConfigDataAPI();
if (TitleRegionConfigData)
{
TitleRegionConfigData->GetAllTitleRegionConfigKVData([](const FPgosResult& Ret, const FTitleRegionConfigKVDataQueryResult* Data) {
if (Ret.err_code == (int32)Pgos::PgosErrCode::kSuccess)
{
UE_LOG(LogTemp, Log, TEXT("GetAllTitleRegionConfigKVData Success"));
}
else
{
UE_LOG(LogTemp, Log, TEXT("GetAllTitleRegionConfigKVData Failed: err_code=%d, err_msg=%s"), Ret.err_code, *Ret.msg);
}
});
}
}
3.2 For 游戏服务器
API | 描述 |
---|---|
GetTitleRegionConfigKVData | 查询游戏区服config data的指定key-value data |
GetAllTitleRegionConfigKVData | 查询游戏区服config data的所有key-value data |
GetTitleRegionConfigKVData Server API
接口原型:
/**
* Query the specified key-value data of the title region config data.
*
* @param QueryKeys Keys to query
*/
void GetTitleRegionConfigKVData(
const TArray<FString>& QueryKeys,
TFunction<void(const FPgosResult& Ret, const FTitleRegionConfigKVDataQueryResult* Data)> Callback) const;
示例代码:
#include "PgosSDKCpp.h"
void SomeUObjectClass::SomeFunction()
{
auto TitleRegionConfigData = IPgosSDKCpp::Get().GetServerTitleRegionConfigDataAPI();
if (TitleRegionConfigData)
{
TArray<FString> QueryKeys = {TEXT("level_exp_ramp"), TEXT("use_cdn")};
TitleRegionConfigData->GetTitleRegionConfigKVData(QueryKeys, [](const FPgosResult& Ret, const FTitleRegionConfigKVDataQueryResult* Data) {
if (Ret.err_code == (int32)Pgos::PgosErrCode::kSuccess)
{
UE_LOG(LogTemp, Log, TEXT("GetTitleRegionConfigKVData Success"));
}
else
{
UE_LOG(LogTemp, Log, TEXT("GetTitleRegionConfigKVData Failed: err_code=%d, err_msg=%s"), Ret.err_code, *Ret.msg);
}
});
}
}
GetAllTitleRegionConfigKVData Server API
接口原型:
/**
* Query all key-value data of the title region config data.
*/
void GetAllTitleRegionConfigKVData(TFunction<void(const FPgosResult& Ret, const FTitleRegionConfigKVDataQueryResult* Data)> Callback) const;
示例代码:
#include "PgosSDKCpp.h"
void SomeUObjectClass::SomeFunction()
{
auto TitleRegionConfigData = IPgosSDKCpp::Get().GetServerTitleRegionConfigDataAPI();
if (TitleRegionConfigData)
{
TitleRegionConfigData->GetAllTitleRegionConfigKVData([](const FPgosResult& Ret, const FTitleRegionConfigKVDataQueryResult* Data) {
if (Ret.err_code == (int32)Pgos::PgosErrCode::kSuccess)
{
UE_LOG(LogTemp, Log, TEXT("GetAllTitleRegionConfigKVData Success"));
}
else
{
UE_LOG(LogTemp, Log, TEXT("GetAllTitleRegionConfigKVData Failed: err_code=%d, err_msg=%s"), Ret.err_code, *Ret.msg);
}
});
}
}
3.3 关键错误处理
Error Code | 相关 API | Handling Suggestion |
---|---|---|
kBackendServerValidateFail | GetTitleRegionConfigKVData Client API GetAllTitleRegionConfigKVData Client API GetTitleRegionConfigKVData Server API GetAllTitleRegionConfigKVData Server API | 输入的参数无效,请检查错误消息以了解详细信息。 |
kBackendAllFailed | GetTitleRegionConfigKVData Client API GetAllTitleRegionConfigKVData Client API GetTitleRegionConfigKVData Server API GetAllTitleRegionConfigKVData Server API | 所有查询数据失败,请检查‘失败’字段以了解失败原因。 |
kSdkNetworkError | All Network API | 网络错误,请检查错误消息了解详情。 |