-
Posts
3,982 -
Joined
-
Last visited
-
Days Won
181
Everything posted by Lord Henry
-
timer every 1 second Micro-dúvida em relação ao desempenho
Lord Henry replied to Lord Henry's topic in Programação em Lua
Ainda estou tentando fazer client-side. Estou tendo que mudar a lógica de tudo, passar todas as variáveis pro client.- 8 replies
-
- trigger
- accountdata
-
(and 2 more)
Tagged with:
-
[Ajuda] Pegar quantidade player do time
Lord Henry replied to TeixeiraRB's topic in Programação em Lua
function verificaRoubo () local theTeam = getTeamFromName ("PM") if (theTeam) then if countPlayersInTeam (theTeam) >= 5 then -- Se tem 5 ou mais jogadores no time "PM", então inicia o roubo. -- Inicia o roubo. else -- Cancela o roubo. end end end -
timer every 1 second Micro-dúvida em relação ao desempenho
Lord Henry replied to Lord Henry's topic in Programação em Lua
Mas e quando o jogador sair do servidor? Como eu vou fazer pra salvar os dados na conta dele? Faço um triggerClientEvent pra que o cliente envie os dados ao servidor usando um triggerServerEvent? Estou usando isso para salvar os dados quando o resource para. Também faço isso quando o jogador da Quit ou desloga. function saveAllLevels () for theKey, thePlayer in ipairs (getElementsByType ("player")) do local acc = getPlayerAccount (thePlayer) if not isGuestAccount (acc) then setAccountData (acc, "level", playerLevel[thePlayer]) -- Variáveis que estou usando para guardar os dados o tempo todo. setAccountData (acc, "levelExp", playerExp[thePlayer]) setAccountData (acc, "levelTimeLapsed", playerLapsed[thePlayer]) end end end addEventHandler ("onResourceStop", getResourceRootElement(getThisResource()), saveAllLevels)- 8 replies
-
- trigger
- accountdata
-
(and 2 more)
Tagged with:
-
timer every 1 second Micro-dúvida em relação ao desempenho
Lord Henry replied to Lord Henry's topic in Programação em Lua
Então... na verdade quando o jogador fica AFK. Ele ativa uma função no cliente do jogador que irá gerar um código e mostrar na tela do jogador para que ele digite pra poder sair do AFK. Quando ele usar o código, vai se movimentar 0.01 posição pro lado, para reiniciar o getPlayerIdleTime e então seta a data "AFK" false no jogador. O objetivo é justamente fazer o jogador não querer ficar AFK. Se o jogador se mover sem acertar o código, a data "AFK" vai continuar lá e ele vai continuar bloqueado de upar até que digite o código que está mostrando na tela. E eu coloquei verificador duplo de AFK ali no timer pois não quero q ele fique ativando o cliente a cada segundo, ele só deve ativar 1 vez e esperar o jogador desativá-lo.- 8 replies
-
- trigger
- accountdata
-
(and 2 more)
Tagged with:
-
Eae pessoal. Estou com uma dúvida rápida aqui. Estou fazendo um sistema de level, nesse sistema existe um verificador server-side que verifica todos os jogadores a cada 1 segundo procurando por players AFK para pausar o Up do level. Até então sem problemas, mas estou querendo colocar o tempo do up de cada jogador aparecer na tela deles, qual procedimento a seguir é MAIS LEVE para fazer isso? cria uma variável, salva o tempo nela e triggerClientEvent a cada 1 segundo, para enviar essa variável atualizada ao cliente. setElementData no jogador a cada 1 segundo, então o client irá sempre mostrar essa data na tela dele. setAccountData no jogador a cada 1 segundo. [Já vi que é inviável fazer assim, até porque não há como receber esse valor client-side] fazer o próprio client calcular o tempo de up? A propósito, o timer em si é este: (server-side) No script client, deverá ter um onClientRender que deverá mostrar o playerLapsed ao jogador. (só que no client, irá formatar os milisegundos em minutos/segundos.)
- 8 replies
-
- trigger
- accountdata
-
(and 2 more)
Tagged with:
-
Ah... Vc não me disse que era Client-Side o script. Achei que fosse Server-side. Mas tudo bem, que bom que funcionou. Deixa um like lá pra ajudar.
-
Esse Script Esta Certo ? Não Funciona no server me ajuda favor !
Lord Henry replied to Jaaaack's topic in Programação em Lua
Não tem como saber. Vc não falou pra que ele serve. E também não entendi a utilidade da primeira linha, já que vc poderia usar root pois ele já é = getRootElement() Você inclusive deixou comentários no código mas sem marcar como comentário, dai ele está tentando interpretar seu comentário como código. (linha 280) -
function Health (player) local hungerLvl = tonumber (getElementData (player, "Hunger")) if hungerLvl <= 0 then -- Se o jogador estiver com fome, então: local healthLvl = getElementHealth (player) hungerTimer = setTimer (function() -- Começa a matar 5 de HP a cada meio segundo. setElementHealth (player, healthLvl - 5) end, 500, 0) if healthLvl == 0 then -- Se o jogador não tem mais vida (morreu), então: if isTimer (hungerTimer) then killTimer (hungerTimer) -- Para de tirar a vida que ele nem tem. end end elseif isTimer (hungerTimer) then -- Se o jogador não estiver mais com fome, para de tirar a vida dele. killTimer (hungerTimer) end end
-
Procure pelo seu código, onde tiver isso: showCursor(true) Coloque isso na linha seguinte: guiSetInputEnabled(true) E onde estiver com isso: showCursor(false) Coloque isso na linha seguinte: guiSetInputEnabled(false) O guiSetInputEnabled, se for true, desabilita os comandos do jogo e as teclas vão para o menu GUI, se for false, habilita as teclas do jogo novamente.
-
Se você tivesse procurado pelo fórum, encontraria sua pergunta já respondida aqui: https://forum.multitheftauto.com/topic/93890-mtasa-comandos-de-atalho-freeroam/?tab=comments#comment-844519
-
Acho que deve usar o loop pois todos os ocupantes do veículo devem sair quando o veículo começa a pegar fogo. O loop verifica quais jogadores estão dentro do veículo e faz cada um deles executar o comando de saída. Não entendi como você faria sem o loop.
-
@murathanryz You need to post the original resource link here for verification.
-
JUST DO IT! Tente isso: function getOutVehicle (loss) local thePlayers = getVehicleOccupants (source) -- thePlayers recebe todos os ocupantes do veículo que está recebendo dano. if getElementHealth (source) <= 250 then -- Se o veículo está prestes a explodir, então: for seat, occupant in pairs (thePlayers) do -- Para cada jogador que está no veículo, faça isso: if occupant and getElementType (occupant) == "player" then -- Se existe um ocupante e ele é um jogador (poderia ser um NPC), então: setControlState (occupant, "enter_exit", true) -- Faz o jogador sair do veículo, ativando controle de entrar_sair de veículo. (não funciona em NPCs) setTimer (setControlState, 500, 1, occupant, "enter_exit", false) -- Depois de meio segundo, para de ativar esse controle. end end end end addEventHandler ("onVehicleDamage", getRootElement(), getOutVehicle) -- Executa essa função cada vez que um veículo recebe dano.
-
Acrescentando a resposta 4 do @DNL291: Sim, é possível restringir um script para rodar somente em um servidor específico, mas é melhor restringir por IP pois nada impede o proprietário de mudar o nome do servidor para tentar burlar o sistema de restrição. Eu desenvolvi um sistema avançado de bloqueio, ele funciona assim: De fato, não é uma tarefa fácil mexer com segurança, você precisa pensar em todas as possibilidades de invasão e armar um jeito de impedir todas elas. No fim das contas nenhum sistema é 100% seguro, mas garanto que precisa ser muito profissional para passar pela criptografia, isso está além de programadores.
-
-
Não é possível matar o jogador que já desconectou. Mas você pode salvar no jogador que saiu do server o último jogador que deu dano nele. Então marque como +1 kill como data no jogador que estava marcado no momento em que este jogador desconectar. function saveAttacker (attacker, weapon, bodypart, loss) if attacker and getElementType (attacker) == "player" then -- Se o último dano recebido foi por um jogador, então: setElementData (source, "attacker", attacker) -- Salva o jogador que deu dano nele como data. elseif attacker and getElementType (attacker) == "vehicle" then -- Se o último dano recebido foi por um veículo, então: setElementData (source, "attacker", getVehicleController (attacker)) -- Salva o motorista do veículo como data. end end addEventHandler ("onPlayerDamage", getRootElement(), saveAttacker) function quitKill (quitType, reason, responsibleElement) local killer = getElementData (source, "attacker") -- Variável killer recebe o jogador que atacou por último este jogador que saiu do server. if isElement (killer) then -- Se o jogador que atacou por último ainda existe, então: local kills = getElementData (killer, "kills") -- Variável kills recebe a quantidade de kills deste jogador que atacou por último. if not kills then -- Se não há nenhuma kill, então é 0. kills = 0 end setElementData (killer, "kills", kills + 1) -- Adiciona mais uma kill no jogador que atacou por último e salva esse novo valor como data. end end addEventHandler ("onPlayerQuit", getRootElement(), quitKill) function removeLastAttacker (ammo, attacker, weapon, bodypart, stealth) -- Adiciona +1 kill no jogador que matou alguém. E remove o último atacante do jogador que morreu para evitar kill duplicada. if getElementData (source, "attacker") then setElementData (source, "attacker", false) end if attacker then if getElementType (attacker) == "vehicle" then attacker = getVehicleController (attacker) local kills = getElementData (attacker, "kills") if not kills then kills = 0 end setElementData (attacker, "kills", kills + 1) elseif getElementType (attacker) == "player" then local kills = getElementData (attacker, "kills") if not kills then kills = 0 end setElementData (attacker, "kills", kills + 1) end end end addEventHandler ("onPlayerWasted", getRootElement(), removeLastAttacker) Não cheguei a testar. Nos avise se der certo ou não.
-
[Questions]Best program for creating new objects
Lord Henry replied to Mrzeerox's topic in Scripting
I use Blender. It's free and easy. But you need to install a plugin to import/export DFF files. I already tried 3DS Max, but too complex interface. Blender also have a complex interface, but it uses hotkeys. -
Na verdade esse tipo de gameplay não é nada escasso, é o mais abundante na comunidade do MTA. E o BR está acostumado com isso, ele vem pro MTA já esperando por isso. O pessoal que deseja RPG vai direto pro SAMP, já que lá esse tipo de gameplay é "menos raro" do que no MTA e bem mais organizado (pelo menos no server que joguei). E realmente, pra fazer um servidor RPG é bem mais complicado, vai além de complexidade e falta de interesse do público do MTA, um fato importante que devo destacar é a escassez de resources específicos de RPG na comunidade. (Mas Lord, tem milhares de resources de empregos na comunidade! Isso é de RPG.) E desde quando um RPG é apenas empregos? Essa é a atual definição de um RPG do MTA: Freeroam com empregos. Se quer um RPG de verdade, envolve sistemas avançados, level, várias opções pro jogador ter o que fazer além de só trabalhar ou roubar, empresas, sistema bancário com transferência e nenhum BR tem paciência ou conhecimento suficiente pra fazer isso. Os que tem o conhecimento não revelam a ninguém por ignorância e egoísmo e os que tem paciência não tem conhecimento e não possuem suporte para aprender. (A maioria nem procura o fórum ou nem sabe que ele existe). Perdão pelo texto longo, foi mais um desabafo (e também porque eu estava sem o que fazer, mas estamos em Off topic, então é válido). Eu ainda estou em busca do meu servidor RPG de verdade, estou desenvolvendo cada resource por conta própria (as vezes consigo suporte no fórum, mas boa parte das vezes são problemas de limitação do MTA e que não há o que fazer), os que tem na comunidade ou são resources bugados ou são básicos demais e não suprem minha necessidade. Mas a vida é assim. Vida que segue.
-
Procure pelo mod na comunidade oficial do MTA: https://community.multitheftauto.com/index.php?p=resources Sugiro que procure por Dayz, mesmo que seu server não seja de Dayz.
-
Como Mudar a POSIÇÃO do painel F1 no mta!
Lord Henry replied to Jaaaack's topic in Programação em Lua
Acesse o freeroam nos arquivos (server\mods\deathmatch\resources\[gameplay]\freeroam) e abra o script fr_client Procure por algo assim no final do script: wndMain = { 'wnd', text = 'Painel Jogador', x = 10, y = 200, width = 280, controls = { Aumente ali o valor de Y, quanto maior, mais em baixo o painel vai aparecer. Da próxima vez, pergunte no fórum português em vez de publicar em sugestões. -
getvehiclevelocity Como detectar que o veículo está dando a ré?
Lord Henry replied to Lord Henry's topic in Programação em Lua
Na verdade o objetivo era fazer as luzes mesmo, porém eu mencionei o "pi" pra ficar mais fácil de entender. De qualquer forma, se eu quiser fazer o som ainda, é fácil fazer. -
getvehiclevelocity Como detectar que o veículo está dando a ré?
Lord Henry replied to Lord Henry's topic in Programação em Lua
O exemplo da Wiki não detecta a ré quando está parado. -
Por acaso é só o T que não funciona? Ou o Y também não? Fiz uns testes aqui no meu servidor, ele é RPG. Eu liguei o Freeroam e desliguei o sistema de TAGs, dai o chat parou de funcionar. Mas se eu desligar o Freeroam, mesmo com o sistema de TAGs desligado, ele funciona. Isso indica que o Freeroam está bloqueando as mensagens e quem está mandando na verdade é o sistema de TAGs.
-
Por favor, utilize a ferramenta <> do fórum para postar o código. Isso está acontecendo pois você colocou o dano da bala da sniper em 9999. Mas para matar o jogador direto, você usa killPed e não o dano da bala em si. Também vi uma série de erros de programação no código. Use /debugscript 3 e tente corrigi-los. ----------------------------------------------------------------------------------------------------------------------------------------------------------------- Se você queria um script que matasse o jogador por headshot, teria sido mais fácil pegar o código pronto da Wiki e fazer algumas alterações em vez de pegar script bugado dos outros. function playerHeadshot (attacker, weapon, bodypart, loss) if (bodypart == 9) and (weapon == 34) then -- Se o dano foi na cabeça e feito por uma sniper, então: killPed (source, attacker, weapon, bodypart) -- Mata o jogador direto. end end addEventHandler ("onPlayerDamage", getRootElement (), playerHeadshot) Espero ter ajudado. E da próxima não crie 3 posts seguidos.
-
Considerando que vc está tentando alterar o script de terceiros sem ter o conhecimento necessário, eu não faria isso se fosse você. Toda vez que você mudar qualquer veículo do servidor que esteja na loja, você vai precisar ficar mudando o nome dele no script. (Manutenção contínua) Eu como jogador não me incomodo em ver os nomes originais dos veículos na loja, mas eu me incomodaria se visse o nome de um veículo modificado na lista e o veículo for outro nada a ver. Pense na seguinte situação: Sua loja tem uns 10 carros pra vender, todos eles são modificados e nenhum deles é veículo original do GTA. Dai você colocou os nomes de todos eles corretamente na loja. Certo dia você resolve trocar um carro do servidor por outro, por exemplo um Fiesta vc quer trocar pra um Gol. Você substitui os arquivos do Fiesta pelos arquivos do Gol tudo certinho. Mas dai na lista das lojas, ainda estará aparecendo o nome "Fiesta". Dai você terá o trabalho de abrir o script da loja só pra ir lá atualizar o nome desse veículo. Toda vez que você trocar algum veículo que tenha na loja, vc vai precisar ficar abrindo o script pra alterar os nomes. Todo esse trabalho apenas por causa de nomes.