-
Posts
3,932 -
Joined
-
Last visited
-
Days Won
174
Everything posted by Lord Henry
-
Sempre tive esse mesmo problema, hauahuahaua. Meus resources funcionam perfeitamente em server local, mas dai quando eu coloco em server público, entope de erros e bugs. -------------- Quanto ao seu primeiro problema, sugiro que crie os markers client-side e dai verifique se o hitElement == localPlayer. Caso não queira fazer isso, então sete uma data no marker identificando o jogador que criou aquele marker como "dono" usando setElementData no marker, então crie uma condição que verifica se o hitElement == getElementData do marker. O primeiro jeito tem melhor desempenho, mas você precisa tomar cuidado ao fazer o triggerClientEvent e depois o triggerServerEvent ao colidir naquele marker. Quanto ao seu segundo problema, primeiro resolva o problema anterior antes de pensar em implementar ele. Mas já vou logo adiantando que você precisará criar uma table com todas as posições de caixas, por exemplo assim: boxPositions = { [1] = {-1200.62, 522, 10}, -- Coordenadas x, y, z. [2] = {-1222.22, 530, 10}, [3] = {-1224, 515, 10}, }
-
[AJUDA] Ponto de Spawn de acordo com a localização
Lord Henry replied to dener189's topic in Programação em Lua
Não entendi direito o que você quer. Você quer que o jogador nasça num hospital mais próximo depois de morrer? Em vez de nascer num ponto aleatório. -
Da próxima vez, não crie outro post igual na sessão geral. E também não precisa colocar fonte grande com negrito, isso é considerado spam. Agora em relação ao seu problema, eu faria um pickup customizado usando createPickup e depois usaria o evento onPickupUse pra fazer esse pickup funcionar. Mas como você provavelmente quer fazer mais do que 1 pickup, então é melhor colocá-los em uma table e com um pequeno loop, verificar se o pickup usado é um deles. Fiz um exemplo genérico, um pickup está no hospital 1 de LS e o outro está no hospital 2 de LS. E cada pickup ao ser usado dá um colete e uma pistola com 100 de munição ao jogador. No entanto, o jogador pode usar várias vezes o pickup se quiser mais munição, o pickup respawna após 5 segundos. loots = { [1] = createPickup (2022, -1402, 17, 3, 1279, 5000, 1), [2] = createPickup (1173, -1319, 15.5, 3, 1279, 5000, 1), } addEventHandler ("onPickupUse", getRootElement(), function (thePlayer) for i, pickup in ipairs (loots) do if source == pickup then giveWeapon (thePlayer, 22, 100, true) setPedArmor (thePlayer, 100) break end end end)
-
Difícil entender. Os scripts não possuem indentação.
- 1 reply
-
- 1
-
Então há erro no seu triggerServerEvent. Verifique se os parâmetros declarados depois do localPlayer existem e se estão corretos.
-
Existe algum erro no /debugscript 3? Já tentou colocar um outputChatBox na função startAnim pra saber se ela chega a ser executada?
-
O primeiro outputChatBox não precisa. Além disso vc está deixando brecha pro cara ficar floodando o chat com essa mensagem se ele ficar usando o comando várias vezes. E o segundo outputChatBox faltou vc colocar sourcePlayer antes do 255. E também só tem 1 TAB no início da linha, e não 2.
-
Pois é, ahuahauhaua Normalmente eu nunca passo código pronto, pois isso desestimula o usuário a ir buscar informações na Wiki. Mas como eu deixei o código comentado, ele pode estudar o código também.
-
Sim. Os triggers exigem que vc crie um evento compartilhado usando addEvent e depois anexe esse evento na função que vc quer que ele execute usando addEventHandler.
-
Ta ae: client.lua local x, y = guiGetScreenSize () -- x e y recebem a resolução da tela do jogador. local rendering = false -- variável que indica se a imagem está sendo renderizada ou não, para evitar que bugue ao usar o comando enquanto já está renderizando a imagem. local minutos = 15 -- Quantos minutos o jogador deve esperar para perder a TAG de Punheteiro function pornRender () -- Essa função é chamada a cada frame. dxDrawImage (0, 0, x, y, "nude.png", 0, 0, 0, tocolor(255,255,255,255), true) -- Desenha a imagem 'nude.png' na tela inteira do jogador. end addEvent ("verPunheta", true) addEventHandler ("verPunheta", getRootElement(), function () -- Função que inicia o render da imagem. if not rendering then -- Se a imagem já não está sendo renderizada, então: rendering = true -- Ela é considerada renderizada agora. addEventHandler ("onClientRender", getRootElement(), pornRender) -- Inicia o render da imagem a cada frame. setTimer (stopRender, 15000, 1) -- Daqui a 15 segundos, executa a função stopRender uma única vez. if isTimer (pornTimer) then -- Se já existe o timer para tirar a TAG do jogador, então: resetTimer (pornTimer) -- Reinicia esse timer. else -- Se não existe o timer, então: pornTimer = setTimer (function () -- Cria o timer. triggerServerEvent ("cancelaTag", localPlayer) end, minutos * 60000, 1) -- Daqui a 15 minutos, executa o evento "cancelaTag" no server, que irá remover a TAG. end end end) function stopRender () -- Função que cancela o render da imagem. if rendering then -- Se a imagem está sendo renderizada, então: rendering = false -- Ela não é mais considerada renderizada. removeEventHandler ("onClientRender", getRootElement(), pornRender) -- Cancela o render da imagem e ela some da tela. A função pornRender para de ser executada a cada frame. end end server.lua function Punha (sourcePlayer) if isGuestAccount (getPlayerAccount(sourcePlayer)) then return end -- Impede que o comando funcione para jogadores deslogados. triggerClientEvent (sourcePlayer, "verPunheta", sourcePlayer) -- Executa o evento "verPunheta" do client.lua if not isObjectInACLGroup ("user."..getAccountName(getPlayerAccount(sourcePlayer)), aclGetGroup ("Punha")) then -- Se o jogador não tem a TAG, então: aclGroupAddObject (aclGetGroup("Punha"), "user."..getAccountName (getPlayerAccount (sourcePlayer))) -- Coloca TAG de punheteiro nele. end end addCommandHandler ("punheta", Punha) -- Comando que executa a função Punha addEvent ("cancelaTag", true) addEventHandler ("cancelaTag", getRootElement(), function () if isObjectInACLGroup ("user."..getAccountName(getPlayerAccount(client)), aclGetGroup ("Punha")) then -- Se o jogador tem a TAG, então: aclGroupRemoveObject (aclGetGroup("Punha"), "user."..getAccountName (getPlayerAccount (client))) -- Remove a TAG de punheteiro dele. end end)
-
A verificação deverá ser feita no client.
-
Pra fazer com grandes períodos de tempo, recomendo que use uma variável chamada minutos e multiplique ela por 60 mil no timer. E vc fez errado, pois vc está colocando funções server-side em um script client-side. Assim não irá funcionar. Ali no código, tudo que está laranja, só funciona server-side. E tudo que está em vermelho, só funciona client-side. Os que estão em azul funcionam em ambos.
-
No caso pra fazer um anúncio, dai seria mais interessante. Mas tenha em mente que a imagem irá distorcer de acordo com a resolução do jogador. Eu não fiz escala proporcional na imagem. Por exemplo: Se a imagem tem dimensões de 800x600 pixels (4:3) mas a tela do jogador tem resolução 1366x768 pixels (proporção 16:9), a imagem ficará esticada horizontalmente. Coloca o aclGroupAddObject após o rendering = true e coloca o aclGroupRemoveObject após o rendering = false na função stopRender.
-
Realmente um script bem tosco e desnecessário. Mas vamos lá. local x, y = guiGetScreenSize () -- x e y recebem a resolução da tela do jogador. rendering = false -- variável que indica se a imagem está sendo renderizada ou não, para evitar que bugue ao usar o comando enquanto já está renderizando a imagem. function pornRender () -- Essa função é chamada a cada frame. dxDrawImage (0, 0, x, y, "nude.png", 0, 0, 0, tocolor(255,255,255,255), true) -- Desenha a imagem 'nude.png' na tela inteira do jogador. end function startRender (cmd) -- Função que inicia o render da imagem. if not rendering then -- Se a imagem já não está sendo renderizada, então: rendering = true -- Ela é considerada renderizada agora. addEventHandler ("onClientRender", getRootElement(), pornRender) -- Inicia o render da imagem a cada frame. setTimer (stopRender, 15000, 1) -- Daqui a 15 segundos, executa a função stopRender uma única vez. end end addCommandHandler ("punheta", startRender) -- Comando que executa a função startRender: /punheta function stopRender () -- Função que cancela o render da imagem. if rendering then -- Se a imagem está sendo renderizada, então: rendering = false -- Ela não é mais considerada renderizada. removeEventHandler ("onClientRender", getRootElement(), pornRender) -- Cancela o render da imagem e ela some da tela. A função pornRender para de ser executada a cada frame. end end
-
[Ajuda] Criar veiculo freezado em cima de outro
Lord Henry replied to +[T]rakin's topic in Programação em Lua
De nada. -
Cara, o balanceamento dai é com você. Você é quem tem que saber quais armas devem dar mais dano e quais devem dar menos. Vou dar um exemplo de como aumentar o dano da Colt 45, que por padrão tem dano de 25. setWeaponProperty (22, "poor", "damage", 50) Nesse caso, aumentei o dano dela pra 50. 22 é o ID da arma, os IDs estão disponíveis em Weapons. "poor" é o nível de habilidade do jogador nessa arma, por padrão os jogadores não possuem habilidades de armas, a não ser que você crie um script que faça isso. "damage" é a propriedade cujo valor você quer alterar, no caso é o dano da arma. 50 é o novo valor da propriedade. Se você quer saber qual o valor padrão do dano de uma determinada arma, use getWeaponProperty. Funciona exatamente da mesma forma, porém você não coloca o parâmetro do valor.
-
Da próxima vez, poste na sessão destinada a divulgação de serviços de hospedagem.
-
[Ajuda] Criar veiculo freezado em cima de outro
Lord Henry replied to +[T]rakin's topic in Programação em Lua
Além disso você anexou o caminhão no carro, quando na verdade deveria ser ao contrário. PMarker = createMarker (1203.865234375, -1285.80859375, 12.38519859314, "cylinder", 2, 255, 0, 0, 255) -- Vermelho FMarker = createMarker (1200.0888671875, -1352.7841796875, 12.402050018311, "cylinder", 2, 0, 255, 0, 255) -- Verde FBlip = createBlip (1203.865234375, -1285.80859375, 13.38519859314, 42) setBlipVisibleDistance (FBlip, 200) -- 150 é a distancia perfeita veh = {} vehQuebrado = {} function inicio (hitElement) -- Função do primeiro marker if getElementType (hitElement) == "player" and not getPedOccupiedVehicle (hitElement) then local accName = getAccountName (getPlayerAccount(hitElement)) if isObjectInACLGroup ("user."..accName, aclGetGroup ("Moderator")) then -- Somente moderadores podem usar esse emprego? if veh[hitElement] and isElement (veh[hitElement]) then destroyElement (veh[hitElement]) veh[hitElement] = nil end if vehQuebrado[hitElement] and isElement (vehQuebrado[hitElement]) then destroyElement (vehQuebrado[hitElement]) vehQuebrado[hitElement] = nil end x, y, z = getElementPosition (hitElement) Trabalho = true FBlip = createBlipAttachedTo (FMarker, 19) -- Bandeira veh[hitElement] = createVehicle (578, 1188.9052734375, -1278.16015625, 13.288257598877, 0, 0, 90.505493164063) -- Caminhão setElementVisibleTo (FBlip, hitElement, true) -- Mostra o blip quando começa o trabalho warpPedIntoVehicle (hitElement, veh[hitElement]) -- Transporta o jogador para dentro do caminhão vehQuebrado[hitElement] = createVehicle (422, 1186.9052734375, -1278.16015625, 13.288257598877, 0, 0, 90.505493164063) -- Caminhonete setElementCollisionsEnabled (vehQuebrado[hitElement], false) -- Desabilita a colisão da caminhonete pra não bugar a câmera. attachElements (vehQuebrado[hitElement], veh[hitElement], 0, -2, 0.8) outputChatBox ("[Emprego] Bem-Vindo ao emprego #00ccff[Reboque]", hitElement, 255, 255, 255, true) -- triggerClientEvent (hitElement, "texto", root) else outputChatBox ("[#ff0000AVISO#00ccff] #ff0000Você não pode fazer seus corres aqui!", hitElement, 0, 204, 255, true) end end end addEventHandler ("onMarkerHit", PMarker, inicio) -
[Ajuda] Criar veiculo freezado em cima de outro
Lord Henry replied to +[T]rakin's topic in Programação em Lua
Isso acontece pois você setou coordenadas no attachElements relativas ao mundo. Mas você deveria ter declarado a posição relativa entre o veículo e o caminhão. -
Boa, gostei da ideia de usar uma variável de minuto. É mais fácil do que ficar calculando milissegundos. Fiz com 1 minuto e está funcionando perfeitamente. (TESTEI) Teste o código com 1 minuto e depois com 30. local minutos = 1 function autoText () outputChatBox ("Acesse nosso site: #ffff00https://forum.multitheftauto.com/forum/97-portuguese-português/", root, 255, 255, 255, true) end setTimer (autoText, 60000*minutos, 0)
-
Espere 30 minutos com ele ligado. E esse código só funciona se for server-side.
-
[Ajuda] Criar veiculo freezado em cima de outro
Lord Henry replied to +[T]rakin's topic in Programação em Lua
Vc chegou a ler a Wiki do attachElements? -
[Ajuda] Criar veiculo freezado em cima de outro
Lord Henry replied to +[T]rakin's topic in Programação em Lua
Quando vc anexa o veículo em outro elemento, não adianta dar freeze nele, pois a posição dele irá acompanhar a posição do outro elemento. -
function autoText () outputChatBox ("Acesse nosso site: #ffff00https://forum.multitheftauto.com/forum/97-portuguese-português/", root, 255, 255, 255, true) end setTimer (autoText, 1800000, 0)
-
[Ajuda] Criar veiculo freezado em cima de outro
Lord Henry replied to +[T]rakin's topic in Programação em Lua
Qual parte vc não está conseguindo? Só criar o veículo e depois anexá-lo ao caminhão usando a função mencionada pelo colega acima. Você não deve dar freeze no veículo.