Jump to content

ajobr

Members
  • Posts

    28
  • Joined

  • Last visited

Everything posted by ajobr

  1. Isso não está funcionando pelos seguintes motivos, você não deve usar isObjectInACLGroup no client-side; sua função para o command handler deve receber o parâmetro do jogador que o acionou; getLocalPlayer não pode ser usado no server-side, por isso é nulo; Acompanhe o código abaixo, no documento server-side: addCommandHandler("on", function(playerSource) if (isObjectInACLGroup("user." ..getAccountName(getPlayerAccount(playerSource)), aclGetGroup("Staff"))) then outputChatBox("Ei "..getPlayerName(playerSource).." Você é um staff!") end end ) Para entender melhor como funciona o addCommandHandler, acesse https://wiki.multitheftauto.com/wiki/AddCommandHandler.
  2. Olá, estava criando uma função para testar a OOP do MTA, porém não estou conseguindo usa-lá. Estou recebendo o error: "attempt to call method getPosition (a nil value)", linha 2. Gostaria de saber porque o MTA não reconhece a chamada do método, segue minha função abaixo: Server-Side function createVehicle(playerSource, command, modelVehicle) local playerPosition = Vector3(playerSource:getPosition()) playerposition = playerPosition + Vector3(0, 1, 0) local vehicle = createVehicle(modelVehicle, playerPosition) if (not vehicle) then outputChatBox("Erro ao criar veículo", playerSource) return false end vehicle:setDamageProof(true) vehicle:setFrozen(true) vehicle:setHealth(1000) vehicle:setVelocity(0.2, 0.2, 0.2) end addCommandHandler("veiculo", createVehicle) OBS: Já habilitei a OOP no meta do meu script.
  3. function getClothes (thePlayer) for i=0,17 do -- Existem 18 tipos de categorias de roupas (0 ao 17) esse for cria um loopin para os 18 slots de roupas removePedClothes (thePlayer, i ) -- remove as roupas de todos os 18 slots end end addCommandHandler ( "resetcj", getClothes ) -- adiciona o comando para remover as roupas Mais informações sobre roupas do cj em: https://wiki.multitheftauto.com/wiki/CJ_Clothes Obs: Não foi testado e nesse caso ele deixaria o cj somente de cueca, sem a regata preta e o jeans. Para deixar do jeito padrão utilize isso e após use AddPedClothes ou setPedClothes.
  4. O math.floor no caso não é adequado, pois se strings forem inseridas nele ele retorna erro... Tem alguma outra forma de verificar se um valor é um número ?
  5. Olá a todos, tudo bem? Então estou com uma dúvida na qual não sei como verificar se um valor é um número inteiro ou não. Pensei em utilizar o " if " porém não sei qual tipo de nomenclatura devo utilizar para verificar. Exemplo: function ola( thePlayer ) local id = 1 if id == inteiro then local mensagem = tostring(id) outputChatBox(mensagem, thePlayer, 255, 255, 255, true) end end Como nesse código queria verificar se um valor é inteiro ou não, porém não sei oque devo utilizar no lugar de " inteiro " na linha 3. Obs: O código acima é só um exemplo.
  6. E não se esqueça de configurar as permissões no meta : <aclrequest> <right name="function.aclGroupAddObject" access="true" /> <right name="function.aclGroupRemoveObject" access="true"/> </aclrequest> assim que entrar no server pressione F8 e digite: "aclrequest" e você terá a sintaxe para a liberação das permissões.
  7. Tentei fazer um addCommandHandler e o elemento para ativar as funções utilizei como se fosse source, porém ele retorna nil... Qual motivo do erro? E como posso contorna-lo? function pos (cmd) local x, y, z = getElementPosition(source) local loc = getZoneName ( x, y, z ) local city = getZoneName ( x, y, z, true ) outputChatBox("Posição"..loc..". Cidade: "..city, source, 255, 255, 255, true) end addCommandHandler("ajuda", pos) ele está retornando o source como nil...
  8. 1-Baixe este programa : https://sqlitebrowser.org/ 2- Assim que você baixa-lo, vá no seguinte diretório do seu server : \mods\deathmatch\ 3- Encontre o arquivo chamado: "internal.db" 4- Abra ele com o programa que você baixou no passo 1. 5- Navegue pelas tabelas das contas dos players e modifique os ids. Obs: Se você modificar pode acabar bugando alguns scripts que salvam dados pelos ids...
  9. Tente voltar a utilizar o painel "p" original do lil_Toddy... Talvez o erro esteja no seu painel "p" modificado.
  10. Como posso mandar as informar que se encontram em uma tabela que utiliza funções do server side para ser listada, para o cliente? Quero saber como posso fazer isso, como se fosse um trigger, ou um ElementData porém não sei como... Segue o código abaixo... Server Side Client Side Quero basicamente fazer isso, transferir o valor de name para o cliente side, porém não estou conseguindo com os triggers...
  11. Você terá de fazer 2 resources diferentes ficará dessa forma: RESOURCE 1 ---Client Side--- --Meta-- RESOURCE 2 ---Client Side--- ---Meta--- Créditos para nosso amigo : Jonas^(Hard-@ss) (Verifique os metas, não testei eles)
  12. entendo, mas é possível reproduzir o "manage acl" do painel "p" para tentar fazer isso?
  13. Existe alguma forma de imprimir os todos os jogadores de um grupo na acl, inclusive os offlines? Procurei por funções, porém todas só retornam players online...
  14. é aquele som que quando se digita "setradio" [Link] toca a musica do link, creio que não seja uma coisa nativa do mta e seja por mod... Vou dar mais uma olhada nas funções e nessa que você mandou, obrigado.
  15. Existe alguma forma de pegar o som que está tocando no setRadio como elemento? Gostaria de modificar seu volume a bel prazer e também determinar quem poderia ouvi-lo ou não... É possível? E como poderia fazer isso?
  16. Como posso remover aquela caixa preta na entrada dos interiores? Tentei abrindo o dff do interior no zModeller e removi toda a área da caixa porém assim que ponho in-game ele fica todo branco, como faço para deixar ele com sua textura normal mas com a modificação que fiz? Obs : Tentei fazer o load de sua textura padrão através de engineLoadTXD e engineImportTXD, porém continua tudo em branco... Parece até uma modelagem sem textura... [Imagem]
  17. Editei o DFF de um interior no zModeler e agora estou tentando fazer um replace que substitua o dff dele porém quando ativo o replace dele exibe o seguinte erro : [Imagem] [Código] Qual motivo desse erro e como posso consertar?
  18. Quero saber se tem alguma forma de fazer com que uma contagem seja com setTimer ou com qualquer outra função, só comece a contar após a anterior ter acabado e disparado. Por exemplo se tem 3 setTimers, depois do primeiro disparar e executar a função designada à ele o segundo setTimer começa a contar à partir desse momento e o mesmo acontece ao terceiro setTimer e assim por diante.
  19. Queria saber se é possível alguém conseguir descompilar um arquivo .luac, e oque são essas opções de compilação no site do mta e qual a melhor escolha? Site : https://luac.multitheftauto.com/
  20. Bom estou com um problema em meu script que não sei qual erro está ocorrendo. a função dele era pra ser para que ele comparasse se um player está com determinada roupa e se estiver depois de um tempo ele trocar a roupa do player para outra... desenvolvi o codigo e do mesmo jeito não funciona e não aparece nada no debug... Segue o código dele abaixo...
  21. Estou adaptando um script de dar tag e retirar tag, nele quero que apareça em uma lista os players em geral e em outra os players que estão em determinada acl, porém estou com um gigante problema em que, não tenho muita experiencia em setElementData e afins... Queria passar a informação da função "check" do server side para a função "ColocarJogadores2" do client side. Para que assim adicione os jogadores que estão na determinada ACL à lista do GUI. Ou seja da mesma forma que está em "ColocarJogadores" (client-side) queria fazer no "ColocarJogadores2" só que importando a informação do "check" que verifica quem está ou não na ACL. ---CODIGO SERVER SIDE-- -----------------------------------[Acesso painel]---------------------------------------------- function showPanellr(thePlayer) accountname = getAccountName(getPlayerAccount(thePlayer)) if isObjectInACLGroup("user." .. accountname, aclGetGroup("DonoPMESP")) then --> Gruop que vai poder abrir o painel ! triggerClientEvent(thePlayer, "GUI", getRootElement()) end end function onResStartlr() for index, player in ipairs(getElementsByType("player")) do bindKey(player, "x", "down", showPanellr) end end addEventHandler("onResourceStart", getResourceRootElement(getThisResource()), onResStartlr) function onPlayerJoinlr() bindKey(source, "x", "down", showPanellr) end addEventHandler("onPlayerJoin", getRootElement(), onPlayerJoinlr) function cleanAlllr(player) for index, player in ipairs(getElementsByType("player")) do unbindKey(player, "x", "down", showPanellr) end end addEventHandler("onResourceStop", getResourceRootElement(getThisResource()), cleanAlllr) function adminTextlr() local root = getRootElement() local account = getAccountName(getPlayerAccount(source)) if isObjectInACLGroup("user." .. account, aclGetGroup("DonoPMESP")) then --> Gruop que vai poder abrir o painel ! outputChatBox("Presione 'x' para abrir o Painel Da TAG`s.", source) end end addEventHandler("onPlayerLogin", root, adminTextlr) ----------------------------------------------------------------------- [Add 1] ------------------------------------------------------------------------------ function add1 (thePlayer) if not (isElement(thePlayer)) then return end; local accountName = getAccountName(getPlayerAccount(thePlayer)) if accountName then aclGroupAddObject (aclGetGroup("PMESP"), "user."..accountName) --- Modifique o nome da acl gruop aqui ! -> ("BOPE") <- outputChatBox ("#ffff00[ #00ff00Painel TAG #ffff00] #00ff00Conta '"..accountName.."' Foi Adcionada com sucesso ao Grupo.", client, 255, 255, 255, true) -- Mensagem De Sucesso ! else outputChatBox ("#ffff00[ #00ff00Painel TAG #ffff00] #ff000Conta Não Especificada.", client, 255, 255, 255, true) -- Mensagem De Erro outputChatBox ("#ffff00[ #00ff00Painel TAG #ffff00] #ff000Selecione um Player na Lista.", client, 255, 255, 255, true) -- Mensagem De Erro end end addEvent( "addtag1", true ) addEventHandler( "addtag1", root, add1 ) ----------------------------------------------------------------------- [Remover 1] ---------------------------------------------------------------------------- function del1 (thePlayer) if not (isElement(thePlayer)) then return end; local accountName = getAccountName(getPlayerAccount(thePlayer)) if accountName then aclGroupRemoveObject (aclGetGroup("PMESP"), "user."..accountName) --- Modifique o nome da acl gruop aqui ! -> ("Mude Aqui") <- outputChatBox ("#ffff00[ #00ff00Painel TAG #ffff00] #ff000Conta '"..accountName.."' Foi Removida com sucesso ao Grupo.", client, 255, 255, 255, true) -- Mensagem De Sucesso ! else outputChatBox ("#ffff00[ #00ff00Painel TAG #ffff00] #ff000Conta Não Especificada.", client, 255, 255, 255, true) -- Mensagem De Erro outputChatBox ("#ffff00[ #00ff00Painel TAG #ffff00] #ff000Selecione um Player na Lista.", client, 255, 255, 255, true) -- Mensagem De Erro end end addEvent( "remvtag1", true ) addEventHandler( "remvtag1", root, del1 ) ---Verificar contas com tag-- function check( ) players = getElementsByType ( "player" ) admins = "" for k,v in ipairs(players) do local accountname = "" if (isGuestAccount(getPlayerAccount(v)) == false) then accountname = getAccountName (getPlayerAccount(v)) if isObjectInACLGroup ( "user." .. accountname, aclGetGroup ( "PMESP" ) ) then --mudar acl if (admins == "") then admins = getPlayerName(v) else admins = admins .. ", " .. getPlayerName(v) end end end end end addEvent("check", true) addEventHandler("check", root, check) ----------------CÓDIGO Client Side-------------------- --GUI-- local sX, sY = guiGetScreenSize() janela = guiCreateWindow(sX/2-300, sY/2-225, 600, 450, "Painel Tag PMESP", false) botao1 = guiCreateButton(230, 300, 140, 50, "Adicionar", false, janela) botao2 = guiCreateButton(230, 200, 140, 50, "Remover", false, janela) lista1 = guiCreateGridList(10, 100, 200, 300, false, janela) lista2 = guiCreateGridList(390, 100, 200, 300, false, janela) busca1 = guiCreateEdit(10, 73, 170, 23, "", false, janela) busca2 = guiCreateEdit(390, 73, 170, 23, "",false, janela) Lupa1 = guiCreateStaticImage(185, 73, 24, 22, "arquivos/Lupa.png", false, janela) Lupa2 = guiCreateStaticImage(565, 73, 24, 22, "arquivos/Lupa.png", false, janela) Logo = guiCreateStaticImage(270, 73, 60, 57, "arquivos/Logo.png", false, janela) texto1 = guiCreateLabel(10, 50, 150, 20, "Jogadores normais aqui ↓↓↓", false, janela) texto2 = guiCreateLabel(390, 50, 200, 20, "Membros da sua coporação aqui ↓↓↓", false, janela) --CONFIGURAÇÕES DO GUI-- guiSetVisible(janela, false) guiSetProperty(botao1, "NormalTextColour", "FF00FF00") guiSetProperty(botao2, "NormalTextColour", "FFFF0000") guiSetProperty(janela, "CaptionColour", "FFFF0000") showCursor(true) guiGridListAddColumn(lista1, "Cidadãos", 0.9) guiGridListAddColumn(lista2, "Membros da Corporação", 0.9) --Códigos-- --GUI-- function GUI() if guiGetVisible(janela) then guiSetVisible(janela, false) showCursor(false) else guiSetVisible(janela, true) showCursor(true) ColocarJogadores () ColocarJogadores2 () end end addEvent("GUI", true) addEventHandler("GUI", getRootElement(), GUI) ------------------------------Lista1------------------------------------- function ColocarJogadores () guiGridListClear(lista1)-- Apaga a grid for i, thePlayer in ipairs ( getElementsByType ( "player" ) ) do-- Obtem todos os jogadores local row = guiGridListAddRow( lista1 )-- Agregar row guiGridListSetItemText ( lista1, row, 1, getPlayerName( thePlayer ), false, false ) end end ------------------------------------------------------------------------ function Buscar() guiGridListClear( lista1 ) local nome = guiGetText( busca1 ) for i, thePlayer in ipairs ( getElementsByType ( "player" ) ) do if ( thePlayer ~= localPlayer ) then--Para não buscar a si mesmo if ( string.find( getPlayerName( thePlayer ):lower(), nome:lower() ) ) then--Para buscar o jugador com esse nome local row = guiGridListAddRow ( lista1 )--agregar row guiGridListSetItemText ( lista1, row, 1, getPlayerName ( thePlayer ), false, false )--agregar um row com esse nome end end end end addEventHandler ("onClientGUIClick", busca1, Buscar ,false) --Lista1-- --Lista2-- ------------------------------------------------------------------------ function ColocarJogadores2() triggerServerEvent("check", thePlayer) guiGridListClear(lista2)-- Apaga a grid for i, thePlayer in ipairs ( getElementsByType ( "player" ) ) do-- Obtem todos os jogadores local row = guiGridListAddRow( lista2 )-- Agregar row guiGridListSetItemText ( lista2, row, 1, getPlayerName( thePlayer ), false, false ) end end ------------------------------------------------------------------------ function Buscar2() guiGridListClear( lista2 ) local nome = guiGetText( busca2 ) for i, thePlayer in ipairs ( getElementsByType ( "player" ) ) do if ( thePlayer ~= localPlayer ) then--Para não buscar a si mesmo if ( string.find( getPlayerName( thePlayer ):lower(), nome:lower() ) ) then--Para buscar o jogador com esse nome local row = guiGridListAddRow ( lista2 )--agregar row guiGridListSetItemText ( lista2, row, 1, getPlayerName ( thePlayer ), false, false )--agregar um row com esse nome end end end end addEventHandler ("onClientGUIClick", busca2, Buscar2 ,false) --Lista2-- ------------------------------------------------------------------------ -- Botões -- ------------------------------------------------------------------------ function Tag1Name () local jogadorselecionado = guiGridListGetItemText(lista1, guiGridListGetSelectedItem(lista1), 1) triggerServerEvent("addtag1", localPlayer, getPlayerFromName(jogadorselecionado)) end addEventHandler ("onClientGUIClick", botao1, Tag1Name ,false) function remv1Name () local jogadorselecionado = guiGridListGetItemText(lista2, guiGridListGetSelectedItem(lista2), 1) triggerServerEvent("remvtag1", localPlayer, getPlayerFromName(jogadorselecionado)) end addEventHandler ("onClientGUIClick", botao2, remv1Name ,false) Como vocês observaram já tentei utilizar o triggerServerEvent de várias maneiras (além dessa) porém não tive sucesso e também tentei um pouco de setElementData, mas também não consegui...
  22. Esse erro está acontecendo no meu script já o revisei diversas vezes e não consigo encontrar o erro... Esse erro aparece nos dois 'addEventHandler' a seguir. local dxfont0_fonte = dxCreateFont("font/fonte.ttf", 10) local dxfont1_fonte = dxCreateFont("font/fonte.ttf", 35) local screenW, screenH = guiGetScreenSize() local resW, resH = 1360,768 local x, y = (screenW/resW), (screenH/resH) --math.abs(math.sin(getTickCount()/300))*255) function isEventHandlerAdded( sEventName, pElementAttachedTo, func ) if type( sEventName ) == 'string' and isElement( pElementAttachedTo ) and type( func ) == 'function' then local aAttachedFunctions = getEventHandlers( sEventName, pElementAttachedTo ) if type( aAttachedFunctions ) == 'table' and #aAttachedFunctions > 0 then for i, v in ipairs( aAttachedFunctions ) do if v == func then return true end end end end return false end function dinfo() local alpha = interpolateBetween(1, 0, 0, 255, 0, 0, (getTickCount()-tick2)/1000, "Linear") dxDrawRectangle(x*0, y*0, x*1360, y*768, tocolor(0, 0, 0, alpha), false) dxDrawText("DORMINDO...", screenW * 0.3581, screenH * 0.4336, screenW * 0.7132, screenH * 0.5182, tocolor(255, 255, 255, math.abs(math.sin(getTickCount()/300))*255), x*1.00, dxfont1_fonte, "left", "top", false, false, false, false, false) end function renderD() if not isEventHandlerAdded("onClientRender", root, dinfo) then addEventHandler("onClientRender", root, dinfo) end end addEvent("renderD", true) addEventHandler("renderD", root, renderD) function closeDxD() if isEventHandlerAdded("onClientRender", root, dinfo) then removeEventHandler("onClientRender", root, dinfo) showCursor(false) end end function close() if isEventHandlerAdded("onClientRender", root, Fenster2[1]) then if state == "down" then if isCursorOnElement(screenW * 0.6007, screenH * 0.3307, screenW * 0.0279, screenH * 0.0469) then removeEventHandler("onClientRender", root, Fenster2[1]) showCursor(false) end end end end addEventHandler("onClientGUIClick", Knopf2[4] , close) function dormir() if isEventHandlerAdded("onClientRender", root, Fenster2[1]) then if state == "down" then if isCursorOnElement(screenW * 0.4110, screenH * 0.4766, screenW * 0.1176, screenH * 0.0521) then tick2 = getTickCount() destroyElement(Fenster2[1]) triggerServerEvent("dormir", localPlayer) closeDx() setTimer(function() closeDxD() end, 30000, 1) end end end end addEventHandler("onClientGUIClick", Knopf2[4] , dormir) function isCursorOnElement( posX, posY, width, height ) if isCursorShowing( ) then local mouseX, mouseY = getCursorPosition( ) local clientW, clientH = guiGetScreenSize( ) local mouseX, mouseY = mouseX * clientW, mouseY * clientH if ( mouseX > posX and mouseX < ( posX + width ) and mouseY > posY and mouseY < ( posY + height ) ) then return true end end return false end
  23. Estou criando um script de academia e no caso ele começou a dar um erro que não consigo identificar, depois de criar uma função "parar1", ele começou a dar este erro mencionado no título. Vou estar pondo uma print do mesmo aqui e tambem vou deixar o código do script para caso alguém possa me ajudar. Obrigado. O erro está localizado na "function parar1" e no "addComandHandler("parartreino") " . --Funções-- function Stamina(source) takePlayerMoney(source, 50) setPlayerStat(source, 23, 200) setPedAnimation(source, "ped", "gym_tread_sprint", 600, true, true, true, 300, false) setPedFrozen(source, true) setCameraMatrix(source, 758.36065673828, -61.014072418213, 1002.7802124023, 758.39526367188, -65.067604064941, 1000.8479003906, 0, 70) outPutChatBox("Red #FFFFFFPara voltar ao normal dê /parartreino.", getRootElement(), 255, 0, 0) -- body end function parar1(source) local frozen = getPedFrozen(source) setPedFrozen(source, not frozen) getCameraMatrix(source) end --Comandos-- addEventHandler("onMarkerHit", malhar4, Stamina) addCommandHandler("parartreino"), parar1) Sei que tem alguns erros fora este que estou pedindo ajuda, grato a qualquer outro tipo de dica. Obrigado. O código está enxugado então terão algumas coisas sem nexo.
  24. Também estou com mesmo problema, porém no meu caso quando dou "setradio" no F8 funciona, só não funciona com um script especifico que quase todos servidores usam que é conhecido como "musicplayer". Se alguém souber uma possível solução agradeço...
×
×
  • Create New...