QB-Core开发:了解QB-Core
因qb-core内容非常多,并不会一行一行代码讲解,将根据类型区分出内容进行说明。并在后续实际开发脚本时附带详细代码以及注释。题外:长期技术、运维、QB技术开发、定制可联系3590783323
开发脚本,将仅基于qb-core框架进行完全独立开发,尽可能不依赖其他资源。地图、模型等资源除外。
一、首先讲解config.lua
qb-core作为核心,在整个框架中承担了非常重要的工作,config.lua更是重中之重。
config定义了大量用户信息,包括玩家初次进入的配置参数,服务器以及命令行配置。
并且config也支持二开,QBConfig = {}开发者可以自定义参数名和配置项,并且在其他qb资源中默认引用了qb-core,即只需要在qb-core定义了对应的config,在所有qb资源都可以直接调用,qb-core除config定义配置外,还支持其他的业务,包括但不限于封装全局函数、全局脚本、监听器等。
在以下config.lua的代码注释中我已经详细说明了每一个参数配置的对应作用。
lua:
-- 可以自定义配置
QBConfig = {}
QBConfig.MaxPlayers = GetConvarInt('sv_maxclients', 48) -- 从配置文件中获取最大玩家数量,默认为 48
QBConfig.DefaultSpawn = vector4(-1035.71, -2731.87, 12.86, 0.0) -- 默认生成点
QBConfig.UpdateInterval = 5 -- 多久更新一次玩家数据(分钟)
QBConfig.StatusInterval = 5000 -- 每隔几毫秒检查一次饥饿/口渴状态 1000ms = 1s
QBConfig.Money = {}
QBConfig.Money.MoneyTypes = { cash = 1000, bank = 10000, crypto = 0, blackmoney = 0 }
-- type = startamount - Add or remove money types for your server (for ex. blackmoney = 0), remember once added it will not be removed from the database!type = startamount
-- 为您的服务器添加或删除货币类型(例如 blackmoney = 0),请记住一旦添加它就不会从数据库中删除!
-- 可通过该配置添加货币类型,设置玩家初次进入服务器时各类货币的初始值,默认现金cash=500、银行存款bank=5000、crypto=0;在此我设置新增了一项黑钱blackmoney货币;
QBConfig.Money.DontAllowMinus = { 'cash', 'crypto', 'blackmoney' } -- Money that is not allowed going in minus 限制不允许出现负数的货币字段
QBConfig.Money.PayCheckTimeOut = 30 -- The time in minutes that it will give the paycheck 发放工资的时间(分钟) 默认10分钟一次
QBConfig.Money.PayCheckSociety = false
-- If true paycheck will come from the society account that the player is employed at, requires qb-management
-- 如果玩家就职在非系统工作内,则需要qb-工作管理通过玩家与玩家之间发薪
QBConfig.Player = {}
QBConfig.Player.HungerRate = 4.3 -- Rate at which hunger goes down.-- 饥饿感下降的速度。 默认4.2
QBConfig.Player.ThirstRate = 5.0 -- Rate at which thirst goes down.-- 口渴感下降的速度。 默认3.8
-- 玩家 血型
QBConfig.Player.Bloodtypes = {
'A+', 'A-', 'B+', 'B-', 'AB+', 'AB-', 'O+', 'O-',
}
-- 玩家默认
QBConfig.Player.PlayerDefaults = {
citizenid = function() return QBCore.Player.CreateCitizenId() end,
cid = 1,
-- 设置 货币初始
money = function()
local moneyDefaults = {}
for moneytype, startamount in pairs(QBConfig.Money.MoneyTypes) do
moneyDefaults[moneytype] = startamount
end
return moneyDefaults
end,
optin = true,
-- 公民信息
charinfo = {
firstname = 'Firstname',
lastname = 'Lastname',
birthdate = '00-00-0000',
gender = 0,
nationality = 'USA',
phone = function() return QBCore.Functions.CreatePhoneNumber() end,
account = function() return QBCore.Functions.CreateAccountNumber() end
},
-- 工作
job = {
name = 'unemployed',
label = 'Civilian',
payment = 10,
type = 'none',
onduty = false,
isboss = false,
grade = {
name = 'Freelancer',
level = 0
}
},
-- 帮派 组织
gang = {
name = 'none',
label = 'No Gang Affiliation',
isboss = false,
grade = {
name = 'none',
level = 0
}
},
-- 用户ped信息
metadata = {
hunger = 100,
thirst = 100,
stress = 0,
isdead = false,
inlaststand = false,
armor = 0,
ishandcuffed = false,
tracker = false,
injail = 0,
jailitems = {},
status = {},
phone = {},
rep = {},
currentapartment = nil,
callsign = 'NO CALLSIGN',
bloodtype = function() return QBConfig.Player.Bloodtypes[math.random(1, #QBConfig.Player.Bloodtypes)] end,
fingerprint = function() return QBCore.Player.CreateFingerId() end,
walletid = function() return QBCore.Player.CreateWalletId() end,
criminalrecord = {
hasRecord = false,
date = nil
},
licences = {
driver = true,
business = false,
weapon = false
},
inside = {
house = nil,
apartment = {
apartmentType = nil,
apartmentId = nil,
}
},
phonedata = {
SerialNumber = function() return QBCore.Player.CreateSerialNumber() end,
InstalledApps = {}
}
},
-- 位置
position = QBConfig.DefaultSpawn,
-- 背包为空
items = {},
}
QBConfig.Server = {}
-- General server config
-- 常规服务器配置
QBConfig.Server.Closed = false
-- Set server closed (no one can join except people with ace permission 'qbadmin.join')
-- 设置服务器关闭(除具有 ace 权限“qbadmin.join”的人外,任何人都不能加入)
QBConfig.Server.ClosedReason = '服务器维护中'
-- Reason message to display when people can't join the server
-- 当人们无法加入服务器时显示的原因消息
QBConfig.Server.Uptime = 0
-- Time the server has been up.
-- 服务器启动的时间。
QBConfig.Server.Whitelist = false
-- Enable or disable whitelist on the server
-- 在服务器上启用或禁用白名单
QBConfig.Server.WhitelistPermission = 'admin'
-- Permission that's able to enter the server when the whitelist is on
-- 白名单开启时可进入服务器的权限
QBConfig.Server.PVP = true
-- Enable or disable pvp on the server (Ability to shoot other players)
-- 在服务器上启用或禁用 pvp(能够射击其他玩家)
QBConfig.Server.Discord = '' -- Discord invite link Discord 邀请链接
QBConfig.Server.CheckDuplicateLicense = true -- Check for duplicate rockstar license on join 加入时检查重复的 Rockstar 许可证
QBConfig.Server.Permissions = { 'god', 'admin', 'mod' }
-- Add as many groups as you want here after creating them in your server.cfg
-- 在您的 server.cfg 中创建组后,您可以在此处添加任意数量的组。
-- 命令行配置
QBConfig.Commands = {} -- Command Configuration 命令配置
QBConfig.Commands.OOCColor = { 255, 165, 0 } -- RGB color code for the OOC command OOC 命令的 RGB 颜色代码 默认 255, 151, 133
QBConfig.Notify = {}
QBConfig.Notify.NotificationStyling = {
group = false, -- Allow notifications to stack with a badge instead of repeating 允许通知与徽章堆叠而不是重复
position = 'top', -- top-left | top-right | bottom-left | bottom-right | top | bottom | left | right | center
progress = true -- Display Progress Bar
}
-- These are how you define different notification variants
-- The "color" key is background of the notification
-- The "icon" key is the css-icon code, this project uses `Material Icons` & `Font Awesome`
-- 这些是您定义不同通知变体的方式
-- “color” 键是通知的背景
-- “icon” 键是 css-icon 代码,该项目使用 `Material Icons` 和 `Font Awesome`
QBConfig.Notify.VariantDefinitions = {
success = {
classes = 'success',
icon = 'check_circle'
},
primary = {
classes = 'primary',
icon = 'notifications'
},
warning = {
classes = 'warning',
icon = 'warning'
},
error = {
classes = 'error',
icon = 'error'
},
police = {
classes = 'police',
icon = 'local_police'
},
ambulance = {
classes = 'ambulance',
icon = 'fas fa-ambulance'
}
}
二、client文件夹
drawtext.lua用于处理客户端的文本绘制功能。该脚本主要作用是根据特定条件在屏幕绘制文本,提供信息或指示给玩家。
在drawtext.lua中,主要使用以下几个函数来实现文本绘制:
1.SetDrawOrigin(x, y, z, 0):设置绘制原点为指定的3D坐标,所有后续的绘制操作都基于这个原点。
2.DrawText(x, y):在屏幕上的指定位置绘制文本。
3.DrawRect(x, y, width, height, r, g, b, a):绘制背景矩形,用于突出显示文本。
4.ClearDrawOrigin():重置绘制原点,确保后续的绘制操作不受影响。
events.lua文件用于处理各种游戏事件。这些事件可以是由玩家触发的,例如使用物品、完成任务等,也可以是由系统触发的,例如系统定时器、状态变化等。通过事件机制,events.lua文件实现了模块之间的通信和交互,增强对模块的可维护性和扩展性。
简单理解事件触发器,其中程序的执行流由事件的发生来驱动。事件可以是用户操作(如点击按钮)、消息传递、传感器输出或任何其他形式的输入。
注册事件:使用RegisterNetEvent函数注册事件。
触发事件:使用TriggerEvent函数触发事件。
监听事件:使用AddEventHandler函数监听事件,并定义事件发生时的处理逻辑。
functions.lua文件用于定义各种实用函数,这些函数可以在不同模块中被调用。通过集中管理常用函数,functions.lua提高了代码的复用性和维护性。
函数是Lua编程语言的基本组成部分,用于将一段代码逻辑封装成可复用的模块。在 Qb-Core 框架中,函数被广泛用于处理各种操作,如数据处理、事件响应、任务管理等。
loops.lua文件用于定义各种循环逻辑,这些循环可以用来执行定时任务、持续检查某些条件或更新游戏状态。
main.lua文件是游戏资源的入口文件,用于初始化和管理游戏逻辑。它通常包含必要的资源加载、事件注册和全局变量初始化等操作,是整个框架的重要组成部分。
三、server文件夹
commands.lua文件用于定义服务器端的命令处理逻辑。这些命令可以在服务器控制台中执行,通常用于管理和调试游戏服务器。
debug.lua文件用于调试服务器端的代码逻辑。它包含一些帮助函数和调试工具,便于开发者跟踪和排查问题。
events.lua文件用于定义和处理服务器端的事件。事件机制允许模块之间进行通信和触发逻辑操作,实现模块之间的解耦和通信。
exports.lua文件用于定义和导出服务器端的函数。这些函数可以被其他资源调用,提供共享功能和逻辑。
functions.lua文件用于定义服务器端的实用函数。这些函数可以在多个模块中复用,简化代码编写。
main.lua文件是服务器端的入口文件,用于初始化和管理游戏逻辑。
player.lua文件用于处理与玩家相关的逻辑,包括玩家的加载、保存、状态管理等。
四、locale文件夹无需过多赘述,国际化功能。根据区域划分语言,但毕竟不是国产,所以对于中文的支持并不算很好。需自行优化。
五、shared文件夹
gangs.lua 文件用于定义服务器中所有帮派的相关信息。这些信息包括帮派的名称、等级、权限等,用于管理和控制游戏中的帮派系统。
items.lua 文件用于定义服务器中的所有物品信息。这些信息包括物品的名称、标签、重量、类型等,用于管理和控制游戏中的物品系统。
jobs.lua 文件用于定义服务器中的所有工作信息。这些信息包括工作的名称、等级、权限等,用于管理和控制游戏中的工作系统。
locale.lua 文件用于定义多语言支持的信息。这些信息包括不同语言的文本,用于管理和控制游戏中的本地化系统。
locations.lua 文件用于定义服务器中重要的地理位置。这些信息包括地点的坐标、名称等,用于管理和控制游戏中的地理位置系统。
main.lua 文件用于定义服务器中共享的主配置和初始化逻辑。这些信息包括全局变量、配置参数等,用于管理和控制游戏的初始化和配置。
vehicles.lua 文件用于定义服务器中的所有车辆信息。这些信息包括车辆的名称、模型、属性等,用于管理和控制游戏中的车辆系统。
weapons.lua 文件用于定义服务器中的所有武器信息。这些信息包括武器的名称、类型、属性等,用于管理和控制游戏中的武器系统。
在开发时,将qb-core引入到项目中,可以提高开发效率,qb-core定义和封装了丰富使用的函数和配置。
由版主最后编辑: