Jump to content

Leaderboard

Popular Content

Showing content with the highest reputation on 26/02/20 in Posts

  1. Bom é assim, se formos traduzir o erro seria algo neste sentido: Esperado ped/player no argumento 1, recebeu valor nil (nil é um valor inexistente) Isto ocorreu porque você não declarou o parâmetro da sua função. Se você observar na wiki o evento (addCommandHandler), vai ver que em um trecho ele fala sobre playerSource e argumentos. Mais precisamente isto aqui que estou me referindo: http://prntscr.com/r7neut Para todas as funções no MTA, existe um SOURCE. Source é o nativo daquela função, é o objeto/player/marker em que a função tem como base. Podemos acionar este source simplesmente digitando source, Exemplo Prático: local px, py, pz = getElementPosition(source) -- pegamos a posição do parâmetro nativo da função(source) warpPedIntoVehicle(source, VehCar) -- forçamos o player no veículo usando um parâmetro nativo da função(source) e uma variavel (VehCar) Obs: o SOURCE do addCommandHandler é o player que digitou o comando. -- Olhando para o seu script nós temos na linha 1 function -- function Indicamos que estamos iniciando uma função que ira executar algo SpawnMoto -- o nome desta função () -- e os parâmetros, ou seja a quem ela seja direcionada. Podemos perceber aqui que não existe nenhum parâmetro! Se não existe nenhum parâmetro DECLARADO, se formos olhar para a linha 4 player não existe, pois ele não foi declarado em nenhum momento. Obs: Não necessariamente você precisa escrever "player", eu posso colocar "ciranda_cirandinha" no lugar de "player" que irá funcionar normalmente. -- Na linha dois tem um outro erro: local px, py, pz = -- 3 váriaveis getElementPosition -- a função (getLocalPlayer()) -- o argumento Nós temos dois lados, o lado cliente e o lado servidor. Lado servidor é o que será executado na host, e o lado cliente é o executado no pc do player. Se você pesquisar por getLocalPlayer() na wiki você vai ver isto: http://prntscr.com/r7npad. Client-Side Only, ou seja somente lado cliente isto você pode identificar no meta.xml temos <script src="nomeDoArquivo" type="client"/> ou <script src="nomeDoArquivo" type="server"/> o type diz quais funções você pode usar naquele arquivo... Obs: temos também funções do tipo shared que funcionam tanto nos arquivos de lado client, quanto nos arquivos de lado server. Ex: http://prntscr.com/r7nr9j -- Basicamente é isso maninho esses foram os erros em seu script, use o código que o #Roots mandou e pesquise sobre "tabelas", é algo que vai ser muito essencial para você desenvolver seus próximos códigos :).
    2 points
  2. I'm having an issue on my MTA where I get FPS drops during gameplay. I've got a pretty good gaming PC and I can't seem to fix this issue. My MTA Diag: https://pastebin.mtasa.com/173675973 any help is appreciated, thanks.
    1 point
  3. Olá, vocês mais experientes, poderiam me dizer como normalmente estruturam seus projetos de MTA? Sou novo na comunidade e gostaria de saber um pouco sobre boas práticas. Qualquer dica para um iniciante sobre esse assunto assim ou próximo disso será muito bem vinda
    1 point
  4. Poste a database... Você quer que nós adivinhemos códigos?
    1 point
  5. Options: A. use the command: /refreshall B. Empty your client cache MTA San Andreas X\mods\deathmatch\resources Source:
    1 point
  6. hmm, it is kind of a strange error. Since freeroam doesn't request the files from the path /data/ rows={xml='stats.xml', attrs={'name', 'id'}}, File fr_client.Lua. Line 461 This error is showing when starting freeroam or always?
    1 point
  7. Those files are located in: \[gameplay]\freeroam Try to unzip the resource (and delete the zip)
    1 point
  8. @MesaDowN O state é um parâmetro do evento onClientClick (no caso o segundo parâmetro). o state ele verifica se o player Pressionou o botão ("down") ou se ele solto o botão ("up").
    1 point
  9. Isso ocorre pois vc não declarou player em lugar nenhum. Então vc está basicamente tentando teleportar nulo para dentro do veículo. Tenha em mente que veículos criados client-side servem apenas como decoração. Eles não funcionam. (Leia na Wiki do createVehicle) Ou seja, daria erro mesmo se vc usasse localPlayer ali no warp. A solução do problema é simples, mas vai resultar em problemas posteriormente, tornando a solução no fim das contas um pouco complexa. 1) Passe o script para o server-side. (Mude o lado dele no meta.xml) 2) Adicione o parâmetro de função thePlayer, exigido pelo addCommandHandler no server-side. 3) Use thePlayer em vez de localPlayer. Vai ficar assim o script: function SpawnMoto (thePlayer) local px, py, pz = getElementPosition (thePlayer) local VehCar = createVehicle (522, px, py, pz+2) warpPedIntoVehicle (thePlayer, VehCar) end addCommandHandler ("moto", SpawnMoto) Isso resolve seu problema de erros no debug. Mas logo vc vai perceber que o jogador pode ficar criando infinitos veículos. O que vc precisa fazer é deletar o veículo criado anteriormente antes de criar um novo. Mas vc não pode simplesmente dar destroyElement no VehCar. Primeiramente pois ele não existe fora do escopo daquela função, por estar numa variável local. E se você torná-la global, irá influenciar nos veículos criados por outros jogadores, uma vez que VehCar será o veículo criado pela última vez e não o necessariamente o veículo criado por você. Para corrigir isso, devemos identificar quais veículos pertencem a cada jogador para que assim possamos verificar se este jogador já tem um veículo criado antes ou não. Façamos isso por meio de uma table que será indexada com os jogadores. 1) Crie uma table vazia. 2) Na função SpawnMoto, verifique se já existe um item na tabela com o thePlayer como índice. 3) Condição: Se já existir um item com thePlayer como índice, destrói esse item e anula sua variável. 4) Substitua os VehCar por motos[thePlayer] e deixe como sendo global e não como local. O código vai ficar assim: motos = {} function SpawnMoto (thePlayer) local px, py, pz = getElementPosition (thePlayer) if (isElement (motos[thePlayer])) then destroyElement (motos[thePlayer]) motos[thePlayer] = nil end motos[thePlayer] = createVehicle (522, px, py, pz+2) warpPedIntoVehicle (thePlayer, motos[thePlayer]) end addCommandHandler ("moto", SpawnMoto) Isso fará com que os jogadores só possam criar 1 moto por vez. Ao usar o comando novamente, ele vai destruir a moto criada anteriormente e criar a nova no lugar. Ainda tem a questão de segurança, você vai precisar destruir a moto e anular sua variável caso o jogador desconecte do servidor, pois ao voltar, ele será outro elemento e sua moto permanecerá no mapa. Mas dai essa parte é com você. Obs: Postagem feita via mobile.
    1 point
  10. and haven't you modified these files?
    1 point
  11. https://wiki.multitheftauto.com/index.php?title=Meta.xml Add line to meta in freeroam: <min_mta_version server="1.5.6-9.16362" client="1.5.6-9.16362" /> And, run the upgrade command in console:
    1 point
  12. @anlaltnay Download the latest freeroam resource from: (after downloading, located in [gameplay]) https://github.com/multitheftauto/mtasa-resources
    1 point
  13. Maybe because of: Serverside commands can only be executed by the server. The same applies to the client side This is how you kill your server network. local players = getElementsWithinRange(x, y, z, 50, "player") for i,player in ipairs(players) do triggerClientEvent(player, "chat:box", root, thePlayer, set, first) end You trigger this event separately per player. Very bad solution. You know you can use table of players instead as first argument? Which is players in your case. Also using ipairs is bad, since this is worst type of loop. I'm kinda repeating myself - https://forum.multitheftauto.com/topic/121808-doubts-if-you-can-improve-performance/
    1 point
  14. @+snts Bom a não ser que você queira mostrar alguma imagem/texto na tela do player é totalmente desnecessário a conexão entre server e client. Esse script em especifico pode ser somente server-side sem problemas, inclusive é o que eu recomendo. No caso o certo a se fazer seria você declarar o parâmetro e passar ele, só isto acho que já resolveria os erros function SpawnMoto (jogador) local x,y,z = getElementPosition(jogador) No caso do script do #Roots seria algo assim: local veh = {} function SpawnMoto (jogador) if veh[jogador] and isElement( veh[jogador] ) then destroyElement( veh[jogador] ) veh[jogador] = nil end local x,y,z = getElementPosition(jogador) veh[jogador] = createVehicle(522, x,y,z) warpPedIntoVehicle (jogador, veh[jogador]) end addCommandHandler("moto", SpawnMoto) Seria legal você já pensar em usar os outros parâmetros tipo: local veh = {} function SpawnMoto (jogador, comando, id) if veh[jogador] and isElement( veh[jogador] ) then destroyElement( veh[jogador] ) veh[jogador] = nil end local x,y,z = getElementPosition(jogador) veh[jogador] = createVehicle(tonumber(id),x,y,z) warpPedIntoVehicle (jogador, veh[jogador]) end addCommandHandler("moto", SpawnMoto) 3 parâmetros o ultimo(id) seria o id do veiculo! Então vc iria digitar tipo /moto 522 ai apareceria a NRG, ou se vc digitasse /moto 462 aparecia outro veiculo e assim por diante... Teste e nos de um retorno se esta funcionando ou não.
    1 point
  15. Tente isso veh = {} function SpawnMoto () if veh[source] and isElement( veh[source] ) then destroyElement( veh[source] ) veh[source] = nil end local x,y,z = getElementPosition(source) veh[source] = createVehicle(522, x,y,z) warpPedIntoVehicle (source,veh[source]) end addCommandHandler("moto", SpawnMoto)
    1 point
  16. Foi vazado já há um tempo. Não tenho mais contato com os verdadeiros autores.. Mais pertence a GameMode da unitgames. "Alex Cardin" "Zolo" e "Ian Mesquita" se preferir entre em contato com eles para fazer a comparação. TerraGames também tem um sistema de IDs que foi vazado. Pertencente ao Emanuel Se não quiser. Desconsidere. pois minha palavra não resolve não é mesmo? Eu que sempre contribui com a comunidade mtabr. lamentável isso..
    1 point
  17. @redditing That is because the event already exists and you are not removing it when you leave the marker Use https://wiki.multitheftauto.com/wiki/OnMarkerLeave https://wiki.multitheftauto.com/wiki/RemoveEventHandler
    1 point
  18. This tutorial is not for beginners. This code will successfully find the player scaling factor, to convert the 3D world units to 2D pixels on your monitor. The factor 0.622388530006 is probably a standard, but you never know. Image1 Image2 Image3 Image4 The function that finds this factor. local screenX,screenY = guiGetScreenSize() local scaleFactorBuffer = nil function findScaleFactor () if scaleFactorBuffer then return scaleFactorBuffer else local startX,startY,startZ = getWorldFromScreenPosition ( 0,0, 1 ) local endX,endY,endZ = getWorldFromScreenPosition ( screenX,screenY, 1 ) if startX and endX then scaleFactorBuffer = 1/getDistanceBetweenPoints3D(startX,startY,startZ,endX,endY,endZ) return scaleFactorBuffer end end return false end The set up for the example below: -- the set up -- local imagePosX,imagePosY,imagePosZ = -21.38184, 5.24524, 3.10965 local imageResolution = 1000 ---------------- The example on how to use: addEventHandler("onClientRender",root, function () local scaleFactor = findScaleFactor () if scaleFactor then dxDrawText("scaleFactor: " .. scaleFactor,300,300) -- The scale factor is circa 0.622388530006 (units). local rectangleCenterX,rectangleCenterY = getScreenFromWorldPosition(imagePosX,imagePosY,imagePosZ) if rectangleCenterX and rectangleCenterY then local playerX,playerY,playerZ = getElementPosition(getCamera()) local size = (imageResolution*scaleFactor)/getDistanceBetweenPoints3D(playerX,playerY,playerZ,imagePosX,imagePosY,imagePosZ) dxDrawText("size: " .. size,300,320) dxDrawRectangle(rectangleCenterX+size/2,rectangleCenterY+size/2,size,size,tocolor(0,0,200)) end end end)
    1 point
×
×
  • Create New...