Jump to content

Dropar arma em quantidade.


Recommended Posts

Alguém poderia me ajudar? como eu poderia adicionar este script para dropar uma quantia que seria digitada no comando?

 

Server

local function createGroundWeapon(weaponid, ammo, clip, posX, posY, posZ, rotX, rotY, rotZ, interior, dimension)
	local temp = createElement("groundweapon")
	for i,p in ipairs(getElementsByType("player")) do
		triggerClientEvent(p,"GroundPickups:createGroundWeapon",p,temp,weaponid,ammo,clip,posX,posY,posZ,rotX,rotY,rotZ,interior,dimension)
	end
	return temp
end

local function destroyWeapons()

	for i,p in ipairs(getElementsByType("groundweapon")) do
		destroyElement(p)
	end

end

local function pickupWeapon(groundweapon,weaponid,ammo,clip)

	if client~=source then return end
	destroyElement(groundweapon)
	giveWeapon(client,weaponid,ammo,true)

end

local function dropWeapon(weaponid, ammo, clip, posX, posY, posZ, rotX, rotY, rotZ, interior, dimension)

	if client~=source then return end
	createGroundWeapon(weaponid, ammo, clip, posX, posY, posZ, rotX, rotY, rotZ, interior, dimension)
	takeWeapon(client,weaponid)

end

local function initScript()

	addEvent("GroundPickups:pickupWeapon", true)
	addEvent("GroundPickups:dropWeapon", true)
	addEventHandler("GroundPickups:pickupWeapon",root,pickupWeapon)
	addEventHandler("GroundPickups:dropWeapon",root,dropWeapon)
	addEventHandler("onResourceStop",resourceRoot,destroyWeapons)

end

addEventHandler("onResourceStart",resourceRoot,initScript)

Client

local screenWidth, screenHeight = guiGetScreenSize() -- Get the screen resolution
local currentGround = nil
local elementgg = {}
local bannedTeamsEnabled = true
local bannedTeams = { -- Useful if you got an RPG server and want to prevent abuse with weapon-spawning classes, then use above variable to toggle using below table and add your server's team names that wont be able to use drop gun
    ["Official Squads"] = true,
    ["Gangs"] = true,
}

weaponmarkercolors = {
	[0] = {255,255,255},
	[1] = {100,100,255},
	[2] = {0,230,0},
	[3] = {0,150,0},
	[4] = {255,255,0},
	[5] = {255,204,0},
	[6] = {150,0,150},
	[7] = {255,0,255},
	[8] = {0,0,255},
	[9] = {204,255,255},
	[10] = {255,100,100},
	[11] = {255,255,255},
	[12] = {255,255,255}
}

weaponsIDS = {
	--0
	[1] = 331,
	--1
	[2] = 333,
	[3] = 334,
	[4] = 335,
	[5] = 336,
	[6] = 337,
	[7] = 338,
	[8] = 339,
	[9] = 341,
	--2
	[22] = 346,
	[23] = 347,
	[24] = 348,
	--3
	[25] = 349,
	[26] = 350,
	[27] = 351,
	--4
	[28] = 352,
	[29] = 353,
	[32] = 372,
	--5
	[30] = 355,
	[31] = 356,
	--6
	[33] = 357,
	[34] = 358,
	--7
	[35] = 359,
	[36] = 360,
	[37] = 361,
	[38] = 362,
	--8
	[16] = 342,
	[17] = 343,
	[18] = 344,
	[39] = 363,
	--9
	[41] = 365,
	[42] = 366,
	[43] = 367,
	--10
	[10] = 321,
	[11] = 322,
	[12] = 323,
	[13] = 324,
	[14] = 325,
	[15] = 326,
	--11
	[44] = 368,
	[45] = 369,
	[46] = 371,
	--12
	[40] = 364
}

colshapes = {}

function createGroundWeapon(groundweapon,weaponid, ammo, clip, posX, posY, posZ, rotX, rotY, rotZ, interior, dimension)
	if(elementgg[groundweapon] == nil) then
		local temp = createColSphere(posX,posY,posZ+0.5, 1)
		colshapes[temp] = {}
		colshapes[temp].groundweapon = groundweapon
		colshapes[temp].weaponid = weaponid
		colshapes[temp].ammo = ammo
		colshapes[temp].clip = clip
		elementgg[groundweapon] = temp
		local slot = getSlotFromWeapon(weaponid)

		--createObject
		local object = createObject(weaponsIDS[weaponid],posX,posY,posZ,rotX,rotY,rotZ)
		setElementFrozen(object, true)
		setElementCollisionsEnabled(object, false)

		setElementInterior(object,interior)
		setElementDimension(object,dimension)
		
		colshapes[temp].object = object

		--createMarker
		local marker = createMarker(posX,posY,posZ+0.05,"corona", 0.5,weaponmarkercolors[slot][1],weaponmarkercolors[slot][2], weaponmarkercolors[slot][3], 20)
		setElementInterior(marker,interior)
		setElementDimension(marker,dimension)
			
		colshapes[temp].marker = marker

		local x,y,z = getElementPosition(localPlayer)
		if getDistanceBetweenPoints2D(x,y,posX,posY) < 0.25 then local_activate(temp, localPlayer,true) end
	end
end

function destroyGroundWeapon(groundweapon)
	local col = elementgg[groundweapon]
	local object = colshapes[col].object
	local marker = colshapes[col].marker
	colshapes[col] = nil
	if(isElement(object)) then destroyElement(object) end
	if(isElement(marker)) then destroyElement(marker) end
	if(isElement(col)) then destroyElement(col) end
	elementgg[groundweapon] = nil
end

