💻Copy of Exports (Server)

名前表示関連

名前の表示/非表示切り替え

プレイヤーの名前を表示

local isVisible = exports['cats-advanced-name']:switchVisibleName(source, true)

プレイヤーの名前を非表示

local isHidden = exports['cats-advanced-name']:switchVisibleName(source, false)

現在の状態を切り替え

local isToggled = exports['cats-advanced-name']:switchVisibleName(source)
キャラクター名の変更

名前と苗字を変更

local success = exports['cats-advanced-name']:changeName(source, '太郎', '山田')
if success then
    print('名前の変更に成功しました')
end
名前ラベルの管理

ラベルを設定(名前の上に表示)

local success = exports['cats-advanced-name']:changeNameLabel(source, '警察署長')

ラベルを削除

exports['cats-advanced-name']:removeNameLabel(source)
現在の表示名取得

現在表示されている名前を取得(ニックネームまたは本名)

local displayName = exports['cats-advanced-name']:getDisplayName(source)
print('現在の表示名: ' .. displayName)
CitizenIDで表示名を取得(QBCore)

QBCoreのcitizenidを使用して表示名を取得

local displayName = exports['cats-advanced-name']:getDisplayNameByCitizenid('ABC12345')
print('プレイヤー名: ' .. displayName)
識別子で表示名を取得

プレイヤー識別子を使用して表示名を取得(QBCoreとESX両方対応)

local displayName = exports['cats-advanced-name']:getDisplayNameByIdentifier('license:1234567890abcdef')
print('プレイヤー名: ' .. displayName)

ニックネーム管理

ニックネームの追加

新しいニックネームを追加

local success = exports['cats-advanced-name']:addNickname(source, 'シャドウ')
if success then
    print('ニックネームの追加に成功しました')
end
ニックネームの使用

保存されたニックネームを使用

exports['cats-advanced-name']:useNickname(source, 'シャドウ')
本名に戻す

ニックネームの使用を停止して本名に戻す

exports['cats-advanced-name']:useCharacterName(source)
ニックネームリストの取得

保存されたニックネームのリストを取得

local nicknames = exports['cats-advanced-name']:getNicknames(source)
for i, nickname in ipairs(nicknames) do
    print(i .. ': ' .. nickname)
end
ニックネームの削除

特定のニックネームを削除

exports['cats-advanced-name']:deleteNickname(source, 'シャドウ')

マーク関連

マークの切り替え

特定のマークを切り替え(オン→オフ または オフ→オン)

local success = exports['cats-advanced-name']:toggleMark(source, 'police')
if success then
    print('警察マークの切り替えに成功しました')
end

その他のマーク例

exports['cats-advanced-name']:toggleMark(source, 'ems')      -- EMSマーク
exports['cats-advanced-name']:toggleMark(source, 'mechanic') -- メカニックマーク
exports['cats-advanced-name']:toggleMark(source, 'beginner') -- 初心者マーク
exports['cats-advanced-name']:toggleMark(source, 'vip')      -- VIPマーク
プレイヤーのマークリスト取得

特定のプレイヤーのマークリストを取得

local playerMarks = exports['cats-advanced-name']:getPlayerMarks(source)

アクティブなマークを確認

for markId, isActive in pairs(playerMarks) do
    if isActive then
        print('アクティブなマーク: ' .. markId)
    end
end
マークの状態確認

特定のマークがアクティブかどうかを確認

local isPolice = exports['cats-advanced-name']:isMarkActive(source, 'police')
if isPolice then
    print('警察マークがアクティブです')
end

他のプレイヤーのマーク状態を確認

local hasEMS = exports['cats-advanced-name']:isMarkActive(12, 'ems') -- プレイヤーID 12

高度な使用例

