example
example

求助 有没有让玩家使用游戏内注册的名字或者不让玩家改名的插件?

Yann

站长
管理成员
GTAOS管理组
认证卖家
认证用户
本 月 名 人 榜 最 佳
什么框架!使用游戏内注册的名字是什么意思,在地图上和玩家人物头顶显示的名字吗?
 

Yann

站长
管理成员
GTAOS管理组
认证卖家
认证用户
本 月 名 人 榜 最 佳
server.lua的34行改成
lua:
playerNames[source] = xPlayer.get('lastName')..xPlayer.get('firstName')
 

Yann

站长
管理成员
GTAOS管理组
认证卖家
认证用户
本 月 名 人 榜 最 佳
server.lua中把所有xPlayer.getName()和xTarget.getName()都改成 xPlayer.get('lastName')..xPlayer.get('firstName')或者xTarget.get('lastName')..xTarget.get('firstName')
 

byson333

新用户
认证用户
server.lua中把所有xPlayer.getName()和xTarget.getName()都改成 xPlayer.get('lastName')..xPlayer.get('firstName')或者xTarget.get('lastName')..xTarget.get('firstName')
对了 还有个这个报错


SCRIPT ERROR: @fl_nametag/server.lua:45: attempt to call a nil value (field 'GetExtendedPlayers')

有影响吗
 

Yann

站长
管理成员
GTAOS管理组
认证卖家
认证用户
本 月 名 人 榜 最 佳
又来了个新报错 哈哈哈
[ script:fl_nametag] SCRIPT ERROR: @fl_nametag/server.lua:56: attempt to concatenate a nil value
这我也不知道56行是个啥:rolleyes:
 

byson333

新用户
认证用户
lua:
local playerNames = {}
local joinTimes = {}

CreateThread(function()
    local result = MySQL.query.await("SHOW COLUMNS FROM `users` LIKE 'firstJoin'")
    if not result or #result <= 0 then
        MySQL.query([[
      ALTER TABLE `users`
      ADD COLUMN `firstJoin` INT(11) NULL DEFAULT UNIX_TIMESTAMP()
    ]])
    end

    for _, player in pairs(GetPlayers()) do
        local xPlayer = ESX.GetPlayerFromId(player)
        if xPlayer then
            playerNames[tonumber(player)] = xPlayer.getName()
        end
    end
end)

function getPlayerFirstJoin(player)
    local xPlayer = ESX.GetPlayerFromId(player)
    if not xPlayer then
        return
    end

    local result = MySQL.query.await("SELECT firstJoin FROM users WHERE identifier = ?", { xPlayer.identifier })
    return (result and #result > 0) and result[1].firstJoin or 0
end
exports("getPlayerFirstJoin", getPlayerFirstJoin)

RegisterNetEvent("requestPlayerNames", function()
    local xPlayer = ESX.GetPlayerFromId(source)
    playerNames[source] = xPlayer.get('lastName')..xPlayer.get('firstName')
    if not joinTimes[source] then
        joinTimes[source] = getPlayerFirstJoin(source)
    end

    TriggerClientEvent("receivePlayerNames", -1, playerNames, joinTimes)
end)

CreateThread(function()
    Wait(1000)

    for _, xPlayer in pairs(ESX.GetPlayers()) do
        playerNames[xPlayer.source] = xPlayer.get('lastName')..xPlayer.get('firstName')
        if not joinTimes[xPlayer.source] then
            joinTimes[xPlayer.source] = getPlayerFirstJoin(xPlayer.source)
        end
    end

    TriggerClientEvent("receivePlayerNames", -1, playerNames, joinTimes)
end)

AddEventHandler("esx:playerLoaded", function(player, xPlayer)
    playerNames[player] = xPlayer.get('lastName')..xPlayer.get('firstName')

    if not joinTimes[player] then
        joinTimes[player] = getPlayerFirstJoin(player)
    end

    TriggerClientEvent("receivePlayerNames", -1, playerNames, joinTimes)
end)

RegisterCommand("changename", function(player, args, cmd)
    if player == 0 then
        return
    end

    local xPlayer = ESX.GetPlayerFromId(player)
    if not xPlayer or not ADMIN_RANKS[xPlayer.getGroup()] then
        return output("You do not have permission", player)
    end

    if #args < 2 then
        return output("/changename [targetId] [new name]", player)
    end

    local xTarget = ESX.GetPlayerFromId(args[1])
    if not xTarget then
        return output("Player not found!", player)
    end

    table.remove(args, 1)

    local oldName = xPlayer.get('lastName')..xPlayer.get('firstName')
    local newName = table.concat(args, " ")
    local firstname, lastname = string.match(newName, "(.*)% (.*)")
    if newName:len() < 10 or not firstname or not lastname then
        return output("New name invalid!", player)
    end

    local exists = MySQL.scalar.await(
        "SELECT COUNT(1) FROM users WHERE firstname = ? AND lastname = ?",
        { firstname, lastname }
    )
    if exists and exists == 1 then
        return output("Name is already in use!", player)
    end

    xTarget.setName(newName)
    exports.oxmysql:update(
        "UPDATE users SET firstname = ?, lastname = ? WHERE identifier = ?",
        { firstname, lastname, xTarget.identifier }
    )

    playerNames[xTarget.source] = newName
    TriggerClientEvent("receivePlayerNames", -1, playerNames, joinTimes)

    output("Player name updated! old name: " .. oldName .. " new name: " .. newName, player)
    output(GetPlayerName(player) .. " has updated your name. New name: " .. newName, xTarget.source)
end, false)
 

Yann

站长
管理成员
GTAOS管理组
认证卖家
认证用户
本 月 名 人 榜 最 佳
1704621270738.png
你看你esx版本对没对吧
 
顶部