Recommended Posts

Já testei várias áreas verdes! E com todas elas consigo atirar do veículo usando o realdriveby ou com qualquer outro script de atirar do veículo!

Alguém conhece alguma área verde que bloquear o realdriveby, ou sabe como programar uma para isso ? Também já coloquei o vehicle_fire em todas elas e não consegui.

Edited by #Horus

Share this post


Link to post

Eu fiz uma que seta uma data no jogador quando ele entra na área verde e remove essa data quando ele sai. Dai editei o realdriveby para não funcionar se o jogador estiver com essa data.

-- É mais ou menos isso que eu coloquei no realdriveby.
if getElementData (thePlayer, "protected") then -- Se o jogador tem uma data "protected", então:
	return end -- Cancela tudo e nada acontece. O jogador não faz o realdriveby.
end

 

  • Thanks 1

Share this post


Link to post
3 hours ago, Lord Henry said:

Eu fiz uma que seta uma data no jogador quando ele entra na área verde e remove essa data quando ele sai. Dai editei o realdriveby para não funcionar se o jogador estiver com essa data.


-- É mais ou menos isso que eu coloquei no realdriveby.
if getElementData (thePlayer, "protected") then -- Se o jogador tem uma data "protected", então:
	return end -- Cancela tudo e nada acontece. O jogador não faz o realdriveby.
end

 

Entao não preciso mexer no script da área verde né ? Devo mexer apenas no realdriveby setando uma data no player ?

Edited by #Horus

Share this post


Link to post

Se sua área verde já está setando uma data no player, então só colocar a verificação no realdriveby.

  • Thanks 1

Share this post


Link to post
1 hour ago, Lord Henry said:

Se sua área verde já está setando uma data no player, então só colocar a verificação no realdriveby.

Voce conhece alguma area verde com essa data ?

Share this post


Link to post

Cara. Isso é básico de ser feito.

Vou fazer esse exemplo genérico:

addEventHandler ("onColShapeHit", getRootElement(), function (hitElement)
	if getElementData (source, "areaverde") then -- Se a zona que o jogador colidiu for uma área verde, então:
		if hitElement and getElementType (hitElement) == "player" then
			setElementData (hitElement, "protegido", true)
		end
	end
end)

addEventHandler ("onColShapeLeave", getRootElement(), function (leaveElement)
	if getElementData (source, "areaverde") then -- Se a zona que o jogador saiu for uma área verde, então:
		if leaveElement and getElementType (leaveElement) == "player" then
			setElementData (leaveElement, "protegido", false)
		end
	end
end)

 

Share this post


Link to post
47 minutes ago, Lord Henry said:

Cara. Isso é básico de ser feito.

Vou fazer esse exemplo genérico:


addEventHandler ("onColShapeHit", getRootElement(), function (hitElement)
	if getElementData (source, "areaverde") then -- Se a zona que o jogador colidiu for uma área verde, então:
		if hitElement and getElementType (hitElement) == "player" then
			setElementData (hitElement, "protegido", true)
		end
	end
end)

addEventHandler ("onColShapeLeave", getRootElement(), function (leaveElement)
	if getElementData (source, "areaverde") then -- Se a zona que o jogador saiu for uma área verde, então:
		if leaveElement and getElementType (leaveElement) == "player" then
			setElementData (leaveElement, "protegido", false)
		end
	end
end)

 

 

Share this post


Link to post
58 minutes ago, #Horus said:

 

addEventHandler ("onResourceStart", getRootElement(), 
function()
  setTimer (moneyZoneTimerFunction, 2500, 0)
  local allGreenzones = getElementsByType ("radararea")
  for i,v in ipairs (allGreenzones) do
    local r,g,b,a = getRadarAreaColor (v)
    if (r == 0) and (g == 255) and (b == 0) and (a == 127) then
      local x,y = getElementPosition (v)
      local sx,sy = getRadarAreaSize (v)
      local col = createColCuboid (x,y, -50, sx,sy, 7500)
      setElementData (col, "areaverde")
    end
  end
end)

