Jump to content

ber

Members
  • Posts

    167
  • Joined

  • Last visited

  • Days Won

    1

Everything posted by ber

  1. Fiz um sistema de LoadingScreen mas ele não está aparecendo na hora certa, ele até funciona tudo, mas só aparece na tela depois que todos os mods são baixados, ou seja, não serviu de nada kkk. Esse é o script: local screenW, screenH = guiGetScreenSize() local rotation = 0 local font = dxCreateFont("fontes/RobotoBold.ttf", 13) local tempo = nil function start() toggleAllControls(false) addEventHandler("onClientRender", root, render) tempo = setTimer(function() if not isTransferBoxActive() then if isElement(localPlayer) then removeEventHandler("onClientRender", root, render) killTimer(tempo) tempo = nil toggleAllControls(true) end end end, 5000, 0) end addEventHandler("onClientResourceStart", resourceRoot, start) function render() dxDrawImage(0, 0, screenW, screenH, "gfx/background.png", 0, 0, 0, tocolor(255, 255, 255, 255), true) dxDrawText("Carregando recursos...", screenW * 0.0000, screenH * 0.9388, screenW * 1.0000, screenH * 1.0000, tocolor(255, 255, 255, 255), 1, font, "center", "center", false, false, true, false, false) dxDrawImage(screenW * 0.4817, screenH * 0.8646, screenW * 0.0366, screenH * 0.0651, "gfx/loading.png", rotation, 0, 0, tocolor(255, 255, 255, 255), true) rotation = rotation + 6 end Esse é o mtaserver.conf <resource src="[MOD]Loading-Screen" startup="1" protected="0" /> <resource src="admin" startup="1" protected="0" /> <resource src="defaultstats" startup="1" protected="0" /> <resource src="parachute" startup="1" protected="0" /> <resource src="resourcebrowser" startup="1" protected="1" default="true" /> <resource src="webadmin" startup="1" protected="0" /> <resource src="_infobox" startup="1" protected="0" /> <resource src="bone_attach" startup="1" protected="0" /> <resource src="reload" startup="1" protected="0" /> <resource src="ng_blur" startup="1" protected="0" /> <resource src="[VEICULOS]" startup="1" protected="0" /> <resource src="[SKINS]" startup="1" protected="0" /> <resource src="[TEXTURAS]" startup="1" protected="0" /> <resource src="[GAMEMODE]RP" startup="1" protected="0" /> Não sei onde errei, o script está priorizado no topo do .conf e mesmo assim só aparece depois que todos os scripts são baixados *dentro do script gamemode tem um código que ativa todos os mods do servidor, coloquei uma exceção para o da loadingscreen pois ele já deveria estar ativo no começo, não sei se isso está influenciando em algo...*
  2. Eu já mandei a parte que você precisa amigo, agora o resto é com você. Pra script pronto tem vários sites aí pela net, aqui no fórum é apenas para dar um auxílio.
  3. function buyweaponsadan(plr, wpn) if getElementData(plr, "TS:PorteDeArmas") == "Sim" then if wpn == "deagle" then if (getPlayerMoney(plr) >= 85000) then takePlayerMoney(plr, 85000) giveWeapon(plr, 24, 600) triggerClientEvent(plr,"ADaddPlayerMSG",plr,"Você comprou uma Desert Eagle / +600 munições!") playSoundFrontEnd(plr,11) else triggerClientEvent(plr,"ADaddPlayerMSG",plr,"Você não tem dinheiro suficiente!") end end else triggerClientEvent(plr,"ADaddPlayerMSG",plr,"Você não possui porte de arma!") end end
  4. Utilize o evento onPlayerLogin com uma função de setPedStat
  5. function TriggerBuy(playerSource) if getElementData(playerSource, "Porte") then takePlayerMoney(playerSource, 5000) giveWeapon(playerSource, 31, 300, true) else outputChatBox("Você não possui porte de arma", playerSource) end end addEvent("Buy", true) addEventHandler("Buy", resourceRoot, TriggerBuy) Imagino que o seu sistema de comprar seja client-side através de painel DX/GUI, então você cria um evento no server-side mais ou menos igual a esse do exemplo acima.
  6. function onClick(button, state) if button == "left" then if state == "down" then tick = getTickCount() elseif state == "up" then if (getTickCount() - tick) >= 3000 then --PROSSIGA SEU SCRIPT AQUI else outputChatBox("Você precisa pressionar o botão por 3 segundos") end end end end addEventHandler("onClientClick", root, onClick)
  7. Não sei se é bug de visualização do fórum, mas você não colocou a função de verificar dentro do loop de criação dos markers não né? Você precisa fazer um loop em todos os markers da tabela, e se o elemento declarado no parâmetro estiver nesse marker, vai retornar true e parar o loop, se não estiver, ele vai para o próximo marker até acabar, e se acabar sem achar nenhum ele vai retornar false. function estaNoMarkerGF(element) for i, v in pairs(marker) do if isElementWithinMarker(element, v) then return true end end return false end
  8. Por enquanto ele usa o bom e velho accountData, com a tabela dos itens salva com um toJSON. Mas em breve irei atualizar para .db
  9. function onWasted() local skin = getElementModel(source) spawnPlayer(source, x, y, z, 0, skin, 0, 0) end addEventHandler("onPlayerWasted", root, onWasted) Procure uma função parecida com essa no seu script, e antes do spawnPlayer, crie uma variável para pegar a skin atual do player e coloque-a no spawnPlayer. Isso resolverá seu problema
  10. Existe um MOD na comunidade chamado 'Apontar', lá existe uma .dff e .txd invisíveis, você pode pegá-las e substituir por qualquer objeto, pois como é invisível, não irá fazer diferença.
  11. Estou com um problema em meu servidor, onde as vezes (bem raro) quando o player entra em um interior, ele fica caindo no limbo infinitamente, e não para mesmo se relogar, a única maneira de parar é puxar ele através do painel P. Como meu servidor é focado para ser super leve, imagino que o problema seja que o setElementPosition acaba sendo mais rápido que a renderização do interior, fazendo com que ele passe do chão e fique caindo sem parar, acho bem provável ser isso pois o PC da maioria dos players é bem fraco. Atualmente, essa é a função que eu uso para mover o player para um interior: function Enter(playerSource) if getElementType(playerSource) == "player" then if getElementDimension(playerSource) == 0 and getElementInterior(playerSource) == 0 then if not isPedInVehicle(playerSource) then fadeCamera(playerSource, false, 0.5) setTimer(function(playerSource) setElementInterior(playerSource, 0) setElementDimension(playerSource, 0) setElementPosition(playerSource, 1040.612, -1015.891, -47.559) setElementRotation(playerSource, 0, 0, 90) setCameraTarget(playerSource, playerSource) fadeCamera(playerSource, true, 0.5) end, 1000, 1, playerSource) end end end end addEventHandler("onMarkerHit", enterMarker, Enter)
  12. Use um simples setTimer para isso, exemplo: tempo = {} function teste(playerSource) if not isTimer(tempo[playerSource]) then tempo[playerSource] = setTimer(function() end, 1000, 1) outputChatBox("ok", playerSource) else outputChatBox("aguarde para usar o comando novamente", playerSource) end end addCommandHandler("teste", teste)
  13. Entendi, achei um pouco confuso pois eu irei utilizar em um infobox que aparecem diversas mensagens simultâneas. Então, pensei se ao invés de utilizar o onClientRender usar um setTimer que aí eu configuro o tempo que eu quero, é possível fazer desta maneira?
  14. Estou fazendo um sistema de infobox e quando chega uma notificação ela vai aparecendo aos poucos por conta do alpha que vai aumentando, eu fiz de uma maneira simples, uma variável que começa com 0 e a cada onClientRender aumenta 3. Até que funcionou, mas o tempo que aparece e some varia para os players dependendo de quantos FPS roda o jogo dele, por conta do aumento da variável estar num evento onClientRender. Tem como fazer de outra maneira que fique igual para todos os players independentemente do FPS? Exemplo: local alpha = 0 function render() dxDrawImage(x, y, x2, y2, "gfx/test.png", tocolor(255, 255, 255, alpha)) alpha = alpha + 3 end addEventHandler("onClientRender", root, render)
  15. O gringo reviveu o tópico sem querer kkk. Já estou na versão 3 do inventario: Fiz exatamente desse jeito que você disse, uma tabela e o slot do item é o índice da tabela, quando loga no servidor é enviado o accountData dos itens do player pro client e eles são inseridos na tabela dessa maneira.
  16. grupoSegurar = {"Policial", "Admin", "Console"}, function Segurar(thePlayer) for i, v in pairs(grupoSegurar) do if isObjectInACLGroup("user."..getAccountName(getPlayerAccount(thePlayer)) , aclGetGroup(v)) then for _, targetPlayer in ipairs(getElementsByType("player")) do local x, y, z = getElementPosition(thePlayer) local tx, ty, tz = getElementPosition(targetPlayer) if (getDistanceBetweenPoints3D(x, y, z, tx, ty, tz)>1) then else if targetPlayer ~= thePlayer then if getElementData(thePlayer, "char.viszEffect") then setElementData(thePlayer, "char.viszEffect", false) setPedAnimation(targetPlayer, "GANG", "prtial_gngtlkA", false, false) detachElements(targetPlayer, thePlayer, 0, 0.5, 0 ) setElementFrozen(targetPlayer, false) else setElementData(thePlayer, "char.viszEffect", true) attachElements(targetPlayer, thePlayer, 0, 0.5, 0) setElementFrozen(targetPlayer, true) end end end end end end end Não use return end em uma tabela assim, pois se ele não estiver na primeira ACL da tabela já vai cancelar a função e não vai considerar as outras ACLs. Do jeito que eu editei acima deve funcionar.
  17. Crie um export para isso, usar um onClientRender que roda 24h sem evento para ativação não é nada legal para o desempenho do servidor.
  18. Entre em contato com o vendedor e pergunte à ele qual o export de dar item à um player, é uma linha de comando mais ou menos assim: exports["Inventario"]:GiveItem(source, "ak47", 1) Todo script de inventario precisa de uma função export assim, pois armas dadas através de painel P ou painel VIP não vão para o inventario, pois os dados são diferentes, então você precisa dessa função pra setar determinado item no inventario do player. *Lembrando que essa citada acima provavelmente não irá funcionar no seu inventario, pois cada script tem a sua própria, você precisa descobrir com o desenvolvedor como é o export do seu inventario.
  19. Não acredito que quebrei tanto a cabeça e era uma besteira assim kkkkkkk. O freeroam é só no server local pra programar mesmo, quando colocar na host não vai ter esse problema então. Valeu Lord
  20. Estou fazendo um inventário, e nele quando o player pega uma arma, roda uma animação: setPedAnimation(playerSource, "BUDDY", "buddy_reload", 1300, false, true, false, false, _, true) Porém, ao apertar a tecla 'shift esquerdo', a animação é cancelada. Já tentei dar toggleControl no "jump" mas não adiantou. Até o momento, a única saída em que eu encontrei é antes de rodar a animação, dar um setElementFrozen, para caso ele cancele a animação, ele pelo menos fique parado, mas não é muito viável pois se o player puxar a arma correndo automaticamente ele vai parar de correr. Se alguém tiver outra ideia vai me ajudar bastante, preciso muito que não seja permitido bugar essa animação, pois coloquei ela justamente pra balancear o PvP pro player não puxar arma e já sair atirando. *Edit: Troquei o toggleControl("jump") por "fire" e "action" enquanto a animação esta rodando e aparentemente funcionou, mas como é meio "gambiarra" ainda estou aceitando outras sugestões!
  21. Sim, eu pensei nessa possibilidade mas achei que poderia encontrar alguma maneira mais simples, mas pelo visto esse é o único jeito. Obrigado
  22. Estou fazendo um sistema de infobox do zero me baseando no Five-M, porém não consigo pensar em uma maneira de fazer com que caso tenha mais de 2 mensagens sendo exibidas ao player ao mesmo tempo não buga e de o erro no debug 'event is already handled'. Até o momento eu fiz isso: local screenW, screenH = guiGetScreenSize() local font = dxCreateFont("fontes/Roboto.ttf", 10) local tipo = "warning" local msg = "Você está com fome, precisa se alimentar o mais rápido possível!" slotsUsed = {} infos = { ["success"] = {"40", "175", "40", "gfx/success.png", "sfx/sound.mp3"}, ["info"] = {"30", "144", "255", "gfx/info.png", "sfx/sound.mp3"}, ["warning"] = {"200", "200", "0", "gfx/warning.png", "sfx/sound.mp3"}, ["error"] = {"255", "40", "40", "gfx/error.png", "sfx/sound.mp3"}, ["money"] = {"40", "175", "40", "gfx/money.png", "sfx/sound.mp3"}, ["exp"] = {"30", "144", "255", "gfx/exp.png", "sfx/sound.mp3"}, } posRectangle = { {screenW * 0.0073, screenH * 0.6758, screenW * 0.1779, screenH * 0.0573}, {screenW * 0.0073, screenH * 0.6133, screenW * 0.1779, screenH * 0.0573}, {screenW * 0.0073, screenH * 0.5508, screenW * 0.1779, screenH * 0.0573}, {screenW * 0.0073, screenH * 0.4883, screenW * 0.1779, screenH * 0.0573}, {screenW * 0.0073, screenH * 0.4258, screenW * 0.1779, screenH * 0.0573}, {screenW * 0.0073, screenH * 0.3633, screenW * 0.1779, screenH * 0.0573}, {screenW * 0.0073, screenH * 0.3008, screenW * 0.1779, screenH * 0.0573}, } posIMG = { {screenW * 0.0102, screenH * 0.6810, screenW * 0.0256, screenH * 0.0456}, {screenW * 0.0102, screenH * 0.6185, screenW * 0.0256, screenH * 0.0456}, {screenW * 0.0102, screenH * 0.5560, screenW * 0.0256, screenH * 0.0456}, {screenW * 0.0102, screenH * 0.4935, screenW * 0.0256, screenH * 0.0456}, {screenW * 0.0102, screenH * 0.4310, screenW * 0.0256, screenH * 0.0456}, {screenW * 0.0102, screenH * 0.3685, screenW * 0.0256, screenH * 0.0456}, {screenW * 0.0102, screenH * 0.3060, screenW * 0.0256, screenH * 0.0456}, } posText = { {screenW * 0.0432, screenH * 0.6758, screenW * 0.1852, screenH * 0.7331}, {screenW * 0.0432, screenH * 0.6133, screenW * 0.1852, screenH * 0.6706}, {screenW * 0.0432, screenH * 0.5508, screenW * 0.1852, screenH * 0.6081}, {screenW * 0.0432, screenH * 0.4883, screenW * 0.1852, screenH * 0.5456}, {screenW * 0.0432, screenH * 0.4258, screenW * 0.1852, screenH * 0.4831}, {screenW * 0.0432, screenH * 0.3633, screenW * 0.1852, screenH * 0.4206}, {screenW * 0.0432, screenH * 0.3008, screenW * 0.1852, screenH * 0.3581}, } addEventHandler("onClientRender", root, function() for i, v in pairs(infos) do if i == tipo then local length = dxGetTextWidth(msg, 1, font) dxDrawRectangle(posRectangle[1][1], posRectangle[1][2], length + screenW/23, posRectangle[1][4], tocolor(10, 10, 10, 220), false) dxDrawImage(posIMG[1][1], posIMG[1][2], posIMG[1][3], posIMG[1][4], infos[i][4], 0, 0, 0, tocolor(infos[i][1], infos[i][2], infos[i][3], 255), false) dxDrawText(msg, posText[1][1], posText[1][2], posText[1][3], posText[1][4], tocolor(255, 255, 255, 255), 1.00, font, "left", "center", false, false, false, false, false) break end end end) *As string tipo e msg é apenas para teste.
  23. function refreshVeh() for i, v in pairs(getElementsByType("vehicle")) do if isElementInWater(v) then destroyElement(v) end end end setTimer(refreshVeh, 10000, 1)
×
×
  • Create New...