Skip to content

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 是购买失败的原因返回值;
    }
});
  1. goods_id 是金魔方商品在当前服务器上的 商品 ID(Product ID),您需要遍历金魔方商品列表,并根据金魔方商品既定的 别名(Aliases)找到该商品的 商品 ID(Product ID)。
  2. count 是发起购买的商品数量,这样您就不需要根据同一商品不同数量设置不同的金魔方商品。
  3. res 是 SDKResult 类型的回调参数,用于返回玩家购买金魔方商品行为的相关信息。
  4. 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{
                    //编辑玩家因为网络调用失败原因导致购买失败的处理逻辑;
                };
            };
        });
    }
}