Skip to content

ข้อมูล / การตั้งค่า Giant_skinui

สคริปต์ map ประกอบด้วยไฟล์และโฟลเดอร์ต่างๆ ที่ทำงานร่วมกันเพื่อสร้างและจัดการแผนที่ในเกม ต่อไปนี้คือโครงสร้างพื้นฐานของสคริปต์:

โครงสร้างไฟล์

text
│- Giant_skinui
├── client/
│   ├── main.lua
├── server/
│   ├── main.lua
│   └── config.nui.json
├── dist/
│   └── images/ -- เพิ่มรูปต่างๆ ใน ui ใส่ที่นี้
├── config/
│   ├── config.basic.lua -- การตั้งค่าทั่วไป
│   ├── config.blockcloth.lua -- การบล็อคใส่เสื้อผ้า
│   ├── config.function.client.lua -- ฟังก์ชั่นต่างๆ Client
│   ├── config.function.server.lua -- ฟังก์ชั่นต่างๆ Server
│   └── config.notification.json -- การแจ้งเตือนต่างๆ
├── fxmanifest.lua

รายละเอียดแต่ละส่วน

📁 config

INFO

โฟลเดอร์นี้เก็บไฟล์ตั่งค่าต่างๆ ของระบบ

text
│   ├── config.basic.lua -- การตั้งค่าทั่วไป
│   ├── config.blockcloth.lua -- การบล็อคใส่เสื้อผ้า
│   ├── config.function.client.lua -- ฟังก์ชั่นต่างๆ Client
│   ├── config.function.server.lua -- ฟังก์ชั่นต่างๆ Server
│   └── config.notification.json -- การแจ้งเตือนต่างๆ

การตั่งค่าระบบ

จะรวบรวมเฉพาะที่สำคัญมาอธิบายไว้ในการตั่งค่าระบบ ส่วนที่ไม่ได้อยู่ในนี้จะมีคำอธิบายเพิ่มเติมไว้อยู่

config.basic.lua

INFO

จะนำ Config ที่สำคัญเท่านั้นมาเขียนอธิบายไว้ที่นี้

Config.debug

เป็นการตั้งค่าเปิด debug ในการปรับแต่งหน้าต่างๆ ui หรือเปลี่ยน theme ของระบบ
วิธีใช้งาน Config.debug = true เพื่อเปิดใช้งาน และ Config.debug = false เพื่อปิดเมือตั้งค่าต่างๆ เสร็จสิ้นแล้ว

WARNING

แนะนำให้ทำในเซิฟเทส หรือ devmode ในการใช้งาน debug นี้

Config.TimeReady

การตั่งค่าเวลาที่ Client จะ Ready แนะนำ

lua
Config.TimeReady = 5000

Config.wardrobe

lua
Config.wardrobe = {
    itemWardrobeUse = true,    --เปิดตู้เสื้อผ้าผ่านไอเทม
    itemWardrobe = 'petrol',   -- ไอเทมที่ใช้เปิดตู้เสื้อผ้า
    itemdeleteafterUse = true, -- หลังกดใช้ให้ลบหรือไม่ลบไอเทมนี้
}

Config.lightning

การตั่งค่าระบบไฟ ของร้านสกิน UI

lua
Config.lightning = {
    ['การใช้งาน'] = true, -- เปิดใช้งาน
    ['ระยะห่างไฟเริ่มต้น'] = 3.0, -- ยิ่งน้อย ยิ่งสว่าง max 15.0
    ['ระดับความสูงของไฟ'] = 0.5, -- ความสูงของไฟ
    ['สีไฟเริ่มต้น'] = {255, 253, 240} -- สีของดวงไฟ
}

Config['ไม่บันทึกAccesooriesตอนที่Reskin']

