example
example

教程 QB-Core开发:了解QB-Core

JaysonLiu

论坛名人
论坛元老
高级用户
认证用户
QB-Core开发:了解QB-Core
题外:长期技术、运维、QB技术开发、定制可联系3590783323
因qb-core内容非常多,并不会一行一行代码讲解,将根据类型区分出内容进行说明。并在后续实际开发脚本时附带详细代码以及注释。
开发脚本,将仅基于qb-core框架进行完全独立开发,尽可能不依赖其他资源。地图、模型等资源除外。
一、首先讲解config.lua

1718992557744.png
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文件夹
1718993113117.png
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文件夹
无需过多赘述,国际化功能。根据区域划分语言,但毕竟不是国产,所以对于中文的支持并不算很好。需自行优化。
1719078364886.png
五、shared文件夹
gangs.lua 文件用于定义服务器中所有帮派的相关信息。这些信息包括帮派的名称、等级、权限等,用于管理和控制游戏中的帮派系统。
items.lua 文件用于定义服务器中的所有物品信息。这些信息包括物品的名称、标签、重量、类型等,用于管理和控制游戏中的物品系统。
jobs.lua 文件用于定义服务器中的所有工作信息。这些信息包括工作的名称、等级、权限等,用于管理和控制游戏中的工作系统。
locale.lua 文件用于定义多语言支持的信息。这些信息包括不同语言的文本,用于管理和控制游戏中的本地化系统。
locations.lua 文件用于定义服务器中重要的地理位置。这些信息包括地点的坐标、名称等,用于管理和控制游戏中的地理位置系统。
main.lua 文件用于定义服务器中共享的主配置和初始化逻辑。这些信息包括全局变量、配置参数等,用于管理和控制游戏的初始化和配置。
vehicles.lua 文件用于定义服务器中的所有车辆信息。这些信息包括车辆的名称、模型、属性等,用于管理和控制游戏中的车辆系统。
weapons.lua 文件用于定义服务器中的所有武器信息。这些信息包括武器的名称、类型、属性等,用于管理和控制游戏中的武器系统。

在开发时,将qb-core引入到项目中,可以提高开发效率,qb-core定义和封装了丰富使用的函数和配置。
 
由版主最后编辑:
顶部