Jump to content

ACL em painel


Recommended Posts

Estou com um gerenciador de vips, queria colocar quando o VIP é dado á alguém, é dada uma acl a pessoa.

local vips = {}

addEventHandler("onResourceStart", resourceRoot,
	function()
		--executeSQLQuery("DROP TABLE VIPS" )
		executeSQLQuery("CREATE TABLE IF NOT EXISTS VIPS (type TEXT, login TEXT, nick TEXT, inicio TIMESTAMP, termino TIMESTAMP, staff TEXT)")
		for _, row in ipairs(executeSQLQuery("SELECT * FROM VIPS ORDER BY termino ASC")) do
			if (getAccount(row.login)) then
				vips[row.login] = tonumber(row.termino)
				local thePlayer = getAccountPlayer(getAccount(row.login))
				if (thePlayer) then
					if row.type == "Revolution" then
						if not getElementData(thePlayer, "isVIPRevolution") then
							setElementData(thePlayer, "isVIPRevolution", true)
						end
					elseif row.type == "Omega" then
						if not getElementData(thePlayer, "isVIPOmega") then
							setElementData(thePlayer, "isVIPOmega", true)
						end
					elseif row.type == "Sigma" then
						if not getElementData(thePlayer, "isVIPSigma") then
							setElementData(thePlayer, "isVIPSigma", true)
						end
					elseif row.type == "Epsylon" then
						if not getElementData(thePlayer, "isVIPEpsylon") then
							setElementData(thePlayer, "isVIPEpsylon", true)
						end
					elseif row.type == "Alpha" then
						if not getElementData(thePlayer, "isVIPAlpha") then
							setElementData(thePlayer, "isVIPAlpha", true)
						end
					end
				end
			end	
		end
	end
)

addEvent( "setVip", true )
addEventHandler( "setVip", resourceRoot,
	function(accountName, dias, type)
		if (accountName and tonumber(dias)) then
			dias = tonumber(dias)
			if (getAccount(accountName)) then
				if (dias > 0) then
					local thePlayer = getAccountPlayer(getAccount(accountName))
					local tipoVIP = type
					local inicio = getRealTime().timestamp
					local termino = inicio + ( dias * 86400 )
					local staff = getPlayerName(client).." ("..getAccountName (getPlayerAccount (client))..")"
					if (not vips[accountName]) then
						outputChatBox("*Você adicionou "..dias.." dia(s) de VIP para a conta: "..accountName, client, 0, 255, 0)
						saveLog(getPlayerName(client).. " adicionou "..(dias).." dia(s) de "..tipoVIP.." para a conta: "..accountName)
						vips[accountName] = termino
						if (thePlayer) then
							if tipoVIP == "Revolution" then
								outputChatBox("#00FF00["..tipoVIP.."] #FFFFFF"..getPlayerName(client).." #FFFFFFadicionou #00FF00"..dias.." dia(s) #FFFFFFde VIP para sua conta (#00FF00"..accountName.."#FFFFFF)", thePlayer, 255, 255, 255, true)
								setElementData(thePlayer, "isVIPRevolution", true)
								givePlayerMoney(thePlayer, 1500000)
							elseif tipoVIP == "Omega" then
								outputChatBox("#00FF00["..tipoVIP.."] #FFFFFF"..getPlayerName(client).." #FFFFFFadicionou #00FF00"..dias.." dia(s) #FFFFFFde VIP para sua conta (#00FF00"..accountName.."#FFFFFF)", thePlayer, 255, 255, 255, true)
								setElementData(thePlayer, "isVIPOmega", true)
								givePlayerMoney(thePlayer, 1200000)
							elseif tipoVIP == "Sigma" then
								outputChatBox("#00FF00["..tipoVIP.."] #FFFFFF"..getPlayerName(client).." #FFFFFFadicionou #00FF00"..dias.." dia(s) #FFFFFFde VIP para sua conta (#00FF00"..accountName.."#FFFFFF)", thePlayer, 255, 255, 255, true)
								setElementData(thePlayer, "isVIPSigma", true)
								givePlayerMoney(thePlayer, 800000)
							elseif tipoVIP == "Epsylon" then
								outputChatBox("#00FF00["..tipoVIP.."] #FFFFFF"..getPlayerName(client).." #FFFFFFadicionou #00FF00"..dias.." dia(s) #FFFFFFde VIP para sua conta (#00FF00"..accountName.."#FFFFFF)", thePlayer, 255, 255, 255, true)
								setElementData(thePlayer, "isVIPEpsylon", true)
								givePlayerMoney(thePlayer, 300000)
							elseif tipoVIP == "Alpha" then
								outputChatBox("#00FF00["..tipoVIP.."] #FFFFFF"..getPlayerName(client).." #FFFFFFadicionou #00FF00"..dias.." dia(s) #FFFFFFde VIP para sua conta (#00FF00"..accountName.."#FFFFFF)", thePlayer, 255, 255, 255, true)
								setElementData(thePlayer, "isVIPAlpha", true)
								givePlayerMoney(thePlayer, 100000)
							end
							executeSQLQuery("INSERT INTO VIPS (type, login, nick, inicio, termino, staff) VALUES(?, ?, ?, ?, ?, ?)", tipoVIP, accountName, getPlayerName(thePlayer), inicio, termino, staff)
							triggerClientEvent(root, "ativarVip", resourceRoot, 1, removeHex(getPlayerName(thePlayer)), tipoVIP)
						else
							executeSQLQuery("INSERT INTO VIPS (type, login, nick, inicio, termino, staff) VALUES(?, ?, ?, ?, ?, ?)", tipoVIP, accountName, "--", inicio, termino, staff)
						end
					else
						outputChatBox("*A conta: "..accountName.." já possui VIP!", client, 255, 0, 0)
					end
				else
					outputChatBox("*O valor: "..tostring(dias).." é inválido!", client, 255, 0, 0)
				end
			else
				outputChatBox("*A conta: "..accountName.." é inexistente!", client, 255, 0, 0)
			end
		end
	end
)

