Skip to content

简介

SandMod 提供了让您可以获取玩家基础信息的方法,让您针对玩家的信息制作更符合玩家个性的游戏内容。

获取玩家信息的意义

根据玩家信息让游戏项目中的每个角色更具有个性化,可以让玩家更容易在您的游戏项目中沉浸体验。您能通过玩家信息获取玩家的以下信息:

  • 玩家的昵称。
  • 玩家的 VIP 等级。
  • 玩家的性别。
  • 玩家的头像纹理信息。
  • 玩家的平台语言环境。

玩家信息获取方法

获取玩家信息时需要注意以下前提:

  • SandMod 编辑器上无法获取玩家信息,需要将游戏项目发布(发布测试或上线)才能读取。具体发布方法请参阅 游戏发布 章节。
  • 游戏项目只有在支持 网络服务(Net Service),能连上 服务器场景(Server Scene)时才能获取到商品列表。具体连接方法请参阅 服务器 章节。
  • 获取玩家信息需要根据该玩家的 游戏玩家 ID(User ID)进行获取,获取 游戏玩家 ID(User ID)的方法请参阅 会话 ID 和游戏玩家 ID 章节。

客户端获取玩家信息

您可以在客户端场景中所引用的脚本通过 SDKs.Invoke("BLOCKMAN::PLATFORM::USERDETAIL",userID:string) 调动 SDK 获取玩家信息列表,值得注意的是,即使在客户端就能获取玩家信息列表,该游戏项目依然需要能连上服务器,且已经在服务器获得对应玩家的 游戏玩家 ID(User ID)并传到客户端才能成功获取玩家信息列表。

其中调动 "BLOCKMAN::PLATFORM::USERDETAIL" SDK 的代码格式如下:

typescript
SDKs.Invoke("BLOCKMAN::PLATFORM::USERDETAIL",userID:string).then((res:SDKResult)=>{
    if(res.success){
        //参数 res.message 将会是 JSON 格式玩家信息列表转换的文本;
    };
});
  1. "BLOCKMAN::PLATFORM::USERDETAIL" 是 SDK 中获取玩家信息列表的指令。
  2. userID 是需要获取信息的玩家在此游戏项目的 游戏玩家 ID(User ID)转换的文本。
  3. res 是通过 SDK 获取金魔方商品的回调,其包含 success 和 message 两个参数。
  4. res.success 是 布尔值(Boolean)类型,用于判断回调是否成功。
  5. res.message 是 文本(string)类型,在获取玩家信息列表的过程中,该值为 JSON 格式玩家信息列表转换的文本。

玩家信息格式

SandMod 会以 JSON 的形式储存对应玩家的信息,并把玩家的信息以列表的方式储存在命名为 "data" 的索引中。

假设需要查询的玩家的信息如下:

【Player_Informations001.png】

则用于储存该玩家信息的 JSON 内容如下:

auto
{
	"code":1,
	"message":"SUCCESS",
	"data": {
		"2":{
			"userld":2,
            "isgame":1,
			"vip":0,
            "vipLv":0,
			"name":"PanitTsu",
			"sex":2,
			"picUrl":"http://static.sandboxol.com/.../female.png",
			"picType":1,
			"decorationPicUrl": "http://static.sandboxol.com/.../female.png",
			"language":"zh",
			"colorfulNickName": null,
			"avatarFrame": null,
			"userLevel": 0,
			"levelPic": null,
			"region": "sandbox",
			"regionCode": 0,
			"showUrl": null,
			"personalityltems": null
		}
	},
	"other": null
}

