Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
49 changes: 45 additions & 4 deletions vrp/User.lua
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ end
function User:save()
vRP:setUData(self.id, "vRP:datatable", msgpack.pack(self.data))

if not self.loading_character then
if not self.loading_character and self.cid then
vRP:setCData(self.cid, "vRP:datatable", msgpack.pack(self.cdata))
end
end
Expand All @@ -63,13 +63,51 @@ end
function User:createCharacter()
local characters = self:getCharacters()
if #characters < vRP.cfg.max_characters then
local rows = vRP:query("vRP/create_character", {user_id = self.id})
if #rows > 0 then
return rows[1].id
local ok = vRP:execute("vRP/create_character", {user_id = self.id})
if ok then
Citizen.Wait(100) -- Small delay to ensure the insert is processed
local rows = vRP:query("vRP/get_last_character_id", {})
if #rows > 0 then
local character_id = rows[1].id
if character_id and character_id > 0 then
-- Initialize character data for new character
self:_initCharacterData(character_id)
return character_id
end
end
end
end
end

-- initialize character data
function User:_initCharacterData(character_id)
-- Initialize cdata with default values for all modules
self.cdata = {
-- Player state data
state = {
position = nil,
heading = nil,
health = nil,
weapons = nil,
components = nil,
customization = nil
},
-- Group data
groups = {},
-- HUD settings
hud_settings = {},
hud_enabled = true,
hud_show_health = true,
hud_show_armor = true,
hud_show_hunger = true,
hud_show_thirst = true,
hud_show_stamina = false
}

-- Save initial character data
vRP:setCData(character_id, "vRP:datatable", msgpack.pack(self.cdata))
end

-- use character
-- return true or false, err_code
-- Removed delay for character switching to improve responsiveness.
Expand Down Expand Up @@ -107,6 +145,9 @@ function User:useCharacter(id, bypass)
local sdata = vRP:getCData(self.cid, "vRP:datatable")
if sdata and string.len(sdata) > 0 then
self.cdata = msgpack.unpack(sdata)
else
-- Initialize with default values for new or empty character data
self:_initCharacterData(self.cid)
end

vRP:triggerEventSync("characterLoad", self)
Expand Down
78 changes: 24 additions & 54 deletions vrp/base.lua
Original file line number Diff line number Diff line change
Expand Up @@ -17,65 +17,26 @@ pvRP.loadScript = module
Proxy.addInterface("vRP", pvRP)

-- queries
vRP:prepare("vRP/base_tables",[[
CREATE TABLE IF NOT EXISTS vrp_users(
id INTEGER AUTO_INCREMENT,
CONSTRAINT pk_user PRIMARY KEY(id)
);

CREATE TABLE IF NOT EXISTS vrp_user_ids(
identifier VARCHAR(100),
user_id INTEGER,
CONSTRAINT pk_user_ids PRIMARY KEY(identifier),
CONSTRAINT fk_user_ids_users FOREIGN KEY(user_id) REFERENCES vrp_users(id) ON DELETE CASCADE
);

CREATE TABLE IF NOT EXISTS vrp_characters(
id INTEGER AUTO_INCREMENT,
user_id INTEGER,
CONSTRAINT pk_characters PRIMARY KEY(id),
CONSTRAINT fk_characters_users FOREIGN KEY(user_id) REFERENCES vrp_users(id) ON DELETE CASCADE
);

CREATE TABLE IF NOT EXISTS vrp_user_data(
user_id INTEGER,
dkey VARCHAR(100),
dvalue BLOB,
CONSTRAINT pk_user_data PRIMARY KEY(user_id,dkey),
CONSTRAINT fk_user_data_users FOREIGN KEY(user_id) REFERENCES vrp_users(id) ON DELETE CASCADE
);

CREATE TABLE IF NOT EXISTS vrp_character_data(
character_id INTEGER,
dkey VARCHAR(100),
dvalue BLOB,
CONSTRAINT pk_character_data PRIMARY KEY(character_id,dkey),
CONSTRAINT fk_character_data_characters FOREIGN KEY(character_id) REFERENCES vrp_characters(id) ON DELETE CASCADE
);

CREATE TABLE IF NOT EXISTS vrp_server_data(
id VARCHAR(100),
dkey VARCHAR(100),
dvalue BLOB,
CONSTRAINT pk_server_data PRIMARY KEY(id, dkey)
);

CREATE TABLE IF NOT EXISTS vrp_global_data(
dkey VARCHAR(100),
dvalue BLOB,
CONSTRAINT pk_global_data PRIMARY KEY(dkey)
);
]])

vRP:prepare("vRP/create_user","INSERT INTO vrp_users(id) VALUES(DEFAULT); SELECT LAST_INSERT_ID() AS id")