addEventHandler ("onColShapeHit", getRootElement(), 
function(hitElement, matchingDimension)
	if getElementData (source, "areaverde") then -- Se a zona que o jogador colidiu for uma área verde, então:
		if hitElement and getElementType (hitElement) == "player" then
	setElementData (hitElement, "protegido", true)
    toggleControl (hitElement, "fire", false)
    toggleControl (hitElement, "next_weapon", false)
    toggleControl (hitElement, "previous_weapon", false)
    toggleControl (hitElement, "sprint", false)
    toggleControl (hitElement, "aim_weapon", false)
    toggleControl (hitElement, "vehicle_fire", false)
    triggerClientEvent (hitElement, "enableGodMode", hitElement)
  end
  if (source == moneyZoneCol) and (getElementType (hitElement) == "vehicle") then
    setElementVelocity (hitElement, 0, 0, 0)
    setElementPosition (hitElement, 2018.33, 1534.77, 12.37)
    setVehicleRotation (hitElement, 0,0,270)
    if (getVehicleOccupant (hitElement, 0)) then
    end
  end
end)

addEventHandler ("onColShapeLeave", getRootElement(), 
function(leaveElement, matchingDimension)
	if getElementData (source, "areaverde") then -- Se a zona que o jogador saiu for uma área verde, então:
		if leaveElement and getElementType (leaveElement) == "player" then
    setElementData (leaveElement, "protegido", false)
    toggleControl (leaveElement, "fire", true)
    toggleControl (leaveElement, "next_weapon", true)
    toggleControl (leaveElement, "previous_weapon", true)
    toggleControl (leaveElement, "sprint", true)
    toggleControl (leaveElement, "aim_weapon", true)
    toggleControl (leaveElement, "vehicle_fire", true)
    triggerClientEvent (leaveElement, "disableGodMode", leaveElement)
  end
end)

--money zone col
moneyZoneCol = createColCuboid (1993.12, 1519.14, -100, 17.43, 54.24, 117)
--stop moneyzone col

function moneyZoneTimerFunction ()
  local allPlayersInCol = getElementsWithinColShape (moneyZoneCol, "player")
  for i,v in ipairs (allPlayersInCol) do
    givePlayerMoney (v, 5)
  end
end

-- marker bij hospital
createMarker (1607.36, 1814.24, -10, "cylinder", 24, 0, 255, 0, 190, getRootElement())

fiz certo ?

1 hour ago, Lord Henry said:

Cara. Isso é básico de ser feito.

Vou fazer esse exemplo genérico:


addEventHandler ("onColShapeHit", getRootElement(), function (hitElement)
	if getElementData (source, "areaverde") then -- Se a zona que o jogador colidiu for uma área verde, então:
		if hitElement and getElementType (hitElement) == "player" then
			setElementData (hitElement, "protegido", true)
		end
	end
end)

addEventHandler ("onColShapeLeave", getRootElement(), function (leaveElement)
	if getElementData (source, "areaverde") then -- Se a zona que o jogador saiu for uma área verde, então:
		if leaveElement and getElementType (leaveElement) == "player" then
			setElementData (leaveElement, "protegido", false)
		end
	end
end)

 

no realdriveby coloquei 

if getElementData (thePlayer, "protected") then -- Se o jogador tem uma data "protected", então:
	return end -- Cancela tudo e nada acontece. O jogador não faz o realdriveby.
end

 

Edited by #Horus

Share this post


Link to post

usando  "SetElementData" e errado . evite usar o maximo possivel alem de essas informaçoes ocupa memoria do computador. pode ter muitos outros problemas

pense comigo. ok o cara entro na area e pego  "SetElementData" ate ai tudo bem, e se ele deslogar la? vai perde o "SetElementData" e vai poder atirar novamente

bom basicamente oque voce tem q fazer e cria um Col e verificar se o player ta em contato com essa col mais facil e mais seguro.

Edited by brunob22

Share this post


Link to post
11 minutes ago, brunob22 said:

usando  "SetElementData" e errado . evite usar o maximo possivel alem de essas informaçoes ocupa memoria do computador. pode ter muitos outros problemas

pense comigo. ok o cara entro na area e pego  "SetElementData" ate ai tudo bem, e se ele deslogar la? vai perde o "SetElementData" e vai poder atirar novamente

