Jump to content

drogas


Recommended Posts

opa pessoal, boa tarde, recentemente baixei um sistema de drogas, com vendas para outros players, para escolher qual droga você quer vender para o player, vai ter um marker, que quando o player passa por cima, ele abre essa tabela:

spacer.png

até ai tudo bem, porém, isso tudo e somente em um único marker, o que eu gostaria de fazer seria o seguinte:, por cada droga dessa em uma favela, no caso, colocar 1 marker com 1 droga apenas, e não 1 marker com todas as drogas. isso seria possível? vou estar colocando a linha de comando do script ai abaixo: 

ESSE E O CLIENT.LUA

Spoiler

 

eax = {}
cor = {}
function dxDrug ()
 
	dxDrawRectangle(356, 248, 312, 347, tocolor(16, 16, 16, 255), false)
	dxDrawText("Compra de drogas", 410, 253, 608, 274, tocolor(255, 255, 255, 255), 1.00, "clear", "center", "center", false, false, false, false, false)
	
	cor[1] = tocolor(39, 39, 39, 255)
	if isCursorOnElement(362, 529, 148, 29) then
		cor[1] = tocolor(140, 135, 230, 136)
	end
	dxDrawRectangle(362, 529, 148, 29, cor[1], false)
	dxDrawText("Comprar", 362, 529, 362+148, 529+29, tocolor(255, 255, 255, 255), 1.00, "clear", "center", "center", false, false, false, false, false)
	
	
	cor[2] = tocolor(39, 39, 39, 255)
	if isCursorOnElement(513, 529, 148, 29) then
		cor[2] = tocolor(140, 135, 230, 136)
	end
	dxDrawRectangle(513, 529, 148, 29, cor[2], false)
	dxDrawText("Cancelar", 513, 529, 513+148, 529+29, tocolor(255, 255, 255, 255), 1.00, "clear", "center", "center", false, false, false, false, false)
	
	local data = scroll["Scroll"]
	for i = 1, visible do
			local values = valores[i + data]
		if values then
			eax[i] = {}
			local val1 = (335 - 31) + (i * 31)
			local val2 = (339 - 31 * 2) + (i * 31 * 2)
			eax[i][1] = val1
			eax[i][2] = values[1]
			eax[i][3] = values[2]
				cor[3] = tocolor(25, 25, 25, 255)
			if selected == values[1] then
				cor[3] = tocolor(54, 46, 214, 136)
			end
			dxDrawRectangle(362, val1, 300, 29, cor[3], false)
			dxDrawText (values[1],  375, val2, 518, 360, tocolor (255, 255, 255, 255), 1.00, 'clear', "left", "center", false, true)
			dxDrawText ("$ "..values[2],  529, val2,  653, 360, tocolor (255, 255, 255, 255), 1.00, 'clear', "center", "center", false, true)
		end
    end
end

addEventHandler("onClientClick", root, 
function(button, state)
	if isEventHandlerAdded( "onClientRender", root, dxDrug )  then
		if button == "left" then
			if state == "down" then
				for index, v in ipairs(eax) do
					if v[1] then
						if isCursorOnElement(362, v[1], 300, 29) then
							selected = v[2]
							valueSe = v[3]
						end
					end
				end
				if isCursorOnElement(362, 529, 148, 29) then -- comprar
					if selected ~= false then 
						triggerServerEvent("tryBuyDrug", localPlayer, selected, valueSe)
					else
						outputChatBox("Selecione um item para comprar!")
					end
				elseif isCursorOnElement(513, 529, 148, 29) then -- fechar
					scroll["Scroll"] = 0
					valores = nil
					removeEventHandler("onClientRender", root, dxDrug)
					showCursor(false)
					selected = false
					valueSe = false
				end
			end
		end
	end
end
)

addEvent("openDrugSystem", true)
addEventHandler("openDrugSystem", root,
function  (tableMessages)
	if not isEventHandlerAdded( "onClientRender", root, dxDrug ) then
		scroll = { }
		valores = { }
		for i = 1, #drogas do	 
			table.insert(valores, {drogas[i][1], drogas[i][2]})
		end
		scroll["Scroll"] = 0
		selected = false
		valueSe = false
		addEventHandler("onClientRender", root, dxDrug)
		showCursor(true)
	end
end
)
 


function scrollValues (button)
    if isEventHandlerAdded("onClientRender", root, dxDrug) then -- Variavel ou Função util de Painel Aberto.
        value = scroll["Scroll"] or 0
        if ( button == "mouse_wheel_up" or button == "arrow_u") and value > 0 then
            value = value - 1
        elseif (button == "mouse_wheel_down" or button == "arrow_d") and value < #valores - visible then
            value = value + 1
        end
        scroll["Scroll"] = value
    end
end
bindKey ("mouse_wheel_up", "down", scrollValues)
bindKey ("mouse_wheel_down", "down", scrollValues)
bindKey ("arrow_u", "down", scrollValues)
bindKey ("arrow_d", "down", scrollValues)	

function isEventHandlerAdded( sEventName, pElementAttachedTo, func )
	if type( sEventName ) == 'string' and isElement( pElementAttachedTo ) and type( func ) == 'function' then
		local aAttachedFunctions = getEventHandlers( sEventName, pElementAttachedTo )
		if type( aAttachedFunctions ) == 'table' and #aAttachedFunctions > 0 then
			for i, v in ipairs( aAttachedFunctions ) do
				if v == func then
					return true
				end
			end
		end
	end
	return false
end

function isCursorOnElement(x,y,w,h)
	if isCursorShowing() then
		local mx,my = getCursorPosition ()
		local fullx,fully = guiGetScreenSize()
		cursorx,cursory = mx*fullx,my*fully
		if cursorx > x and cursorx < x + w and cursory > y and cursory < y + h then
			return true
		else
			return false
		end
	end
end

addEvent("enableEffect", true)
addEventHandler("enableEffect", getRootElement(), 
function  (shake, timer)
 
	timerEffec = setTimer(function()
		setPedControlState(localPlayer, "walk", true)
	end, 100, 0)
	setWindVelocity(100, 100, 0)
	setCameraShakeLevel(shake)
	setTimer(function()
		resetWindVelocity()
		setCameraShakeLevel(1)
		if isTimer(timerEffec) then 
			killTimer(timerEffec) 
		end
		setPedControlState(localPlayer, "walk", false)
		triggerServerEvent("resetDrug",localPlayer)
	end, timer, 1)
end
)

ESSE E O CONFIG.LUA

drogas = {

--- Nome da droga || preço || efeito  
--- Caso for mudar a droga, os efeitos só vão até 5


{"Maconha", 12,  "efeito1"},
{"Lança", 11, "efeito2"},
{"Cocaína", 10, "efeito3"},
{"Heroína", 10, "efeito4"},
{"Crack", 10, "efeito5"},
}

maxDrug = 10

cmdSold = "vender"

visible = 4 -- quantidade de linhas que a tabela irá ter no painel

ESSE E O SERVER.LUA

Spoiler

 

markerDrogas = {

{2071.709, -1551.279, 13.425},

}

ACL = "Gang"

markers = {}

for index, v in ipairs(markerDrogas) do
	markers[index] = createMarker(v[1], v[2], v[3]-1, "cylinder", 1.5, 255,255,255,255)
	addEventHandler("onMarkerHit", markers[index], 
	function (hitElement)
		if getElementType(hitElement) == "player" then
			if not getPedOccupiedVehicle(hitElement) then
				if isObjectInACLGroup("user."..getAccountName(getPlayerAccount(hitElement)), aclGetGroup(ACL)) then
					triggerClientEvent(hitElement, "openDrugSystem", hitElement)
				else
					triggerClientEvent(hitElement, "N3xT.dxNotification", hitElement, "Você não é "..ACL, "error")
				end
			end
		end
	end
	)
end

addCommandHandler("drogas", 
function(source)
	outputChatBox("Inventário de drogas",source)
	outputChatBox("----------------",source)
	for index, v in ipairs(drogas) do
		local qt = getElementData(source, v[1]) or 0
		outputChatBox(v[1]..": "..qt,source)
	end
	outputChatBox("----------------",source)
end
)

addEvent("tryBuyDrug", true)
addEventHandler("tryBuyDrug", root,
function(element, value)
	if element and value then
		if getPlayerMoney(source) >= value then
			if getElementData(source, element) < maxDrug then 
				
				--outputChatBox("[INFO]: "..element.." comprada com sucesso, pelo valor de: $ "..value, source)
				
				triggerClientEvent(source, "N3xT.dxNotification", source, "[INFO]: "..element.." comprada com sucesso, pelo valor de: $ "..value, "success")
				
				setElementData(source, element, getElementData(source, element) + 1)
				takePlayerMoney(source, value)
			else
			 
				
				triggerClientEvent(source, "N3xT.dxNotification", source, "[INFO]: Capacidade máxima de "..element.." atingida!", "error")
				
			end 
		else
			--outputChatBox("Você não tem dinheiro suficiente para comprar essa droga!", source)
			triggerClientEvent(source, "N3xT.dxNotification", source, "[INFO]: Você não tem dinheiro suficiente para comprar essa droga!", "error")
		end
	end
end
)

function getEffectFromDrug(efeito)
	estilo = 0
	shakeLevel = 0
	if efeito == "efeito1" then
		estilo = 126
		shakeLevel = 255
		tempo = 10000
	end
	if efeito == "efeito2" then
		estilo = 137
		shakeLevel = 89
		tempo = 15000
	end
	if efeito == "efeito3" then
		estilo = 119
		shakeLevel = 120
		tempo = 17000
	end
	if efeito == "efeito4" then
		estilo = 134
		shakeLevel = 200
		tempo = 20000
	end
	if efeito == "efeito5" then
		estilo = 126
		shakeLevel = 120
		tempo = 25000
	end
	return estilo, shakeLevel, tempo
end


addEvent("resetDrug", true)
addEventHandler("resetDrug", getRootElement(), 
function  ()
   setPedWalkingStyle(source, 0)
end
)

addCommandHandler("usar",
function(source, cmd, droga)
	if droga then
		if getElementData(source, droga) then
			if getElementData(source, droga) < 1 then
					 
					triggerClientEvent(source, "N3xT.dxNotification", source, "Você não tem essa droga!", "error")
				return
			end
			for index, v in ipairs(drogas) do
				
				if v[1] == droga then
					efeito = v[3]
				end
			end
			outputChatBox("Você usou 01 "..droga,source)
			local style, shake, tempo = getEffectFromDrug(efeito)
			setElementData(source, droga, getElementData(source, droga) - 1)
			setPedWalkingStyle(source, style)
			triggerClientEvent(source, "enableEffect", source, shake, tempo)
		else
		  
			triggerClientEvent(source, "N3xT.dxNotification", source, "Essa droga não existe! digite /drogas", "error")
		end
	end
end
)

function verifyPlayerID(id)
	for index, v in ipairs(getElementsByType("player")) do
		if getElementData(v, "ID") == tonumber(id) then
			return v
		end
	end
	return false
end

drogaReciever = {}

addCommandHandler(cmdSold, 
function(source, cmd, drug, id, quanty, value)
	if tonumber(id) then
		if drug then
			if tonumber(value) then
				if tonumber(quanty) then
					local player = verifyPlayerID(id)
					 
					if player then
						if getElementData(source, drug) >= 1 then
							
							
							triggerClientEvent(player, "N3xT.dxNotification", player, getPlayerName(source).. " quer te vender "..quanty.." "..drug.." por $ "..value, "info")
							triggerClientEvent(source, "N3xT.dxNotification", source, "Você ofereceu a "..getPlayerName(player).." "..quanty.." "..drug.." por: $ "..value, "info")
							 
							 
							drogaReciever[player] = {source, drug, quanty, value}
							
							
						else
							triggerClientEvent(source, "N3xT.dxNotification", source, "Você não tem essa droga, ou ela não existe!", "error")
						 
						end
					else
						triggerClientEvent(source, "N3xT.dxNotification", source, "Jogador não existente!", "error")
					end
				else
					triggerClientEvent(source, "N3xT.dxNotification", source, "Há algo de errado com a quantia da droga!", "error")
				end
			else
				 
				triggerClientEvent(source, "N3xT.dxNotification", source, "Há algo de errado com o valor da droga!", "error")
			end
		else
			triggerClientEvent(source, "N3xT.dxNotification", source, "Há algo de errado com o nome da droga!", "error")
		end
	else
 
		triggerClientEvent(source, "N3xT.dxNotification", source, "O ID está incorreto!", "error")
	end
end
)

