如何判断rage.mp中mp.players.forEach的返回值以校验在线玩家?
解决rage.mp中判断目标玩家是否在线的问题
首先得给你纠正一个误区:你之前用mp.players.forEach来判断玩家是否存在的思路是行不通的。这个方法的作用只是遍历所有在线玩家,它本身不会返回任何布尔值——你在回调里写的return true/false,只会终止当前那一次回调的执行,不会让forEach整体返回true或false,所以没法用它的返回值来做判断。
那该怎么正确检查目标玩家是否在线呢?我给你两种可行的方案,都能完美适配你的需求,并且可以直接加入try语句里:
方案一:用遍历标记变量(兼容所有rage.mp版本)
这种方式最稳妥,不管你的rage.mp版本有没有数组方法支持,都能用:
mp.events.addCommand("admin", (player, targetPlayerName, targetAdminLevel) => { try { // 检查当前玩家的权限等级 if (player.adminLevel < 8) throw "权限不足:你需要至少8级权限才能执行此命令。"; // 检查是否输入了目标玩家名称 if (!targetPlayerName) throw "参数缺失:请输入目标玩家的名称。"; // 检查目标权限不能高于或等于自己 if (player.adminLevel <= targetAdminLevel) throw "权限错误:你无法设置等于或高于自身的权限等级。"; // 查找在线的目标玩家 let targetPlayer = null; mp.players.forEach(p => { // 建议用不区分大小写的匹配,避免玩家输入大小写错误 if (p.name.toLowerCase() === targetPlayerName.toLowerCase()) { targetPlayer = p; } }); // 判断是否找到玩家,没找到就抛出错误 if (!targetPlayer) throw "玩家不存在:目标玩家不在线或名称输入错误。"; // 所有检查通过,设置玩家权限 targetPlayer.adminLevel = parseInt(targetAdminLevel); player.outputChatBox(`✅ 已成功将玩家 ${targetPlayer.name} 的权限等级设置为 ${targetAdminLevel}`); } catch (error) { player.outputChatBox(`❌ 命令执行失败:${error}`); } });
方案二:用数组find方法(更简洁)
如果你的rage.mp版本支持将玩家池转为数组,那可以用find方法来简化代码,效果和上面完全一样:
mp.events.addCommand("admin", (player, targetPlayerName, targetAdminLevel) => { try { // 同样的前置检查 if (player.adminLevel < 8) throw "权限不足:你需要至少8级权限才能执行此命令。"; if (!targetPlayerName) throw "参数缺失:请输入目标玩家的名称。"; if (player.adminLevel <= targetAdminLevel) throw "权限错误:你无法设置等于或高于自身的权限等级。"; // 一行代码找到目标玩家 const targetPlayer = mp.players.toArray().find(p => p.name.toLowerCase() === targetPlayerName.toLowerCase() ); if (!targetPlayer) throw "玩家不存在:目标玩家不在线或名称输入错误。"; // 设置权限 targetPlayer.adminLevel = parseInt(targetAdminLevel); player.outputChatBox(`✅ 已成功将玩家 ${targetPlayer.name} 的权限等级设置为 ${targetAdminLevel}`); } catch (error) { player.outputChatBox(`❌ 命令执行失败:${error}`); } });
关键说明
- 两种方案都是先通过遍历/查找拿到目标玩家对象,再判断对象是否存在,不存在就抛出错误加入try-catch流程
- 加入了不区分大小写的名称匹配,是为了提升用户体验,避免玩家因为输入大小写不对导致命令失败
- 别忘了把
targetAdminLevel转成数字类型,不然可能会把字符串赋值给adminLevel,导致后续权限判断出问题
内容的提问来源于stack exchange,提问作者Hugo Almeida
相关产品推荐
相关产品推荐