addEvent( "removerVIP", true )
addEventHandler( "removerVIP", resourceRoot,
	function(accountName)
		if (accountName) then
			if (getAccount(accountName)) then
				if (vips[accountName]) then
					outputChatBox("*Você removeu o VIP da conta: "..accountName, client, 0, 255, 0)
					saveLog(getPlayerName(client).. " removeu o VIP da conta: "..accountName)
					local thePlayer = getAccountPlayer(getAccount(accountName))
					if (thePlayer) then
						local tipoVIP = getVIPType(accountName)
						if tipoVIP == "Revolution" then
							outputChatBox("#00FF00["..tipoVIP.."] #FFFFFF"..getPlayerName(client).." #FFFFFFremoveu o VIP da sua conta", thePlayer, 255, 255, 255, true)
							removeElementData(thePlayer, "isVIPRevolution")
						elseif tipoVIP == "Omega" then
							outputChatBox("#00FF00["..tipoVIP.."] #FFFFFF"..getPlayerName(client).." #FFFFFFremoveu o VIP da sua conta", thePlayer, 255, 255, 255, true)
							removeElementData(thePlayer, "isVIPOmega")
						elseif tipoVIP == "Sigma" then
							outputChatBox("#00FF00["..tipoVIP.."] #FFFFFF"..getPlayerName(client).." #FFFFFFremoveu o VIP da sua conta", thePlayer, 255, 255, 255, true)
							removeElementData(thePlayer, "isVIPSigma")
						elseif tipoVIP == "Epsylon" then
							outputChatBox("#00FF00["..tipoVIP.."] #FFFFFF"..getPlayerName(client).." #FFFFFFremoveu o VIP da sua conta", thePlayer, 255, 255, 255, true)
							removeElementData(thePlayer, "isVIPEpsylon")
						elseif tipoVIP == "Alpha" then
							outputChatBox("#00FF00["..tipoVIP.."] #FFFFFF"..getPlayerName(client).." #FFFFFFremoveu o VIP da sua conta", thePlayer, 255, 255, 255, true)
							removeElementData(thePlayer, "isVIPAlpha")
						end
					end
					executeSQLQuery("DELETE FROM VIPS WHERE login=?", accountName)
					vips[accountName] = nil
				else
					outputChatBox("*A conta: "..accountName.." não possui VIP!", client, 255, 0, 0)
				end
			else
				outputChatBox("*A conta: "..accountName.." é inexistente!", client, 255, 0, 0)
			end
		end
	end
)
addEvent( "alterarVip", true )
addEventHandler( "alterarVip", resourceRoot,
	function(accountName, dias)
		if (accountName and tonumber(dias)) then
			dias = tonumber(dias)
			if (getAccount(accountName)) then
				if (dias > 0) then
					local thePlayer = getAccountPlayer(getAccount(accountName))
					local termino = getRealTime().timestamp + ( dias * 86400 )
					executeSQLQuery("UPDATE VIPS SET termino = ? WHERE login =?", termino, accountName)
					vips[accountName] = termino
					saveLog(getPlayerName(client).. " alterou o tempo de VIP da conta: "..accountName.." para "..dias.." dia(s)")
					outputChatBox("*Você alterou o tempo de VIP da conta: "..accountName.." para "..dias.." dia(s)", client, 0, 255, 0)
					if (thePlayer) then 
						local tipoVIP = getVIPType(accountName)
						outputChatBox("#00FF00[VIP] #FFFFFF"..getPlayerName(client).." #FFFFFFmudou o seu tempo de VIP para #00FF00"..dias.." dia(s)", thePlayer, 255, 255, 255, true)
						triggerClientEvent(root, "ativarVip", resourceRoot, 2, removeHex(getPlayerName(thePlayer)), tipoVIP)
					end
					triggerEvent ( "getVipList", resourceRoot, client )    
				else
					outputChatBox("*O valor: "..tostring(dias).." é inválido!", client, 255, 0, 0)
				end
			else
				outputChatBox("*A conta: "..accountName.." é inexistente!", client, 255, 0, 0)
			end
		end
	end
)

addEvent( "giveAll", true )
addEventHandler( "giveAll", resourceRoot,
	function(dias)
		if (tonumber(dias)) then
			dias = tonumber(dias)	
			if (dias > 0) then
				for acc, termino in pairs(vips) do
					if (acc and getAccount(acc)) then
						if (vips[acc]) then
							termino = vips[acc] + ( dias * 86400 )
							vips[acc] = termino
							executeSQLQuery("UPDATE VIPS SET termino = ? WHERE login =?", termino, acc)
						end
					end
				end
				saveLog(getPlayerName(client).. " incrementou "..tostring(dias).." dia(s) nos VIPS")
				outputChatBox("* Você incrementou "..tostring(dias).." dia(s) nos VIPS", client, 0, 255, 0)
				triggerEvent ( "loadLog", resourceRoot, client )
			else
				outputChatBox("*O valor: "..tostring(dias).." é inválido!", client, 255, 0, 0)
			end
		end
	end
)

addEvent( "removeAll", true )
addEventHandler( "removeAll", resourceRoot,
	function(dias)
		if (tonumber(dias)) then
			dias = tonumber(dias)	
			if (dias > 0) then
				for acc, termino in pairs(vips) do
					if (acc and getAccount(acc)) then
						if (vips[acc]) then
							termino = vips[acc] - ( dias * 86400 )
							vips[acc] = termino
							executeSQLQuery("UPDATE VIPS SET termino = ? WHERE login =?", termino, acc)
						end
					end
				end
				saveLog(getPlayerName(client).. " removeu "..tostring(dias).." dia(s) nos VIPS")
				outputChatBox("* Você removeu "..tostring(dias).." dia(s) nos VIPS", client, 0, 255, 0)
				verificar()
				triggerEvent ( "loadLog", resourceRoot, client )
			else
				outputChatBox("*O valor: "..tostring(dias).." é inválido!", client, 255, 0, 0)
			end
		end
	end
)

function isPlayerVip(player)
	if getElementData(player, "isVIPRevolution") then
		return true
	elseif getElementData(player, "isVIPOmega") then
		return true
	elseif getElementData(player, "isVIPSigma") then
		return true
	elseif getElementData(player, "isVIPEpsylon") then
		return true
	elseif getElementData(player, "isVIPAlpha") then
		return true
	end
	return false
end

function getVipTempo(player)
	local acc = getAccountName(getPlayerAccount(player))
	if (vips[acc]) then
		return secondsToTimeDesc(vips[acc] - getRealTime().timestamp)
	end
	return false
end

function getVipValidade(player)
	local acc = getAccountName(getPlayerAccount(player))
	if (vips[acc]) then
		local timestamp = getRealTime(vips[acc])
		return string.format("%02d/%02d/%d", timestamp.monthday, timestamp.month +1, timestamp.year +1900, timestamp.hour, timestamp.minute)
	end
	return false
end

addEvent( "getAccName", true )
addEventHandler( "getAccName", resourceRoot,
	function(player)
		local account = getPlayerAccount(player)
		if account and not isGuestAccount(account) then
			local accountName = getAccountName(account)
			triggerClientEvent(client, "sendAccName", resourceRoot, accountName)
		else	
			outputChatBox("#00FF00[VIP] #FFFFFFEste jogador não esta logado.", client, 255, 255, 255, true)
		end
	end
)

addEvent( "getVipList", true )
addEventHandler( "getVipList", resourceRoot,
	function(staff)
		staff = staff or client
		local vipList = executeSQLQuery("SELECT * FROM VIPS")
		for _, row in ipairs(vipList) do
			local inicio = getRealTime(row.inicio)
			local termino = getRealTime(row.termino)
			row.nick = row.nick:gsub("#%x%x%x%x%x%x", "")
			row.type = row.type
			row.staff = row.staff:gsub("#%x%x%x%x%x%x", "")
			row.inicio = string.format ( "%02d/%02d/%d", inicio.monthday, inicio.month +1, inicio.year +1900)
			row.tempo = secondsToTimeDesc(row.termino - getRealTime().timestamp)
			row.termino = string.format ( "%02d/%02d/%d", termino.monthday, termino.month +1, termino.year +1900)
			
			local acc = getAccount(row.login)
			if acc then
				local player = getAccountPlayer(acc)
				if (player) then 
					row.status = "ONLINE"
				else 
					row.status = "OFFLINE"
				end
			end
		end
		triggerClientEvent(staff, "sendVipList", resourceRoot, vipList)
	end
)

addEvent( "loadLog", true )
addEventHandler( "loadLog", resourceRoot,
	function(staff)
		staff = staff or client
		local file = fileOpen("logs.txt")
		if (file) then
			local logs = fileRead (file, fileGetSize( file ) )
			fileClose(file)
			triggerClientEvent(staff, "sendLog", resourceRoot, logs)
		end
	end
)

function verificar()
	for acc, termino in pairs(vips) do
		if (acc and getAccount(acc)) then
			if (vips[acc]) then
				if (vips[acc] < getRealTime().timestamp) then
					local thePlayer = getAccountPlayer(getAccount(acc))
					if (thePlayer) then 
						local tipoVIP = getVIPType(acc)
						saveLog("O "..tipoVIP.." da conta: "..acc.." expirou")
						if tipoVIP == "Revolution" then
							outputChatBox("#00FF00["..tipoVIP.."] #FFFFFFO seu tempo de VIP expirou!", thePlayer, 255, 255, 255, true) 
							removeElementData(thePlayer, "isVIPRevolution")
						elseif tipoVIP == "Omega" then
							outputChatBox("#00FF00["..tipoVIP.."] #FFFFFFO seu tempo de VIP expirou!", thePlayer, 255, 255, 255, true) 
							removeElementData(thePlayer, "isVIPOmega")
						elseif tipoVIP == "Sigma" then
							outputChatBox("#00FF00["..tipoVIP.."] #FFFFFFO seu tempo de VIP expirou!", thePlayer, 255, 255, 255, true) 
							removeElementData(thePlayer, "isVIPSigma")
						elseif tipoVIP == "Epsylon" then
							outputChatBox("#00FF00["..tipoVIP.."] #FFFFFFO seu tempo de VIP expirou!", thePlayer, 255, 255, 255, true) 
							removeElementData(thePlayer, "isVIPEpsylon")
						elseif tipoVIP == "Alpha" then
							outputChatBox("#00FF00["..tipoVIP.."] #FFFFFFO seu tempo de VIP expirou!", thePlayer, 255, 255, 255, true) 
							removeElementData(thePlayer, "isVIPAlpha")
						end
					end
					executeSQLQuery("DELETE FROM VIPS WHERE login = ?", acc)
					vips[acc] = nil
				end
			end
		end
	end
end
setTimer(verificar, 60000, 0)

addEventHandler( "onPlayerChangeNick", root,
	function(_, newNick)
		local acc = getPlayerAccount(source)
		if (acc and not isGuestAccount(acc)) then
			local acc = getAccountName(acc)
			if (vips[acc]) then
				executeSQLQuery( "UPDATE VIPS SET nick = ? WHERE login = ?", newNick, acc )
			end
		end
	end
)

addEventHandler("onPlayerLogin", root,
	function(_, acc)
		local acc = getAccountName(acc)
		if (vips[acc]) then
			local tipoVIP = getVIPType(acc)
			if tipoVIP == "Revolution" then
				setElementData(source, "isVIPRevolution", true)
			elseif tipoVIP == "Omega" then
				setElementData(source, "isVIPOmega", true)
			elseif tipoVIP == "Sigma" then
				setElementData(source, "isVIPSigma", true)
			end
			executeSQLQuery( "UPDATE VIPS SET nick = ? WHERE login = ?", getPlayerName(source), acc )
		end
	end
)

addCommandHandler("vipadmin", function(admin)
	if isPlayerInACL(admin, "Console") then
		triggerClientEvent(admin, "openPanel", resourceRoot)
	end
end)

function removeHex(s)
	if type(s) == "string" then
		while(s:find("#%x%x%x%x%x%x")) do
			s = s:gsub("#%x%x%x%x%x%x","")
		end
	end
	return s or false
end

function getVIPType( accountName )
    local q = executeSQLQuery( "SELECT type FROM VIPS WHERE login = ?", accountName )
    if #q ~= 0 then
        return q[1].type
    else
        return false
    end
end

function isPlayerInACL(player, acl)
	if isElement(player) and getElementType(player) == "player" and aclGetGroup(acl or "") and not isGuestAccount(getPlayerAccount(player)) then
		local account = getPlayerAccount(player)
		
		return isObjectInACLGroup( "user.".. getAccountName(account), aclGetGroup(acl) )
	end
	return false
end

function saveLog(txt)
	local file = false
	
	if not ( fileExists ( "logs.txt" ) ) then fileCreate ( "logs.txt" ) end
	file = fileOpen ("logs.txt")
	fileSetPos ( file, fileGetSize( file ) ) 
	local tag = string.format ( "[%02d/%02d/%d %02d:%02d:%02d] : ", getRealTime().monthday, getRealTime().month +1, getRealTime().year +1900, getRealTime().hour, getRealTime().minute, getRealTime().second )
	fileWrite(file, tag..txt.."\r\n")
    fileClose(file)
end

function secondsToTimeDesc( seconds )
	if seconds then
		local results = {}
		local sec = ( seconds %60 )
		local min = math.floor ( ( seconds % 3600 ) /60 )
		local hou = math.floor ( ( seconds % 86400 ) /3600 )
		local day = math.floor ( seconds /86400 )

		if day > 0 then table.insert( results, day .. ( day == 1 and " dia" or " dias" ) ) end
		if hou > 0 then table.insert( results, hou .. ( hou == 1 and " hora" or " horas" ) ) end
		if (min > 0 and day <= 0) then table.insert( results, min .. ( min == 1 and " minuto" or " minutos" ) ) end
		if (sec > 0 and hou <= 0) then table.insert( results, sec .. ( sec == 1 and " segundo" or " segundos" ) ) end
		
		return string.reverse ( table.concat ( results, ", " ):reverse():gsub(" ,", " e ", 1 ) )
	end
	return ""
end
local gui = {
    edit = {},
    window = {},
    tabpanel = {},
    label = {},
    button = {},
    tab = {},
    gridlist = {},
    memo = {},
	combobox = {}
}

local vips = {
	{"Revolution"},
	{"Omega"},
	{"Sigma"},
	{"Epsylon"},
	{"Alpha"},
}

