继承于Subdata的数据中心脚本如何获取对应玩家?

[复制链接]
22 |5
天启 发表于 昨天 21:39 | 显示全部楼层 |阅读模式
1.这是服务端脚本把?  
2.只能生成时自己定义一个玩家id属性吗?
回复

使用道具 举报

六安🐟片 发表于 4 小时前 | 显示全部楼层
1. 继承Subdata的数据类是可以双端调用的。
Subdata是在DataCenter中进行管理的,服务端是权威端,客户端同时会有一份同步的数据。修改时需要在服务端修改并调用save(true),达到保存且同步到客户端的作用。

2. Subdata是属于单个玩家的数据。
数据类创建后,每个玩家都会有一份继承Subdata的数据类。Subdata定义时,可以在可序列化的数据上方标注@Decorator.persistence()装饰器,来标识需要被存储的字段,同时可以被同步到客户端。
在服务端获取一个玩家的数据方法:

// 定义一个商店数据
export class ShopData extends Subdata {

    /** 已购买商品id数组 */
    @Decorator.persistence()
    public boughtItems:
number[] = [];
}


// 服务端模块调用

export class ShopModuleS extends ModuleS<ShopModuleC, ShopData> {
    protected onPlayerEnterGame(player: mw.Player): void {
        const playerShopData = this.getPlayerData(player);
        console.log(`玩家${player.playerId}购买的所有商品`,playerShopData.boughtItems)
    }
}

// 客户端模块调用

export class ShopModuleC extends ModuleC<ShopModuleS, ShopData> {
    protected onEnterScene(sceneType: number): void {
        console.log("玩家购买的所有商品:", this.data.boughtItems)
    }
}



回复

使用道具 举报

丸子 发表于 4 小时前 | 显示全部楼层
本帖最后由 丸子 于 2024-10-18 10:01 编辑

可以看一下这个Subdata的使用
https://api-docs.ark.online/classes/mwext.Subdata.html
//AppleData就是继承于Subdata的类 

//获取玩家自己的数据,传入this.currentPlayer
let curPlayer = DataCenterS.getData(this.currentPlayer, AppleData);


//获取其他玩家的数据,传入对应玩家的userId
const otherPlayer = DataCenterS.getData(player, AppleData);

回复

使用道具 举报

天启楼主 发表于 20 分钟前 | 显示全部楼层
丸子 发表于 2024-10-18 09:59
可以看一下这个Subdata的使用
https://api-docs.ark.online/classes/mwext.Subdata.html
《---myCode-TypeS ...

playerData类里没有player相关的属性,所以是没法this.curPlayer的,我问得就是怎么在此类中获取玩家呀
回复

使用道具 举报

天启楼主 发表于 19 分钟前 | 显示全部楼层
六安🐟片 发表于 2024-10-18 09:54
1. 继承Subdata的数据类是可以双端调用的。
Subdata是在DataCenter中进行管理的,服务端是权威端,客户端同 ...

大佬麻烦看一下标题,我问的是怎么在PlayerData脚本里获取玩家
回复

使用道具 举报

六安🐟片 发表于 18 分钟前 | 显示全部楼层
天启 发表于 2024-10-18 14:03
playerData类里没有player相关的属性,所以是没法this.curPlayer的,我问得就是怎么在此类中获取玩家呀 ...

这个类就是你要通过player才能获取到的。不需要通过这个类获取player啊
回复

使用道具 举报

热门版块
快速回复 返回顶部 返回列表