Jump to content

androksi

Other Languages Moderators
  • Posts

    545
  • Joined

  • Last visited

  • Days Won

    38

Everything posted by androksi

  1. Ah, desculpe. Remova o string.len(r) < 1 Não é necessário.
  2. function kikarplayer (theClient, commandName, kickedName, ...) local account = getAccountName (getPlayerAccount (theClient)) if isObjectInACLGroup ("user."..account, aclGetGroup ("Admin")) then local r = {...} if not r or string.len(r) < 1 then return outputChatBox ("#bf2e2e* Erro: /kick [nick] [motivo]",theClient,255,255,255,true) end local reason = table.concat(r," ") local kickerName = getPlayerName(theClient):gsub("#%x%x%x%x%x%x","") local kickedPlayer = getPlayerFromName(kickedName) if not isElement(kickedPlayer) then outputChatBox ("#bf2e2e* Erro: Player Invalido!",theClient,255,255,255,true) end outputChatBox ( "#c9c9c9[#1a6cefFW-INFORMA#c9c9c9]O #1a6cef" .. kickerName .. " #c9c9c9Kickou o Player #1a6cef" ..getPlayerName(kickedPlayer):gsub("#%x%x%x%x%x%x","").. "#c9c9c9 | Motivo #1a6cef" ..reason.. "#c9c9c9", getRootElement(), 255, 0, 0, true ) banPlayer ( kickedPlayer, theClient, reason ) else outputChatBox ("#bf2e2e* Erro: Você Não tem Permissão!",theClient,255,255,255,true) end end addCommandHandler ( "kick", kikarplayer )
  3. Troque isto: function setLevelLogin () local account = getPlayerAccount(source) if ( account ) then local Level = (getAccountData(account,"Level") or 0) local minutes = (getAccountData(account,"minutes") or 0) setElementData(source,"Level",Level) setElementData(source,"minutes",minutes) end end addEventHandler("onPlayerLogin",getRootElement(),setLevelLogin) Por isto: function setLevelLogin (_, account) local Level = (getAccountData(account,"Level") or 0) local minutes = (getAccountData(account,"minutes") or 0) setElementData(source,"Level",Level) setElementData(source,"minutes",minutes) end addEventHandler("onPlayerLogin",getRootElement(),setLevelLogin) O primeiro argumento da sua função getAccountData está incorreto. O evento onPlayerLogin já fornece a conta do jogador, não é necessário usar getPlayerAccount. Aliás, esta função não retorna a conta, e sim o objeto dela, no caso o jogador responsável. Se você quer obter a conta do jogador, use getAccount.
  4. local string = "12345678" local encrypt = sha256(md5(string)) outputChatBox(encrypt) Exatamente dessa forma.
  5. local _minutes = 10 -- // O salário será entregue a cada quantos minutos? function payday() for _, v in pairs(getElementsByType("player")) do if isPlayerInACL(v, "nome_da_acl") then givePlayerMoney(v, 5000) outputChatBox("Você recebeu um salário no total de 5000 R$", v, 255, 255, 255, true) end end end setTimer(payday, _minutes * 60000, 0) function isPlayerInACL(player, acl) local accountName = getAccountName(getPlayerAccount(player)) if accountName ~= "guest" and type(aclGetGroup(acl)) == "userdata" then return isObjectInACLGroup("user."..accountName, aclGetGroup(acl)) end return false end Apenas troque nome_da_acl para a ACL que você deseja.
  6. Provavelmente a função Liberar() está dentro de um evento onPlayerConnect. Mude o nome do evento para onPlayerJoin.
  7. Opa! getPlayerName( namePlayer ); Coloque isto acima ^ no lugar de namePlayer, apenas naquelas mensagens de output, pois namePlayer é um elemento.
  8. O código ficaria mais organizado se a janelinha da conversa fosse criada no client, sem usar trigger. O trigger só seria usado para enviar e receber mensagens.
  9. Nunca tentei. Uso DX para a maioria dos scripts que faço. Concordo plenamente. É BEM considerável. Mas não existe apenas essas formas de criptografia de arquivo. MTA dá bastante caminhos para o desenvolvedor proteger os scripts.
  10. O MTA é capaz de carregar sim! Como eu disse, é necessário ativar o SD #22 e #23 para que eles sejam carregados de forma correta. Para carregar uma imagem com o formato YUV, por exemplo, ao invés de usar o dxDrawImage, a princípio você irá usar o dxCreateTexture, daí sim você irá carregar no dxDrawImage. Já com arquivos de áudio, é um pouco mais complexo. Você irá converter o áudio (criptografando-o). Para carregar o áudio, você terá de fazer a conversão inversa. Digamos que você converteu um arquivo de áudio de MP3 para CMF (não é lido pelo MTA). Para convertê-lo e fazer o MTA ler, você irá converter de CMF para MP3, obter a data/resultado do fetchRemote, gerar um arquivo aleatório com a extensão .mp3, incluir neste arquivo o resultado obtido. Após isso, adicionar no meta.xml e carregar o áudio onde quiser. (lembrando que após o carregamento do áudio, você deve deletá-lo do cache/pasta e retirá-lo do meta.xml)
  11. É sim! Porém, para usar serviços SMS, é necessário pagar uma pequena taxa por SMS enviado. Neste caso, o melhor método para ser usado é o e-mail. Há várias opções totalmente gratuitas e confiáveis.
  12. Olá. Sobre proteção de scripts, a melhor forma, em minha opinião, é usando fetchRemote + SMS/E-mail. O script só será ativado se o responsável pelo número de telefone ou e-mail aceitar que ele seja ligado, recebendo um código ou algo do gênero. Se você deseja criptografar arquivos como áudios (.mp3, .ogg, .cmf), imagens (.png, .jpg), shaders (.fx), o que eu recomendo e uso até hoje, é esta API: https://developers.convertio.co/pt/. É necessário algum conhecimento para trabalhar com este. (E lembrando que para fazer isso, é preciso ativar o SD #22 e #23, dentro do seu servidor, para que arquivos com extensões desconhecidas pelo MTA sejam carregadas.)
  13. local message = "Seja bem-vindo ao servidor MrShadows Race."; addEventHandler( "onResourceStart", root, function( res ) local res_type = getResourceInfo( res, "type" ); if ( res_type and res_type == "map" ) then outputChatBox( message, root, 255, 255, 255, true ); end end ); Server-side.
  14. local sx,sy = guiGetScreenSize() local px,py = 1366,768 local x,y = (sx/px), (sy/py) local dxfont1_font = dxCreateFont("Images/fonte.ttf", 12) function Vel() local vehicle = getPedOccupiedVehicle( getLocalPlayer() ) if ( vehicle ) then local speedX, speedY, speedZ = getElementVelocity ( vehicle ) local actualSpeed = (speedX^2 + speedY^2 + speedZ^2)^(0.5) local KMH = math.floor(actualSpeed*180) local vehHealth = math.min( math.floor( getElementHealth( vehicle ) / 10 ), 100 ); dxDrawRectangle(x*1134, y*710, x*222, y*32, tocolor(0, 0, 0, 100), false) if KMH < 250 then dxDrawRectangle(x*1140, y*716, x*211/250*KMH, y*19, tocolor(5, 106, 204, 255), false) end dxDrawText(KMH.." KM/h", x*1140, y*715, x*1351, y*735, tocolor(254, 254, 254, 227), 1.00, dxfont1_font, "center", "center", false, false, false, false, false) dxDrawRectangle(x*1134, y*674, x*222, y*32, tocolor(0, 0, 0, 100), false) dxDrawImage(x*1055, y*674, x*71, y*32, "Images/1.png", 0, 0, 0, tocolor(255, 255, 255, 170), false) dxDrawRectangle(x*1140, y*680, x*211/1*vehHealth, y*19, tocolor(5, 106, 204, 255), false) dxDrawText("Durabilidade: "..vehHealth, x*1140, y*679, x*1351, y*699, tocolor(254, 254, 254, 227), 1.00, dxfont1_font, "center", "center", false, false, false, false, false) dxDrawImage(x*1098, y*710, x*33, y*32, "Images/3.png", 0, 0, 0, tocolor(255, 255, 255, 170), false) end end addEventHandler("onClientRender", root, Vel) Testado.
  15. addEventHandler( "onPlayerWeaponSwitch", root, function( _prev, _next ) if ( _next > 0 ) then setElementData( source, "hasWeapon", true ); else setElementData( source, "hasWeapon", false ); end end ); Server-side.
  16. Opções -> Vídeo -> Filtragem anisotrópica: deixe em 16x
  17. Olha, acho que você não acompanha muito os blogs ou até mesmo a comunidade. 95% (de resources vindo de blogs) é bugado, mal otimizado e descompilado. Obs.: Citei blogs pois tenho certeza que o código do rapaz que pediu ajuda é de algum. Basta pesquisar no Google que você acha diversos blogs, a maioria com resources bugados ou postado por quem se acha scripter.
  18. function drawRender( ) local lvl = getElementData( localPlayer, "Level" ) or 1; local exp = getElementData( localPlayer, "Exp" ) or 0; local needexp = lvl * 1; dxDrawRectangle( x * 13, y * 513, x * 297, y * 20, tocolor( 0, 0, 0, 207 ), false ); dxDrawRectangle( 567 * sW, 725 * sH, -538 * sW, 20 * sH, tocolor( 166, 166, 166, 255 ), false ); dxDrawRectangle( 567 * sW, 725 * sH, -538 * sW, 20 * sH, tocolor( 166, 166, 166, 255 ), false ); dxDrawRectangle( 567 * sW, 725 * sH, -540 * sW / needexp * ( exp ), 20 * sH, tocolor( 217, 217, 217, 255 ), false ); dxDrawText( "Nível: " .. tostring( lvl ), 210 * sW, 1403 * sH, 400 * sW, 70 * sH, tocolor( 0, 0, 0, 255 ), 1.0, "default-bold", "center", "center" ); dxDrawText( string.format( "%d", 100 / ( needexp / exp ) ) .. "%", 670 * sW, 1392 * sH, 400 * sW, 80 * sH, tocolor( 0, 0, 0, 255 ), 1.0, "default-bold", "center", "center" ); end addEvent( "startRender", true ); addEventHandler( "startRender", root, function( showRender ) if ( showRender == startRender ) then return false; end startRender = showRender; if ( showRender ) then addEventHandler( "onClientRender", root, drawRender ); else removeEventHandler( "onClientRender", root, drawRender ); end end );
  19. Ah, eu esqueci de remover. Havia um outro código, pra pegar o tamanho dos arquivos. My bad.
  20. Bem, diante dessa situação, recomendo que você fale com o @ccw. Ele pode lhe ajudar.
  21. Há mais ou menos 2 anos, eu fiz um script que carrega os mods em segundo plano. Baixe: downloader Eu fiz algumas alterações para renomear o arquivo, veja o meta.xml para saber mais. @EDIT: Não altere o nome do resource. Mantenha "downloader".
  22. É a versão do nightly MTA, que foi lançada há 11 horas atrás.
  23. Hmmm, que estranho. O engraçado é que eu testei com uma txd e dff inválida (não sei se influencia em algo). Criei um arquivo de texto, coloquei um "a" e salvei o arquivo como txd e dff. . Mesmo assim funcionou perfeitamente.
  24. O arquivo que será renomeado, deve ter uma extensão. Testei aqui e funcionou. Adicionei a extensão .yuv local replace_model = { { "cmodels/tent.txd", "cmodels/tent.dff", 3243, "cmodels/vvoabC2xENOoQhgpE9MvT8kHWsQXEl.yuv", "cmodels/6edp8dkehrk1sghEJD1cazP0rT8weF.yuv" } };
×
×
  • Create New...