addCommandHandler("aceitar", 
function(source)
	tabela = drogaReciever[source]
	if tabela  then
		if getPlayerMoney(source) >= tonumber(tabela[4]) then
 
			
			triggerClientEvent(source, "N3xT.dxNotification", source, "Você aceitou comprar "..tabela[3].." "..tabela[2].." por $ "..tabela[4].. " de "..getPlayerName(tabela[1]), "success")
			triggerClientEvent(tabela[1], "N3xT.dxNotification", tabela[1], getPlayerName(source).. " aceitou sua proposta! ", "success")
			
			takePlayerMoney(source, tonumber(tabela[4]))
			givePlayerMoney(tabela[1], tonumber(tabela[4]))
			
			setElementData(source, tabela[2], getElementData(source, tabela[2]) + 1)
			setElementData(tabela[1], tabela[2], getElementData(tabela[1], tabela[2]) - 1)
			drogaReciever[source] = false
		else
			drogaReciever[source] = false 
			triggerClientEvent(source, "N3xT.dxNotification", source, "Você não tem dinheiro suficiente!", "error")
		end
	end
end
)

addCommandHandler("recusar", 
function(source)
	tabela = drogaReciever[source]
	if tabela  then
		outputChatBox("Você recusou a proposta de "..getPlayerName(tabela[1]) ,source)
		outputChatBox(getPlayerName(source).. " recusou sua proposta ", tabela[1])
		drogaReciever[source] = false
	end
end
)

function returnAcc ( cc )
    if not isGuestAccount ( cc ) then
        if cc then    
            local source = getAccountPlayer ( cc )
            
			
			for index, v in ipairs(drogas) do
				local droga = getAccountData(cc, v[1]) or 0
				setElementData(source, v[1], droga) 
			end
		end
    end    
end
 
function archiveAcc ( cc )
	if cc then
		local source = getAccountPlayer ( cc )
		
		for index, v in ipairs(drogas) do
			local droga = getElementData(source, v[1]) or 0
			setAccountData(cc, v[1], droga)
		end
	end
end


addEventHandler ( "onResourceStart", getRootElement ( ), 
function ( res )
    if res == getThisResource ( ) then
        for i, player in ipairs ( getElementsByType ( "player" ) ) do
            local acc = getPlayerAccount ( player )
            if not isGuestAccount ( acc ) then
                returnAcc ( acc )
            end
        end
    end
end)

addEventHandler("onPlayerLogin", root,
function( _, acc )
 returnAcc ( acc )
 end
)

addEventHandler ( "onResourceStop", getRootElement ( ),
function (res)
    if res == getThisResource ( ) then
        for i, player in ipairs ( getElementsByType ( "player" ) ) do
            local acc = getPlayerAccount ( player )
            if not isGuestAccount ( acc ) then
                archiveAcc ( acc )
            end
        end
    end
end )

addEventHandler ( "onPlayerQuit", getRootElement ( ), 
function ( quitType )
    local acc = getPlayerAccount ( source )
    if not isGuestAccount ( acc ) then
        if acc then
            archiveAcc ( acc )
        end
    end
end
)
Edited by Lord Henry
Scripts longos colocados dentro de spoilers.
Link to comment
  • 2 weeks later...

@migsfiveMPara fazer tal modificação, você deve editar o código como um todo, utilizando-se de tabelas especificando cada posição de marker e drogas para este, vou listar abaixo um exemplo de tabela, porém fique ciente que o script não irá funcionar apenas com esta. 

drugsMarkers = {
    {
        markerPosition = {-706.872, 963.666, 12.46-1},
        markerDrugs = {
            {"Maconha", 12,  "efeito1"},
            {"Lança", 11, "efeito2"},
        },
    },
    {
        markerPosition = {-708.351, 951.127, 13.313-1},
        markerDrugs = {
            {"Cocaína", 10, "efeito3"},
            {"Heroína", 10, "efeito4"},
            {"Crack", 10, "efeito5"},
        },
    },
}
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...