bom basicamente oque voce tem q fazer e cria um Col e verificar se o player ta em contato com essa col mais facil e mais seguro.

Se refere ao IsElementWithinColShape?

Share this post


Link to post
25 minutes ago, Lord Henry said:

Se refere ao IsElementWithinColShape?

sim e não como ele precisa fazer essa verificação em outro script .. ele pode usar 

getElementsByType

e assim apenas usar 1 'SetElementData" na col evitando que todo player q entra na area ter um data nele.. e assim usando o bytype ele pode verificar se x player ta dentro da Y col

acho que expliquei direito? kkk

seria mais ou menos isso aqui

Onde crio a col

local col = createColCuboid(2114.53515625,-1160.7744140625,20.643058776855, 30, 40, 20)
setElementData(col,"Iscol1",true)

outra resource para pegar essas infos:

local Cols = getElementsByType( "colshape" )
for index, Scol in ipairs(Cols) do
   if getElementData(Scol,"Iscol1") then
local IsPlayerinCol = isElementWithinColShape ( thePlayer, Scol )
   if IsPlayerinCol then
outputChatBox("voce não pode atira seu ze BuC")
    end
  end
end

acho que um pouco mais limpo e não vai usar tanto da memoria do servidor. como 300 players com uma data setada nele

 

Edited by brunob22

Share this post


Link to post
-- (No realdriveby)
function disableOnShot (weapon, ammo, ammoInClip, hitX, hitY, hitZ, hitElement) -- Executa essa função quando o player atira usando o realdriveby.
	if isPedDoingGangDriveby (source) then -- Se o jogador está fazendo realdriveby, então:
		local allZones = getElementsByType ("colshape") -- allZones recebe todas as as zonas de colisão do server, incluindo as que não são áreas verdes.
		for i, shape in ipairs (allZones) do -- Para cada zona de colisão, faz o seguinte:
			if getElementData (shape, "areaverde") then -- Se essa zona for uma área verde, então:
				if isElementWithinColShape (localPlayer, shape) then -- Se o jogador estiver dentro dessa área verde, então:
					outputChatBox ("Não atire em Áreas Verdes com veículo!", 255, 0, 0) -- Manda isso pro jogador.
					setTimer (function () -- Depois de 100 milisegundos, faz o seguinte: (precisa de um timer pra não bugar a animação)
						setPedDoingGangDriveby (localPlayer, false) -- Cancela o realdriveby e o jogador volta a dirigir normalmente. (mas o primeiro tiro foi dado)
						setPedWeaponSlot (localPlayer, 0) -- Daqui pra baixo é tudo igual ao que acontece quando o player sai do realdriveby por conta própria.
						limitDrivebySpeed (switchToWeapon)
						toggleControl ("vehicle_look_left", true)
						toggleControl ("vehicle_look_right", true)
						toggleControl ("vehicle_secondary_fire", true)
						toggleTurningKeys (vehicleID, true) -- 
						fadeOutHelp()
						removeEventHandler ("onClientPlayerVehicleExit", localPlayer, removeKeyToggles)
					end, 100, 1)
				end
            end
		end
	end
end
addEventHandler ("onClientPlayerWeaponFire", localPlayer, disableOnShot)

function toggleDriveby() -- Executa essa função quando o player clica com o botão direito do mouse.
	if not isPedInVehicle (localPlayer) then return end -- Se o jogador não está em um veículo, ignora essa função e nem funciona.
	local vehicleID = getElementModel (getPedOccupiedVehicle (localPlayer))
	if settings.blockedVehicles[vehicleID] then return end -- Se for um veículo proibido, ignora essa função e nem funciona.
	local equipedWeapon = getPedWeaponSlot (localPlayer)
	if equipedWeapon == 0 then -- Se o jogador está sem arma na mão (ou com o soco inglês), então:
		local allZones = getElementsByType ("colshape") -- allZones recebe todas as as zonas de colisão do server, incluindo as que não são áreas verdes.
		for i, shape in ipairs (allZones) do -- Para cada zona de colisão, faz o seguinte:
			if getElementData (shape, "areaverde") then -- Se essa zona for uma área verde, então:
				if isElementWithinColShape (localPlayer, shape) then -- Se o jogador estiver dentro dessa área verde, então:
					outputChatBox ("Não é permitido realdriveby em Áreas Verdes!", 255, 0, 0) -- Manda isso pro jogador.
					return -- Cancela essa função e o driveby nem inicia.
				end
			end
		end
		-- Daqui pra baixo é tudo igual, faz o realdriveby funcionar.
		if ( driver ) then weaponsTable = settings.driver
		else weaponsTable = settings.passenger end
		--We need to get the switchTo weapon by finding any valid IDs
		local switchTo
		local switchToWeapon
		local lastSlotAmmo = getPedTotalAmmo ( localPlayer, lastSlot )
		if not lastSlotAmmo or lastSlotAmmo == 0 or getSlotFromWeapon(getPedWeapon (localPlayer,lastSlot)) == 0 then
			for key,weaponID in ipairs(weaponsTable) do
				local slot = getSlotFromWeapon ( weaponID )
				local weapon = getPedWeapon ( localPlayer, slot )
				if weapon == 1 then weapon = 0 end --If its a brass knuckle, set it to a fist to avoid confusion
				--if the weapon the player has is valid
				if weapon == weaponID then
					--If the ammo isn't 0
					if getPedTotalAmmo ( localPlayer, slot ) ~= 0 then
						--If no switchTo slot was defined, or the slot was 4 (SMG slot takes priority)
						if not switchTo or slot == 4 then
							switchTo = slot
							switchToWeapon = weaponID
						end
					end
				end
			end
		else
			local lastSlotWeapon = getPedWeapon ( localPlayer, lastSlot )
			for key,weaponID in ipairs(weaponsTable) do --If our last used weapon is a valid weapon
				if weaponID == lastSlotWeapon then
					switchTo = lastSlot
					switchToWeapon = lastSlotWeapon
					break
				end
			end
		end
		--If a valid weapon was not found, dont set anything.
		if not switchTo then return end
		setPedDoingGangDriveby ( localPlayer, true )
		setPedWeaponSlot( localPlayer, switchTo )
		--Setup our driveby limiter
		limitDrivebySpeed ( switchToWeapon )
		--Disable look left/right keys, they seem to become accelerate/decelerate (carried over from PS2 version)
		toggleControl ( "vehicle_look_left",false )
		toggleControl ( "vehicle_look_right",false )
		toggleControl ( "vehicle_secondary_fire",false )
		toggleTurningKeys(vehicleID,false)
		addEventHandler ( "onClientPlayerVehicleExit",localPlayer,removeKeyToggles )
		local prevw,nextw = next(getBoundKeys ( "Previous driveby weapon" )),next(getBoundKeys ( "Next driveby weapon" ))
		if prevw and nextw then
			if animation then Animation:remove() end
			helpText:text( "Press '"..prevw.."' or '"..nextw.."' to change weapon" )
			fadeInHelp()
			setTimer ( fadeOutHelp, 10000, 1 )
		end
	else
		--If so, unequip it
		setPedDoingGangDriveby ( localPlayer, false )
		setPedWeaponSlot( localPlayer, 0 )
		limitDrivebySpeed ( switchToWeapon )
		toggleControl ( "vehicle_look_left",true )
		toggleControl ( "vehicle_look_right",true )
		toggleControl ( "vehicle_secondary_fire",true )
		toggleTurningKeys(vehicleID,true)
		fadeOutHelp()
		removeEventHandler ( "onClientPlayerVehicleExit",localPlayer,removeKeyToggles )
	end
end
addCommandHandler ( "Toggle Driveby", toggleDriveby )

-- Tem o resto do código do realdriveby pra baixo, esse código acima não é o script inteiro.

Então isso deve resolver.

Share this post


Link to post
3 minutes ago, DNL291 said:

Ou usar a função isPedDoingGangDriveby quando for atirar e verificar se está na zona verde, não testei isso mas fica como uma alternativa.

