client.js
let activeFly = false;
let ped;
let speedDeault = 20;
let speed = speedDeault;
let speedMax = 100;
let objectHide;
let modelobject = 'p_d_scuba_tank_s'
RegisterCommand('fly', async()=>{
let ped = PlayerPedId();
let [x,y,z] = GetEntityCoords(ped)
await carregarModelo(modelobject)
objectHide = CreateObject(modelobject,x,y,z,true, false, false)
activeFly = !activeFly;
SetEntityInvincible(ped, true);
SetEntityHasGravity(ped, false);
SetPedCanRagdoll(ped, false);
SetPedRagdollOnCollision(ped, false);
SetEntityVisible(objectHide, false)
AttachEntityToEntity(ped, objectHide, 0,0,0,1,0,0,0,false, false, true, true, 0,true)
})
setTick(async()=>{
if(IsControlJustPressed(0,38)){ // key E
activeFly = !activeFly;
SetEntityInvincible(PlayerPedId(), true)
}
if(activeFly){
if(IsControlPressed(0,21)){ // key SHIFT
speed = speedMax;
}else{
speed = speedDeault;
}
let heading = GetGameplayCamRelativeHeading() + GetEntityHeading(objectHide);
if(IsControlPressed(0,32)){ //key W
ped = PlayerPedId()
let [dx,dy,dz] = getCamDirection();
SetEntityVelocity(objectHide, dx * speed, dy *speed, dz * speed)
}
if (IsControlPressed(0, 31)) { // S
SetEntityVelocity(objectHide,0,0,0)
}
SetEntityHeading(objectHide, heading)
SetEntityRotation(objectHide, 0, 0, heading, 2, true);
}
})
function getCamDirection(){
let heading = GetGameplayCamRelativeHeading()+GetEntityHeading(PlayerPedId());
let pitch = GetGameplayCamRelativePitch();
let x = -Math.sin(heading*Math.PI/180.0);
let y = Math.cos(heading*Math.PI/180.0);
let z = Math.sin(pitch*Math.PI/180.0);
let len = Math.sqrt(x*x+y*y+z*z);
if((len != 0)){
x = x/len;
y = y/len;
z = z/len;
}
return [x,y,z];
}
Delay = (ms) => new Promise(res => setTimeout(res, ms));
async function carregarModelo(modelo){
console.log('carregando modelo');
RequestModel(modelo);
while(!HasModelLoaded(modelo)){
await Delay(500);
}
console.log('modelo carregado');
}