หากต้องการแต่งตัวแล้วไม่บันทึก แว่นตา/หมวก/ตุ้มหู/หน้ากาก ในร้านสกินให้เปิดใช้งาน function นี้ หากอยากให้บันทึกเวลาแต่งตัวร้านสกินให้ปรับเป็น false
หากปรับเป็น true จะไม่บันทึกค่า แว่นตา/หมวก/ตุ้มหู/หน้ากาก ลงสกินผู้เล่นแต่จะใส่ default แทน

lua
Config['ไม่บันทึกAccesooriesตอนที่Reskin'] = true

Config.Blip

การตั่งค่า Blip และ Dynamic Blip หากปรับ UseNearblip = true จะเปิดใช้งานระบบ dynamic ที่จะแสดง Blip เฉพาะที่อยู่ใกล้ที่สุดในแต่ละร้านเท่านั้น

lua
Config.Blip = { 
    UseNearblip = false,
    Range = 5000.0, 
    tricktime = 3000 
}

Config.textui / textuiNewPlayerSkin

TEXT UI

มีสองแบบ แบบที่ใช้งานแบบ EveryFrame / แบบที่เข้าและออก

lua
 on = true,               -- true เปิดใช้งาน textui ของร้านหรือไม่ / false เปิดใช้งานแบบ loop 
    runningHighLoop = false, -- อธิบายคือ สำหรับใส่กับ textui loop 0 / false คือ ไม่ใช้ -- ต้องปรับ on เป็น false
    -- ถ้าจะใช้ textui ของตัวระบบ on = true และ  runningHighLoop = false เท่านั้น
    -- false เพื่อ เปิดใช้ function ด้านล่าง
    -- รองรับเฉพาะ text toggle open or clock
    -- ไม่ได้ให้ textui วิ่งใน looptime 0
    -- textui เปิดในขณะเดินเข้าโซน
    EnterzoneTextui = function(namezone)
        if namezone then
            exports['Giant_TextUI']:ShowHelpNotification(("กด ~INPUT_CONTEXT~ " .. namezone))
        end
    end,
    -- textui ปิดในขณะเดินออกโซน
    ExitzoneTextui = function() -- ถ้า runningHighLoop = true ไม่ต้องใส่อะไร
        exports["Giant_TextUI"]:CloseHelpNotification()
    end

config.function.client.lua

Config.itemreskinUse

ตั้งค่าการเปิดใช้งาน ไอเทมบัตรรีสกิน true = เปิดใช้งาน false = ปิดใช้งาน

Config.itemreskin

ตั้งค่าชื่อไอเทมบัตรรีสกินต้องเป็นไอเทมที่มีอยู่ใน sql items

Config.OnChangeCloth

เป็น function ที่จะทำงานเมือมีการเปลี่ยนข้อมูลการแต่งตัวของผู้เล่น เช่นการรีค่าสีกางเกงกลับเป็น 0 เมือเลื่อนเปลี่ยนค่ากางเกง

config.function.server.lua

extranal function นี้ทำงานเมืออัพเดทฐานข้อมูลสำเร็จและเป็นการเพิ่ม accessory เข้าสู่กระเป๋า

lua
--กระเป๋า nc_inventory  
Config['อัพเดทชุดเข้าสู่กระเป๋า'] = function(xPlayer, name, Lists, typeAccessory)
    -- 
    exports.nc_inventory:AddItem(xPlayer.source, {
        name = name,
        type = 'accessory',  
        accessoryData = Lists,
        optionType = 'player_' .. typeAccessory 
    })
end
lua
--สำหรับกระเป๋า esx_inventoryhud
Config['อัพเดทชุดเข้าสู่กระเป๋า'] = function(xPlayer, name, Lists, typeAccessory)
    TriggerClientEvent("esx_inventoryhud:getOwnerAccessories", _source)
end

config.blockcloth.lua

Config.blockCloth

true เปิดใช้งาน false ปิดใช้งาน

Config.blockList

