198 lines
6.0 KiB
JavaScript
198 lines
6.0 KiB
JavaScript
import inlinesvg from "./utils/inlineSvg.js";
|
|
import ntsmain from "./components/ntsmain/index.js";
|
|
import companies from "./components/companies/index.js";
|
|
import profile from "./components/profile/index.js";
|
|
import leaderboard from "./components/leaderboard/index.js";
|
|
|
|
const store = Vuex.createStore({
|
|
state: {
|
|
activePage: "main",
|
|
missions: [],
|
|
jobInfo: {},
|
|
notifications: [],
|
|
playerData: {},
|
|
xp: {},
|
|
language: {},
|
|
trucks: [],
|
|
trucksCopy: [],
|
|
keybinds: {}
|
|
},
|
|
mutations: {
|
|
setTrucks(state, payload) {
|
|
state.trucks = payload;
|
|
},
|
|
setTrucksCopy(state, payload) {
|
|
state.trucksCopy = payload;
|
|
},
|
|
setLanguage(state, payload) {
|
|
state.language = payload;
|
|
},
|
|
setKeyBinds(state, payload) {
|
|
state.keybinds = payload;
|
|
},
|
|
setPlayerData(state, payload) {
|
|
state.playerData[payload.key] = payload.value;
|
|
},
|
|
createNotification(state, payload) {
|
|
state.notifications.push(payload);
|
|
setTimeout(() => {
|
|
state.notifications.splice(0, 1);
|
|
}, 3000);
|
|
},
|
|
setActivePage(state, payload) {
|
|
state.activePage = payload;
|
|
},
|
|
setJobInfo(state, payload) {
|
|
state.jobInfo[payload.key] = payload.value;
|
|
},
|
|
setMissions(state, payload) {
|
|
state.missions = payload;
|
|
},
|
|
setXP(state, payload) {
|
|
state.xp = payload;
|
|
}
|
|
}
|
|
});
|
|
|
|
const app = Vue.createApp({
|
|
data: () => ({
|
|
isOpen: false,
|
|
showPhone: false
|
|
}),
|
|
components: {
|
|
inlinesvg,
|
|
ntsmain,
|
|
companies,
|
|
profile,
|
|
leaderboard
|
|
},
|
|
methods: {
|
|
...Vuex.mapMutations({
|
|
setActivePage: "setActivePage",
|
|
setMissions: "setMissions",
|
|
setJobInfo: "setJobInfo",
|
|
createNotification: "createNotification",
|
|
setPlayerData: "setPlayerData",
|
|
setXP: "setXP",
|
|
setLanguage: "setLanguage",
|
|
setKeyBinds: "setKeyBinds",
|
|
setTrucks: "setTrucks",
|
|
setTrucksCopy: "setTrucksCopy"
|
|
}),
|
|
|
|
eventHandler(event) {
|
|
switch (event.data.action) {
|
|
case "open":
|
|
this.isOpen = true;
|
|
break;
|
|
case "setJobInfo":
|
|
this.setJobInfo({
|
|
key: event.data.payload.key,
|
|
value: event.data.payload.value
|
|
});
|
|
break;
|
|
case "checknui":
|
|
postNUI("ready");
|
|
break;
|
|
case "close":
|
|
this.isOpen = false;
|
|
postNUI("close");
|
|
break;
|
|
case "set_missions":
|
|
this.setMissions(event.data.payload);
|
|
break;
|
|
case "createNotification":
|
|
this.createNotification(event.data.payload);
|
|
break;
|
|
case "SyncPlayerDataByKey":
|
|
this.setPlayerData({
|
|
key: event.data.payload.key,
|
|
value: event.data.payload.value
|
|
});
|
|
break;
|
|
|
|
case "acceptillegal":
|
|
sound("trevor-phonecall.mp3");
|
|
|
|
break;
|
|
case "declineillegal":
|
|
this.showPhone = false;
|
|
|
|
break;
|
|
case "callillegal":
|
|
this.showPhone = true;
|
|
sound("mTruckerjob-Ringtone.mp3");
|
|
|
|
break;
|
|
case "setTrucks":
|
|
this.setTrucks(event.data.payload);
|
|
break;
|
|
case "setTrucksCopy":
|
|
this.setTrucksCopy(event.data.payload);
|
|
break;
|
|
case "setXP":
|
|
this.setXP(event.data.payload);
|
|
break;
|
|
case "setLanguage":
|
|
this.setLanguage(event.data.payload);
|
|
break;
|
|
case "setKeyBinds":
|
|
this.setKeyBinds(event.data.payload);
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
},
|
|
keyHandler(event) {
|
|
if (event.keyCode == 27) {
|
|
this.isOpen = false;
|
|
postNUI("close");
|
|
}
|
|
}
|
|
},
|
|
computed: {
|
|
...Vuex.mapState({
|
|
activePage: state => state.activePage,
|
|
jobInfo: state => state.jobInfo,
|
|
notifications: state => state.notifications,
|
|
playerData: state => state.playerData,
|
|
language: state => state.language,
|
|
keybinds: state => state.keybinds
|
|
}),
|
|
notificationPosition() {
|
|
if (this.isOpen) {
|
|
return {
|
|
left: "1rem",
|
|
bottom: "1rem"
|
|
};
|
|
} else {
|
|
return {
|
|
top: "1rem",
|
|
left: "50%",
|
|
transform: "translateX(-50%)"
|
|
};
|
|
}
|
|
}
|
|
},
|
|
mounted() {
|
|
window.addEventListener("keyup", this.keyHandler);
|
|
window.addEventListener("message", this.eventHandler);
|
|
document.querySelector("#app").style.display = "block";
|
|
}
|
|
});
|
|
app.use(store).mount("#app");
|
|
let audioPlayer = false;
|
|
|
|
function sound(val) {
|
|
let audioPath = `./${val}`;
|
|
|
|
if (audioPlayer && audioPlayer.playing()) {
|
|
audioPlayer.stop();
|
|
}
|
|
audioPlayer = new Howl({
|
|
src: [audioPath]
|
|
});
|
|
audioPlayer.volume(0.4);
|
|
audioPlayer.play();
|
|
}
|