Skip to content

jimathy/jim_bridge

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Jim_Bridge

This script is intended to be used with my all my scripts (soon)

It was started due to wanting to bring the same features from some scripts into others with minimal work and multiple updates

  • Having certain functions in one place(this script) makes it easier to update, enchance and fix things
  • This brings the possibility of branching to mutliple frameworks as I've added some already:
    • "qb-core"
    • "qbx-core"
    • "ox_core"
    • "es_extended" (requires ox_lib and ox_inventory)

All the next updates of my scripts will use this script and be added as a dependancy


It was a tough decision to put it up on github instead of tebex and encrypted

But I want this script to grow with help of others who know more about other cores


The installation of this script is simple

  • REMOVE -main from the folder name, like any other github hosted script
  • it just needs to start before any script that requires it
  • it can start before core scripts if you want
  • for qb-core I personally place this script in resources > [standalone]

Support for different exports and scripts

In exports.lua is the list of script folder names

This is for people who have customised/renamed scripts

eg. for people who use ps-inventory, this is mainly based on qb-inventory so you need to rename

    QBInv = "qb-inventory",

to

    QBInv = "ps-inventory",

This will now use events from ps-inventory and use it through out the scripts.

WIP

Documentation

This script brings alot of features to simplify making scripts with preset functions and automations.

It attempts to make use of configs from the scripts its loaded into. For example:

Config

This needs to be in every script that uses it, a System table with Debug, Menu, Notify, drawText, progressBar

This is required to use jim_bridge with your script

