-
Notifications
You must be signed in to change notification settings - Fork 4
/
Copy pathclient.mjs
119 lines (113 loc) · 3.17 KB
/
client.mjs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
import * as alt from "alt-client";
import * as game from "natives";
let speedoObject;
let speedoInterval;
let view = null;
alt.onServer("speedometer:hide", () => {
if (speedoObject !== null) {
game.deleteObject(speedoObject);
if (view !== null) {
view.destroy();
view = null;
}
alt.clearInterval(speedoInterval);
}
});
alt.onServer("speedometer:show", () => {
showWebviewSpeedo(alt.Player.local.vehicle);
});
function startSpeedoInterval() {
speedoInterval = alt.setInterval(() => {
if (view === null) return;
let vehicle = alt.Player.local.vehicle;
if (vehicle === null) return;
let vehicleColor = game.getVehicleCustomPrimaryColour(vehicle);
view.emit("speedometer:init", {
color: {
r: vehicleColor[1],
g: vehicleColor[2],
b: vehicleColor[3],
},
});
let engineHealth = game.getVehicleEngineHealth(vehicle.scriptID);
let vehicleFuel = vehicle.getSyncedMeta("FUEL");
let vehicleLights = game.getVehicleLightsState(
vehicle.scriptID,
null,
null
);
let vehicleLightState = vehicleLights[1];
let vehicleHighBeamState = vehicleLights[2];
view.emit("speedometer:data", {
speed: parseInt((game.getEntitySpeed(vehicle.scriptID) * 3.6).toFixed(0)),
gear: vehicle.gear,
fuel: parseInt(vehicleFuel),
rpm: vehicle.rpm * 10000,
engineHealth: parseInt(engineHealth),
lightState: vehicleLightState,
highBeamState: vehicleHighBeamState,
});
}, 50);
}
function showWebviewSpeedo(vehicle) {
let speedoModel = "prop_tv_flat_01_screen";
let modelHash = game.getHashKey(speedoModel);
let speedoTexture = "script_rt_tvscreen";
requestObjectModel(modelHash).then((succ) => {
if (succ) {
speedoObject = game.createObjectNoOffset(
game.getHashKey(speedoModel),
vehicle.pos.x,
vehicle.pos.y,
vehicle.pos.z,
true,
false,
false
);
game.setEntityAlpha(speedoObject, 240, false);
game.attachEntityToEntity(
speedoObject,
vehicle,
game.getEntityBoneIndexByName(vehicle, "door_pside_f"),
1.25,
-1,
0,
-25,
0,
0,
false,
false,
false,
false,
0,
true
);
game.setEntityCollision(speedoObject, false, true);
if (view === null) {
let inter = alt.setInterval(() => {
if (alt.isTextureExistInArchetype(modelHash, speedoTexture)) {
view = new alt.WebView(
"http://resource/html/speedometer.html",
modelHash,
speedoTexture
);
startSpeedoInterval();
alt.clearInterval(inter);
return;
}
}, 5);
}
}
});
}
function requestObjectModel(modelHash) {
return new Promise((resolve, reject) => {
game.requestModel(modelHash);
let inter = alt.setInterval(() => {
if (game.hasModelLoaded(modelHash)) {
alt.clearInterval(inter);
return resolve(true);
}
}, 5);
});
}