完全なプレイヤー設定
-- 新しいVIPプレイヤーを設定
function SetupVIPPlayer(source)
    -- 名前の表示状態を変更
    exports['cats-advanced-name']:switchVisibleName(source, true)
    
    -- VIPニックネームを追加
    exports['cats-advanced-name']:addNickname(source, 'VIPメンバー')
    exports['cats-advanced-name']:useNickname(source, 'VIPメンバー')
    
    -- VIPラベルを設定
    exports['cats-advanced-name']:changeNameLabel(source, '★ VIP ★')
    
    -- VIPマークを追加
    exports['cats-advanced-name']:toggleMark(source, 'vip')
    
    print('プレイヤー ' .. source .. ' のVIP設定が完了しました')
end
動的ラベルシステム
-- 職業に基づいてラベルを自動更新
function UpdatePlayerLabel(source)
    local label = ""
    
    if Framework == 'qbcore' then
        local Player = QBCore.Functions.GetPlayer(source)
        if Player then
            local job = Player.PlayerData.job
            if job and job.name ~= "unemployed" then
                label = "[" .. job.label .. "]"
            end
        end
    elseif Framework == 'esx' then
        local xPlayer = ESX.GetPlayerFromId(source)
        if xPlayer then
            local job = xPlayer.getJob()
            if job and job.name ~= "unemployed" then
                label = "[" .. job.label .. "]"
            end
        end
    end
    
    -- ラベルを適用または削除
    if label ~= "" then
        exports['cats-advanced-name']:changeNameLabel(source, label)
    else
        exports['cats-advanced-name']:removeNameLabel(source)
    end
end
権限システム
-- マークに基づいてアクセスを確認
function HasAccess(source, requiredMark)
    return exports['cats-advanced-name']:isMarkActive(source, requiredMark)
end

-- コマンドでの使用例
RegisterCommand('vipエリア', function(source, args, rawCommand)
    if not HasAccess(source, 'vip') then
        TriggerClientEvent('chat:addMessage', source, {
            args = {"エラー", "VIPアクセスが必要です"}
        })
        return
    end
    
    -- VIPエリアのロジック
    print('プレイヤー ' .. source .. ' がVIPエリアにアクセスしました')
end, false)
チャットシステム統合
-- 名前表示を使用した拡張チャット
RegisterNetEvent('chat:sendMessage', function(message)
    local source = source
    local playerName = exports['cats-advanced-name']:getDisplayName(source)
    local color = "^7" -- デフォルト白色
    
    -- マークに基づく色分け
    if exports['cats-advanced-name']:isMarkActive(source, 'admin') then
        color = "^1" -- 管理者は赤色
    elseif exports['cats-advanced-name']:isMarkActive(source, 'vip') then
        color = "^3" -- VIPは黄色
    end
    
    TriggerClientEvent('chat:addMessage', -1, {
        args = {color .. playerName .. "^7", message}
    })
end)
ログシステム
-- 表示名を使用してプレイヤーアクションをログ
function LogPlayerAction(source, action, details)
    local playerName = exports['cats-advanced-name']:getDisplayName(source)
    local timestamp = os.date("%Y-%m-%d %H:%M:%S")
    local logMessage = string.format("[%s] %s: %s - %s", 
        timestamp, 
        playerName, 
        action, 
        details or ""
    )
    
    print(logMessage)
    -- ここでファイルやデータベースに保存
end

-- 使用例
LogPlayerAction(source, "車両スポーン", "Adder")
LogPlayerAction(source, "送金", "$5000 を 山田太郎 に")
バッチ操作
-- 複数のプレイヤーに設定を適用
function SetupMultiplePlayers(playerList)
    for _, playerData in ipairs(playerList) do
        local source = playerData.source
        
        -- 名前を設定
        if playerData.firstname and playerData.lastname then
            exports['cats-advanced-name']:changeName(source, playerData.firstname, playerData.lastname)
        end
        
        -- ラベルを設定
        if playerData.label then
            exports['cats-advanced-name']:changeNameLabel(source, playerData.label)
        end
        
        -- マークを設定
        if playerData.marks then
            for _, markId in ipairs(playerData.marks) do
                exports['cats-advanced-name']:toggleMark(source, markId)
            end
        end
        
        print('プレイヤー ' .. source .. ' の設定が完了しました')
    end
end