vRP:prepare("vRP/create_character", "INSERT INTO vrp_characters(user_id) VALUES(@user_id); SELECT LAST_INSERT_ID() AS id")
vRP:prepare("vRP/base_tables","CREATE TABLE IF NOT EXISTS vrp_users(id INTEGER AUTO_INCREMENT, CONSTRAINT pk_user PRIMARY KEY(id))")
vRP:prepare("vRP/base_tables2","CREATE TABLE IF NOT EXISTS vrp_user_ids(identifier VARCHAR(100), user_id INTEGER, CONSTRAINT pk_user_ids PRIMARY KEY(identifier), CONSTRAINT fk_user_ids_users FOREIGN KEY(user_id) REFERENCES vrp_users(id) ON DELETE CASCADE)")
vRP:prepare("vRP/base_tables3","CREATE TABLE IF NOT EXISTS vrp_characters(id INTEGER AUTO_INCREMENT, user_id INTEGER, CONSTRAINT pk_characters PRIMARY KEY(id), CONSTRAINT fk_characters_users FOREIGN KEY(user_id) REFERENCES vrp_users(id) ON DELETE CASCADE)")
vRP:prepare("vRP/base_tables4","CREATE TABLE IF NOT EXISTS vrp_user_data(user_id INTEGER, dkey VARCHAR(100), dvalue BLOB, CONSTRAINT pk_user_data PRIMARY KEY(user_id,dkey), CONSTRAINT fk_user_data_users FOREIGN KEY(user_id) REFERENCES vrp_users(id) ON DELETE CASCADE)")
vRP:prepare("vRP/base_tables5","CREATE TABLE IF NOT EXISTS vrp_character_data(character_id INTEGER, dkey VARCHAR(100), dvalue BLOB, CONSTRAINT pk_character_data PRIMARY KEY(character_id,dkey), CONSTRAINT fk_character_data_characters FOREIGN KEY(character_id) REFERENCES vrp_characters(id) ON DELETE CASCADE)")
vRP:prepare("vRP/base_tables6","CREATE TABLE IF NOT EXISTS vrp_server_data(id VARCHAR(100), dkey VARCHAR(100), dvalue BLOB, CONSTRAINT pk_server_data PRIMARY KEY(id, dkey))")
vRP:prepare("vRP/base_tables7","CREATE TABLE IF NOT EXISTS vrp_global_data(dkey VARCHAR(100), dvalue BLOB, CONSTRAINT pk_global_data PRIMARY KEY(dkey))")

vRP:prepare("vRP/create_user","INSERT INTO vrp_users(id) VALUES(DEFAULT)")
vRP:prepare("vRP/get_last_user_id","SELECT LAST_INSERT_ID() AS id")

vRP:prepare("vRP/create_character", "INSERT INTO vrp_characters(user_id) VALUES(@user_id)")
vRP:prepare("vRP/get_last_character_id", "SELECT LAST_INSERT_ID() AS id")
vRP:prepare("vRP/delete_character", "DELETE FROM vrp_characters WHERE id = @id AND user_id = @user_id")
vRP:prepare("vRP/get_characters", "SELECT id FROM vrp_characters WHERE user_id = @user_id")
vRP:prepare("vRP/check_character", "SELECT id FROM vrp_characters WHERE id = @id AND user_id = @user_id")

vRP:prepare("vRP/add_identifier","INSERT INTO vrp_user_ids(identifier,user_id) VALUES(@identifier,@user_id)")
vRP:prepare("vRP/userid_byidentifier","SELECT user_id FROM vrp_user_ids WHERE identifier = @identifier")
vRP:prepare("vRP/get_max_user_id","SELECT MAX(id) as max_id FROM vrp_users")

vRP:prepare("vRP/set_userdata","REPLACE INTO vrp_user_data(user_id,dkey,dvalue) VALUES(@user_id,@key,UNHEX(@value))")
vRP:prepare("vRP/get_userdata","SELECT dvalue FROM vrp_user_data WHERE user_id = @user_id AND dkey = @key")
Expand All @@ -89,7 +50,16 @@ vRP:prepare("vRP/set_globaldata","REPLACE INTO vrp_global_data(dkey,dvalue) VALU
vRP:prepare("vRP/get_globaldata","SELECT dvalue FROM vrp_global_data WHERE dkey = @key")

-- init tables
async(function() vRP:execute("vRP/base_tables") end)
async(function()
-- Create tables in dependency order
vRP:execute("vRP/base_tables") -- vrp_users (no dependencies)
vRP:execute("vRP/base_tables2") -- vrp_user_ids (depends on vrp_users)
vRP:execute("vRP/base_tables3") -- vrp_characters (depends on vrp_users)
vRP:execute("vRP/base_tables4") -- vrp_user_data (depends on vrp_users)
vRP:execute("vRP/base_tables5") -- vrp_character_data (depends on vrp_characters)
vRP:execute("vRP/base_tables6") -- vrp_server_data (no dependencies)
vRP:execute("vRP/base_tables7") -- vrp_global_data (no dependencies)
end)

-- handlers

Expand Down
18 changes: 18 additions & 0 deletions vrp/cfg/hud.lua
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
-- vRP HUD configuration

local cfg = {}

-- HUD Module
cfg.module_enabled = true

-- Default HUD settings (these can be customized per player)
cfg.default_settings = {
hud_enabled = true,
hud_show_health = true,
hud_show_armor = true,
hud_show_hunger = true,
hud_show_thirst = true,
hud_show_stamina = false
}

return cfg
18 changes: 18 additions & 0 deletions vrp/cfg/lang/en.lua
Original file line number Diff line number Diff line change
Expand Up @@ -776,6 +776,24 @@ local lang = {
description = "{1} [ {2} ] died",
},
},
hud = {
title = "HUD",
description = "Configure your HUD settings",
config = {
title = "HUD Configuration"
},
toggle = "Toggle HUD",
enabled = "HUD is enabled",
disabled = "HUD is disabled",
health = "Health Bar",
armor = "Armor Bar",
hunger = "Hunger Bar",
thirst = "Thirst Bar",
stamina = "Stamina Bar",
showing = "Showing",
hidden = "Hidden",
reset = "Reset Settings"
},
}

return lang
1 change: 1 addition & 0 deletions vrp/cfg/modules.lua
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ local modules = {
admin = true,
group = true,
gui = true,
hud = true,
map = true,
weather = true,
misc = true,
Expand Down
Loading