Jump to content

Lord Henry

Other Languages Moderators
  • Posts

    3,972
  • Joined

  • Last visited

  • Days Won

    179

Everything posted by Lord Henry

  1. Faça o script client-side.
  2. Desconsiderando totalmente a otimização do servidor, eu diria que com um processador fraquinho desse e internet moderada vc consegue no máximo uns 30 players pra jogar liso. Mas isso é apenas achismo, não tem como saber sem testar de fato.
  3. Isso você faz na função onde o addCommandHandler foi anexado. addCommandHandler ("vida", function (thePlayer, cmd, id, qnt) -- Aqui vc tem os valores de id e qnt end)
  4. addEventHandler ("onPlayerChat", root, function () cancelEvent() end)
  5. Se o script vendido é a pronta-entrega: O suporte deve cobrir bugs que o resource possa ter até que ele atenda completamente o objetivo que ele propõe. Nada além disso. Se o script vendido é customizado/exclusivo: É necessário atender todos os objetivos solicitados pelo cliente. Para isso, é necessário que todos os objetivos estejam bem esclarecidos antes da entrega do resource, para evitar que o cliente peça novos objetivos do resource após a entrega. Os preços variam de acordo com a complexidade do resource, tempo que demorou para desenvolver, qualidade da otimização, qualidade da programação (sem erros nem warnings no debugscript), suporte pós venda, exclusividade, importância do resource como um todo. Como base, recomendo o seguinte: Resources simples = R$25,00 (Empregos de dirigir até tal lugar, sempre no mesmo lugar. Painel VIP. Painel de corp/gangue. Mapas sem nenhum sistema ou no máximo um sisteminha simples de abrir/fechar portão.) Resources intermediários = R$50,00 (Empregos que exigem múltiplas ações do jogador, ex: Vai até um lugar, faz tal coisa e depois precisa ir até outro lugar. Scripts que precisam de algum painel um pouco mais elaborado, como painel de policial para buscar/multar/prender jogadores. Mapas que possuam sistemas intermediários de proteção da base, painel de gerenciamento.) Resources avançados = R$100,00 (Sistemas de segurança que envolvam fetchRemote ou banco de dados, sistema de casas gerenciáveis.) Resources extremamente complexos = R$200,00 (Sistema de dominação de zonas que funciona com banco de dados, timers, pagamentos aos membros das equipes dominantes, pontuação em tempo real durante o conflito de ataque/defesa de zonas, veículos/pickups/teleportes exclusivos das zonas, sistema de salvamento automático, áudios, colShapes, radarAreas, mensagens e informações em DX, etc. Tudo sem bugs ou erros.) Depende dos termos que você estabeleceu com ele. Se for um script exclusivo pro cliente, se ele vazar é problema dele e o script deixará de ser exclusivo. Se for um resource a pronta-entrega, dai não se pode vazar. Até hoje não existe nenhum método infalível de proteger os scripts. Ainda mais sem ser compilando. Um método bem comum é proteger o resource via IP para que ele só funcione no IP do cliente. Mas nada adianta se o script não estiver compilado. ------ Sempre deixe seus termos bem claros e acessíveis na sua loja. Não deixe brechas para interpretações do cliente que busquem te prejudicar. Deixe claro as opções de suporte, garantia, trocas, reembolsos para evitar que os clientes tentem te dar calote.
  6. Só criar uma condição junto do dxDraw. Se o mouse estiver em cima do elemento, cria ele com tal cor, caso contrário cria com outra. Você vai precisar da função útil isMouseInPosition Exemplo maroto: local sX, sY = guiGetScreenSize() -- Obtém a resolução do jogador. showCursor (true) -- Mostra o cursor na tela. function isMouseInPosition ( x, y, width, height ) -- Código-fonte da função útil. Obs: Não funciona para textos, use a versão alternativa para isso. if ( not isCursorShowing( ) ) then return false end local sx, sy = guiGetScreenSize ( ) local cx, cy = getCursorPosition ( ) local cx, cy = ( cx * sx ), ( cy * sy ) return ( ( cx >= x and cx <= x + width ) and ( cy >= y and cy <= y + height ) ) end addEventHandler ("onClientRender", root, function () -- Executa essa função a cada frame, para manter o retângulo visível. if (isMouseInPosition (sX/2, sY/2, 100, 50)) then -- Coloca os mesmos parâmetros usados para criar o DX. dxDrawRectangle (sX/2, sY/2, 100, 50, 0xFFFFFFFF) -- Se o mouse está em cima da área do retângulo, então cria ele na cor branca. else -- Se o mouse não está em cima do retângulo, então: dxDrawRectangle (sX/2, sY/2, 100, 50, 0xFF808080) -- Cria ele em cinza. end end) Outra forma que dá pra fazer, mais compacta é você declarar a condição dentro do próprio parâmetro de cor. addEventHandler ("onClientRender", root, function () -- Executa essa função a cada frame, para manter o retângulo visível. dxDrawRectangle (sX/2, sY/2, 100, 50, (isMouseInPosition (sX/2, sY/2, 100, 50) and 0xFFFFFFFF) or 0xFF808080) -- Se o mouse está em cima da área do retângulo, então cria ele na cor branca, caso contrário cria na cor cinza. end)
  7. Um painel assim seria bem horrível em design e com certeza iria incomodar o usuário. Mas se quer fazer mesmo assim, você pode simplesmente trocar todos os tocolor (...) por uma variável. Dai vc apenas tem que ficar mudando essa variável para alterar a cor do painel inteiro.
  8. addCommandHandler ("tag", root, function (thePlayer) -- Comando para mostrar/ocultar a nametag é /tag if (hasObjectPermissionTo (thePlayer, "command.mute", false)) then -- Se o jogador que usou o comando for Staff (tem permissão de mutar), então: if (isPlayerNametagShowing (thePlayer)) then -- Se a nametag dele está visível, então: setPlayerNametagShowing (thePlayer, false) -- Oculta a nametag dele. outputChatBox ("Sua nametag agora está #ff6400oculta.", thePlayer, 231, 217, 176, true) else -- Se a nametag dele está invisível, então: setPlayerNametagShowing (thePlayer, true) -- Mostra a nametag dele. outputChatBox ("Sua nametag agora está #00ff00visível.", thePlayer, 231, 217, 176, true) end else -- Se o jogador não tem permissão de mutar, então: outputChatBox ("Acesso negado.", thePlayer, 255, 0, 0) -- Apenas manda essa mensagem no chat dele. end end)
  9. Utilize o botão <> do fórum para postar scripts. Não cole direto no texto.
  10. Daria pra simplesmente salvar o ID das texturas de cada veículo em uma tabela JSON dentro da conta do jogador com toJSON e setAccountData. Assim cada conta teria seus IDs salvos em cada veículo. Dai ao logar, aplicaria essas texturas salvas nos veículos. Se salvar no script, todas as configurações dos jogadores serão perdidas se reiniciar o resource. A não ser que se faça um banco de dados, que no fim das contas dá até mais trabalho do que salvar na conta do jogador.
  11. Utilize o botão <> do fórum para postar códigos. Não cole direto no texto.
  12. Utilize o botão <> do fórum para postar scripts. Não cole direto no texto.
  13. Tópico movido para a seção Offtopic por se tratar de recrutamento de scripters.
  14. O script deve ser client-side. E você precisa adicionar o código-fonte da função no seu script, pois ela é uma função útil.
  15. O fórum não é lugar para pedir scripts prontos. Se quiser que alguém faça pra você, contrate um scripter. Se quiser aprender, aí sim você podemos lhe ajudar com suas dúvidas.
  16. local mrk = createMarker (-2420.59, -608.16, 131.56, "cylinder", 1.6, 255, 0, 0, 40) -- Não é necessário coordenada com mais de 2 decimais. addEventHandler ("onClientKey", root, function (button, press) -- root = getRootElement() if (isElementWithinMarker (localPlayer, mrk)) then -- Não se verifica root, verifique se localPlayer está no marker. if (button == "F1" or button == "F3") then -- or == "F3" não existe. Você precisa especificar o que é igual a F3 novamente. cancelEvent() end end end)
  17. Utilize onClientKey e verifique se a tecla for uma dessas que você quer bloquear. Se for, cancele o evento com cancelEvent().
  18. Cara, eu até iria te mandar um exemplo de dominação mas acabou que é muito mais complexo do que parece. Tem um monte de detalhe pequeno pra fazer e evitar bugs. Eu também fiz com timer global em vez de cada zona ter seu timer, mas mesmo assim é muito complexo.
  19. Dá pra iniciar o timer automaticamente em uma função. Não precisa de comando.
  20. Quando eu digo alterar, quero dizer que vc pode deixar ela quebrada, arrumada ou arrancada.
  21. Os timers que você está usando não possuem um "final" pois são timers infinitos. Então você precisaria iniciar o outro timer no mesmo lugar que você cancela o primeiro.
  22. Postou na seção errada, colega. A seção Tutoriais em Geral é pra você postar seu tutorial ajudando os outros usuários. Para fazer perguntas relacionadas a programação, utilize a seção Programação em Lua. Seu tópico foi movido para a seção adequada.
  23. Alterar pneu específico: setVehicleWheelStates Alterar porta específica do veículo: setVehicleDoorState Alterar para-brisa e parachoques: setVehiclePanelState Ocultar parte específica do veículo (só funciona client-side): setVehicleComponentVisible
×
×
  • Create New...