A verificação funcionaria. Mas precisaria cancelar a ação de mirar e atirar do realdriveby. Por exemplo: O player inicia o realdriveby fora da zona, entra com o veículo dentro da zona ainda mirando e começa a atirar. Ao atirar é necessário outra verificação para cancelar o realdriveby do jogador se ele estiver dentro da zona.

Share this post


Link to post

--------------------------------

Eu fiz algo assim pois precisei bloquear o uso do realdriveby em Las Venturas, pois lá eu criei zonas de domínio e portanto fica abusivo atirar de dentro de veículos. Mas em vez de eu criar um colShape gigante, apenas peguei a posição do player e usei getZoneName, se ela for igual a "Las Venturas", bloqueia e cancela tudo, caso contrário, funciona normalmente.

Share this post


Link to post
3 minutes ago, #Horus said:

Pessoal oque fiz de errado ?

Tirando o fato de não estudar lógica de programação? Huahauahauhaua zoas.

Estávamos apenas discutindo um jeito melhor de resolver seu problema sem usar setElementData no player.

Edited by Lord Henry

Share this post


Link to post

Sempre que vou fazer alguma coisa eu penso. Como eu posso burlar isso .. ai surge as ideias para evitar lag e player espertinhos kk

Share this post


Link to post

Sempre vai existir os espertinhos pra tentar burlar seu sistema. E isso é ótimo, pois você se obriga a estudar melhor seu script em busca de novas proteções e isso faz você melhorar na programação.

Eu por exemplo, depois que os meus resources postados no community do MTA foram roubados e repostados em sites de terceiros sem minha autorização, eu parei de publicar meus resources e inventei um sistema de proteção por IP + Senha. Cada resource possui uma senha própria que é verificada por outro resource que eu criei. E esse outro resource verifica o IP do servidor, se for um IP diferente do IP que o resource está pedindo, cancela a ativação daquele resource. E se por acaso o cara for espertinho e tirar a permissão de stopResource dele, então o próprio resource nem vai iniciar e dará erro de inicialização. Os resources não precisam de permissão para cancelar sua própria ativação. O esquema das senhas eu criei pois se o cara for um programador experiente, ele pode tentar criar um resource que sempre retorne um IP válido, mesmo não sendo o IP real do servidor. Mas sem a senha correta do resource, não vai adiantar. Eu pensei em tudo e claro, está tudo compilado e somente os desenvolvedores do MTA possuem o descompilador.

(perdão por desviar do assunto do tópico)

Share this post


Link to post
1 hour ago, brunob22 said:

sim e não como ele precisa fazer essa verificação em outro script .. ele pode usar 


getElementsByType

e assim apenas usar 1 'SetElementData" na col evitando que todo player q entra na area ter um data nele.. e assim usando o bytype ele pode verificar se x player ta dentro da Y col

acho que expliquei direito? kkk

seria mais ou menos isso aqui

Onde crio a col

local col = createColCuboid(2114.53515625,-1160.7744140625,20.643058776855, 30, 40, 20)
setElementData(col,"Iscol1",true)

outra resource para pegar essas infos:

local Cols = getElementsByType( "colshape" )
for index, Scol in ipairs(Cols) do
   if getElementData(Scol,"Iscol1") then
local IsPlayerinCol = isElementWithinColShape ( thePlayer, Scol )
   if IsPlayerinCol then
outputChatBox("voce não pode atira seu ze BuC")
    end
  end
end

acho que um pouco mais limpo e não vai usar tanto da memoria do servidor. como 300 players com uma data setada nele

 

Ali onde eu coloquei setElementData (col, "areaverde") .?

Share this post


Link to post
48 minutes ago, #Horus said:

Ali onde eu coloquei setElementData (col, "areaverde") .?

ve o ex que o pessoal mando ai não tenho codigo comigo para poder te ajudar nessa parte

Share this post


Link to post
4 hours ago, Lord Henry said:

Tirando o fato de não estudar lógica de programação? Huahauahauhaua zoas.

Estávamos apenas discutindo um jeito melhor de resolver seu problema sem usar setElementData no player.

Mas quais dos setElementData ?

setElementData (col,"areaverde")  ?

Share this post


Link to post

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.