example
example

教程 ESX QB转换

ESX和QBCORE说到底就是函数的转换,例如:
qb中给予玩家金钱使用下面的代码

lua:
-- 使用QBCore提供的函数
local QBCore = exports['qb-core']:GetCoreObject()
-- 获得玩家,source是触发的事务,通常是玩家的ID,各位可以自己创建线程 print打印出来查看
local src = source
-- 通过QB提供的函数获得当前玩家的信息
local player = QBCore.Functions.GetPlayer(src)
-- qb官方写好的金钱给予方式 player.Functions.AddMoney(moneytype, amount, reason)
player.Functions.AddMoney('cash', '100000', '测试')

ESX写法

lua:
-- 使用ESX的共享对象
local src = source
 local xPlayer = ESX.GetPlayerFromId(src)
 xPlayer.addAccountMoney('bank', 1000)

上面的案例是一个简单示例,所以不难看出,如果我们要进行转换需要把ESX官方的函数转换为QBCORE的函数,所以各位在转换的时候可以根据下面这张表进行函数的转换,通常插件中会涉及到一个文件用于获得玩家金钱扣除金钱以及库存的操作,各位可以去文件里面查看,上述代码中我直接使用的ESX通常在代码的资源清单文件里面

fxmanifest.lua

lua:
shared_scripts({
    "@es_extended/imports.lua",
    "@es_extended/locale.lua",
    "shared/config.lua",
    "shared/main.lua",
    "locales/*.lua",
})

ESX 和 qb 对应函数
ESX 函数QBCore 等效函数备注
esx:eek:nPlayerDeathhospital:server:SetDeathStatus设置玩家的死亡状态
esx:playerLoadedQBCore:Client:OnPlayerLoaded设置变量以确认玩家已准备好
esx:showAdvancedNotificationQBCore:Notify显示高级通知
esx:showHelpNotificationQBCore:Notify显示帮助通知
esx:showNotificationQBCore:Notify显示简单通知
ESX.GetPlayerDataQBCore.Functions.GetPlayerData获取玩家的相关数据
ESX.IsPlayerLoaded检查玩家是否已加载,通常不再需要
ESX.SetPlayerDataQBCore:player:SetPlayerData设置玩家数据
ESX.TriggerServerCallbackQBCore.Functions.TriggerCallback触发服务器端的回调函数
ESX.Game.DeleteObject无(可用FiveM原生DeleteEntity)删除对象
ESX.Game.DeleteVehicleQBCore.Functions.DeleteVehicle删除车辆
ESX.Game.GetClosestObject无(可用FiveM原生GetClosestObjectOfType)获取最近的对象
ESX.Game.GetClosestPedQBCore.Functions.GetClosestPed获取最近的NPC
ESX.Game.GetClosestPlayerQBCore.Functions.GetClosestPlayer获取最近的玩家
ESX.Game.GetClosestVehicleQBCore.Functions.GetClosestVehicle获取最近的车辆
ESX.Game.GetObjects无(使用枚举)获取所有对象列表
ESX.Game.GetPedMugshot无(可用FiveM原生RegisterPedheadshot)获取NPC头像
ESX.Game.GetPeds无(使用枚举)获取所有NPC列表
ESX.Game.GetPlayersQBCore.Functions.GetPlayers获取所有玩家列表
ESX.Game.GetPlayersInArea无(使用枚举)获取特定区域内的玩家列表
ESX.Game.GetVehicleInDirection无(使用射线)获取指定方向上的车辆
ESX.Game.GetVehiclesQBCore.Functions.GetVehicles获取所有车辆列表
ESX.Game.GetVehiclesInArea无(使用枚举)获取特定区域内的车辆列表
ESX.Game.IsSpawnPointClear无(使用getvehiclesinarea)检查出生点是否清空
ESX.Game.SetVehiclePropertiesQBCore.Functions.SetVehicleProperties设置车辆属性
ESX.Game.SpawnLocalObject无(不推荐使用)生成本地对象
ESX.Game.SpawnLocalVehicle无(不推荐使用)生成本地车辆
ESX.Game.SpawnObject无(可用FiveM原生CreateObject)生成对象
ESX.Game.SpawnVehicleQBCore.Functions.SpawnVehicle生成车辆
ESX.Game.Teleport无(使用SetEntityCoords和SetEntityHeading)传送玩家位置
ESX.Game.Utils.DrawText3DQBCore.Functions.DrawText3D显示3D文字
ESX = {}local QBCore = exports['qb-core']:GetCoreObject()初始化QBCore对象(直接访问QBCore核心对象)
esx:getSharedObjectQBCore:GetObject获取QBCore核心对象
esx:setJobQBCore:Client:OnJobUpdate更新玩家职业信息
esx:eek:nPlayerSpawnQBCore:Client:OnPlayerLoaded玩家重生时触发
esx:addInventoryItemQBCore:Server:AddItem添加物品到玩家的库存
esx:removeInventoryItemQBCore:Server:RemoveItem从玩家的库存中移除物品
esx:useItemQBCore:Server:UseItem使用玩家的指定物品
ESX.GetItemLabel无(直接返回物品标签)获取物品标签
ESX.GetPlayerFromIdQBCore.Functions.GetPlayer通过ID获取玩家对象
ESX.GetPlayerFromIdentifierQBCore.Functions.GetPlayerByCitizenId通过Citizen ID获取玩家对象
ESX.GetPlayersQBCore.Functions.GetPlayers获取所有玩家对象
ESX.RegisterServerCallbackQBCore.Functions.CreateCallback注册服务器端回调函数
ESX.RegisterUsableItemQBCore.Functions.CreateUseableItem注册可用物品
ESX.SavePlayerQBCore.Player.Save保存玩家数据
ESX.SavePlayers保存所有玩家数据
ESX.TraceQBCore.Debug调试信息输出
ESX.UseItemQBCore.Functions.UseItem使用指定物品
xPlayer.removeWeaponComponentxPlayer.Functions.RemoveItem移除武器组件
xPlayer.setAccountMoneyxPlayer.Functions.SetMoney(账户)设置账户金额
xPlayer.setCoords设置玩家坐标(可直接使用FiveM原生方法)
xPlayer.setInventoryItemxPlayer.Functions.AddItem(物品名称)设置库存中的物品
xPlayer.setJobxPlayer.Functions.SetJob设置玩家职业
xPlayer.setMaxWeight无(在QBCore配置中设置)设置最大承重限制
xPlayer.setMoneyxPlayer.Functions.SetMoney设置玩家现金余额
xPlayer.setName设置玩家名称
xPlayer.setWeaponTint无(由qb-weapons处理)设置武器颜色
xPlayer.showHelpNotificationTriggerClientEvent('QBCore:Notify')显示帮助通知
xPlayer.showNotificationTriggerClientEvent('QBCore:Notify')显示简单通知
xPlayer.triggerEvent触发玩家事件
xPlayer.updateCoords更新玩家坐标

