You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

FiveM JavaScript机器人开发:如何检测新加入服务器的Player ID?

FiveM玩家ID获取问题解决方法

你代码里用player.id获取不到玩家ID的原因很直接:在playerConnecting事件中,global.source返回的就是玩家的服务器ID(数字类型),它不是一个对象,没有id属性。

修复步骤

  • 直接使用player变量本身作为玩家ID,替换掉player.id
  • 可选优化:如果需要确保玩家完全加入服务器后再获取数据,可考虑改用playerJoined事件(该事件在玩家成功进入服务器后触发)

修改后的关键代码片段

// 替换原来的player-id字段
.addField(`**player-id**`,`**${player}**`)

完整修改后的代码

on('playerConnecting', async(name, setKickReason, deferrals) => {
        const chann = client.channels.cache.get("room id")
    const guild = client.guilds.cache.get("serverid");
    deferrals.defer()
    deferrals.update("message")
    const player = global.source; // player本身就是玩家ID(数字)
    let discord = "**undefined**";
    let steam = "**undefined**";
    let fivem = "**undefined**";
    let ip = "**undefined**";
    let license = "**undefined**";
    for (let i = 0; i < GetNumPlayerIdentifiers(player); i++) {
        const identifier = GetPlayerIdentifier(player, i);
        if (identifier.includes('discord:')) {
            discord = identifier
        } else if(identifier.includes('steam:')) {
            steam = identifier
        } else if(identifier.includes('fivem:')) {
            fivem = identifier
        } else if(identifier.includes("ip:")) {
            ip = identifier;
        }else if(identifier.includes("license:")) {
            license = identifier;
        }
    }
setTimeout(async() => {
    discord = discord.split('discord:').pop()
    steam = steam.split('steam:').pop()
    ip = ip.split('ip:').pop()
    license = license.split('license:').pop()
    fivem = fivem.split('fivem:').pop()
    let pingg = GetPlayerPing(player)
    let embed= new MessageEmbed()
            .setColor("RED")
            .addField(`**Default Name**`,`**${name}**`)
            .addField(`**Steam Name**`,`**${steam}**`)
            .addField(`**FiveM Name**`,`**${fivem}**`)
            .addField(`**Discord Name**`,`<@${discord}>`)
            .addField(`**Discord id**`,`**${discord}**`)
            .addField(`**IP**`,`**${ip}**`)
            .addField(`**License**`,`**${license}**`)
            .addField(`**Ping**`,`**${pingg}**`)
            .addField(`**player-id**`,`**${player}**`) // 这里修改为直接使用player变量
            .setFooter(guild.name)
            .setTimestamp()
            let mes = await chann.send(embed)
})

额外说明

  • playerConnecting事件触发时,玩家还处于连接验证阶段,此时调用部分玩家相关API可能有局限
  • 如果需要获取玩家进入服务器后的完整状态,推荐使用playerJoined事件,该事件会在玩家完全进入世界后触发

内容的提问来源于stack exchange,提问作者tompano

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 15:05:25