local sw, sh = guiGetScreenSize ( )
local isPanel = false
items = {
{ itemName = nil, quantity = 0, image = nil },
{ itemName = nil, quantity = 0, image = nil },
{ itemName = nil, quantity = 0, image = nil },
{ itemName = nil, quantity = 0, image = nil },
{ itemName = nil, quantity = 0, image = nil },
{ itemName = nil, quantity = 0, image = nil },
{ itemName = nil, quantity = 0, image = nil },
{ itemName = nil, quantity = 0, image = nil },
{ itemName = nil, quantity = 0, image = nil },
{ itemName = nil, quantity = 0, image = nil },
{ itemName = nil, quantity = 0, image = nil },
{ itemName = nil, quantity = 0, image = nil },
{ itemName = nil, quantity = 0, image = nil },
{ itemName = nil, quantity = 0, image = nil },
{ itemName = nil, quantity = 0, image = nil },
{ itemName = nil, quantity = 0, image = nil },
{ itemName = nil, quantity = 0, image = nil },
} -- ข้อมูลตาราง
scroll = 0 -- เลื่อนขึ้นลง ( ห้ามแก้ไข )
postGUI = false
_p = {}
_p.main = {}
_p.main.w = 550 -- ขนาดความกว้าง
_p.main.h = 580 -- ขนาดความสูง
_p.main.x = sw/2 - _p.main.w/2 -- ตำแหน่งพิกัด X
_p.main.y = sh/2 - _p.main.h/2 -- ตำแหน่งพิกัด Y
_p.main.color = tocolor( 26, 26, 26, 255 ) -- สีพื้นหลัง
_p.boxs = {}
_p.boxs.horizontal = 4 -- จำนวนช่องแนวนอน
_p.boxs.vertical = 3 -- จำนวนช่องแนวตั้ง
_p.boxs.w = 120 -- ขนาดความกว้าง
_p.boxs.h = 160 -- ขนาดความสูง
_p.boxs.distX = 8 -- ระยะห่างของแต่ละช่อง X
_p.boxs.distY = 8 -- ระยะห่างของแต่ละช่อง Y
_p.boxs.mainX = ( _p.main.w - ( _p.boxs.w * _p.boxs.horizontal ) - ( _p.boxs.distX * ( _p.boxs.horizontal - 1 ) ) ) / 2 -- ระยะห่างของช่องจาก Main X ( ไม่แนะนำให้แก้ไข )
_p.boxs.mainY = 40 -- ระยะห่างของช่องจาก Main Y
_p.boxs.color = tocolor( 190, 190, 190, 120 ) -- สีพื้นหลัง ของช่อง
_p.img = {}
_p.img.w = 120 -- ขนาดรูป Width
_p.img.h = 120 -- ขนาดรูป Height
_p.img.distY = 0 -- ระยะห่างรูปจากด้านบน
_p.img.color = tocolor( 255, 255, 255, 255 ) -- สีรูป
_p.item = {}
_p.item.distX = 0 -- ระยะห่างข้อความจากซ้าย
_p.item.distY = 20 -- ระยะห่างข้อความจากด้านบน
_p.item.scale = 1 -- ขนาด font
_p.item.font = "default-bold" -- font
_p.item.color = tocolor( 255, 255, 255, 255 ) -- สีข้อความ
_p.qty = {}
_p.qty.distX = 0
_p.qty.distY = 120 + 20 -- ระยะห่างข้อความจากด้านบน ( 120 คือ _p.img.h / 20 คือระยะห่างจากรูป สามารภกำหนดได้อิสระ )
_p.qty.scale = 1 -- ขนาด font
_p.qty.font = "default-bold" -- font
_p.qty.color = tocolor( 255, 255, 255, 255 ) -- สีข้อความ
addEventHandler( "onClientRender", getRootElement( ),
function ( )
if not isPanel then return false end
-- สร้างพื้นหลัง
dxDrawRectangle( _p.main.x, _p.main.y, _p.main.w, _p.main.h, _p.main.color, postGUI )
local number = #items
if number > _p.boxs.horizontal * _p.boxs.vertical then
number = _p.boxs.horizontal * _p.boxs.vertical
end
local xLine = 0
local yLine = 0
for i=1, number do
if xLine == _p.boxs.horizontal then
yLine = yLine + _p.boxs.h + _p.boxs.distY
xLine = 1
else
xLine = xLine + 1
end
-- บันทึกตำแหน่งลงตาราง
if items[ i + scroll ] then
items[ i + scroll ].pos = {
x = _p.main.x + _p.boxs.mainX + ( _p.boxs.distX + _p.boxs.w ) * ( xLine - 1 ),
y = _p.main.y + _p.boxs.mainY + yLine
}
end
local data = items[ i + scroll ]
if data then
-- สร้างช่อง
dxDrawRectangle( data.pos.x, data.pos.y, _p.boxs.w, _p.boxs.h, _p.boxs.color, postGUI )
-- แสดงไอดีช่อง
dxDrawText( i + scroll, data.pos.x, data.pos.y, 0, 0, tocolor( 255, 255, 255, 255 ), 1, "default", "left", "top", false, false, postGUI, false, false, 0, 0, 0 )
-- พิกัดที่สามารถทำไปใช้ต่อได้ data.pos.x และ data.pos.y
-- ขนาด _p.boxs.w และ _p.boxs.h
-- แสดงรูปภาพ
if data.image and type( data.quantity ) == "string" then
dxDrawImage( data.pos.x + ( _p.boxs.w/2 - _p.img.w/2 ), data.pos.y, _p.img.w, _p.img.h, data.image, 0, 0, 0, _p.img.color, postGUI )
end
-- แสดงข้อความชื่อไอเทม
if data.quantity and type( data.quantity ) == "string" then
local text = data.itemName
local scale = _p.item.scale
local font = _p.item.font
local textWidth = dxGetTextWidth( string.gsub( text, "#%x%x%x%x%x%x", "" ), scale, font )
local textHeight = dxGetFontHeight( scale, font )
dxDrawText( string.gsub( text, "#%x%x%x%x%x%x", "" ), data.pos.x + ( _p.boxs.w/2 - textWidth/2 ) + _p.item.distX + 1, data.pos.y + _p.item.distY + 1, 0, 0, tocolor( 255, 255, 255, 255 ), scale, font, "left", "top", false, false, postGUI, false, false, 0, 0, 0 )
dxDrawText( string.gsub( text, "#%x%x%x%x%x%x", "" ), data.pos.x + ( _p.boxs.w/2 - textWidth/2 ) + _p.item.distX - 1, data.pos.y + _p.item.distY - 1, 0, 0, tocolor( 255, 255, 255, 255 ), scale, font, "left", "top", false, false, postGUI, false, false, 0, 0, 0 )
dxDrawText( string.gsub( text, "#%x%x%x%x%x%x", "" ), data.pos.x + ( _p.boxs.w/2 - textWidth/2 ) + _p.item.distX + 1, data.pos.y + _p.item.distY - 1, 0, 0, tocolor( 255, 255, 255, 255 ), scale, font, "left", "top", false, false, postGUI, false, false, 0, 0, 0 )
dxDrawText( string.gsub( text, "#%x%x%x%x%x%x", "" ), data.pos.x + ( _p.boxs.w/2 - textWidth/2 ) + _p.item.distX - 1, data.pos.y + _p.item.distY + 1, 0, 0, tocolor( 255, 255, 255, 255 ), scale, font, "left", "top", false, false, postGUI, false, false, 0, 0, 0 )
dxDrawText( text, data.pos.x + ( _p.boxs.w/2 - textWidth/2 ) + _p.item.distX, data.pos.y + _p.item.distY, 0, 0, tocolor( 255, 255, 255, 255 ), scale, font, "left", "top", false, false, postGUI, false, false, 0, 0, 0 )
end
-- แสดงข้อความจำนวน
if data.quantity and ( type( data.quantity ) == "string" or data.quantity == "number" ) then
local text = data.quantity
local scale = _p.qty.scale
local font = _p.qty.font
local textWidth = dxGetTextWidth( string.gsub( text, "#%x%x%x%x%x%x", "" ), scale, font )
local textHeight = dxGetFontHeight( scale, font )
dxDrawText( string.gsub( text, "#%x%x%x%x%x%x", "" ), data.pos.x + ( _p.boxs.w/2 - textWidth/2 ) + _p.qty.distX + 1, data.pos.y + _p.qty.distY + 1, 0, 0, tocolor( 26, 26, 26, 160 ), scale, font, "left", "top", false, false, postGUI, false, false, 0, 0, 0 )
dxDrawText( string.gsub( text, "#%x%x%x%x%x%x", "" ), data.pos.x + ( _p.boxs.w/2 - textWidth/2 ) + _p.qty.distX - 1, data.pos.y + _p.qty.distY - 1, 0, 0, tocolor( 26, 26, 26, 160 ), scale, font, "left", "top", false, false, postGUI, false, false, 0, 0, 0 )
dxDrawText( string.gsub( text, "#%x%x%x%x%x%x", "" ), data.pos.x + ( _p.boxs.w/2 - textWidth/2 ) + _p.qty.distX + 1, data.pos.y + _p.qty.distY - 1, 0, 0, tocolor( 26, 26, 26, 160 ), scale, font, "left", "top", false, false, postGUI, false, false, 0, 0, 0 )
dxDrawText( string.gsub( text, "#%x%x%x%x%x%x", "" ), data.pos.x + ( _p.boxs.w/2 - textWidth/2 ) + _p.qty.distX - 1, data.pos.y + _p.qty.distY + 1, 0, 0, tocolor( 26, 26, 26, 160 ), scale, font, "left", "top", false, false, postGUI, false, false, 0, 0, 0 )
dxDrawText( text, data.pos.x + ( _p.boxs.w/2 - textWidth/2 ) + _p.qty.distX, data.pos.y + _p.qty.distY, 0, 0, tocolor( 255, 255, 255, 255 ), scale, font, "left", "top", false, false, postGUI, false, false, 0, 0, 0 )
end
end
end
end
)
-- ฟังก์ชั่นสำหรับตรวจสอบว่าเราคลิกที่ตำแหน่งช่องไหน return ไอดีช่อง
function isClicker ( )
if isMouseWithinRangeOf ( _p.main.x, _p.main.y, _p.main.w, _p.main.h ) then
local number = #items
if number > _p.boxs.horizontal * _p.boxs.vertical then
number = _p.boxs.horizontal * _p.boxs.vertical
end
for i=1, number do
local data = items[ i + scroll ]
if data then
if isMouseWithinRangeOf ( data.pos.x, data.pos.y, _p.boxs.w, _p.boxs.h ) then
return i + scroll
end
end
end
end
return false
end
-- ฟังก์ชั่นตรวจสอบตำแหน่งเม้าส์
function isMouseWithinRangeOf ( psx, psy, pssx, pssy )
if not isCursorShowing ( ) then
return false
end
local cx, cy = getCursorPosition( )
local sw, sh = guiGetScreenSize( )
cx, cy = cx * sw, cy * sh
if cx >= psx and cx <= psx + pssx and cy >= psy and cy <= psy + pssy then
return true,cx,cy
else
return false
end
end
addEventHandler( "onClientKey", root,
function( button, press )
if not isPanel then return false end
if button == "mouse1" then
if press == true then
-- เมื่อผู้เล่นคลิกซ้าย down
else
-- เมื่อผู้เล่นคลิกซ้าย up
-- ไอดีช่องที่คลิก
local boxID = isClicker ( )
if boxID then
outputChatBox( "click up box id " .. boxID )
end
end
end
-- เลื่อนขึ้นลง เมื่อเม้าส์อยู่ในตำแหน่ง Panel
if press then
if isMouseWithinRangeOf ( _p.main.x, _p.main.y, _p.main.w, _p.main.h ) then
if button == "mouse_wheel_up" then
if scroll > 0 then
scroll = scroll - _p.boxs.horizontal
end
elseif button == "mouse_wheel_down" then
if #items > _p.boxs.horizontal * _p.boxs.vertical then
if scroll < #items - _p.boxs.horizontal then
scroll = scroll + _p.boxs.horizontal
end
end
end
end
end
end
)
function startPanel ( state )
if state == true then
isPanel = true
else
isPanel = false
end
end
bindKey( "tab", "down",
function ( )
if isPanel then
startPanel ( false )
else
startPanel ( true )
end
end
)
สมัครสมาชิก:
ส่งความคิดเห็น (Atom)
ไม่มีความคิดเห็น:
แสดงความคิดเห็น