储存玩家信息的 JSON 中主要有以下常用索引:

  1. "code" 索引代表状态码,代表了后端响应给前端的业务状态。

  2. "message" 索引代表了响应信息,如果发生异常,或者系统错误,会将错误信息存储在此索引的值中。

  3. "data" 索引代表了玩家的信息列表,其中每位玩家包含以下信息:

    3.1. 游戏玩家 ID(User ID)索引(案例中为 "2")代表了当前玩家信息所属的玩家。

    3.1.1. "userId" 索引代表了该玩家在此游戏项目的唯一标识 ID,即 游戏玩家 ID(User ID)。对于不同的游戏项目,同一名玩家的 "userId" 可能是不同的。

    3.1.2. "vip" 索引代表了该玩家的 VIP 等级,您可以对不同等级的玩家采取不同的优惠措施。

    3.1.3. "name" 索引代表了该玩家的 Blockman Go 平台昵称。

    3.1.4. "sex" 索引代表了该玩家在 Blockman Go 平台设置的性别。

    • 值为 1 表示该玩家为男孩。

    • 值为 2 表示该玩家为女孩。

    3.1.5. "picUrl" 索引代表了该玩家自定义头像在 Blockman Go 数据库的地址。您可以通过 "BLOCKMAN::PLATFORM::GETHEADPIC" SDK,将此属性赋值到 args 变量中,以实现头像纹理下载并引用到游戏项目中,以达到获取用户头像的效果。值得注意的是,如果玩家上传头像失败,此值有可能为 空文本("")。

    3.1.6. "picType" 索引代表玩家的头像贴图类型。

    • 值为 0 表示该玩家的头像是自己上传的,对应是 "picUrl" 索引的图片。

    • 值为 1 表示该玩家的头像是通过平台装饰自动生成的,对应是 "decorationPicUrl" 索引的图片。

    3.1.7. "decorationPicUrl" 索引代表了通过平台装饰自动生成的头像在 Blockman Go 数据库的地址。您可以通过 "BLOCKMAN::PLATFORM::GETHEADPIC" SDK,将此属性赋值到 args 变量中,以实现头像纹理下载并引用到游戏项目中,以达到获取用户头像的效果。

    3.1.8. "language" 索引代表玩家 Blockman Go 平台中的界面语言,这对于设置游戏多语言很有帮助。具体每个值的定义请参阅 游戏多语言 章节。

  4. "other" 索引用于储存数据传递过程中需要补充的内容,一般都为空。

玩家信息读取方法

为了提升数据传递的效率,在客户端和服务器获取玩家信息列表的时候一般只会获取到存储玩家信息列表 JSON 转换的 文本(String),获取该文本以后需要使用 JSON.parse(res:string) 将其转换为 JSON 类型。

获取到 JSON 类型的玩家信息列表后,只需要根据索引找到对应的信息,根据索引获取信息的方法类似 Map 对象或数组(Array)。

假设游戏项目已经连接服务器,玩家的 游戏玩家 ID(User ID)已经通过服务器传递到客户端(具体执行方法请参阅 服务器 章节),并调用公共方法时赋值给命名为 PlayerUserID 的变量,通过该公共方法可获取玩家的昵称并保存于命名为 PlayerName 的公共代变量中,供其他功能模块使用,代码示例如下:

typescript
class NicknameGetting extends Component {

    //定义公共变量保存玩家昵称;
    public PlayerName: string = "";

    /*
    编辑自定义公共方法;
        *确保在成功获取玩家 游戏玩家 ID(User ID,注:不是平台 ID)后再调用此方法;
        *此处实例忽略玩家 游戏玩家 ID(User ID)的获取方式,假设通过其他脚本获取并通过公共方法传递到此脚本;
    */
    public GetPlayerName(PlayerUserID:string): void {
        /*
        根据玩家 游戏玩家 ID(User ID)通过 SDK 获取玩家信息;
            *PlayerUserID 变量是 游戏玩家 ID(User ID);
        */
        SDKs.Invoke(
          "BLOCKMAN::PLATFORM::USERDETAIL",
          PlayerUserID
        ).then((res:SDKResult)=>{
            //对 SDK 返回的玩家信息进行解析;
            let playerDataJson:JSON = JSON.parse(res.message);
            //根据 SDK 返回的玩家信息获取玩家昵称标签;
            this.PlayerName = playerDataJson["data"][PlayerUserID]["name"];
            //此处编辑获取到玩家昵称标签后的相关逻辑;
        });
    };

}