NOTE
发起商品购买前需要您已经在客户端获取商品列表,请确保您已掌握 获取商品列表 章节的内容。
简介
您可以在客户端的脚本上通过 SDK 调用 "BLOCKMAN::GOODS::SHOWGOODSDIALOG" 指令提示玩家购买游戏项目的 金魔方商品(GCube Product)。根据您的游戏项目需要,您可以在用户按下某个按钮或他们的角色与商人 NPC 对话等情况下发起商品购买提示。
代码格式
其中调用 "BLOCKMAN::GOODS::SHOWGOODSDIALOG" 指令的代码格式如下:
typescript
SDKs.Invoke(
"BLOCKMAN::GOODS::SHOWGOODSDIALOG",
goods_id:string,
count:string
).then((res:SDKResult)=>{
if(res.success){
//参数 res.message 是购买失败的原因返回值;
}
});- goods_id 是金魔方商品在当前服务器上的 商品 ID(Product ID),您需要遍历金魔方商品列表,并根据金魔方商品既定的 别名(Aliases)找到该商品的 商品 ID(Product ID)。
- count 是发起购买的商品数量,这样您就不需要根据同一商品不同数量设置不同的金魔方商品。
- res 是 SDKResult 类型的回调参数,用于返回玩家购买金魔方商品行为的相关信息。
- res.success 是玩家购买该金魔方商品成功与否的返回值,该值是 布尔值(Boolean)类型。
值为 真(True)表示玩家成功购买该金魔方商品。
值为 假(False)表示购买失败,并将返回的失败原因保存在
SDKResult.message中。
5. res.message 是玩家购买失败后的原因返回值。
值为 0 表示玩家取消支付。
值为 -1 表示玩家金魔方不足。
值为 -2 表示网络原因导致网络接口调用失败,系统将自动重连。
值为 文本(String)类型,表示网络接口调用失败,文本显示的内容为失败原因。
代码示例
假如需要发起购买提示的金魔方商品 别名(Aliases)为 A。
【GCube_Product001.png】
在客户端的脚本编辑发起商品购买的代码示例如下:
NOTE
其中获取商品列表的条件和方法已经在获取商品列表章节中描述,本示例将不添加相关的备注,如需了解请参阅 获取商品列表 章节了解相关内容。
typescript
class HandlingPurchases extends Component {
//定义私有变量保存金魔方商品的唯一 商品 ID(Product ID);
private _goods_id:number = -1;
/*
编辑运行时事件;
*/
OnStart(): void {
//连接服务器;
NetClient.Connect();
/*
客户端连上服务器后的回调函数,确保访问 SDK 时该客户端已成功连网;
*/
NetClient.InjectOnConnectEvent((isConnected:boolean) => {
//判断是否成功连接成功;
if (isConnected) {
/*
通过 SDK 发送获取金魔方商品列表的请求;
*将商品列表转换回 JSON 格式,并保存在命名为 GoodsListJson 的变量中;
*遍历商品列表,找到别名为 A 的商品并获取对应的唯一 商品 ID(Product ID);
*将唯一 商品 ID(Product ID)保存在命名为 _goods_id 的私有变量中;
*/
SDKs.Invoke(
"BLOCKMAN::GOODS::GETGOODSLIST"
).then((getListRes:SDKResult)=>{
//判断是否成功访问 SDK 并获得回调;
if(getListRes.success){
let GoodsListJson:JSON = JSON.parse(getListRes.message);
let data = GoodsListJson["data"];
for (let i = 0; i < data.length; i++) {
if (data[i]["goods_mapping_id"] == "A") {
this._goods_id = data[i]["goods_id"];
};
};
};
});
};
});
}
/*
定义公共方法,在需要发起商品购买时调用本方法;
*/
public OnPurchase(): void {
//判断是否已经成功获取商品 ID;
if(this._goods_id == -1){
//编辑获取商品 ID 失败的逻辑;
return;
};
/*
通过 SDK 发起金魔方商品购买提示;
* 私有变量 _goods_id 将会是商品 ID,需要转为 文本(String)类型;
* 参数 "1" 表示只购买一个该金魔方商品,为 文本(String)类型;
*/
SDKs.Invoke(
"BLOCKMAN::GOODS::SHOWGOODSDIALOG",
this._goods_id.toString(),
"1"
).then((boughtRes:SDKResult)=>{
//判断玩家是否成功购买别名为 A 的金魔方商品;
if(boughtRes.success){
//编辑玩家购买金魔方商品成功后的逻辑
}
else{
//如果购买没成功,根据购买失败的类型进行处理;
if(boughtRes.message.type == "number"){
if(boughtRes.message == 0){
//编辑玩家因为取消支付金魔方导致购买失败的处理逻辑;
}
else if(boughtRes.message == -1){
//编辑玩家因为金魔方不足导致购买失败的处理逻辑;
};
}
else{
//编辑玩家因为网络调用失败原因导致购买失败的处理逻辑;
};
};
});
}
}