попытался создать команду для полета администрации
1 часть описал в packages
2 часть описал в client_packages
1 часть работает успешно, но само осуществление полета в client_packages не хочет нормально работать, движение по оси z реализовывается спокойно, а по оси x и y персонаж двигаться не хочет, более того после нажатия любой из клавишь w a s d в другой части карты - персонажа переносит на кординаты x-0 y-0, а после этого не двигается по этим осям
вот код помогите кто может
let isFlying = false;
function getForwardVector(heading) {
const rad = (heading * Math.PI) / 180;
return {
x: -Math.sin(rad),
y: Math.cos(rad)
};
}
function getRightVector(heading) {
const rad = (heading * Math.PI) / 180;
return {
x: Math.cos(rad),
y: Math.sin(rad)
};
}
mp.events.add('enableFlyMode', () => {
isFlying = true;
mp.players.local.freezePosition(true);
mp.game.controls.disableControlAction(0, 75, true);
mp.gui.chat.push('Режим полёта включён! Используйте W/A/S/D для движения, пробел для подъёма и Shift для снижения.');
mp.events.add('render', () => {
if (isFlying) {
const pos = mp.players.local.position;
const heading = mp.players.local.heading;
const speed = 0.5;
const forwardVector = getForwardVector(heading);
const rightVector = getRightVector(heading);
if (mp.game.controls.isControlPressed(0, 32)) {
mp.players.local.position = new mp.Vector3(
pos.x + forwardVector.x * speed,
pos.y + forwardVector.y * speed,
pos.z
);
}
if (mp.game.controls.isControlPressed(0, 33)) {
mp.players.local.position = new mp.Vector3(
pos.x - forwardVector.x * speed,
pos.y - forwardVector.y * speed,
pos.z
);
}
if (mp.game.controls.isControlPressed(0, 34)) {
mp.players.local.position = new mp.Vector3(
pos.x - rightVector.x * speed,
pos.y - rightVector.y * speed,
pos.z
);
}
if (mp.game.controls.isControlPressed(0, 35)) {
mp.players.local.position = new mp.Vector3(
pos.x + rightVector.x * speed,
pos.y + rightVector.y * speed,
pos.z
);
}
if (mp.game.controls.isControlPressed(0, 22)) {
mp.players.local.position = new mp.Vector3(pos.x, pos.y, pos.z + speed);
}
if (mp.game.controls.isControlPressed(0, 21)) {
mp.players.local.position = new mp.Vector3(pos.x, pos.y, pos.z - speed);
}
}
});
});
mp.events.add('stopFlyMode', () => {
if (isFlying) {
isFlying = false;
mp.players.local.freezePosition(false);
mp.game.controls.enableControlAction(0, 75, true);
mp.gui.chat.push('Режим полёта выключен.');
} else {
mp.gui.chat.push('Вы не в режиме полёта.');
}
});
1 часть описал в packages
2 часть описал в client_packages
1 часть работает успешно, но само осуществление полета в client_packages не хочет нормально работать, движение по оси z реализовывается спокойно, а по оси x и y персонаж двигаться не хочет, более того после нажатия любой из клавишь w a s d в другой части карты - персонажа переносит на кординаты x-0 y-0, а после этого не двигается по этим осям
вот код помогите кто может
let isFlying = false;
function getForwardVector(heading) {
const rad = (heading * Math.PI) / 180;
return {
x: -Math.sin(rad),
y: Math.cos(rad)
};
}
function getRightVector(heading) {
const rad = (heading * Math.PI) / 180;
return {
x: Math.cos(rad),
y: Math.sin(rad)
};
}
mp.events.add('enableFlyMode', () => {
isFlying = true;
mp.players.local.freezePosition(true);
mp.game.controls.disableControlAction(0, 75, true);
mp.gui.chat.push('Режим полёта включён! Используйте W/A/S/D для движения, пробел для подъёма и Shift для снижения.');
mp.events.add('render', () => {
if (isFlying) {
const pos = mp.players.local.position;
const heading = mp.players.local.heading;
const speed = 0.5;
const forwardVector = getForwardVector(heading);
const rightVector = getRightVector(heading);
if (mp.game.controls.isControlPressed(0, 32)) {
mp.players.local.position = new mp.Vector3(
pos.x + forwardVector.x * speed,
pos.y + forwardVector.y * speed,
pos.z
);
}
if (mp.game.controls.isControlPressed(0, 33)) {
mp.players.local.position = new mp.Vector3(
pos.x - forwardVector.x * speed,
pos.y - forwardVector.y * speed,
pos.z
);
}
if (mp.game.controls.isControlPressed(0, 34)) {
mp.players.local.position = new mp.Vector3(
pos.x - rightVector.x * speed,
pos.y - rightVector.y * speed,
pos.z
);
}
if (mp.game.controls.isControlPressed(0, 35)) {
mp.players.local.position = new mp.Vector3(
pos.x + rightVector.x * speed,
pos.y + rightVector.y * speed,
pos.z
);
}
if (mp.game.controls.isControlPressed(0, 22)) {
mp.players.local.position = new mp.Vector3(pos.x, pos.y, pos.z + speed);
}
if (mp.game.controls.isControlPressed(0, 21)) {
mp.players.local.position = new mp.Vector3(pos.x, pos.y, pos.z - speed);
}
}
});
});
mp.events.add('stopFlyMode', () => {
if (isFlying) {
isFlying = false;
mp.players.local.freezePosition(false);
mp.game.controls.enableControlAction(0, 75, true);
mp.gui.chat.push('Режим полёта выключен.');
} else {
mp.gui.chat.push('Вы не в режиме полёта.');
}
});