คลิกเพื่อดูรายการ List Skinchanger
text
{label = ('เสื้อใน'),				name = 'tshirt_1'},
{label = ('เสื้อใน skin'),				name = 'tshirt_2'},
{label = ('เสื้อนอก'),					name = 'torso_1'},
{label = ('เสื้อนอก skin'),					name = 'torso_2'},
{label = ('สติ๊กเกอร์'),				name = 'decals_1'},
{label = ('สติ๊กเกอร์ skin'),				name = 'decals_2'},
{label = ('แขน'),					name = 'arms'},
{label = ('แขน skin'),					name = 'arms_2'},
{label = ('กางเกง'),					name = 'pants_1'},
{label = ('กางเกง skin'),					name = 'pants_2'},
{label = ('รองเท้า'),					name = 'shoes_1'},
{label = ('รองเท้า skin'),					name = 'shoes_2'},
{label = ('หน้ากาก'),						name = 'mask_1'},
{label = ('หน้ากาก skin'),					name = 'mask_2'},
{label = ('เกราะ'),					name = 'bproof_1'},
{label = ('เกราะ skin'),				name = 'bproof_2'},
{label = ('สร้อยคอ'),						name = 'chain_1'},
{label = ('สร้อยคอ skin'),				name = 'chain_2'},
{label = ('หมวก'),					name = 'helmet_1'},
{label = ('หมวก skin'),				name = 'helmet_2'},
{label = ('แว่นตา'),					name = 'glasses_1'},
{label = ('แว่นตา skin'),				name = 'glasses_2'},
{label = ('นาฬิกา'),					name = 'watches_1'},
{label = ('นาฬิกา skin'),					name = 'watches_2'},
{label = ('bracelets'),					name = 'bracelets_1'},
{label = ('bracelets skin'),				name = 'bracelets_2'},
{label = ('กระเป๋า'),							name = 'bags_1'},
{label = ('กระเป๋า skin'),						name = 'bags_2'},
{label = ('ตุ้มหู'),							name = 'ears_1'},
{label = ('ตุ้มหู skin'),						name = 'ears_2'},
lua
Config.blockList = {
    -- torso หมายถึง torso_1 ตามรายการที่อยู่ใน skinchanger ตัด _1 
    -- ออกหากต้องการจะบล็อคอะไรก็สามารถนำชื่อมาใส่ได้
    ['torso'] = {
        [5] = {
            ['เพศชาย'] = {
                ['BlockColor'] = false, -- true คือบล็อคทุกสี ยกเว้นที่ใส่ค่าแล้ว มี bypass จะผ่าน / false 
                ['Color'] = {},
                ['ByPass'] = {}
            },
            ['เพศหญิง'] = {
                ['BlockColor'] = true, -- true คือบล็อคทุกสี ยกเว้นที่ใส่ค่าแล้ว มี bypass จะผ่าน / false ไม่บล็อคทุกสี 
                ['Color'] = {},
                ['ByPass'] = {}
            },
        },
        [6] = {
            ['เพศชาย'] = {
                ['BlockColor'] = false, -- true คือบล็อคทุกสี ยกเว้นที่ใส่ค่าแล้ว มี bypass จะผ่าน / false 
                ['Color'] = {},
                ['ByPass'] = {}
            },
            ['เพศหญิง'] = {
                ['BlockColor'] = true, -- true คือบล็อคทุกสี ยกเว้นที่ใส่ค่าแล้ว มี bypass จะผ่าน / false ไม่บล็อคทุกสี 
                ['Color'] = {},
                ['ByPass'] = {}
            },
        },
    }
}

จากตัวอย่างข้างบนนี้เป็นการ block torso หมายเลข 5 และ 6 / BlockColor = true คือบล็อคทุกสี

