#Horus Posted October 14, 2018 Share Posted October 14, 2018 (edited) 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 October 14, 2018 by #Horus Link to comment
Other Languages Moderators Lord Henry Posted October 14, 2018 Other Languages Moderators Share Posted October 14, 2018 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 1 Link to comment
#Horus Posted October 15, 2018 Author Share Posted October 15, 2018 (edited) 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 October 15, 2018 by #Horus Link to comment
Other Languages Moderators Lord Henry Posted October 15, 2018 Other Languages Moderators Share Posted October 15, 2018 Se sua área verde já está setando uma data no player, então só colocar a verificação no realdriveby. 1 Link to comment
#Horus Posted October 15, 2018 Author Share Posted October 15, 2018 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 ? Link to comment
Other Languages Moderators Lord Henry Posted October 15, 2018 Other Languages Moderators Share Posted October 15, 2018 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) Link to comment
#Horus Posted October 15, 2018 Author Share Posted October 15, 2018 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) Link to comment
#Horus Posted October 15, 2018 Author Share Posted October 15, 2018 (edited) 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 October 15, 2018 by #Horus Link to comment
brunob22 Posted October 16, 2018 Share Posted October 16, 2018 (edited) 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 October 16, 2018 by brunob22 Link to comment
Other Languages Moderators Lord Henry Posted October 16, 2018 Other Languages Moderators Share Posted October 16, 2018 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? Link to comment
brunob22 Posted October 16, 2018 Share Posted October 16, 2018 (edited) 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 October 16, 2018 by brunob22 Link to comment
Other Languages Moderators Lord Henry Posted October 16, 2018 Other Languages Moderators Share Posted October 16, 2018 -- (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. Link to comment
DNL291 Posted October 16, 2018 Share Posted October 16, 2018 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. Link to comment
Other Languages Moderators Lord Henry Posted October 16, 2018 Other Languages Moderators Share Posted October 16, 2018 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. Link to comment
brunob22 Posted October 16, 2018 Share Posted October 16, 2018 kkkk que bom que tu entendeu.. acho que expliquei tudo errado mais tu pego a ideia ^^ Link to comment
Other Languages Moderators Lord Henry Posted October 16, 2018 Other Languages Moderators Share Posted October 16, 2018 -------------------------------- 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. Link to comment
#Horus Posted October 16, 2018 Author Share Posted October 16, 2018 Pessoal oque fiz de errado ? Link to comment
Other Languages Moderators Lord Henry Posted October 16, 2018 Other Languages Moderators Share Posted October 16, 2018 (edited) 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 October 16, 2018 by Lord Henry Link to comment
brunob22 Posted October 16, 2018 Share Posted October 16, 2018 Sempre que vou fazer alguma coisa eu penso. Como eu posso burlar isso .. ai surge as ideias para evitar lag e player espertinhos kk Link to comment
Other Languages Moderators Lord Henry Posted October 16, 2018 Other Languages Moderators Share Posted October 16, 2018 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) Link to comment
#Horus Posted October 16, 2018 Author Share Posted October 16, 2018 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") .? Link to comment
brunob22 Posted October 16, 2018 Share Posted October 16, 2018 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 Link to comment
#Horus Posted October 16, 2018 Author Share Posted October 16, 2018 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 ? O setElementData (col,"areaverde") ? Link to comment
Other Languages Moderators Lord Henry Posted October 16, 2018 Other Languages Moderators Share Posted October 16, 2018 8 hours ago, Lord Henry said: setElementData no player. Então me refiro ao setElementData (hitElement, "protegido", true) Link to comment
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now