关于判断玩家是否在线

[复制链接]
1184 |5
吃到苦就是得到了甜 发表于 2023-11-11 07:16:45 来自手机 | 显示全部楼层 |阅读模式
问题描述及使用流程:
请问你们是怎么判断玩家是否存在的?是否离线?之前判断玩家的角色是否存在已经不行了!

相关截图或视频:

补充信息(版本、日志等):
回复

使用道具 举报

复读机读复读机 发表于 2023-11-11 16:01:20 | 显示全部楼层
可以使用Player.onPlayerLeave监听玩家离开,API里面有一个比较详细的示例可以参考一下 https://api-docs.ark.online/classes/mw.Player.html#onplayerleave
回复

使用道具 举报

吃到苦就是得到了甜楼主 发表于 2023-11-11 16:24:05 | 显示全部楼层
这个我知道,我是一个奖励数组里面保存着玩家的UID,然后用getplayer(uid)来判断是否在线,结果 还是有问题!甚至获取后 判断是否由角色,是否可以获取PID等,结果这次启动可以,下次启动就不行了!
log玩家退出不能用!不好判断到底哪里问题了
回复

使用道具 举报

复读机读复读机 发表于 2023-11-12 10:38:43 | 显示全部楼层
吃到苦就是得到了甜 发表于 2023-11-11 16:24
这个我知道,我是一个奖励数组里面保存着玩家的UID,然后用getplayer(uid)来判断是否在线,结果 还是有问题 ...

可以试试用Map保存玩家状态,并且在onPlayerJoin和onPlayerLeave中修改Map

@Component
export default class CheckOnline extends Script {
    private _playerMap: Map<Number, Boolean> = new Map<Number,Boolean>

    protected async onStart(): Promise<void> {

        if (SystemUtil.isClient()) {
            return;
        }

        Player.onPlayerJoin.add((player: Player) => {
            this._playerMap.set(player.playerId, true)
            //后续逻辑中可以在Map中查找是否有该玩家playerID来判断,Map的Value可以标识此玩家的某些状态
            if (this._playerMap.get(player.playerId) !== undefined) {
                console.log("玩家在线", this._playerMap);
            }
        })

        Player.onPlayerLeave.add((player: Player) => {
            this._playerMap.delete(player.playerId)
            //后续逻辑中可以使用下面的语句判断玩家是否在线
            if (this._playerMap.get(player.playerId) === undefined) {
                console.log("玩家已下线", this._playerMap);
            }
        })
    }
}


回复

使用道具 举报

雪中观狐 发表于 2023-12-25 16:00:47 | 显示全部楼层
复读机读复读机 发表于 2023-11-12 10:38
可以试试用Map保存玩家状态,并且在onPlayerJoin和onPlayerLeave中修改Map
《---myCode-TypeScript---》
...

你好,当玩家离开的时候,存的是Player对象,而不是id,后续会不会有问题。存Player的话,比如游戏开始1分钟玩家走了,过了10分钟游戏结束了,直接在moduleS里去this.getcurrantData(player),去修改已经离线的玩家数据,这个player不会在这9分钟自动被清理掉把
回复

使用道具 举报

复读机读复读机 发表于 2023-12-26 09:28:32 | 显示全部楼层
雪中观狐 发表于 2023-12-25 16:00
你好,当玩家离开的时候,存的是Player对象,而不是id,后续会不会有问题。存Player的话,比如游戏开始1 ...

玩家下线的时候他的Player对象就会被清理掉的,所以需要存ID
回复

使用道具 举报

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