function pickupWeapon(cmd,state)
	if (cmd == "pickup" or state=="down") and isTimer(spamTimer) then return end
	spamTimer=setTimer(function() end,500,1)
	if(isElement(currentGround)) then
		local weaponid = colshapes[currentGround].weaponid
		local ammo = colshapes[currentGround].ammo
		local clip = colshapes[currentGround].clip
		local slot = getPedWeaponSlot(localPlayer)
		if slot == getSlotFromWeapon(weaponid) and getPedWeapon(localPlayer,slot) ~= weaponid and getPedTotalAmmo(localPlayer,slot) > 0 then dropWeapon() end
		
		if ammo then
			local groundweapon = colshapes[currentGround].groundweapon
			triggerServerEvent("GroundPickups:pickupWeapon",localPlayer,groundweapon,weaponid,ammo,clip)
			for i,p in ipairs(getElementsByType("colshape")) do
				if isElementWithinColShape(localPlayer, p) then
					local_activate(p, localPlayer,true)
					break
				end
			end
		end
	end
end

function dropWeapon(cmd,state)
	if (cmd == "drop" or state=="down") and isTimer(spamTimer) then return end
	spamTimer=setTimer(function() end,500,1)
	local team = getPlayerTeam(localPlayer)
	if team and bannedTeams[getTeamName(team)] and bannedTeamsEnabled then
		outputChatBox("You cannot drop weapons while in a gang/squad",255,0,0)
		return
	end
	local slot = getPedWeaponSlot(localPlayer)
	if slot > 0 then
		local weaponid = getPedWeapon(localPlayer, slot)
		if weaponid ~= 0 then
			local x,y,z = getElementPosition(localPlayer)
			local hit, hitX, hitY, hitZ, as = processLineOfSight(x, y, z, x, y, -3000, true, false, false, true, false, false, false, false)
			z = hit and hitZ or z-0.95
			triggerServerEvent("GroundPickups:dropWeapon",localPlayer,weaponid, getPedTotalAmmo(localPlayer), getPedAmmoInClip(localPlayer), x,y,z, 97.3,120,math.random(0,359),getElementInterior(localPlayer),getElementDimension(localPlayer))
		end
	end
end

function local_activate(shape, element,dimension)
	local playersInCol = getElementsWithinColShape(shape,"player")
	if #playersInCol == 1 and playersInCol[1] ~= localPlayer then return end
	if element == localPlayer and #playersInCol <= 1 then
		currentGround = shape
	end
end

addEventHandler("onClientResourceStart", getRootElement(),
	function(startedRes)
		if(startedRes == getThisResource()) then
			addCommandHandler("pickup",pickupWeapon)
			addCommandHandler("dropararma",dropWeapon)
			bindKey("6","down","pickup")
		else
			for i,p in pairs(getElementsByType("groundweapon")) do
				createGroundWeapon(p)
			end
		end
	end
)

addEventHandler("onClientResourceStop", resourceRoot,
	function(startedRes)
		for i,p in ipairs(getElementsByType("groundweapon")) do
			destroyGroundWeapon(p)
		end
	end
)

addEventHandler("onClientRender", getRootElement(),
	function()
		if isElement(currentGround) and colshapes[currentGround] then
			local weaponid = colshapes[currentGround].weaponid
			local ammo = colshapes[currentGround].ammo

			sx,sy = screenWidth/2, screenHeight/2

			local str = getPedWeaponSlot(localPlayer) == getSlotFromWeapon(weaponid) and "swap weapons" or "pickup weapon"
			
			dxDrawRectangle(sx-80, sy-20, 160, 85, tocolor(0, 0, 0, 128))

			if getPedWeaponSlot(localPlayer) == getSlotFromWeapon(weaponid) and weaponid ~= getPedWeapon(localPlayer) then
				dxDrawImage(sx-13, sy+13, 26, 26, "img/swap.png")
				dxDrawImage(sx+20, sy-2, 50, 50, "img/" .. weaponid .. ".png")
				dxDrawImage(sx-70, sy-2, 50, 50, "img/" .. getPedWeapon(localPlayer, getSlotFromWeapon(weaponid)) .. ".png")
				dxDrawText(tostring(ammo),sx+45, sy+53, sx+45, sy+53,tocolor(255,255,255,255), 1, "default-bold", "center", "center")
				dxDrawText(tostring(getPedTotalAmmo(localPlayer, getSlotFromWeapon(weaponid))) .. " (you)",sx-45, sy+53, sx-45, sy+53,tocolor(255,255,255,255), 1, "default-bold", "center", "center")
			else
				dxDrawImage(sx-25, sy-2, 50, 50, "img/" .. tonumber(weaponid) .. ".png")
				dxDrawText(tostring(ammo),sx, sy+53, sx, sy+53,tocolor(255,255,255,255), 1, "default-bold", "center", "center")
			end

			dxDrawText("Use '6' to " .. str,sx, sy-18, sx, sy-18,tocolor(255,255,50,255), 1, "default-bold", "center")
		end
	end
)

addEventHandler("onClientElementDestroy", getRootElement(),
	function()
		if(getElementType(source) == "groundweapon") then
			destroyGroundWeapon(source)
		end
	end
)

addEventHandler("onClientColShapeHit", getResourceRootElement(),
	function(element,dimension)
		local_activate(source, element,dimension)
	end
)

addEventHandler("onClientColShapeLeave", getResourceRootElement(),
	function(element,dimension)
		if(element == localPlayer) then
			currentGround = nil
			for i,p in ipairs(getElementsByType("colshape")) do
				if isElementWithinColShape(localPlayer, p) then
					local_activate(p, localPlayer,true)
					break
				end
			end
		end
	end
)

addEvent("GroundPickups:createGroundWeapon", true)
addEventHandler("GroundPickups:createGroundWeapon",localPlayer,createGroundWeapon)

 

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...