Files
Elite-Gaming-FiveM/resources/BigDaddy-VendingMachines/nui/ui.html
T
2025-07-16 23:43:57 -07:00

202 lines
4.6 KiB
HTML

<html>
<head>
<script src="nui://game/ui/jquery.js" type="text/javascript"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/howler/2.1.1/howler.min.js" type="text/javascript"></script>
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
</head>
<body style="background-color: rgba(0, 0, 0, 0);display: block; margin: 0; padding: 0;">
<style>
.ui {
width: 100%;
height: 100%;
background: rgba(0,0,0,.5);
display: none;
text-align: center;
margin: 0;
padding: 0;
}
.ui-inner {
width: 310px;
margin: 0 auto 0;
top: 100px;
position: relative;
}
.ui-wide {
width:620px;
}
.vbtn {
width: 310px;
height: 90px;
cursor: pointer;
}
.col {
float:left;
}
</style>
<div class="ui">
<div class="ui-inner"></div>
</div>
<script>
var isVisible = false;
var audioPlayer = null;
var SoundPlayer = null;
var distance = 9999999;
var maxVolume = 0;
var radius = 0;
window.addEventListener('message', function (event) {
if (event.data.action == "sendSound") {
distance = 9999999;
maxVolume = 0;
radius = 0;
if (SoundPlayer != null) {
SoundPlayer.pause();
}
if (event.data.submissionFile == "") { //if not file sent, just return it's probably just as a stop sound call
return;
}
SoundPlayer = new Howl({
src: ["./sounds/" + event.data.submissionFile + ".ogg"],
loop: event.data.loop
});
distance = event.data.distance;
maxVolume = event.data.maxVolume;
radius = event.data.radius;
SoundPlayer.volume(calcDistanceVolume());
SoundPlayer.play();
}
else if (event.data.action == "updateDistance") {
distance = event.data.distance;
SoundPlayer.volume(calcDistanceVolume());
}
else if (event.data.action === "PlaySound") {
if (event.data.value === '') {
if (audioPlayer != null) {
audioPlayer.pause();
audioPlayer = null;
}
} else {
try {
audioPlayer = new Howl({
src: [event.data.value + ".ogg"],
loop: false
});
audioPlayer.volume(0.5);
audioPlayer.play();
} catch (err) {
}
}
}
if (event.data.action === "OpenNui") {
$('.ui-inner').html("");
var s = event.data.value.split(',');
if (s.length > 7) {
$('.ui-inner').addClass('ui-wide');
for (i = 0; i < s.length; i++) {
if (s[i] != '' && imageExists(s[i].toLowerCase() + '.png')) {
var t = $('#vbtn_template2').html();
t = t.replace('{{image}}', s[i].toLowerCase());
t = t.replace('{{item}}', s[i]);
$(".ui-inner").append(t);
if ((i+1) % 2 == 0) {
$(".ui-inner").append('</br>');
}
}
}
} else {
for (i = 0; i < s.length; i++) {
if (s[i] != '' && imageExists(s[i].toLowerCase() + '.png')) {
var t = $('#vbtn_template').html();
t = t.replace('{{image}}', s[i].toLowerCase());
t = t.replace('{{item}}', s[i]);
$(".ui-inner").append(t);
}
}
}
$('.ui').show();
isVisible = true;
}
});
function Choose(t) {
fetch(`https://${GetParentResourceName()}/SelectionMade`, {
method: 'POST',
headers: {
'Content-Type': 'application/json; charset=UTF-8',
},
body: JSON.stringify({
index: $(t).attr('data-item')
})
});
$('.ui').hide();
}
jQuery(function ($) {
var input = $('body');
input.on('keydown', function () {
var key = event.keyCode || event.charCode;
if (key == 8) { //backspace
if (isVisible) {
$('.ui').fadeOut();
isVisible = false;
fetch(`https://${GetParentResourceName()}/SelectionMade`, {
method: 'POST',
headers: {
'Content-Type': 'application/json; charset=UTF-8',
},
body: JSON.stringify({
index: ''
})
});
}
return false;
}
});
});
function imageExists(image_url) {
var http = new XMLHttpRequest();
http.open('HEAD', image_url, false);
http.send();
return http.status != 404;
}
function calcDistanceVolume() {
//$('#debug').html('distance: ' + distance + " radius: " + radius + " maxVolume: " + maxVolume);
if (distance > radius) {
return 0;
} else {
return maxVolume * ((radius - distance) / radius);
}
}
</script>
<script type="text/html" id="vbtn_template">
<div class="vbtn"><img src="{{image}}.png" data-item="{{item}}" onclick="Choose(this)" /></div>
</script>
<script type="text/html" id="vbtn_template2">
<div class="vbtn col"><img src="{{image}}.png" data-item="{{item}}" onclick="Choose(this)" /></div>
</script>
</body>
</html>