Jump to content

Lord Henry

Other Languages Moderators
  • Posts

    3,954
  • Joined

  • Last visited

  • Days Won

    178

Everything posted by Lord Henry

  1. @Daniel RPAo utilizar a função fromJSON, é necessário que JSON esteja em maiúsculo. local title, value = fromJSON(myvariable)
  2. Você pode começar com isso: for i, player in ipairs(getElementsByType("player")) do local name = getPlayerName(player) local id = getElementData(player, "ID") or "N/A" dxDrawText(name.." ("..id..")", screenW * 0.574, (screenH * 0.2639) + (i * 20), screenW * 0.687, (screenH * 0.7167) + (i * 20), tocolor(255, 255, 255, 255), 1.30, "default", "center") end
  3. @STB HURONAdicione dois traços no início da última linha do código que você mandou. -- addEventHandler("onPlayerWasted", getRootElement(), spawnOnDead)
  4. @Périclesfaça com que o resource do DX Msg exporte suas funções para os demais scripts usarem, exportando as funções dele no meta.xml Para chamar uma função exportada por outro resource, use a função call. Mais conhecida como exports.
  5. Por algum bug, esse parâmetro opcional não funciona se usar no mesmo instante em que o veículo é criado. Para fazer com que ele funcione, adicione um tempo para que a função seja chamada só depois que o veículo já está criado. Usando um setTimer de 100 milissegundos já resolve. taxi = createVehicle (420, 2472.5, -1688, 13.3) -- Cria um taxi na Grove Street. setTimer (setVehicleDoorState, 100, 1, taxi, 0, 4, false) -- Arranca o capô do taxi em seguida, mas sem deixar ele voando perto do veículo.
  6. O interpolateBetween é uma função onde você consegue obter o "meio" de dois valores inserindo o começo e o final e especificando qual a posição deste meio entre 0 e 1. Por exemplo: Se você tem a coordenada do início do trajeto da bala e a coordenada do final da bala (coordenada onde ela atingiu), se você especificar o valor 0.5 entre eles em um interpolateBetween, você vai obter a coordenada do meio entre elas. local laserShoots = {} -- Tabela que vai armazenar as infos de cada laser. local contador, limite = 0, 20 -- Índice do laser atual | Número máximo de lasers que este jogador pode ver ao mesmo tempo. -- Ao atingir este limite, os lasers mais antigos serão substituídos pelos novos. Limites altos demais causarão lag. local tamanho, velocidadeLaser = 0.05, 0.16 -- Comprimento do laser | Velocidade do laser. (o tiro real continua na mesma velocidade) function onPlayerShoot(w,a,aC,hX,hY,hZ,hE) local sx, sy, sz = getPedWeaponMuzzlePosition(source) -- Obtém a posição de onde sai o tiro. if (sx) then -- Se o jogador atirou com uma arma de fogo (existe a posição do início do tiro), então: contador = contador + 1 -- Contador de 0 vai pra 1, depois vai pra 2 e assim por diante. if (contador > limite) then -- Se o contador passou do limite, então volta pro 1. contador = 1 end laserShoots[contador] = {0, sx, sy, sz, hX, hY, hZ} -- Adiciona as posições de início e final do tiro. O zero indica a posição do tiro ainda não percorreu seu traçado, 0 é no começo e 1 é no final. end end addEventHandler("onClientPlayerWeaponFire", root, onPlayerShoot) -- Ativa essa função quando algum player atirar. addEventHandler("onClientPedWeaponFire", root, onPlayerShoot) -- Ativa essa função quando algum NPC atirar. (opcional) function renderLaserShoots() for i, tiro in pairs (laserShoots) do -- Para cada tiro faça: local percorrido, startX, startY, startZ, endX, endY, endZ = unpack(tiro) -- Obtém as infos do tiro. percorrido = percorrido + velocidadeLaser -- Adiciona a velocidade ao percorrido. Isso faz com que quanto maior a velocidade, mais o laser percorre a cada frame. if (percorrido > 1) then -- Se o laser chegou ao seu destino, então: laserShoots[i] = nil -- Remove ele da tabela de lasers. else -- Se o laser ainda não chegou no destino, então: laserShoots[i] = {percorrido, startX, startY, startZ, endX, endY, endZ} -- Atualiza a nova posição percorrida do laser na tabela. local px1, py1, pz1, px2, py2, pz2 if (percorrido - tamanho >= 0) then -- Isso serve para dar comprimento ao laser, em vez de ser um ponto, ele será um traço. px1, py1, pz1 = interpolateBetween (startX, startY, startZ, endX, endY, endZ, percorrido - tamanho, "Linear") -- Obtém a posição um pouco atrás do tiro. else px1, py1, pz1 = interpolateBetween (startX, startY, startZ, endX, endY, endZ, 0, "Linear") -- Considera como 0 as posições abaixo de 0 para evitar erros. end if (percorrido + tamanho <= 1) then px2, py2, pz2 = interpolateBetween (startX, startY, startZ, endX, endY, endZ, percorrido + tamanho, "Linear") -- Obtém a posição um pouco na frente do tiro. else px2, py2, pz2 = interpolateBetween (startX, startY, startZ, endX, endY, endZ, 1, "Linear") -- Considera como 1 as posições acima de 1 para evitar erros. end dxDrawLine3D (px1, py1, pz1, px2, py2, pz2, tocolor(0,162,0,150), 2.3) -- Cria um traço entre a posição um pouco na frente e um pouco atrás da posição simulada do tiro com a cor e espessura especificados. (cria o laser) end end end addEventHandler("onClientRender", root, renderLaserShoots) -- Executa essa função a cada frame. Caso queira testar com um NPC: Adicione isso no final do client-side: -- ============ Apenas para testes =========== setTimer (function () for i, thePed in pairs (getElementsByType("ped")) do -- Para cada NPC, faça: if (getElementData (thePed, "autoShot")) then -- Se o NPC tem essa elementData, então: setPedAimTarget (thePed, 2488, -1670, 12.3) -- Faz ele mirar no meio do chão da Grove Street. (se não tiver isso, os lasers não aparecem pois não existe posição final do tiro) setPedControlState (thePed, "fire", true) -- Faz ele ficar atirando. end end end, 500, 1) -- Executa isso meio segundo depois que iniciar este resource. E coloque isso server-side: -- ============== Apenas para testes ================= randomPed = createPed (0, 2510, -1670, 13.55, 90) -- Cria um NPC na Grove Street. giveWeapon (randomPed, 30, 9999, true) -- Dá uma AK-47 com 9999 de munição pra ele. setElementData (randomPed, "autoShot", true) -- Coloca essa data nele só pra diferenciá-lo de outros NPCs.
  7. @angelunivc precisa escolher uma linguagem de programação específica para desenvolvimento de aplicativos e sites. Recomendo que estude JavaScript, CSS e HTML para sites. Tem tutoriais no Youtube.
  8. Não. Isso é nativo do MTA e não pode ser alterado pelos servidores. A parte server-side ali do código já garante que nenhuma mensagem de teamsay seja enviada pelos jogadores.
  9. Faltou fechar aspas ao final do link do vídeo.
  10. -- CLIENT-SIDE addEventHandler("onClientKey", root, function(button, state) -- Se o jogador pressionar ou soltar uma tecla, ativa essa essa função: if (button == "y" and state) then -- Se a tecla for o Y e for pressionada, então: cancelEvent() -- Cancela a função e a tecla Y não vai funcionar. (ela ainda funcionará para digitar comandos) end end) -- SERVER-SIDE addEventHandler("onPlayerChat", root, function(message, messageType) -- Ativa essa função quando alguém tentar usar o chat. if (messageType == 2) then -- Se for usando o teamsay, então: outputChatBox("Team Chat está desabilitado.", source, 255, 150, 0) -- Opcional, manda essa mensagem pro jogador que tentou. cancelEvent() -- Não envia a mensagem que o jogador tentou. end end) Vale lembrar que se o jogador trocar a tecla do teamsay nas configurações do menu ESC para outra tecla, ele vai conseguir abrir o teamsay pela outra tecla que ele configurar. Da mesma forma, se ele colocar o chat normal na tecla Y, este chat deixará de funcionar para o jogador.
  11. As animações sexuais foram removidas da versão de PC do GTA:SA Então sim, precisa obter elas de outra forma para usar.
  12. Ele está reclamando que data["img"] e data["imgcicle"] são nulos. Você precisa adicionar um verificador antes para saber se eles existem. if (data["img"]) then if (data["imgcicle"]) then
  13. @SciptNovatopor algum bug interno do MTA, veículos criados direto no jogador não ativam o evento onVehicleEnter. Para contornar isso, tente utilizar a função onElementStartSync que é acionada sempre que um novo elemento começa a ser sincronizado por um jogador. Adicione verificadores de segurança para garantir que o script só considere veículos e que o veículo seja o mesmo que o jogador está dentro.
  14. @filsk faltou colocar um takePlayerMoney (source, 34) no script. Bem embaixo da linha do getPlayerMoney.
  15. Se você olhar a Wiki do DxDrawText, vai perceber que existe o parâmetro colorCoded. Coloque-o como true e então você pode usar códigos #HEX no seu texto da mesma forma que usaria em um outputchatbox. dxDrawText(ID.." -#00FF00 VOZ ATIVADA #FFFFFF- FPS: 70 -", x*1600, y*752, x*1193, y*775, tocolor(255, 255, 255), 1, "default", "right", "top", false, false, false, true, false) else dxDrawText(ID.." -#FF0000 VOZ DESLIGADA #FFFFFF- FPS: 70 -", x*1600, y*752, x*1193, y*775, tocolor(255, 255, 255), 1, "default", "right", "top", false, false, false, true, false)
  16. Faça o script client-side. Assim um jogador não interfere na plantação de outro. E todos podem trabalhar ao mesmo tempo na plantação. Mas na parte de pagar o jogador, dai faça server-side.
  17. @Pedrowfavor não reviver tópicos antigos.
  18. @DiogoSZvocê vai precisar basicamente disso: createMarker - Cria o marker onde o player vai encostar para ser teleportado junto com seu veículo. onMarkerHit - Evento que ativa alguma função ao colidir no marker. setElementPosition - Coloca o elemento que colidiu no marker em uma posição específica. (teleporta ele pra essa posição) Obs: Teleporte o veículo em vez do jogador, pois teleportar um jogador que está dentro de veículo não funciona. É necessário teleportar o veículo em vez disso, então os ocupantes dele vão junto. Para obter o veículo do jogador você vai precisar usar getPedOccupiedVehicle Vou começar o script só para facilitar pra vc e depois faça sua parte: local theMarker = createMarker (2493.37, -1681.07, 12.35, "cylinder") -- Cria um marker na frente da casa do CJ. addEventHandler ("onMarkerHit", resourceRoot, function (hitElement) -- Ativa essa função ao colidir em algum marker deste resource. if (hitElement and getElementType (hitElement) == "player") then -- Se o elemento que colidiu no marker for um player, então: if (source == theMarker) then -- Se o marker que foi colidido for o theMarker, então: (caso tenham outros markers criados neste resource, isso evita conflitos) -- Continue a partir daqui. outputChatBox ("Tentou teleportar.", hitElement) -- Troque essa linha por um setElementPosition ... end end end)
  19. Agora está certinha a indentação. Mais uma dica: Você pode trocar todos os getRootElement() por root
  20. Pra começar, você precisa corrigir a indentação do seu código. Veja aqui como fazer isso:
  21. @Lipee Lima copiou errado o código. Tente novamente:
  22. O painel admin tem uma função de tirar print da tela do jogador e deixar salva para outros Staffs poderem acessar pelo painel, sugiro que dê uma estudada nele. Você seleciona o jogador no painel admin, e dai clica no botão "screenshot" para tirar uma print da câmera do jogador. Essa print fica disponível no painel para qualquer Staff poder ver.
×
×
  • Create New...