- rv-props: prop tableta custom cu logo-ul serverului (prop_rv_tablet) - 17mov_JobCenter: trigger tableta custom cand playerul este la Job Center - Loading Screen: logo 320px, texte in romana, accent rosu #cc1133, card info RV - qb-target: punctul (eye) dublu ca size (8px→16px), hover text rosu #cc1133 - 17mov_JobCenter: GlobalColor #cc1133 (accent mai inchis) - colors.css: tema Red Valley pe toate NUI-urile (accent, background alb transparent) - docs: 17mov_Hud API reference complet, server knowledge update
144 lines
5.7 KiB
Lua
144 lines
5.7 KiB
Lua
-- ============================================
|
|
-- rv-devtools: Comenzi de test pentru dezvoltatori
|
|
-- testanim, stopanim, testbubble, stopbubble, testtex
|
|
-- ============================================
|
|
|
|
-- ==========================================
|
|
-- TESTANIM: Test animatii + props
|
|
-- testanim dict anim [propName] [boneId] [ox oy oz] [rx ry rz]
|
|
-- ==========================================
|
|
local testProp = nil
|
|
RegisterCommand("testanim", function(_, args)
|
|
if not args[1] then
|
|
print("^3[testanim]^0 Utilizare:")
|
|
print(" testanim dict anim -- doar animatie")
|
|
print(" testanim dict anim propName -- prop pe mana dreapta (bone 60309)")
|
|
print(" testanim dict anim propName boneId -- prop pe bone custom (zero offsets)")
|
|
print(" testanim dict anim propName boneId ox oy oz rx ry rz -- full control")
|
|
print("^3Exemple:^0")
|
|
print(" testanim amb@code_human_in_bus_passenger_idles@female@tablet@base base prop_cs_tablet")
|
|
print(" testanim mp_character_creation@lineup@male_a loop_raised prop_police_id_board 28422")
|
|
return
|
|
end
|
|
|
|
-- Opreste animatia/propul anterior
|
|
ClearPedTasks(PlayerPedId())
|
|
if testProp and DoesEntityExist(testProp) then DeleteEntity(testProp) testProp = nil end
|
|
|
|
local ped = PlayerPedId()
|
|
local dict = args[1]
|
|
local anim = args[2] or "base"
|
|
|
|
-- Joaca animatia
|
|
RequestAnimDict(dict)
|
|
while not HasAnimDictLoaded(dict) do Wait(10) end
|
|
TaskPlayAnim(ped, dict, anim, 2.0, -2.0, -1, 49, 0, false, false, false)
|
|
|
|
-- Prop optional (arg 3+)
|
|
if args[3] then
|
|
local model = GetHashKey(args[3])
|
|
print("^3[testanim]^0 Loading model: " .. args[3] .. " (hash: " .. model .. ")")
|
|
print("^3[testanim]^0 IsModelValid: " .. tostring(IsModelValid(model)))
|
|
RequestModel(model)
|
|
local timeout = 50 -- 5 seconds max
|
|
while not HasModelLoaded(model) and timeout > 0 do Wait(100) timeout = timeout - 1 end
|
|
|
|
if HasModelLoaded(model) then
|
|
print("^2[testanim]^0 Model loaded!")
|
|
local coords = GetEntityCoords(ped)
|
|
testProp = CreateObject(model, coords.x, coords.y, coords.z, true, true, true)
|
|
print("^3[testanim]^0 CreateObject returned: " .. tostring(testProp))
|
|
|
|
local bone = tonumber(args[4]) or 60309
|
|
local ox = tonumber(args[5]) or 0.0
|
|
local oy = tonumber(args[6]) or 0.0
|
|
local oz = tonumber(args[7]) or 0.0
|
|
local rx = tonumber(args[8]) or 0.0
|
|
local ry = tonumber(args[9]) or 0.0
|
|
local rz = tonumber(args[10]) or 0.0
|
|
|
|
AttachEntityToEntity(testProp, ped, GetPedBoneIndex(ped, bone),
|
|
ox, oy, oz, rx, ry, rz, true, true, false, true, 1, true)
|
|
else
|
|
print("^1[testanim]^0 TIMEOUT: Model '" .. args[3] .. "' failed to load! IsModelValid=" .. tostring(IsModelValid(model)))
|
|
end
|
|
end
|
|
end, false)
|
|
|
|
RegisterCommand("stopanim", function()
|
|
ClearPedTasks(PlayerPedId())
|
|
if testProp and DoesEntityExist(testProp) then DeleteEntity(testProp) testProp = nil end
|
|
end, false)
|
|
|
|
-- ==========================================
|
|
-- TESTBUBBLE: Test bubble text deasupra capului
|
|
-- testbubble [text]
|
|
-- ==========================================
|
|
RegisterCommand("testbubble", function(_, args)
|
|
local text = table.concat(args, " ")
|
|
if text == "" then text = "Test bubble..." end
|
|
LocalPlayer.state:set("bubbleText", text, true)
|
|
LocalPlayer.state:set("bubbleIcon", "💬", true)
|
|
LocalPlayer.state:set("browsingJobs", true, true)
|
|
end, false)
|
|
|
|
RegisterCommand("stopbubble", function()
|
|
LocalPlayer.state:set("browsingJobs", false, true)
|
|
end, false)
|
|
|
|
-- ==========================================
|
|
-- TESTTEX: Test texture replacement cu imagine PNG
|
|
-- testtex [txdName] [textureName]
|
|
-- ==========================================
|
|
local texApplied = false
|
|
RegisterCommand("testtex", function(_, args)
|
|
local txdName = args[1] or "prop_cs_tablet"
|
|
local texName = args[2] or "prop_tablet_screen_01"
|
|
|
|
-- Creaza runtime texture din PNG (nu DUI)
|
|
local txd = CreateRuntimeTxd("rv_logo_txd")
|
|
local tex = CreateRuntimeTextureFromImage(txd, "rv_logo_tex", "web/images/logo.webp")
|
|
|
|
if tex then
|
|
AddReplaceTexture(txdName, texName, "rv_logo_txd", "rv_logo_tex")
|
|
print("^2[testtex]^0 Applied PNG: " .. txdName .. " / " .. texName)
|
|
texApplied = true
|
|
else
|
|
print("^1[testtex]^0 Failed to create texture from image!")
|
|
end
|
|
end, false)
|
|
|
|
-- testtexall - incearca toate combinatiile
|
|
RegisterCommand("testtexall", function()
|
|
local txd = CreateRuntimeTxd("rv_logo_txd")
|
|
local tex = CreateRuntimeTextureFromImage(txd, "rv_logo_tex", "web/images/logo.webp")
|
|
|
|
if not tex then
|
|
print("^1[testtexall]^0 Failed to create texture!")
|
|
return
|
|
end
|
|
|
|
local combos = {
|
|
{"prop_cs_tablet", "prop_tablet_screen_01"},
|
|
{"prop_cs_tablet", "prop_cs_tablet_d"},
|
|
{"prop_cs_tablet", "prop_cs_tablet_scr"},
|
|
{"prop_cs_tablet", "tablet_screen"},
|
|
{"prop_cs_tablet", "screen"},
|
|
{"prop_cs_tablet", "prop_base_black_02"},
|
|
{"prop_cs_tablet", "prop_base_white_fullb"},
|
|
{"prop_cs_tablet", "prop_fruit_box_01"},
|
|
{"prop_cs_tablet", "prop_green_glass3_a"},
|
|
}
|
|
for _, combo in ipairs(combos) do
|
|
AddReplaceTexture(combo[1], combo[2], "rv_logo_txd", "rv_logo_tex")
|
|
print("^3[testtexall]^0 Trying: " .. combo[1] .. " / " .. combo[2])
|
|
end
|
|
print("^2[testtexall]^0 Done! Check tablet.")
|
|
end, false)
|
|
|
|
RegisterCommand("stoptex", function()
|
|
RemoveReplaceTexture("prop_cs_tablet", "prop_tablet_screen_01")
|
|
texApplied = false
|
|
print("^2[stoptex]^0 Texture reset")
|
|
end, false)
|