Jump to content

Jonas^

Members
  • Posts

    1,016
  • Joined

  • Last visited

  • Days Won

    9

Everything posted by Jonas^

  1. Exemplo aplicado no chat do freeroam: addEventHandler ("onPlayerChat", root, function (msg, type) if type == 0 then cancelEvent () local mainChatDelay = 1000 if chatTime[source] and chatTime[source] + mainChatDelay > getTickCount() then return outputChatBox ("[ERRO] #FFFFFFNão floode o chat.", source, 255, 50, 50, true) else chatTime[source] = getTickCount() end if isObjectInACLGroup ("user."..getAccountName(getPlayerAccount(source)), aclGetGroup ("Admin")) then outputChatBox ("[ADM] #FFFFFF"..removeHex(getPlayerName(source)).." : #FF0000"..removeHex(msg), root, 255, 0, 0, true) outputServerLog( "ADMINCHAT: "..removeHex(getPlayerName(source)).. ": "..removeHex(msg)) elseif isObjectInACLGroup ("user."..getAccountName(getPlayerAccount(source)), aclGetGroup ("Everyone")) then outputChatBox(removeHex(getPlayerName(source))..": #FFFFFF"..removeHex(msg), root, 51, 170, 255, true) outputServerLog( "CHAT: "..removeHex(getPlayerName(source))..": "..removeHex(msg)) end end end) function removeHex (text) local text = text or "" while (string.find (text, "#%x%x%x%x%x%x" )) do text = string.gsub (text, "#%x%x%x%x%x%x", "") end return text; end
  2. Revisei o código e inclusive testei e o código não apresenta erros, realmente você deve estar errando ao fazer uma coisa muito simples ctrl c + ctrl v. Pode ser caracteres especiais no código gerados pelo fórum, portanto sempre use /debugscript 3.
  3. Pra fazer isso você deve escolher um resource pra baixar por último e setar prioridade negativa nele no meta.xml e logicamente o resource que vai baixar primeiro que todos que seria o de tela de download, bem no resource de tela de download você pode fazer assim, exemplo: local screen = { guiGetScreenSize () } function renderLoading () if getElementData (localPlayer, "downloaded") then -- Se o player tiver essa data, vai cancelar este render e depois remover essa data, que não será mais utilizada nesta sessão. removeEventHandler ("onClientRender", getRootElement(), renderLoading) setElementData (localPlayer, "downloaded", false) end dxDrawText ("Baixando Resources...", 0, 0, screen[1], screen[2], tocolor(255, 255, 255, 255), 1, "clear", "center", "center", false, false, true) end addEventHandler ("onClientRender", getRootElement(), renderLoading) Agora no resource com prioridade negativa que será baixado por ultimo faça: function closeScreen () setElementData (localPlayer, "downloaded", true) end addEventHandler ("onClientResourceStart", resourceRoot, closeScreen) Meta do arquivo de tela: <meta> <script src="client.Lua" type="client"/> <download_priority_group>1</download_priority_group> </meta> Meta do arquivo que ira baixar por último: <meta> <script src="client.Lua" type="client"/> <download_priority_group>-1</download_priority_group> </meta>
  4. function verifyEdad (edad) if not edad then return "No has una edad." elseif #edad >= 99 then return "Tu edad maxima solo puede ser 99 años." elseif tonumber(text) then return "No puedes usar letras" elseif foundSpace then return "No puedes usar espacios" end end
  5. Isso só pode ser resolvido por meio de funções criadas por você mesmo pra detectar as teclas que o jogador pressionar, tanto para uma combinação especifica ou se ele bindar uma tecla com um conteúdo que você não deseja. Pra isso você pode tentar usar: IsKeyBound OnClientKey Neste exemplo abaixo se o jogador pressionar uma combinação de tecla ele sera kickado do servidor, você pode apenas congelar ele por alguns segundos se preferir. Exemplo: Client: function keyCombination (button, state) if button == "w" then if state then -- Se o jogador aperta o botão W, então: setElementData (localPlayer, "button.w", true) -- Seta essa data nele. else -- Se o jogador solta o botão W, então: setElementData (localPlayer, "button.w", false) -- Remove essa data dele. end elseif button == "space" then -- Mesma coisa com os demais botões da combinação. if state then setElementData (localPlayer, "button.space", true) else setElementData (localPlayer, "button.space", false) end elseif button == "mouse1" then if state then setElementData (localPlayer, "button.mouse1", true) else setElementData (localPlayer, "button.mouse1", false) end elseif button == "mouse2" then if state then setElementData (localPlayer, "button.mouse2", true) else setElementData (localPlayer, "button.mouse2", false) end end if getElementData (localPlayer, "button.w") and getElementData (localPlayer, "button.space") and getElementData (localPlayer, "button.mouse1") and getElementData (localPlayer, "button.mouse2") then -- Se todos os 3 botões estiverem apertados, então: triggerServerEvent ("keyComboKick", localPlayer) -- Executa a função do server.Lua que irá kickar o localPlayer. end end addEventHandler ("onClientKey", getRootElement(), keyCombination) Server: addEventHandler ("onPlayerLogout", getRootElement(), function (prev, curr) setElementData (source, "bindPermission", false) end) function comboKick () outputChatBox (getPlayerName (client):gsub("#%x%x%x%x%x%x","").." foi kikado por combinação proibida de teclas: (W + Space + Mouse1 + Mouse2)", root, 255, 0, 0, true) kickPlayer (client, "Uso de combinação proibida de teclas: W + Space + Mouse1 + Mouse2") end addEvent ("keyComboKick", true) addEventHandler ("keyComboKick", getRootElement(), comboKick) Author: @Lord Henry
  6. Isso acontece na maioria das vezes pois 1 lado inicia primeiro que o outro, mas geralmente não afeta em nada na funcionalidade, acredito que se você usar um timer deve resolver o problema.
  7. Se você pelo menos tivesse aberto a wiki iria ver que é somente server-side evitaria fazer essas perguntas desnecessária, mas já vi que você quer código pronto, se pelo menos tentasse se esforçar...
  8. Olhando seu código aqui por cima, é válido lembrar que não é necessário kickar o jogador pra bloquear o logout, pode ter jogadores que entraram a pouco tempo no seu servidor e nem jogaram o suficiente pra entender como funciona e continuar jogando dai eles tomam um kick desnecessário e nunca mais voltam, você pode cancelar, fazendo desta forma: addEventHandler ("onPlayerCommand", root, function (cmd) if cmd == "logout" then -- Se o comando digitado for o "/logout", então: outputChatBox ("Comando bloqueado: /"..cmd, source, 255, 30, 30) -- Envia output informando o jogador. cancelEvent () -- Cancela a execução do comando. end end)
  9. Era só você ter verificado com: IsElementWithinMarker se o jogador estava no marker x e se sim abriria o painel, não entendi porque passar pra server-side, bom se você realmente deseja fazer uma conexão desnecessária, ai é com você...
  10. Não, a diferença que compactado é mais fácil pra você enviar pois reduz tamanho, mas a diferença é a mesma até porque o MTA extrai eles no cache do jogador quando ele baixa.
  11. Não é necessário passar pra server-side pra abrir o painel já que não necessita de permissão, você pode usar apenas onClientMarkerHit. Correção: local sX, sY = guiGetScreenSize () local markerGuardar = createMarker (-2407.54, -598.33, 132.64, "cylinder", 1.5, 255, 255, 255, 50) addEventHandler ("onClientResourceStart", resourceRoot, function () defaultWindow = guiCreateWindow (sX/2 - 185, sY/2 - 220, 370, 440, "Guardar Armas", false) guiWindowSetSizable (defaultWindow, false) guiSetVisible (defaultWindow, false) btnGuardar = guiCreateButton (10, 396, 112, 34, "Guardar", false, defaultWindow) btnFechar = guiCreateButton (247, 396, 112, 34, "Fechar", false, defaultWindow) defaultGrid = guiCreateGridList (9, 26, 350, 360, false, defaultWindow) guiGridListAddColumn (defaultGrid, "Arma", 0.7) guiGridListAddColumn (defaultGrid, "Munição", 0.20) end) addEventHandler ("onClientGUIClick", root, function (btn) if btn ~= "left" then return end if source == btnGuardar then outputChatBox ("Btn: "..btn, 0, 255, 0) elseif source == btnFechar then Abrir () end end) addEventHandler ("onClientMarkerHit", getRootElement(), function (hitPlayer, matchingDimension) if hitPlayer and getElementType (hitPlayer) == "player" and matchingDimension then Abrir () end end) function Abrir () if guiGetVisible (defaultWindow) == true then guiSetVisible (defaultWindow, false) showCursor (false) -- guiGridListClear (defaultGrid) elseif guiGetVisible (defaultWindow) == false then guiSetVisible (defaultWindow,true) showCursor (true) -- guiGridListClear (defaultGrid) end end OBS: Não entendi o motivo de você usar centerWindow sendo que você pode calcular a posição do centro manual. (Fiz isso por você se tiver dúvidas sobre GUI pode dar uma olhada no tópico do @Lord Henry.) Tópico: Aqui
  12. Você esta usando eventos do server no client, e no client só existe localPlayer.
  13. Irá precisar dê: SetPedAimTarget SetPedControlState E a arma equipada no ped.
  14. Ué, troque isso: if isObjectInACLGroup ("user."..accName, aclGetGroup ( ComandosPolicia ) ) then Por isso: if hasObjectPermissionTo (player, "function.Prender") then -- ''function.Prender'' Isso não é nativo do MTA, tem que existir pra funcionar.
  15. Ali em cima também esta por ACL if isObjectInACLGroup ("user."..accName, aclGetGroup ( ComandosPolicia ) ) then
  16. Erros de IF/indentação corrigido, agora o resto é com você, Jogador não esta declarado em nenhum local. addCommandHandler ("verarmas", function (player, cmd, id) if getElementData (player, "AirNewSCR_Policial1") == "Sim" then local id = getElementData (player, "ID") == id then if id then outputChatBox ("* Armas do cidadão "..getPlayerName(Jogador).."!", player, 255, 255, 255, true) for slot = 0, 12 do local Armas = getPedWeapon (Jogador, slot) local Municao = getPedTotalAmmo (Jogador, slot) if Armas > 0 then if Municao > 0 then weapon_nome = getWeaponNameFromID (Armas) outputChatBox ("* "..weapon_nome.." #3a3a3a»#25e014 "..Municao.." Bala(s)!", player, 255, 255, 255, true) end end end else outputChatBox ("* Erro: Jogador não encontrado!", player) end end end) Nem testei seu código, mas acredito que não esteja funcionando praticamente nada. E seja mais agradecido com quem te ajuda, deixando like nos comentários do pessoal
  17. (...) Passando o código do seu sistema de ID não vai ajudar em nada, ao menos que ele utilize o mesmo.
  18. Talvez você tenha que habilitar o AC no seu mtaserver, localize estas linhas: <!-- Comma separated list of disabled anti-cheats. For details see http://wiki.multitheftauto.com/wiki/Anti-cheat_guide e.g. To disable anti-cheat #2 and #3, use: 2,3 --> <disableac></disableac> <!-- Comma separated list of enabled special detections. A special detection is a type of anti-cheat for (usually) harmless game modifications. Competitive servers may wish to enable special detections, but most servers should leave this setting blank. For details see http://wiki.multitheftauto.com/wiki/Anti-cheat_guide e.g. To enable special detection #12 use: 12 --> <enablesd></enablesd> https://wiki.multitheftauto.com/wiki/Anti-cheat_guide
  19. Se for vários botões aconselho salvar dentro de uma tabela cada timer pra cada botão.
  20. Está. sendTo: O evento será enviado para todos os jogadores que são filhos do elemento especificado. Por padrão, esse é o elemento-raiz e, portanto, o evento é enviado a todos os jogadores. Se você especificar um único jogador, ele será enviado apenas para esse jogador. Este argumento também pode ser uma tabela de elementos do jogador. Primeiro argumento não foi declarado como o Lord já disse, você quer fazer um modo spectador pro admin? ele conseguir ver todos players ao colidir na col?
  21. Bom, se estiver disposto a pagar, pode entrar em contato com nossa equipe via discord ou facebook. Discord: Evolution Scripting#4527 Facebook: https://www.fb.com/evoscripting
  22. Dai não tem como nos fazer nada pra corrigir o problema, infelizmente, sua alternativa é fazer um do zero e bem mais otimizado, se não souber pode tentar pagar alguém pra fazer pra você por exemplo.
  23. Mano, você precisa mostrar o client também..... já que o problema parece estar lá, oque você quer fazer é quando o jogador passar no marker o painel abrir apertando a tecla F11? E se apertar fora dele, nada acontece? OBS: Tente otimizar esse código, da pra diminuir umas 100 linhas ++.
  24. Já sabemos que é da internet, mas sem código não tem como lhe ajudar.
×
×
  • Create New...