All-Resources/[core]/tk_mdt/client/main_editable.lua
2026-04-14 17:41:39 +02:00

220 lines
6.2 KiB
Lua

local doingProgress = false
---@class FineData
---@field targetIdentifier string
---@field amount number
---@field charges table
---@param data FineData
function FinePlayer(data)
end
---@class JailData
---@field targetIdentifier string
---@field time number
---@param data JailData
function JailPlayer(data)
if Config.Jail == 'tk' then
exports.tk_jail:jail(data.targetIdentifier, data.time)
elseif Config.Jail == 'pickle' or Config.Jail == 'xt' then
TriggerServerEvent('tk_mdt:jailPlayer', data)
elseif Config.Jail == 'rcore' then
TriggerCallback('tk_mdt:getIdFromIdentifier', function(id)
exports['rcore_prison']:Jail(id, data.time)
end, data.targetIdentifier)
end
end
-- add own logic here for when a player is taking a photo, for example, hide server hud
function TogglePhotoMode(isTakingPhoto)
end
local function StopProgress(ped, anim, obj, ptfx)
if DoesEntityExist(obj) then DeleteEntity(obj) end
if anim then
ClearPedTasks(ped)
end
if ptfx then
StopParticleFxLooped(ptfx, false)
end
doingProgress = false
end
function DoProgress(anim, duration)
local ped = PlayerPedId()
if doingProgress or IsPedInAnyVehicle(ped, true) or IsEntityDead(ped) or IsPedHandcuffed(ped) then return end
doingProgress = true
anim = type(anim) == 'table' and anim[math.random(#anim)] or anim
if anim?.dict and not LoadDict(anim.dict) then return end
duration = anim?.duration or duration or 5000
local startTime = GetGameTimer()
local controls = {20, 21, 30, 31, 32, 33, 34, 35, 24, 48, 257, 25, 263, 22, 44, 37, 288, 289, 170, 167, 318, 137, 36, 47, 264, 257, 266, 267, 268, 269, 140, 141, 142, 143, 75, 73}
local obj, ptfx
if anim?.prop?.model then
if not LoadModel(anim.prop.model) then return end
local pos = anim.prop.pos or vec3(0.0, 0.0, 0.0)
local rot = anim.prop.rot or vec3(0.0, 0.0, 0.0)
local pC = GetEntityCoords(ped)
obj = CreateObject(anim.prop.model, pC.x, pC.y, pC.z + 0.2, true, true, true)
AttachEntityToEntity(obj, ped, GetPedBoneIndex(ped, anim.prop.bone), pos, rot, true, true, false, true, 1, true)
end
if anim?.ptfx?.name then
if not LoadPtfx(anim.ptfx.asset) then return end
local offset = anim.ptfx.offset vec3(0.0, 0.0, 0.0)
local rot = anim.ptfx.rot or vec3(0.0, 0.0, 0.0)
local color = anim.ptfx.color or {r = 1.0, g = 1.0, b = 1.0}
UseParticleFxAsset(anim.ptfx.asset)
ptfx = StartNetworkedParticleFxLoopedOnEntityBone(anim.ptfx.name, obj, offset, rot, GetEntityBoneIndexByName(anim.ptfx.name, 'VFX'), anim.ptfx.scale, false, false, false)
SetParticleFxLoopedColour(ptfx, color.r, color.g, color.b, false)
end
if anim?.scenario then
TaskStartScenarioInPlace(ped, anim.scenario, 0, true)
end
while true do
for _,v in pairs(controls) do DisableControlAction(0, v, true) end
if anim?.dict and anim?.name and not IsEntityPlayingAnim(ped, anim.dict, anim.name, 3) then
TaskPlayAnim(ped, anim.dict, anim.name, 2.0, 2.0, -1, anim.flag or 49, 0, false, false, false)
end
if IsDisabledControlJustPressed(0, 73) or IsEntityDead(ped) then
StopProgress(ped, anim, obj, ptfx)
return false
end
if startTime + duration < GetGameTimer() then
StopProgress(ped, anim, obj, ptfx)
return true
end
Wait(0)
end
end
local function GetLineCount(str)
local lines = 1
for i = 1, #str do
local c = str:sub(i, i)
if c == '\n' then lines = lines + 1 end
end
return lines
end
function Draw3DText(coords, text)
SetTextScale(0.35, 0.35)
SetTextFont(4)
SetTextProportional(1)
SetTextColour(255, 255, 255, 215)
SetTextDropShadow()
SetTextOutline()
SetTextEntry("STRING")
SetTextCentre(true)
AddTextComponentString(text)
SetDrawOrigin(coords, 0)
DrawText(0.0, 0.0)
local factor = (string.len(text)) / 410
local lineCount = GetLineCount(text)
DrawRect(0.0, 0.0+0.0125*lineCount, 0.017+factor, 0.03*lineCount, 0, 0, 0, 75)
ClearDrawOrigin()
end
function Notify(text, notifyType)
if Config.NotificationType == 'mythic' then
exports['mythic_notify']:DoHudText(notifyType, text)
else
ShowNotification(text, notifyType)
end
end
function DisplayHelpText(text)
AddTextEntry('help_text', text)
DisplayHelpTextThisFrame('help_text', false)
end
function ShowTextUI(text)
if Config.UseOxLib then
lib.showTextUI(text, {position = 'right-center'})
else
exports['qb-core']:DrawText(text, 'left')
end
end
function HideTextUI()
if Config.UseOxLib then
lib.hideTextUI()
else
exports['qb-core']:HideText()
end
end
function OxRemoveBoxZone(zone)
exports.ox_target:removeZone(zone)
end
function OxAddBoxZone(options)
return exports.ox_target:addBoxZone(options)
end
function OxAddLocalEntity(entity, options)
return exports.ox_target:addLocalEntity(entity, options)
end
function OxRemoveLocalEntity(entity)
exports.ox_target:removeLocalEntity(entity)
end
function GetVehicleName(vehModel)
vehModel = tonumber(vehModel)
if not vehModel then
return _U('unknown')
end
local makeName = GetMakeNameFromVehicleModel(vehModel)
local displayName = GetDisplayNameFromVehicleModel(vehModel)
if not makeName or not displayName then
return _U('unknown')
end
local make = GetLabelText(makeName)
local model = GetLabelText(displayName)
--return ('%s %s'):format(make, model)
return model
end
function TakeScreenshot(token)
local p = promise.new()
exports['screenshot-basic']:requestScreenshotUpload('https://api.fivemanage.com/api/image', 'image', {
headers = {
Authorization = token
}
}, function(data)
local resp = json.decode(data)
p:resolve(resp.url)
end)
return Citizen.Await(p)
end
--RegisterKeyMapping('polmdt', 'Open MDT', 'keyboard', 'F5')