Config = {
	System = {
		Debug = true,		-- This enables Debug mode
							-- Revealing debug prints and debug boxes on targets

		Menu = "qb", 		-- This specifies what menu script will be loaded
							-- "qb" = `qb-menu` and edited versions of it
							-- "ox" = `ox_lib`'s context menu system
							-- "gta" = `WarMenu' a free script for a gta style menu

		Notify = "gta",		-- This allows you to choose the notification system for scripts
							-- "qb" = `qb-core`'s built in notifications
							-- "ox" = `ox_lib`'s built in notifications
							-- "esx" = `esx_notify` esx's default notifications
							-- "okok" = `okok-notify` okok's notifications
							-- "gta" = Native GTA style popups

		drawText = "gta",	-- The style of drawText you want to use
							-- "qb" = `qb-core`'s drawText system
							-- "ox" = `ox_lib`'s drawTextUI system
							-- "gta" = Native GTA style popups


		progressBar = "gta" -- The style of progressBar you want to use
							-- "qb" = `qb-core`'s style progressBar
							-- "ox" = `ox_lib`'s default progressBar
							-- "gta" = Native GTA style "spinner"
	},
}

openMenu(Menu, data)

This handles creation of menus using OX_Lib, qb-menu or WarMenu

It uses mixed/new functions to bring more compatability to one another

Menu is your button entries and works like qb-menu or ox_lib, for example:

local Menu = {}
Menu[#Menu + 1] = {
	isMenuHeader = true, 			-- This makes the current button unclickable
	icon = invImg("lockpick")		-- Supports fontawesome or custom images
									-- This example use the custom function `invImg()` to retreive an nui:// link to the given item's image
	arrow = true,					-- Adds a arrow icon to the button (in qb-menu overrides the icon)
	header = "Header Test",			-- The header/title for the button
	txt = "Text test",				-- The txt/description for the button

	onSelect = function()			-- This brings the onSelect function to qb-menu
		TriggerEvent("lolhi", { lol = hi }),
	end,
									-- Enter what happens when you click the button
}

As you can see above, it mixes variables but makes it possible to switch between menus just by changing the config option

After you have created the info above, you need to then trigger opening of this menu with:

openMenu(Menu, 						-- Menu here is your table name you created above
{									-- Next entry in openMenu is a table
	header = "Menu Header",			-- What your menu title will be shown as
	headertxt = "Header info",		-- Info to be displayed under the title

	onExit = function()				-- Will create a "Close button"
		TriggerEvent("lolhi", { lol = hi }),
	end,							-- When clicked it will trigger the onExit event

	onBack = function()				-- Will create a "Back button"
		TriggerEvent("lolhi", { lol = hi }),
	end,							-- When clicked it will trigger the onBack event
})

Support for multiple target events

These automatically detect what target script you are using

They are also automatically removed when the script is stopped (for helping optimization)

createEntityTarget(entity, opts, dist)

Create an entity based target

createEntityTarget(
	entity,							-- The entity ID of what you want to target
	{
		{ 							-- Your target options here
			icon = "icon",			-- Your icon, only supports font awesome icons
			label = "Test Label",	-- The label of your target
			item = "lockpick"		-- The required it em
			job = "mechanic",		-- The required job
			gang = "lostmc",		-- The required gang
			action = function()		-- What happens when the target is selected
				TriggerEvent("lolhi", { lol = hi }),
			end,
		},
	}
, dist)								-- How close you ned to be to see the target

createBoxTarget(data, opts, dist)

Create an entity based target

createBoxTarget(
	{
		"TargetName",				-- The name/id of your target here
		vec3(0, 0, 0),				-- The coordinates of your target
		2.0,						-- The width of your target box
		2.0,						-- The depth of your target box
		{
			name = "TargetName",	-- The name/id of your target here
			heading = 200.0,		-- The direction your target will be placed
			debugPoly = true,		-- Wether to show debug boxes to help place targets
			minZ = 190.0,			-- The bottom of your box
			maxZ = 210.0,			-- The top of your box
		},
	},
	{
		{ 							-- Your target options here
			icon = "icon",			-- Your icon, only supports font awesome icons
			label = "Test Label",	-- The label of your target
			item = "lockpick"		-- The required it em
			job = "mechanic",		-- The required job
			gang = "lostmc",		-- The required gang
			action = function()		-- What happens when the target is selected
				TriggerEvent("lolhi", { lol = hi }),
			end,
		},
	},
dist)								-- How close you ned to be to see the target

createCircleTarget(data, opts, dist)

Create an entity based target

createCircleTarget(
	{
		"TargetName",				-- The name/id of your target here
		vec3(0, 0, 0),				-- The coordinates of your target
		2.0,						-- The radius of your target circle
		{
			name = "TargetName",	-- The name/id of your target here
			heading = 200.0,		-- The direction your target will be placed
			debugPoly = true,		-- Wether to show debug boxes to help place targets
			minZ = 190.0,			-- The bottom of your box
			maxZ = 210.0,			-- The top of your box
		},
	},
	{
		{ 							-- Your target options here
			icon = "icon",			-- Your icon, only supports font awesome icons
			label = "Test Label",	-- The label of your target
			item = "lockpick"		-- The required it em
			job = "mechanic",		-- The required job
			gang = "lostmc",		-- The required gang
			action = function()		-- What happens when the target is selected
				TriggerEvent("lolhi", { lol = hi }),
			end,
		},
	},
dist)								-- How close you ned to be to see the target

removeEntityTarget(entity)

Triggers removal of the target entity, by checking the entity name

removeZoneTarget(target)

Triggers removal of a zone(Box/Circle) target by calling the target's name/id

triggerNotify(title, message, type, src)

Handles notifications for the script called from either the server or client

Supports:

  • okok
  • qb
  • ox
  • gta
  • esx
triggerNotify(
	title = "Notification Title",		-- Usually 'nil' in my scripts, supports notifications with titles
	message = "Notification Message",	-- The notification's message
	type = "success"					-- The type of notification, depends on the supporting script
	src = 1,							-- If in the server, this is required to send to player
)

drawText(image, input, style)

This handles calling drawText functions

Supports:

  • gta
  • qb
  • ox
  • esx
drawText(
	187,								-- Very specific for adding blip images to drawtexts, usually nil
	{
		"Line 1",						-- Supports multiple lines, helpful for displaying button prompts
		"Line 2",
	},
	"g"									-- Sets colour of text after a ":" when using GTA drawtext
)

hideText()

Simply used to hide drawText prompts when not needed anymore

createCallback(callbackName, funct)

This is my attempt at making multiframework server callbacks by using their provided events

(Only works server side)

createCallback(
	"jimsCallback", 					-- Callback event name, needs to be something that isn't already set
	function()

	end)
end

triggerCallback(callBackName, value)

This is an attempt at a mutliframework callback

onPlayerLoaded(func)

This is a multiframework event that is triggered when a player has fully loaded their character in

onPlayerLoaded(
	function()
		print("Player Loaded In!")
	end
)

createInput(title, opts)

searchCar(vehicle)

This function was made for jim-mechanic but can be used in other instances

I searches the model name of a currently spawned vehicle and retrieves info about it

It is smart, in terms of, if you use this multiple times it reteives the previously found info instead of searching again

It retrieves data from your vehicles.lua/database:

  • name for example: "Zentorno Pegassi"
  • price for example: 100000
  • class this converts the class number to a String, for example: if the class is 10 it converts this to "Off-road"

getVehicleProperties(vehicle)

Gets the current properties of the vehicle in a table

  • if using qb-core it will default to its version
  • if not it will attempt to use ox_libs version

setVehicleProperties(vehicle, props)

Set's the vehicles properites using the props table provided

  • if using qb-core it will default to its version
  • if not it will attempt to use ox_libs version

checkDifferences(vehicle, newProps)

This function is used by setVehicleProperties

It determine's what differences there are between the current vehicle and the new set of properites

If there are differences, return true

RegisterNetEvent(GetCurrentResourceName()..":server:ChargePlayer", function(cost, type, newsrc)

This event is made to REMOVE money from a player

It can be called from client with TriggerServerEvent

Also can be called from server with TriggerEvent and a source id in newsrc

The name of the event uses GetCurrentResourceName() so it doesn't double up results with other scripts

cost = 100 -- The amount of money to be removed
type = "cash" or "card" -- The type of money that should be removed
newsrc = 1			-- The source of the player, must be nil if calling from client

Examples of use:

-- Client
TriggerEvent(GetCurrentResourceName()..":server:ChargePlayer", function(1000, "cash")

-- Server
TriggerServerEvent(GetCurrentResourceName()..":server:ChargePlayer", function(1000, "bank", 1)

RegisterNetEvent(GetCurrentResourceName()..":server:FundPlayer", function(cost, type, newsrc)

This event is made to ADD money from a player

It can be called from client with TriggerServerEvent

Also can be called from server with TriggerEvent and a source id in newsrc

The name of the event uses GetCurrentResourceName() so it doesn't double up results with other scripts

fund = 100 -- The amount of money to be added
type = "cash" or "card" -- The type of money that should be added
newsrc = 1			-- The source of the player, must be `nil` if calling from client

Examples of use:

-- Client
TriggerEvent(GetCurrentResourceName()..":server:FundPlayer", function(1000, "cash")

-- Server
TriggerServerEvent(GetCurrentResourceName()..":server:FundPlayer", function(1000, "bank", newsrc)

createUseableItem(item, funct)

This is a server side event to make an item usable

Note: If using ox_inv and the items.lua info has event or a status section, this will be ignored

createUseableItem(
	"lockpick",			-- The item you want to make usable
	function(source, item)
		TriggerClientEvent("lolhi", source, { lol = item.name }),
	end
)

hasJob(job, source, grade)

This is an event that makes checking if the player has the requested job simple

It works both client side and server side

returns true or false and if they are on duty or not

local hasjob, duty =
	hasJob(
		"mechanic",			-- the job role
		1,					-- the source id of the player, set to nil if on client
		3,					-- the required grade of the player, can be nil to check job
	)

getPlayer(source)

This retrieves basic info of the player

works client side and server side Retrieves:

  • Players Name
  • Players Current Cash
  • Players Current Bank Balance
local PlayerInfo =
	getPlayer(
		1				-- The
	)
print(json.encode(PlayerInfo, { indent = true })

registerCommand(command, options)

This is a server side event that uses

  • ox_lib's - lib.addCommand
  • qb-core's - QBCore.Commands.Add

Example:

registerCommand(
	"hello",						-- /hello the command to be used
	"Print 'hello world'",			-- text to show in chat
	{ name = "lol", help = "hi" }, 	-- Help text for the command
	false,
	function()						-- Function to be ran when the command is triggered
		print("Hello World")
	end,
	"admin",						-- the restriction, can be nil
)

invImg(item)

This is used mainly for menu's to retrieve the item images

It detects what inventory you are using and automatically generates an nui:// link

local imgLink = invImg("lockpick")
print(imgLink)

registerStash(name, label, slots, weight)

This is a serverside function used to register a new stash in ox_inventory and qs-inventory

registerStash(
	"newStash",				-- The stash name/ID, this is used to open it later
	"New created Stash",	-- The name of the stash that shows in inventories
	50,						-- The amount of slots in the inventory
	4000000,				-- The max weight in the inventory
)

loadModel(model)

This loads the requested model into the memory cache to help spawning of props

  • Checks if the model exists in the server
  • Attempts to load the model with a timeout, if not loaded, sends warning

unloadModel(model)

This unloads a model to help clear the memory cache and help optimization

  • Recommended to run after spawning a prop

loadAnimDict(animDict)

This loads the requested animDict into the memory cache to help loading anims

  • Checks if the dict exists in the server

unloadAnimDict(animDict)

This unloads the animDict to help clear the memory cache and help optimization

  • Recommended to run after running an animation

loadPtfxDict(ptFxName)

This loads the requested ptFx dict into the memory cache to help loading particle effects

  • Skips if the effect is alredy loaded

unloadPtfxDict(dict)

This unloads a particle effect to help clear the memory cache and help optimization

  • Recommended to run after running an ptfx

loadTextureDict(dict)

This loads the requested texture dictionary into memory

countTable(table)

This is a simple function to count how many entires are in a table, for if your table keys aren't numbered

Example:

local table = {
	["tableentry"] = true,
	["anotherentry"] = true,
}
print("countTable", countTable(table))

pairsByKeys(t)

Searches through a table alphabetically instead of randomly

This is an optional function made to replace:

for k, v in pairs(table) do end

with:

for k, v in pairsByKeys(table) do end

playAnim(animDict, animName, duration, flag, ped)

A simplified version of TaskPlayAnim()

Has some settings already set and basic ones ready to change

Loads the animDict automatically with loadAnimDict()

playAnim(
	animDict,	-- The animation dictionary
	animName, 	-- The animation's name
	duration,	-- How far into the animation it should stop
	flag, 		-- The animation flag
	ped,		-- Optional, for if you want any one other than the player to do the animation
)

stopAnim(animDict, animName, ped)

Similar to StopAnimTask()

Made to stop the given animation with being able to choose which ped

stopAnim(
	animDict,	-- The animation dictionary
	animName, 	-- The animation's name
	ped,		-- Optional, for if you want any one other than the player to do the animation
)

makeVeh(model, coords)

Spawns a vehicle for the player to use

  • Server Synced
  • Easy creation
  • Returns entity id for further control through the script
  • Loads model before spawning
  • Unloads model from memory cache after spawn

Example of use:

local vehicle = makeVeh(
	`zentorno`,
	vec4(-596.74, 2090.99, 131.41, 16.6)
)
print(vehicle, GetEntityCoords(vehicle))

makePed(model, coords, freeze, collision, scenario, anim, synced)

Spawns a controllable ped

  • Loads the model before spawning
  • Unloads model from memory cache after spawn
  • Several options for creation
  • Can spawn with scenario name or anims
  • Spawns invincible

Example of use:

local ped = makePed(
	`MP_M_Freemode_011,
	vec4(-596.74, 2090.99, 131.41, 16.6),
	true,
	false,
	nil,	
	{ "amb@prop_human_parking_meter@male@idle_a", "idle_a" },
	false
)
print(ped, GetEntityCoords(ped))

makeProp(data, freeze, synced)

This function is made to easily load a prop in the world

  • Has a simplified process
  • Lodas model before spawning prop
  • Unloads model from memory cache when done
  • Returns entity id for control through the script

Example of use:

local entityid = makeProp(
	{
		prop = "v_serv_plas_boxgt2", 						-- Prop model, can be a string or hash key
		coords = vec4(-596.74, 2090.99, 131.41, 16.6),		-- needs to be vector4 or vec4, 4th variable is heading
	},
	true,													-- Decide if the entiy is frozen in place
	false													-- Does this prop spawn for everyone or just the client
)
print(entityid, GetEntityCoords(entityid))

instantLookEnt(ent, ent2)

This function forcibly changes ent's heading to face ent2

Helpful for animations in a specific direction

lookEnt(entity)

This function attempts to slowly turn the player to the given entity/coords

Accepts either a entity ID or vector3

destroyProp(entity)

Attempts to remove a spawned prop

If its attached to a player it attempts to to detatch it first

pushVehicle(entity)

This attempts to make the current entity(vehicle) network controlled

This helps with syncing it with other players (used in jim-mechanic often)

ensureNetToVeh(vehNetId)

This was created to get around fivem's warnings of failing to get network objects

Although these warnings mean't nothing, it is annoying

This is made to replace the native NetToVeh() but checking first if it exists

makeBlip(data)