QBCore 特殊数据字段
字段功能描述
PlayerData.citizenid返回玩家的Citizen ID
PlayerData.steam返回玩家的Steam ID
PlayerData.license返回玩家的Rockstar ID
PlayerData.name返回玩家的名字
PlayerData.cid返回玩家的游戏内ID
PlayerData.money['cash']返回玩家的现金余额
PlayerData.money['bank']返回玩家的银行余额
PlayerData.metadata["hunger"]返回玩家的饥饿度
PlayerData.metadata["thirst"]返回玩家的口渴度
PlayerData.metadata["isdead"]返回玩家的死亡状态
PlayerData.metadata["injail"]返回玩家的监禁状态
PlayerData.job返回玩家的职业信息
PlayerData.gang返回玩家的帮派信息
PlayerData.position返回玩家的当前位置

现在的库存通常是 ox库存所以关于物品之间的转换通常是 ox_inv的物品转换到 qbcore/shared/item.lua

当然这样说很笼统,各位可以在下面写一些基础的插件的链接给我我可以用链接的文件进行演示,太长的不行!

上述代码是我直接去git找的,因为之前的草稿丢了,也算是一个简单的敲门砖
 

jdhd

用户
高级用户
认证用户
就把一些qb的改掉esx就行吗配置文件里的?
比如:QBCore:Notify要改成esx的替换成
esx:showAdvancedNotification
这样?然后在fx.lua上添加
shared_scripts({
"@es_extended/imports.lua",
"@es_extended/locale.lua",
"shared/config.lua",
"shared/main.lua",
"locales/*.lua",
})大概思路是这样的吗?
 

amazinggad

qb研究中···
高级用户
认证用户
大佬说下,FIVEM里 怎么在线debug? 有没有类似的调试控制台,写好代码后在线打印变量值,这样就可以很方便知道函数作用之类的了
 

Phoenix

吊吊
论坛元老
高级用户
认证用户
就把一些qb的改掉esx就行吗配置文件里的?
比如:QBCore:Notify要改成esx的替换成
esx:showAdvancedNotification
这样?然后在fx.lua上添加
shared_scripts({
"@es_extended/imports.lua",
"@es_extended/locale.lua",
"shared/config.lua",
"shared/main.lua",
"locales/*.lua",
})大概思路是这样的吗?
你可以给我一个插件,我给你具体案例
 

Phoenix

吊吊
论坛元老
高级用户
认证用户
大佬说下,FIVEM里 怎么在线debug? 有没有类似的调试控制台,写好代码后在线打印变量值,这样就可以很方便知道函数作用之类的了
直接print
 

Phoenix

吊吊
论坛元老
高级用户
认证用户
就把一些qb的改掉esx就行吗配置文件里的?
比如:QBCore:Notify要改成esx的替换成
esx:showAdvancedNotification
这样?然后在fx.lua上添加
shared_scripts({
"@es_extended/imports.lua",
"@es_extended/locale.lua",
"shared/config.lua",
"shared/main.lua",
"locales/*.lua",
})大概思路是这样的吗?
比如,这个插件有一个消息提示是qb的,我们不需要则改成esx的 当然esx现在用的更多的是ox_lib建议学习ox_lib
 

jdhd

用户
高级用户
认证用户
比如,这个插件有一个消息提示是qb的,我们不需要则改成esx的 当然esx现在用的更多的是ox_lib建议学习ox_lib
这个比例是咋弄的?配置文件是qbcore而不是esx
 

附件

jdhd

用户
高级用户
认证用户
local QBCore = exports['qb-core']:GetCoreObject()
-- 显示高级通知的函数定义
local function ShowAdvancedNotification(title, subject, message, icon, flash)
SetNotificationTextEntry("STRING")
AddTextComponentString(message)
SetNotificationMessage(icon, icon, flash, 1, title, subject)
DrawNotification(false, true)
end

就改这些为esx的就行了吗?
 

Phoenix

吊吊
论坛元老
高级用户
认证用户
local QBCore = exports['qb-core']:GetCoreObject()
-- 显示高级通知的函数定义
local function ShowAdvancedNotification(title, subject, message, icon, flash)
SetNotificationTextEntry("STRING")
AddTextComponentString(message)
SetNotificationMessage(icon, icon, flash, 1, title, subject)
DrawNotification(false, true)
end

就改这些为esx的就行了吗?
这里面只有第一行是qbcore的东西,而且我看没有用到可以直接删掉
 
顶部