在 if 变为 false 之前,如何执行一次脚本? (Node.JS)
How can I execute script once until if becomes false? (Node.JS)
我是编码新手,不知道如何正确表达这个问题。我正在整合最近添加的 CS:GO 游戏状态集成功能,以根据游戏中发生的事情更改色相灯。我目前正在处理的部分是一个简单的脚本,如果我在 'CT' 团队中,它将把第一盏灯变成蓝色。除了不断告诉我我在 CT 侧一遍又一遍之外,它工作正常。有没有一种方法可以将我的脚本更改为仅在第一个 If 语句变为假时更新?
代码:
setInterval(checkTeam, 250);
function checkTeam() {
fs.readFile('player_team', 'utf8', function(err, teamStatus) {
if (err) throw err;
if(teamStatus === 'CT') {
console.log('CT Side');
if (currentStatus !== 'CT') {
changeLight(1, noLights());
currentStatus = 'CT';
}
if (currentStatus === 'CT') {
changeLight(1, blueLights());
currentStatus = 'CT';
}
}
if (teamStatus === 'T'){
console.log('T Side');
if (currentStatus !== 'T Side') {
changeLight(3, noLights());
}
if (currentStatus === 'T Side') {
changeLight(3, orangeLights());
currentStatus = 'T';
}
if (currentStatus === null) {
changeLight(1, noLights());
}
}
});
}
function changeLight(light, lightType) {
var jsonString = JSON.stringify(lightType);
http.request({
host: HUE_BRIDGE_IP,
path: HUE_PATH + 'lights/' + light + '/state',
method: 'PUT',
headers: {
'Content-Type': 'application/json',
'Content-Length': jsonString.length
}
}, function() {
}).write(jsonString);
}
function redLights() {
return {
'on': true,
'sat': 254,
'bri': 254,
'hue': 0,
'transitiontime': 0
}
}
function blueLights() {
return {
'on': true,
'sat': 254,
'bri': 254,
'hue': 45000,
'transitiontime': 0
}
}
function explodeLights() {
return {
'on': true,
'sat': 254,
'bri': 254,
'hue': 10000,
'transitiontime': 0
}
}
function whiteLights() {
return {
'on': true,
'sat': 0,
'bri': 254,
'hue': 10000
}
}
function noLights() {
return {
'on': false,
'transitiontime': 0
}
}
function orangeLights() {
return {
'on': false,
'transitiontime': 0
}
}
我猜你真正需要的唯一部分是顶部,但为了以防万一你需要 changeLight 功能,我包括了更多。基本上,我想让 if(teamStatus === 'CT') {
只执行一次,直到它改变或变为空。如果那不可能,是否有妥协?
在此先感谢所有试图提供帮助的人,
欣赏它!
编辑:
所以我认为我没有提供足够的信息,所以这里是服务器从游戏状态获取信息的代码:
var bodyParser = require('body-parser');
var express = require('express');
var fs = require('fs');
var app = express();
app.use(bodyParser.json()); // for parsing application/json
app.post('/', function(req, res) {
fs.readFile('player_team', 'utf8', function(err, teamStatus) {
var player = 'player' in req.body ? req.body.player : null;
if (player && player.team !== teamStatus) {
var newTeamStatus = req.body.player.team;
if (!newTeamStatus) {
newTeamStatus = '';
}
fs.writeFile('player_team', newTeamStatus);
console.log(newTeamStatus);
}
});
});
var PORT = 8080;
var HOST = '127.0.0.1';
app.listen(PORT, HOST);
console.log('Server is running on ' + HOST + ':' + PORT);
据我猜测的逻辑,你可能想做:
var currentStatus = '';
function checkTeam() {
fs.readFile('player_team', 'utf8', function (err, teamStatus) {
if (err) throw err;
if (teamStatus !== currentStatus) { // only change lights if status has changed
if (teamStatus === 'CT') {
console.log('CT Side');
changeLight(3, noLights()); // turn off 3?
changeLight(1, blueLights());
}
else if (teamStatus === 'T') {
console.log('T Side');
changeLight(1, noLights()); // turn off 1?
changeLight(3, orangeLights());
}
else {
changeLight(1, noLights());
changeLight(3, noLights()); // 1 and 3?
}
currentStatus = teamStatus; // update the current status
}
});
}
我唯一不明白的是 changeLight 中的 1
或 3
做了什么,所以这段代码可能不完整,但我相信它可以完成你的原始代码没有闪烁灯光或 console.log 每 250 毫秒你在哪支球队
我在我认为可能需要的行中添加了一些注释,如果有两种不同的灯,其中一种变为蓝色,另一种变为橙色
我是编码新手,不知道如何正确表达这个问题。我正在整合最近添加的 CS:GO 游戏状态集成功能,以根据游戏中发生的事情更改色相灯。我目前正在处理的部分是一个简单的脚本,如果我在 'CT' 团队中,它将把第一盏灯变成蓝色。除了不断告诉我我在 CT 侧一遍又一遍之外,它工作正常。有没有一种方法可以将我的脚本更改为仅在第一个 If 语句变为假时更新?
代码:
setInterval(checkTeam, 250);
function checkTeam() {
fs.readFile('player_team', 'utf8', function(err, teamStatus) {
if (err) throw err;
if(teamStatus === 'CT') {
console.log('CT Side');
if (currentStatus !== 'CT') {
changeLight(1, noLights());
currentStatus = 'CT';
}
if (currentStatus === 'CT') {
changeLight(1, blueLights());
currentStatus = 'CT';
}
}
if (teamStatus === 'T'){
console.log('T Side');
if (currentStatus !== 'T Side') {
changeLight(3, noLights());
}
if (currentStatus === 'T Side') {
changeLight(3, orangeLights());
currentStatus = 'T';
}
if (currentStatus === null) {
changeLight(1, noLights());
}
}
});
}
function changeLight(light, lightType) {
var jsonString = JSON.stringify(lightType);
http.request({
host: HUE_BRIDGE_IP,
path: HUE_PATH + 'lights/' + light + '/state',
method: 'PUT',
headers: {
'Content-Type': 'application/json',
'Content-Length': jsonString.length
}
}, function() {
}).write(jsonString);
}
function redLights() {
return {
'on': true,
'sat': 254,
'bri': 254,
'hue': 0,
'transitiontime': 0
}
}
function blueLights() {
return {
'on': true,
'sat': 254,
'bri': 254,
'hue': 45000,
'transitiontime': 0
}
}
function explodeLights() {
return {
'on': true,
'sat': 254,
'bri': 254,
'hue': 10000,
'transitiontime': 0
}
}
function whiteLights() {
return {
'on': true,
'sat': 0,
'bri': 254,
'hue': 10000
}
}
function noLights() {
return {
'on': false,
'transitiontime': 0
}
}
function orangeLights() {
return {
'on': false,
'transitiontime': 0
}
}
我猜你真正需要的唯一部分是顶部,但为了以防万一你需要 changeLight 功能,我包括了更多。基本上,我想让 if(teamStatus === 'CT') {
只执行一次,直到它改变或变为空。如果那不可能,是否有妥协?
在此先感谢所有试图提供帮助的人,
欣赏它!
编辑:
所以我认为我没有提供足够的信息,所以这里是服务器从游戏状态获取信息的代码:
var bodyParser = require('body-parser');
var express = require('express');
var fs = require('fs');
var app = express();
app.use(bodyParser.json()); // for parsing application/json
app.post('/', function(req, res) {
fs.readFile('player_team', 'utf8', function(err, teamStatus) {
var player = 'player' in req.body ? req.body.player : null;
if (player && player.team !== teamStatus) {
var newTeamStatus = req.body.player.team;
if (!newTeamStatus) {
newTeamStatus = '';
}
fs.writeFile('player_team', newTeamStatus);
console.log(newTeamStatus);
}
});
});
var PORT = 8080;
var HOST = '127.0.0.1';
app.listen(PORT, HOST);
console.log('Server is running on ' + HOST + ':' + PORT);
据我猜测的逻辑,你可能想做:
var currentStatus = '';
function checkTeam() {
fs.readFile('player_team', 'utf8', function (err, teamStatus) {
if (err) throw err;
if (teamStatus !== currentStatus) { // only change lights if status has changed
if (teamStatus === 'CT') {
console.log('CT Side');
changeLight(3, noLights()); // turn off 3?
changeLight(1, blueLights());
}
else if (teamStatus === 'T') {
console.log('T Side');
changeLight(1, noLights()); // turn off 1?
changeLight(3, orangeLights());
}
else {
changeLight(1, noLights());
changeLight(3, noLights()); // 1 and 3?
}
currentStatus = teamStatus; // update the current status
}
});
}
我唯一不明白的是 changeLight 中的 1
或 3
做了什么,所以这段代码可能不完整,但我相信它可以完成你的原始代码没有闪烁灯光或 console.log 每 250 毫秒你在哪支球队
我在我认为可能需要的行中添加了一些注释,如果有两种不同的灯,其中一种变为蓝色,另一种变为橙色