local scX, scY  = guiGetScreenSize()
function centerWindow(center_window)
    local windowW, windowH = guiGetSize(center_window, false)
    local x, y = (scX - windowW) /2,(scY - windowH) /2
    return guiSetPosition(center_window, x, y, false)
end

addEventHandler("onClientResourceStart", resourceRoot,
    function()
        gui.window[1] = guiCreateWindow(515, 227, 580, 415, "GERENCIAMENTO DE VIPS", false)
		guiWindowSetSizable(gui.window[1], false)
		centerWindow(gui.window[1])
		guiSetVisible(gui.window[1], false)
		
		gui.button[1] = guiCreateButton(545, 20, 25, 25, "X", false, gui.window[1])

        gui.tabpanel[1] = guiCreateTabPanel(10, 45, 560, 360, false, gui.window[1])

        gui.tab[1] = guiCreateTab("NOVO VIP", gui.tabpanel[1])

        gui.edit[1] = guiCreateEdit(10, 10, 260, 25, "Buscar...", false, gui.tab[1])
        gui.gridlist[1] = guiCreateGridList(10, 45, 260, 280, false, gui.tab[1])
        guiGridListAddColumn(gui.gridlist[1], "JOGADORES ONLINE", 0.9)
		guiGridListSetSortingEnabled(gui.gridlist[1], false)
		
        gui.label[1] = guiCreateLabel(315, 25, 200, 15, "CONTA", false, gui.tab[1])
        guiLabelSetHorizontalAlign(gui.label[1], "center", false)
        gui.edit[2] = guiCreateEdit(315, 50, 200, 37, "", false, gui.tab[1])
		
        gui.label[2] = guiCreateLabel(340, 106, 146, 15, "DIAS DE VIP", false, gui.tab[1])
        guiLabelSetHorizontalAlign(gui.label[2], "center", false)
        gui.edit[3] = guiCreateEdit(340, 131, 146, 37, "", false, gui.tab[1])
		
		gui.combobox[1] = guiCreateComboBox(315, 190, 200, 80, "Selecione um item", false, gui.tab[1])
		
        gui.button[2] = guiCreateButton(315, 280, 200, 37, "ADICIONAR VIP", false, gui.tab[1])
        guiSetFont(gui.button[2], "default-bold-small")

        gui.tab[2] = guiCreateTab("LISTA DE VIPS", gui.tabpanel[1])

        gui.gridlist[2] = guiCreateGridList(8, 49, 542, 232, false, gui.tab[2])
        guiGridListAddColumn(gui.gridlist[2], "JOGADOR", 0.2)
		guiGridListAddColumn(gui.gridlist[2], "TIPO", 0.15)
        guiGridListAddColumn(gui.gridlist[2], "CONTA", 0.15)
		guiGridListAddColumn(gui.gridlist[2], "STATUS", 0.15)
        guiGridListAddColumn(gui.gridlist[2], "INICIO", 0.15)
        guiGridListAddColumn(gui.gridlist[2], "TÉRMINO", 0.15)
        guiGridListAddColumn(gui.gridlist[2], "TEMPO", 0.25)
		guiGridListAddColumn(gui.gridlist[2], "STAFF", 0.25)
		guiGridListSetSortingEnabled(gui.gridlist[2], false)
		
        gui.edit[4] = guiCreateEdit(382, 10, 168, 29, "Buscar...", false, gui.tab[2])
        gui.edit[5] = guiCreateEdit(10, 291, 113, 35, "DIAS", false, gui.tab[2])
		guiSetEnabled(gui.edit[5], false)
        gui.button[3] = guiCreateButton(133, 291, 175, 35, "ALTERAR TEMPO DE VIP", false, gui.tab[2])
		guiSetEnabled(gui.button[3], false)
        gui.button[4] = guiCreateButton(427, 291, 123, 35, "REMOVER VIP", false, gui.tab[2])
		guiSetEnabled(gui.button[4], false)

        gui.tab[3] = guiCreateTab("ADICIONAIS", gui.tabpanel[1])

        gui.memo[1] = guiCreateMemo(10, 124, 540, 202, "", false, gui.tab[3])
        guiMemoSetReadOnly(gui.memo[1], true)
        gui.label[3] = guiCreateLabel(10, 101, 540, 13, "HISTÓRICO", false, gui.tab[3])
        gui.edit[6] = guiCreateEdit(10, 35, 100, 34, "", false, gui.tab[3])
        gui.label[4] = guiCreateLabel(10, 10, 378, 15, "ADICIONAR/REMOVER DIAS DE VIP EM TODOS VIPS EXISTENTES", false, gui.tab[3])
        gui.button[5] = guiCreateButton(120, 35, 100, 34, "ADICIONAR", false, gui.tab[3])
        gui.button[6] = guiCreateButton(230, 35, 100, 34, "REMOVER", false, gui.tab[3])
        gui.label[5] = guiCreateLabel(10, 73, 539, 15, "_______________________________________________________________________________", false, gui.tab[3])
        guiLabelSetHorizontalAlign(gui.label[5], "center", false)   
    end
)

local ganhadorVip, typeVip, currentType
local musics = {"music.mp3", "music2.mp3", "music3.mp3"}

