Added fivem appearance

This commit is contained in:
Andyyy7666
2022-08-09 00:53:35 +02:00
parent 6d693ff7f3
commit 8681f824b6
5 changed files with 287 additions and 29 deletions

View File

@@ -2,7 +2,7 @@
config = {
changeCharacterCommand = "changecharacter", -- this is the command to open the ui again and change your character.
enableAppearance = true, -- you need to install fivem-appearance
characterSelectionAopDisplay = false,
aop = function ()
return "AOP: " .. exports["SimpleHUD"]:getAOP() -- exports["ModernHUD"]:getAOP()

View File

@@ -2,6 +2,7 @@
NDCore = exports["ND_Core"]:GetCoreObject()
local changeAppearence = false
local started = false
function startChangeAppearence()
local config = {
@@ -15,17 +16,19 @@ function startChangeAppearence()
}
exports["fivem-appearance"]:startPlayerCustomization(function(appearance)
if (appearance) then
if appearance then
local ped = PlayerPedId()
local clothing = {
model = GetEntityModel(ped),
tattoos = exports["fivem-appearance"]:getPedTattoos(ped),
appearance = exports["fivem-appearance"]:getPedAppearance(ped)
}
Wait(4000)
TriggerServerEvent("ND:updateClothes", clothing)
else
print("Canceled")
start(true)
end
changeAppearence = false
end, config)
end
@@ -62,8 +65,6 @@ function SetDisplay(bool, typeName, bg, characters)
end
end
started = false
function start(switch)
TriggerServerEvent("ND:GetCharacters")
if not started then
@@ -90,7 +91,7 @@ AddEventHandler("onResourceStart", function(resourceName)
end
Citizen.Wait(2000)
start(false)
end)
end)
AddEventHandler("playerSpawned", function()
start(true)
@@ -119,19 +120,21 @@ AddEventHandler("ND:returnCharacters", function(characters)
SetDisplay(true, "ui", background, characters)
end)
-- [TODO] to be implemented properly later
-- Set the player to creating the ped if they haven't already.
-- RegisterNetEvent("ND:setCharacter")
-- AddEventHandler("ND:setCharacter", function(character)
-- if next(character.clothing) == nil then
-- changeAppearence = true
-- else
-- changeAppearence = false
-- local ped = PlayerPedId()
-- exports["fivem-appearance"]:setPedTattoos(ped, character.clothing.tattoos)
-- exports["fivem-appearance"]:setPedAppearance(ped, character.clothing.appearance)
-- end
-- end)
RegisterNetEvent("ND:setCharacter")
AddEventHandler("ND:setCharacter", function(character)
if config.enableAppearance then
if next(character.clothing) == nil then
changeAppearence = true
else
changeAppearence = false
exports["fivem-appearance"]:setPlayerModel(character.clothing.model)
local ped = PlayerPedId()
exports["fivem-appearance"]:setPedTattoos(ped, character.clothing.tattoos)
exports["fivem-appearance"]:setPedAppearance(ped, character.clothing.appearance)
end
end
end)
-- Selecting a player from the iu.
RegisterNUICallback("setMainCharacter", function(data)
@@ -142,7 +145,8 @@ RegisterNUICallback("setMainCharacter", function(data)
x = spawn.x,
y = spawn.y,
z = spawn.z,
name = spawn.name
name = spawn.name,
id = characters[data.id].id
})
end
Wait(1000)
@@ -200,21 +204,27 @@ RegisterNUICallback("tpToLocation", function(data)
Citizen.Wait(500)
FreezeEntityPosition(ped, false)
SetEntityVisible(ped, true, 0)
if changeAppearence then
if config.enableAppearance and changeAppearence then
startChangeAppearence()
end
end)
-- Choosing the do not tp button.
RegisterNUICallback("tpDoNot", function()
RegisterNUICallback("tpDoNot", function(data)
local ped = PlayerPedId()
local character = NDCore.Functions.GetCharacters()[data.id]
FreezeEntityPosition(ped, false)
if next(character.lastLocation) ~= nil then
SetEntityCoords(ped, character.lastLocation.x, character.lastLocation.y, character.lastLocation.z, false, false, false, false)
end
FreezeEntityPosition(ped, true)
SwitchInPlayer(ped)
Citizen.Wait(500)
SetDisplay(false, "ui")
Citizen.Wait(500)
SetEntityVisible(ped, true, 0)
FreezeEntityPosition(ped, false)
if changeAppearence then
SetEntityVisible(ped, true, 0)
if config.enableAppearance and changeAppearence then
startChangeAppearence()
end
end)
@@ -229,4 +239,4 @@ RegisterCommand(config.changeCharacterCommand, function()
end, false)
-- chat suggestions
TriggerEvent("chat:addSuggestion", "/" .. config.changeCharacterCommand, "Switch your framework character.")
TriggerEvent("chat:addSuggestion", "/" .. config.changeCharacterCommand, "Switch your framework character.")

View File

@@ -64,6 +64,7 @@ $(function() {
if (item.type === "setSpawns") {
$("#spawnMenuContainer").empty();
setTimeout(function(){
$("#tpDoNot").data("id", item.id);
$("#spawnMenuContainer").append(`<button class="spawnButtons" data-x="${item.x}" data-y="${item.y}" data-z="${item.z}">${item.name}</button>`);
$(".spawnButtons").click(function() {
$.post(`https://${GetParentResourceName()}/tpToLocation`, JSON.stringify({
@@ -77,6 +78,16 @@ $(function() {
}, 550);
return;
});
$("#tpDoNot").click(function() {
$.post(`https://${GetParentResourceName()}/tpDoNot`, JSON.stringify({
id: $("#tpDoNot").data("id")
}));
spawnMenu(false)
setTimeout(function(){
$("#spawnMenuContainer").empty();
}, 550);
return;
});
}, 10);
}
@@ -201,8 +212,228 @@ $(function() {
}, 550);
return;
});
$("#tpDoNot").click(function() {
$.post(`https://${GetParentResourceName()}/tpDoNot`);
$("#quitGameButton").click(function() {
exitGameMenu(true)
return;
});
$("#exitGameCancel").click(function() {
exitGameMenu(false)
return;
});
$("#exitGameConfirm").click(function() {
$.post(`https://${GetParentResourceName()}/exitGame`);
return;
});
});
$(function() {
function display(bool) {
if (bool) {
$("body").show();
} else {
$("body").hide();
}
}
function characterCreatorMenu(bool) {
if (bool) {
$("#characterCreator").fadeIn("slow");
$("#characterEditor, #exitGameMenu, #deleteCharacterMenu, #spawnLocation").hide();
return;
}
$("#characterCreator").fadeOut("slow");
}
function characterEditorMenu(bool) {
if (bool) {
$("#characterEditor").fadeIn("slow");
$("#characterCreator, #exitGameMenu, #deleteCharacterMenu, #spawnLocation").hide();
return;
}
$("#characterEditor").fadeOut("slow");
}
function exitGameMenu(bool) {
if (bool) {
$("#exitGameMenu").fadeIn("slow");
$("#characterCreator, #characterEditor, #deleteCharacterMenu, #spawnLocation").hide();
return;
}
$("#exitGameMenu").fadeOut("slow");
}
function confirmDeleteMenu(bool) {
if (bool) {
$("#deleteCharacterMenu").fadeIn("slow");
$("#characterCreator, #characterEditor, #exitGameMenu, #spawnLocation").hide();
return;
}
$("#deleteCharacterMenu").fadeOut("slow");
}
function spawnMenu(bool) {
if (bool) {
$("#spawnLocation").fadeIn("slow");
$("#characterCreator, #characterEditor, #exitGameMenu, #deleteCharacterMenu").hide();
return;
}
$("#spawnLocation").fadeOut("slow");
}
window.addEventListener("message", function(event) {
const item = event.data;
if (item.type === "ui") {
if (item.status) {
$("#serverName").text(item.serverName);
$("body").css("background-image", "url(" + item.background + ")");
display(true);
} else {
display(false);
}
}
$("#playerAmount").text(item.characterAmount);
if (item.type === "setSpawns") {
$("#spawnMenuContainer").empty();
setTimeout(function(){
$("#tpDoNot").data("id", item.id);
$("#spawnMenuContainer").append(`<button class="spawnButtons" data-x="${item.x}" data-y="${item.y}" data-z="${item.z}">${item.name}</button>`);
$(".spawnButtons").click(function() {
$.post(`https://${GetParentResourceName()}/tpToLocation`, JSON.stringify({
x: $(this).data("x"),
y: $(this).data("y"),
z: $(this).data("z")
}));
spawnMenu(false);
setTimeout(function(){
$("#spawnMenuContainer").empty();
}, 550);
return;
});
$("#tpDoNot").click(function() {
$.post(`https://${GetParentResourceName()}/tpDoNot`, JSON.stringify({
id: $("#tpDoNot").data("id")
}));
spawnMenu(false)
setTimeout(function(){
$("#spawnMenuContainer").empty();
}, 550);
return;
});
}, 10);
}
if (item.type === "givePerms") {
JSON.parse(item.deptRoles).forEach((dept) => {
$(".departments").append($("<option>", {
text: dept
}));
});
}
if (item.type === "aop") {
$("#aop").text(item.aop);
}
if (item.type === "refresh") {
$("#charactersSection").empty();
characterCreatorMenu(false);
let characters = JSON.parse(item.characters)
Object.keys(characters).forEach((id) => {
createCharacter(characters[id].firstName, characters[id].lastName, characters[id].dob, characters[id].gender, characters[id].twt, characters[id].job, characters[id].cash, characters[id].bank, characters[id].id);
});
}
})
function createCharacter(firstName, lastName, dateOfBirth, gender, twtName, department, startingCash, startingBank, id) {
$("#charactersSection").append(`<button id="characterButton${id}" class="createdButton">${firstName} ${lastName} (${department})</button><button id="characterButtonEdit${id}" class="createdButtonEdit"><a class="fas fa-edit"></a> Edit</button><button id="characterButtonDelete${id}" class="createdButtonDelete"><a class="fas fa-trash-alt"></a> Delete</button>`);
$(`#characterButton${id}`).click(function() {
spawnMenu(true)
$.post(`https://${GetParentResourceName()}/setMainCharacter`, JSON.stringify({
id: id
}));
return;
});
$(`#characterButtonEdit${id}`).click(function() {
characterEditorMenu(true)
$("#newFirstName").val(firstName);
$("#newLastName").val(lastName);
$("#newDateOfBirth").val(dateOfBirth);
$("#newGender").val(gender);
$("#newTwtName").val(twtName);
$("#newDepartment").val(department);
characterEdited = id
return;
});
$(`#characterButtonDelete${id}`).click(function() {
confirmDeleteMenu(true)
characterDeleting = id
return;
});
}
$("#characterCreator").submit(function() {
$.post(`https://${GetParentResourceName()}/newCharacter`, JSON.stringify({
firstName: $("#firstName").val(),
lastName: $("#lastName").val(),
dateOfBirth: $("#dateOfBirth").val(),
gender: $("#gender").val(),
twtName: $("#twtName").val(),
department: $("#department").val(),
startingCash: $("#startingCash").val(),
startingBank: $("#startingBank").val()
}));
characterCreatorMenu(false)
$("#firstName, #lastName, #dateOfBirth, #twtName, #startingCash, #startingBank").val("")
return false;
});
$("#characterEditor").submit(function() {
characterEditorMenu(false)
$.post(`https://${GetParentResourceName()}/editCharacter`, JSON.stringify({
firstName: $("#newFirstName").val(),
lastName: $("#newLastName").val(),
dateOfBirth: $("#newDateOfBirth").val(),
gender: $("#newGender").val(),
twtName: $("#newTwtName").val(),
department: $("#newDepartment").val(),
id: characterEdited
}));
return false;
});
$("#deleteCharacterConfirm").click(function() {
confirmDeleteMenu(false)
$("#characterButton" + characterDeleting).fadeOut("slow",function(){
$("#characterButton" + characterDeleting).remove();
})
$("#characterButtonEdit" + characterDeleting).fadeOut("slow",function(){
$("#characterButtonEdit" + characterDeleting).remove();
})
$("#characterButtonDelete" + characterDeleting).fadeOut("slow",function(){
$("#characterButtonDelete" + characterDeleting).remove();
})
$.post(`https://${GetParentResourceName()}/delCharacter`, JSON.stringify({
character: characterDeleting
}));
return;
});
$("#newCharacterButton").click(function() {
characterCreatorMenu(true)
return;
});
$("#deleteCharacterCancel").click(function() {
confirmDeleteMenu(false)
return;
});
$("#cancelCharacterCreation").click(function() {
characterCreatorMenu(false)
return;
});
$("#cancelCharacterEditing").click(function() {
characterEditorMenu(false)
return;
});
$("#tpCancel").click(function() {
spawnMenu(false)
setTimeout(function(){
$("#spawnMenuContainer").empty();
@@ -222,4 +453,4 @@ $(function() {
$.post(`https://${GetParentResourceName()}/exitGame`);
return;
});
});
});

View File

@@ -77,7 +77,11 @@ end)
-- Remove player from NDCore.Players table when they leave.
AddEventHandler("playerDropped", function()
local player = source
NDCore.Players[player] = nil
local character = NDCore.Players[player]
if character then
NDCore.Functions.UpdateLastLocation(character.id, character.lastLocation)
end
character = nil
end)
-- Update the characters clothes.

View File

@@ -7,4 +7,17 @@ NDCore.Config = config
function GetCoreObject()
return NDCore
end
end
CreateThread(function()
while true do
Wait(30000)
for player, playerInfo in pairs(NDCore.Players) do
local ped = GetPlayerPed(player)
if DoesEntityExist(ped) then
local lastLocation = GetEntityCoords(ped)
playerInfo.lastLocation = {x = lastLocation.x, y = lastLocation.y, z = lastLocation.z}
end
end
end
end)