-- 使用例
local playersToSetup = {
    {source = 1, firstname = "太郎", lastname = "山田", label = "[管理者]", marks = {"admin", "vip"}},
    {source = 2, firstname = "花子", lastname = "佐藤", label = "[VIP]", marks = {"vip"}},
}
SetupMultiplePlayers(playersToSetup)
イベントハンドラー
-- プレイヤー参加時の自動設定
RegisterNetEvent('playerJoined', function()
    local source = source
    
    -- プレイヤー設定を読み込み
    local playerName = exports['cats-advanced-name']:getDisplayName(source)
    
    -- デフォルトの表示状態を設定
    exports['cats-advanced-name']:switchVisibleName(source, true)
    
    print('プレイヤーが参加しました: ' .. playerName)
end)

-- 切断時のクリーンアップ
RegisterNetEvent('playerDropped', function()
    local source = source
    local playerName = exports['cats-advanced-name']:getDisplayName(source)
    
    print('プレイヤーが退出しました: ' .. playerName)
    -- 追加のクリーンアップロジック
end)
管理者コマンド例
-- 管理者用の名前変更コマンド
RegisterCommand('名前変更', function(source, args, rawCommand)
    if not IsPlayerAceAllowed(source, 'command.changename') then
        TriggerClientEvent('chat:addMessage', source, {
            args = {"エラー", "権限がありません"}
        })
        return
    end
    
    if #args < 3 then
        TriggerClientEvent('chat:addMessage', source, {
            args = {"使用法", "/名前変更 [プレイヤーID] [名前] [苗字]"}
        })
        return
    end
    
    local targetId = tonumber(args[1])
    local firstname = args[2]
    local lastname = args[3]
    
    if not targetId or not GetPlayerName(targetId) then
        TriggerClientEvent('chat:addMessage', source, {
            args = {"エラー", "プレイヤーが見つかりません"}
        })
        return
    end
    
    local success = exports['cats-advanced-name']:changeName(targetId, firstname, lastname)
    if success then
        TriggerClientEvent('chat:addMessage', source, {
            args = {"成功", "プレイヤー " .. targetId .. " の名前を変更しました"}
        })
    else
        TriggerClientEvent('chat:addMessage', source, {
            args = {"エラー", "名前の変更に失敗しました"}
        })
    end
end, true)

-- VIP設定コマンド
RegisterCommand('vip設定', function(source, args, rawCommand)
    if not IsPlayerAceAllowed(source, 'command.setvip') then return end
    
    if #args < 1 then
        TriggerClientEvent('chat:addMessage', source, {
            args = {"使用法", "/vip設定 [プレイヤーID]"}
        })
        return
    end
    
    local targetId = tonumber(args[1])
    if not targetId or not GetPlayerName(targetId) then
        TriggerClientEvent('chat:addMessage', source, {
            args = {"エラー", "プレイヤーが見つかりません"}
        })
        return
    end
    
    -- VIP設定を適用
    SetupVIPPlayer(targetId)
    
    local playerName = exports['cats-advanced-name']:getDisplayName(targetId)
    TriggerClientEvent('chat:addMessage', source, {
        args = {"成功", playerName .. " をVIPに設定しました"}
    })
end, true)
データベース統合例
-- プレイヤー統計の記録
function RecordPlayerStats(source, statType, value)
    local playerName = exports['cats-advanced-name']:getDisplayName(source)
    local identifier = GetPlayerIdentifier(source, 0)
    
    -- データベースに統計を保存
    MySQL.Async.execute('INSERT INTO player_stats (identifier, player_name, stat_type, value, timestamp) VALUES (@identifier, @player_name, @stat_type, @value, NOW())', {
        ['@identifier'] = identifier,
        ['@player_name'] = playerName,
        ['@stat_type'] = statType,
        ['@value'] = value
    })
    
    print(string.format("統計記録: %s - %s: %s", playerName, statType, value))
end

-- 使用例
RecordPlayerStats(source, "車両購入", "Adder")
RecordPlayerStats(source, "銀行預金", 50000)

Last updated