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
相关产品推荐
相关产品推荐