addEvent("ativarVip", true)
addEventHandler("ativarVip", resourceRoot,
	function(typeCurrent, target, type)
		local sound = playSound(musics[math.random(#musics)], false)

		currentType, ganhadorVip, typeVip = typeCurrent, target, type

		if currentType == 1 then
			fadeInText("❤ O cidadão "..ganhadorVip.." ativou o plano VIP "..typeVip.." na cidade ❤", scX/2-400, 20, scX/2+400, 100, 255, 255, 0, 2, "default-bold", "center", "center", true, true, true, 1000, 1, "Linear")
		elseif currentType == 2 then
			fadeInText("❤ O cidadão "..ganhadorVip.." renovou o plano VIP "..typeVip.." na cidade ❤", scX/2-400, 20, scX/2+400, 100, 255, 255, 0, 2, "default-bold", "center", "center", true, true, true, 1000, 1, "Linear")
		end
		
		setTimer(function()
			if currentType == 1 then
				fadeOutText("❤ O cidadão "..ganhadorVip.." ativou o plano VIP "..typeVip.." na cidade ❤", scX/2-400, 20, scX/2+400, 100, 255, 255, 0, 2, "default-bold", "center", "center", true, true, true, 1000, 1, "Linear")
			elseif currentType == 2 then
				fadeOutText("❤ O cidadão "..ganhadorVip.." renovou o plano VIP "..typeVip.." na cidade ❤", scX/2-400, 20, scX/2+400, 100, 255, 255, 0, 2, "default-bold", "center", "center", true, true, true, 1000, 1, "Linear")
			end
			currentType, ganhadorVip, typeVip = nil, nil, nil
			if isElement(sound) then
				stopSound(sound)
			end
		end, 16000, 1)
	end
)

addEvent("openPanel", true)
addEventHandler("openPanel", resourceRoot,
	function()
		guiSetVisible( gui.window[1], true )
		showCursor( true )
		refreshPlayersList()
		guiComboBoxClear(gui.combobox[1])
		for i, vipName in ipairs(vips) do 
			guiComboBoxAddItem(gui.combobox[1], vipName[1]) 
		end
	end
)

addEvent( "sendLog", true )
addEventHandler( "sendLog", resourceRoot,
	function(txt)
		guiSetText(gui.memo[1],txt)
	end
)

local saveVipList = false
addEvent( "sendVipList", true )
addEventHandler( "sendVipList", resourceRoot,
	function(viplist)
		saveVipList = viplist
		guiSetEnabled(gui.edit[5], false)
		guiSetEnabled(gui.button[3], false)
		guiSetEnabled(gui.button[4], false)
		guiGridListClear(gui.gridlist[2])
		for i,v in ipairs(viplist) do
			local row = guiGridListAddRow(gui.gridlist[2])
			guiGridListSetItemText ( gui.gridlist[2], row, 1, v.nick, false, false )
			guiGridListSetItemColor ( gui.gridlist[2], row, 1, 255, 255, 0 )
			guiGridListSetItemText ( gui.gridlist[2], row, 2, v.type, false, false )
			guiGridListSetItemText ( gui.gridlist[2], row, 3, v.login, false, false )
			guiGridListSetItemText ( gui.gridlist[2], row, 4, v.status or "N/A", false, false )
			if (v.status == "ONLINE") then
				guiGridListSetItemColor ( gui.gridlist[2], row, 4, 0, 255, 0 )
			elseif (v.status == "OFFLINE") then
				guiGridListSetItemColor ( gui.gridlist[2], row, 4, 255, 0, 0 )
			end
			
			guiGridListSetItemText ( gui.gridlist[2], row, 5, v.inicio, false, false )
			guiGridListSetItemText ( gui.gridlist[2], row, 6, v.termino, false, false )
			guiGridListSetItemText ( gui.gridlist[2], row, 7, v.tempo, false, false )
			guiGridListSetItemText ( gui.gridlist[2], row, 8, v.staff, false, false )
		end
	end
)

addEvent( "sendAccName", true )
addEventHandler( "sendAccName", resourceRoot,
	function(accountName)
		guiSetText ( gui.edit[2], accountName )
	end
)

function refreshPlayersList()
	guiGridListClear(gui.gridlist[1])
	for _, player in pairs(getElementsByType("player")) do
		local row = guiGridListAddRow(gui.gridlist[1])
		guiGridListSetItemText(gui.gridlist[1], row, 1, getPlayerName(player):gsub("#%x%x%x%x%x%x", ""), false, false)
		guiGridListSetItemData (gui.gridlist[1], row, 1, player)
		if getElementData(player, "isVIPSigma") or getElementData(player, "isVIPOmega") or getElementData(player, "isVIPRevolution") or getElementData(player, "isVIPAlpha") or getElementData(player, "isVIPRevolution") then
			guiGridListSetItemColor (gui.gridlist[1], row, 1, 255, 255, 0)
		end
	end
end

addEventHandler("onClientGUITabSwitched", resourceRoot,
	function(tab)
		if not tab then return end
		if (tab == gui.tab[1]) then
			refreshPlayersList()
		elseif (tab == gui.tab[2]) then
			triggerServerEvent ( "getVipList", resourceRoot)
			guiSetEnabled(gui.edit[5], false)
			guiSetEnabled(gui.button[3], false)
			guiSetEnabled(gui.button[4], false)
		elseif (tab == gui.tab[3]) then
			triggerServerEvent ( "loadLog", resourceRoot)
		end
	end
)

addEventHandler("onClientGUIChanged", resourceRoot, function()
	if (source == gui.edit[1]) then
		guiGridListClear(gui.gridlist[1])
		if guiGetText(source) ~= "" and guiGetText(source) ~= "Buscar..." then
			for _, player in ipairs(getElementsByType"player") do
				if string.find(string.lower(string.gsub(getPlayerName(player), "#%x%x%x%x%x%x", "")), guiGetText(source)) then
					local row = guiGridListAddRow(gui.gridlist[1])
					guiGridListSetItemText(gui.gridlist[1], row, 1, getPlayerName(player):gsub("#%x%x%x%x%x%x", ""), false, false)
					guiGridListSetItemData(gui.gridlist[1], row, 1, player)
					if getElementData(player, "isVIPSigma") or getElementData(player, "isVIPOmega") or getElementData(player, "isVIPRevolution") or getElementData(player, "isVIPEpsylon") or getElementData(player, "isVIPAlpha") then
						guiGridListSetItemColor(gui.gridlist[1], row, 1, 255, 255, 0)
					end
				end
			end
		else
			refreshPlayersList()
		end
	end
	
	if (source == gui.edit[4]) then
		guiSetEnabled(gui.edit[5], false)
		guiSetEnabled(gui.button[3], false)
		guiSetEnabled(gui.button[4], false)
		guiGridListClear(gui.gridlist[2])
		if guiGetText(source) ~= "" and guiGetText(source) ~= "Buscar..." then
			for i,v in ipairs(saveVipList) do
				local searchNick = string.find(string.lower(string.gsub(v.nick, "#%x%x%x%x%x%x", "")), guiGetText(source))
				local searchAcc = string.find(string.lower(v.login), guiGetText(source))
				local searchStaff = string.find(string.lower(string.gsub(v.staff, "#%x%x%x%x%x%x", "")), guiGetText(source))
				if (searchNick or searchAcc or searchStaff) then
					local row = guiGridListAddRow(gui.gridlist[2])
					guiGridListSetItemText ( gui.gridlist[2], row, 1, v.nick, false, false )
					guiGridListSetItemColor ( gui.gridlist[2], row, 1, 255, 255, 0 )
					guiGridListSetItemText ( gui.gridlist[2], row, 2, v.type, false, false )
					guiGridListSetItemText ( gui.gridlist[2], row, 3, v.login, false, false )
					
					guiGridListSetItemText ( gui.gridlist[2], row, 4, v.status, false, false )
					if (v.status == "ONLINE") then
						guiGridListSetItemColor ( gui.gridlist[2], row, 4, 0, 255, 0 )
					elseif (v.status == "OFFLINE") then
						guiGridListSetItemColor ( gui.gridlist[2], row, 4, 255, 0, 0 )
					end
					
					guiGridListSetItemText ( gui.gridlist[2], row, 5, v.inicio, false, false )
					guiGridListSetItemText ( gui.gridlist[2], row, 6, v.termino, false, false )
					guiGridListSetItemText ( gui.gridlist[2], row, 7, v.tempo, false, false )
					guiGridListSetItemText ( gui.gridlist[2], row, 8, v.staff, false, false )
				end
			end
		else
			triggerServerEvent ( "getVipList", resourceRoot)
		end
	end

	if (source == gui.edit[3] or source == gui.edit[5]) then
		local currText = guiGetText( source ) 
		local newText = string.gsub( currText, "[^0-9]", "" ) 
		if newText ~= currText then 
			guiSetText( source, newText ) 
		end
	end
end)

addEventHandler("onClientGUIClick", resourceRoot, function(button)
	if button == "left" then
		if (source == gui.button[5]) then
			local days = guiGetText(gui.edit[6])
			if (days and tonumber(days)) then
				triggerServerEvent ( "giveAll", resourceRoot, days)
			end
		end
		
		if (source == gui.button[6]) then
			local days = guiGetText(gui.edit[6])
			if (days and tonumber(days)) then
				triggerServerEvent ( "removeAll", resourceRoot, days)
			end
		end
	
	
		if (source == gui.button[3]) then
			local row, column = guiGridListGetSelectedItem(gui.gridlist[2])
			if (row and row ~= -1) then
				local accountName = guiGridListGetItemText ( gui.gridlist[2], row, 3 )
				local days = guiGetText(gui.edit[5])
				if (accountName and days) then
					triggerServerEvent ( "alterarVip", resourceRoot, accountName, days)
				end
			end
		end
	
	
		if (source == gui.button[1]) then
			guiSetVisible( gui.window[1], false )
			showCursor( false )
		end
	
		if (source == gui.edit[1]) then
			if (guiGetText(source) == "Buscar...") then guiSetText(source, "") end
			guiSetInputMode("no_binds_when_editing")
		else
			if (guiGetText(gui.edit[1]) == "") then guiSetText(gui.edit[1],"Buscar...") end
		end

		if (source == gui.edit[4]) then
			if (guiGetText(source) == "Buscar...") then guiSetText(source, "") end
			guiSetInputMode("no_binds_when_editing")
		else
			if (guiGetText(gui.edit[4]) == "") then guiSetText(gui.edit[4],"Buscar...") end
		end
		
		if (source == gui.edit[5]) then
			if (guiGetText(source) == "DIAS") then guiSetText(source, "") end
		else
			if (guiGetText(gui.edit[5]) == "") then guiSetText(gui.edit[5],"DIAS") end
		end
		
		if (source == gui.gridlist[1]) then
			local row, column = guiGridListGetSelectedItem(source)
			if (row and row ~= -1) then
				local player = guiGridListGetItemData(source, row, column)
				if (player) and isElement(player) then
					guiSetText ( gui.edit[2], "" )
					triggerServerEvent ( "getAccName", resourceRoot, player )
				end
			else
				guiSetText ( gui.edit[2], "" )
			end
		end
		
		if (source == gui.gridlist[2]) then
			local row, column = guiGridListGetSelectedItem(source)
			if (row and row ~= -1) then
				local accountName = guiGridListGetItemText ( gui.gridlist[2], row, 3 )
				if (accountName) then
					guiSetEnabled(gui.edit[5], true)
					guiSetEnabled(gui.button[3], true)
					guiSetEnabled(gui.button[4], true)
				end
				--triggerServerEvent ( "getAccName", resourceRoot, player )
			else
				guiSetEnabled(gui.edit[5], false)
				guiSetEnabled(gui.button[3], false)
				guiSetEnabled(gui.button[4], false)
			end
		end

		if (source == gui.button[2]) then
			local accountName = guiGetText(gui.edit[2])
			local days = guiGetText(gui.edit[3])
			local tipoVIP = guiComboBoxGetSelected(gui.combobox[1])
			if (accountName and days and tipoVIP) then
				if days ~= "" and tonumber(days) > 0 and tipoVIP ~= -1 then
					local type = guiComboBoxGetItemText(gui.combobox[1], tipoVIP)
					triggerServerEvent ( "setVip", resourceRoot, accountName, days, type)
					setTimer(refreshPlayersList,1000,1)
				end
			end
		end
		
		if (source == gui.button[4]) then
			local row, column = guiGridListGetSelectedItem(gui.gridlist[2])
			if (row and row ~= -1) then
				local accountName = guiGridListGetItemText ( gui.gridlist[2], row, 3 )
				guiGridListRemoveRow ( gui.gridlist[2], row )
				guiSetEnabled(gui.edit[5], false)
				guiSetEnabled(gui.button[3], false)
				guiSetEnabled(gui.button[4], false)
				triggerServerEvent ( "removerVIP", resourceRoot, accountName)
			end
		end
	
	end
end)

function dxDrawBorderedText (text, left, top, right, bottom, color, scale, font, alignX, alignY, clip, wordBreak,postGUI, border, a)
    for oX = -border, border do
        for oY = -border, border do
            dxDrawText(text, left + oX, top + oY, right + oX, bottom + oY, tocolor(0, 0, 0, a), scale, font, alignX, alignY, clip, wordBreak,postGUI)
        end
    end
    dxDrawText(text, left, top, right, bottom, color, scale, font, alignX, alignY, clip, wordBreak, postGUI)
end

function fadeInText (text, left, top, right, bottom, r, g, b, scale, font, alignX, alignY, clip, wordBreak, postGUI, theDuration, border, theType, thePeriod, theAmplitude, theOvershoot)
    local start = getTickCount()
    function renderTxIn ()
        local now = getTickCount()
        local endTime = start + theDuration
        local elapsedTime = now - start
        local duration = endTime - start
        local progress = elapsedTime / duration
		local a = interpolateBetween (0, 0, 0, 255, 0, 0, progress, theType, thePeriod, theAmplitude, theOvershoot)
        dxDrawBorderedText (text, left, top, right, bottom, tocolor (r, g, b, a), scale, font, alignX, alignY, clip, wordBreak,postGUI, border, a)
    end
    addEventHandler ("onClientRender", getRootElement(), renderTxIn)
end

function fadeOutText (text, left, top, right, bottom, r, g, b, scale, font, alignX, alignY, clip, wordBreak, postGUI, theDuration, border, theType, thePeriod, theAmplitude, theOvershoot)
    local start = getTickCount()
    removeEventHandler ("onClientRender", getRootElement(), renderTxIn)
    function renderTxOut ()
        local now = getTickCount()
        local endTime = start + theDuration
        local elapsedTime = now - start
        local duration = endTime - start
        local progress = elapsedTime / duration
		local a = interpolateBetween (255, 0, 0, 0, 0, 0, progress, theType, thePeriod, theAmplitude, theOvershoot)
        dxDrawBorderedText (text, left, top, right, bottom, tocolor (r, g, b, a), scale, font, alignX, alignY, clip, wordBreak,postGUI, border, a)
    end
    addEventHandler ("onClientRender", getRootElement(), renderTxOut)
    setTimer (function()
        removeEventHandler ("onClientRender", getRootElement(), renderTxOut)
    end, theDuration+100, 1)
end

 

Edited by ~Sr.Victor
Link to comment

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...