lua
ตัวอย่าง ['Color'] ที่เป็นการตั้งค่าการ bypass สีนั้นที่คนไหน 
มีไอเทมอะไร หรือ job ไหนจริงจะสามารถบันทึกชุดนี้ได้
['Color'] = {
    -- จะบล็อคทุกสียกเว้นที่ ใส่ใน config มี bypass
    [0] = {
        ['Job'] = { 'police' },          -- อาชีพที่อนุญาต {'police', 'ambulance'} // ถ้าไม่ใช้ให้ comment บรรทัดนี้
        ['Item'] = 'water',              -- หากมีไอเทมที่กำหนด จะสามารถใส่ชุดนี้ได้
        ['anotherFunciton'] = function() -- ฟังก์ชั่นอื่นๆ ที่ต้องการให้ทำงาน
            -- กรณีอยากเช็คด้วย Function อื่นๆ เช่นเช็คจาก sql หรือ cache playerdata ก็ใส่ได้เลย
            return false                 -- หากต้องการให้ผ่านให้ return true หากไม่ต้องการให้ผ่านให้ return false
        end
    },
    [1] = {
        ['Job'] = { 'police' },          -- อาชีพที่อนุญาต {'police', 'ambulance'} // ถ้าไม่ใช้ให้ comment บรรทัดนี้
        ['Item'] = 'water',              -- หากมีไอเทมที่กำหนด จะสามารถใส่ชุดนี้ได้
        ['anotherFunciton'] = function() -- ฟังก์ชั่นอื่นๆ ที่ต้องการให้ทำงาน
            return false                 -- หากต้องการให้ผ่านให้ return true หากไม่ต้องการให้ผ่านให้ return false
        end
    },
    [2] = {
        ['Job'] = { 'police' },          -- อาชีพที่อนุญาต {'police', 'ambulance'} // ถ้าไม่ใช้ให้ comment บรรทัดนี้
        ['Item'] = 'water',              -- หากมีไอเทมที่กำหนด จะสามารถใส่ชุดนี้ได้
        ['anotherFunciton'] = function() -- ฟังก์ชั่นอื่นๆ ที่ต้องการให้ทำงาน
            return false                 -- หากต้องการให้ผ่านให้ return true หากไม่ต้องการให้ผ่านให้ return false
        end
    },
},
lua
-- การ bypass เลขนั้นอันนี้จะ bypass ทุกสีในเลขนั้นๆ 
['ByPass'] = {
    ['Job'] = { 'police' },          -- อาชีพที่อนุญาต {'police', 'ambulance'} // ถ้าไม่ใช้ให้ comment บรรทัดนี้
    ['Item'] = 'water',              -- หากมีไอเทมที่กำหนด จะสามารถใส่ชุดนี้ได้
    ['anotherFunciton'] = function() -- ฟังก์ชั่นอื่นๆ ที่ต้องการให้ทำงาน
        return false                 -- หากต้องการให้ผ่านให้ return true หากไม่ต้องการให้ผ่านให้ return false
    end
}

config.notification.lua

Config.ClientNotify

เชื่อมการแจ้งเตือน สำหรับแจ้งเตือนใน ฝั่ง Client

Config.ServerNotify

เชื่อมการแจ้งเตือน สำหรับแจ้งเตือนใน ฝั่ง server

Exports และการนำ function ที่ใช้งานอื่นๆ ที่จำเป็น

เปิดใช้งานร้าน skin ผ่านสคลิปอื่นๆ โดย TriggerEvent
Client side

lua
TriggerEvent("Giant_skinui:OpenSkin")

Server side

lua
TriggerClientEvent("Giant_skinui:OpenSkin", source)

Exports function

lua
exports["Giant_skinui"]:OpenSkin()

สามารถใช้ esx_skin trigger แบบเดิมๆ ก็ได้
Client side

lua
TriggerEvent("esx_skin:openSaveableMenu")

Server side

lua
TriggerClientEvent('esx_skin:openSaveableMenu', source)

เปิดผ่าน Command > /skin only admin เปลี่ยนที่ config.function.server.lua

การเพิ่ม cooldown ไม่ให้ใช้ร้านค้าเมือมีการติดสถานะต่างๆ ที่ส่งมา

lua
pcall(function()
exports["Giant_skinui"]:getThief(true,10)
end)

10 คือจำนวนเวลาติด cd ใช้ร้าน 10 นาที กดปล้นใหม่เวลาก็นับใหม่