Jump to content

Boechat

Members
  • Posts

    213
  • Joined

  • Last visited

  • Days Won

    7

Everything posted by Boechat

  1. Salve galera, gostaria da opinião de vocês das funcionalidades que não pode faltar em um bom RP.
  2. Voce pode colocar um campo "tipo" na tabela e na hora de exibir fazer esse filtro.
  3. Não recomendo que você faça com timer infinito, o desempenho não fica legal. Você pode usar a função onPlayerDamage e checar se o dano será fatal, se for, você cancela o dano, derruba o player e faz todo o resto... function playerDamage ( attacker, weapon, bodypart, loss ) if ((getElementHealth(source) - loss) <= 0) then cancelEvent() --Faz a animação etc... end end addEventHandler ( "onPlayerDamage", root, playerDamage )
  4. Então, difícil te ensinar como fazer do 0, recomendo que você passe por alguns tutoriais antes. Mas basicamente você usará a função addPedClothes para modificar a roupa e setElementModel para modificar a skin do personagem. Como você é iniciante, recomendo que comece fazendo com comandos no chat usando o addCommandoHandler e depois faça uma interface gráfica usando as funções dx ou GUI. Vou dar um exemplo de como mudar a skin, depois você pode se aventurar aí function mudarSkin ( player, comando, id ) --quando uma função é chamada com addCommandHandler é passado por parametro o player que a chamou, o comando e logo em seguida os parâmetros (o que você digitar depois do comando). Por exemplo: /skin 1 (player = jogador que deu o comando, comando = skin, id = 1) setElementModel(player, id) end addCommandHandler("skin", mudarSkin) --Ao dar o comando /skin vai executar a função "mudarSkin"
  5. Use o evento onClientElementStreamIn nos players mortos para ativar a animação assim que ele for streamado. Esse evento é acionado quando o elemento (no caso o jogador morto) é carregado no client, ou seja, quando chega perto.
  6. Salve rapaziada! Estou criando um mod de minigun em cima de um veículo, para isso eu crio uma arma com o createWeapon mas o range está muito curtinho, pra tentar aumentar esse range eu usei a função setWeaponProperty aumentado o "weapon_range" mas o range não muda. Até muda teoricamente se eu der um output com o getWeaponProperity, mas na prática os tiros não pegam e somem ainda com um range pequeno... Alguém sabe como arrumar isso?
  7. Olá, boa tarde! Primeiramente, sempre que adicionar um código no fórum, use o botão <code> para facilitar a visualização. O triggerClientEvent tem como 1° argumento opcional o client que você deseja acionar o evento. No caso, como você não definiu um destinatário, por padrão vai para todos os players (root). Para corrigir, mude de: triggerClientEvent ("OpenPanel", getRootElement()) Para: triggerClientEvent (player, "OpenPanel", getRootElement()) Leia mais na página da wiki triggerClientEvent
  8. No lugar de setElementFrozen(targetPlayer, true) coloque setElementFrozen(targetPlayer, not isElementFrozen(targetPlayer)) Obs: pode ter ficado meio bagunçado pq opção <code> do fórum não está funcionando pra mim
  9. Pra você criar uma conexão no banco de dados você deve fornecer o diretório do arquivo no 2° argumento. Veja mais detalhes do comando dbConnect na wiki. exemplo: conexao_teste = dbConnect( "sqlite", ":NomeDaResource/BancoDeDados.db" )
  10. Acredito que não de um jeito tão simples, mas você pode usar o fileGetSize para ver o tamanho dos arquivos e o fileExists para checar os arquivos baixados.
  11. INTERFACE.blips é uma tabela que a posição deve ser o diretório da imagem dos blips, por exemplo: INTERFACE.blips[1] = ":ModDeMapa/blips/1.png" Encontre onde essa tabela INTERFACE.blips é preenchida porque o erro pode estar nela...
  12. Possivelmente é problema no INTERFACE.blips[ blip_icon ]. Acho que não tem uma imagem ou textura salva nessa posição da tabela, por isso o "got nil". A função esperava um material no argumento 5 porém obteve um valor nulo.
  13. Desculpa mais um comentário, mas agora que me toquei que coloquei as funções mas não fiz o comando KKKK Adicione esse código: addCommandoHandler("setskin", function(playerSource, cmd, id, skin) --Quando der o comando setskin id = tonumber(id) --Por padrão, os comandos vem como string. Nós temos que converter para number (int) para funcionar corretamente. skin = tonumber(skin) setPlayerSkinByID (id, skin, playerSource) --Chamando a função de setar skin end) Aproveitando o post, o 1° código que eu postei ele coloca um sistema de ID no seu servidor que facilita usos futuros, mas se quiser fazer de uma forma mais simples pode fazer assim:
  14. Mas não é possível sobrescrever funções nativas? Pelo que eu li nesse tópico sobre proteção de scripts achei que fosse possível...
  15. Já notei um pequeno erro, corrija por favor (já que não dá para eu editar a resposta) Troque "root" por "resourceRoot", senão vai executar o código sempre que qualquer resource iniciar, não somente a resource em questão. Como está: addEventHandler('onResourceStart', root, function() --Quando iniciar o mod... Corrigido: addEventHandler('onResourceStart', resourceRoot, function() --Quando iniciar o mod...
  16. Eu postei a resposta acima sem querer antes de escrever o código, quando fui editar a resposta já tinha passado muito tempo... (acho um saco isso de ter limite de tempo para editar uma postagem) E eu não testei o código, testa aí e traga possíveis problemas. Não esqueça de dar um /debugscript 3 para ver o erro. function setPlayerSkinByID (id, skin, adm) --Passa um int id, int skin e element(player) adm como parâmetro. local player = getPlayerByID(id) -- Chama outra função que retorna um player passando o ID do player como parâmetro. False se não achar o player. if not player then return outputChatBox("Player não encontrado.", adm) end --Se não encontrou o player mostra uma mensagem e para a função. setElementModel(player, skin) --Seta a skin desejada no player encontrado pelo ID. end function getPlayerByID(id) for i, player in ipairs(getElementsByType('player')) do --Um for que percorre todos os players online. if getElementData(player, 'ID') == id then --Se o ID préviamente salvo no player for igual ao id passado por parâmentr, então... (!!!ATENÇÃO!!!) return player --Retorna o player e para a função. end end return false --Se percorrer todos os players e não achar o player com o ID indicado, retorna falso. end --ATENÇÃO: SE SEU SERVER JÁ TIVER UM SISTEMA DE ID PODE EXCLUIR TUDO DAQUI PRA BAIXO. E FIQUE ATENTO TAMBÉM AO NOME DO ELEMENTDATA DO ID, SE FOR DIFERENTE DE 'ID' VOCÊ DEVE MUDAR NA LINHA QUE EU COLOQUEI (!!!ATENÇÃO!!!) COMENTADO NA FRENTE. local function addPlayerDataID (player, id) setElementData(player, 'ID', id) --Seta o ID do player no elemento player (o ID a princípio é relacionado a account do player) end addEventHandler('onResourceStart', root, function() --Quando iniciar o mod... for i, player in ipairs(getElementsByType('player')) do --Um for que percorre todos os players online. local id = getAccountID(getPlayerAccount (player)) --Pega o ID da conta do player addPlayerDataID (player, id) --Chama a função para setar o ID no player. end end) addEventHandler('onPlayerLogin', root, function(thePreviousAccount, account) --Quando um player logar... local id = getAccountID(account) --Pega o ID da conta do player. addPlayerDataID (source, id) --Chama a função para setar o ID no player, que nesse caso é o source do evento.. end)
  17. Para setar uma skin você deve usar a função setElementModel que recebe o elemento (no caso o player) e o ID do model (skin). Como você quer passar o ID do player, antes deve fazer uma lógica para buscar o player pelo ID. Ficaria mais ou menos assim (observe os comentários):
  18. Cara, fiquei com preguiça de ler esse código dessa forma, da próxima vez faça como o @Lord Henry instruiu acima... Mas basicamente você cria o veículo com o createVehicle e depois use a função warpPedIntoVehicle para colocar o player dentro do veículo.
  19. O nome do resource é SKServerIP? Pois percebi que é o mesmo nome do arquivo .lua, talvez você tenha confundido... A sintaxe é assim: exports["NomeDoMod"]:getServerPassword () ou exports.NomeDoMod:getServerPassword ()
  20. É só checar se o marker está sendo exibido para o player, ou você pode mudar a lógica de criação do marker e criar eles client-side sempre que o player entrar no emprego. Da primeira forma é bem mais simples e é só colocar essa condição a mais na função "PegarLixo": function PegarLixo(hitElement) if isElementVisibleTo ( source, hitElement ) and getElementData(hitElement, "Lixeiro") then ... ... ... ... end end Obs: Não testei!
  21. addEventHandler( "onPlayerDamage", root, function (attacker, damage, bodypart, loss) if getElementHealth(source) - loss < 80 then --Calcula se o player ficará com menos de 80 de vida com o dano. Se sim, já retira o dinheiro. takePlayerMoney( source, 100 ) --Tira 100 de dinheiro de quem sofreu dano end end) Corrigi algumas coisinhas e diminui um pouco o código.
  22. Não sei como está o funcionamento desse exports mas acho que assim vai funcionar Mude essa linha: exports["Bahamas_Inventory"]:BHM_GiveItem(hitElement, RandomItens, random) Para: exports["Bahamas_Inventory"]:BHM_GiveItem(hitElement, Itens[RandomItens][1], random) *#Itens retorna um numero do tamanho do array, depois você pegou um número aleatório nesse intervalo e passou ele como referência. Você está passando o RandomItens como parâmetro, que é um número aleatório, talvez o correto não seria passar o nome do item? Já o [1] é porque você colocou os nomes dos itens dentro de outra tabela, n entendi o porquê disso já que só tem um conteúdo dentro da tabela, poderia salvar a string normal mesmo... Testa aí e me fala. E sobre o marker, acho que se usar setElementVisibleTo como false seja mais fácil do que destruir o marker, você já está fazendo dessa forma...
  23. Faltou a parte em que deixa os markers visíveis quando a pessoa entra no emprego né, mas você não postou essa parte... Mas acho que com o que eu já mandei você consegue se virar para implementar essa parte kkk
  24. Você está passando o source como parâmetro, nunca faça isso! O source é o marker que foi "hitado", o 1° argumento é o hitElement (pode ser um carro, player, objeto etc...). Você quer fazer uma função mais genérica né, eu estou meio sem tempo pra algo perfeitinho mas ficaria mais ou menos assim: local posLixeiras = { [1] = {1983.001, -1744.44, 13.547}, [2] = {1993.668, -1738.607, 13.547}, } local Lixeiras = {} local blipLixeiras = {} addEventHandler('onResourceStart', resourceRoot, function () for i, pos in ipairs (posLixeiras) do Lixeiras[i] = createMarker(pos[1], pos[2], pos[3], "cylinder", 1.2, 70, 58, 88, 100) blipLixeiras[i] = createBlipAttachedTo(Lixeiras[i], 2) setBlipVisibleDistance(blipLixeiras[i], 2000) setElementVisibleTo(blipLixeiras[i], root, false) setElementVisibleTo(Lixeiras[i], root, false) setElementVisibleTo(Lixeiras[i], root, false) addEventHandler("onMarkerHit", Lixeiras[i], PegarLixo) end end) function getMarkerPositionInTable (marker) for i, m in ipairs (Lixeiras) do if marker == m then return i end end return false end function PegarLixo(hitElement) if getElementData(hitElement, "Lixeiro") then local i = getMarkerPositionInTable(source) if not i then return end local random = math.random(4, 20) exports["Bahamas_Inventory"]:BHM_GiveItem(hitElement, "dollars", random) setElementVisibleTo(Lixeiras[i], hitElement, false) setElementVisibleTo(blipLixeiras[i], hitElement, false) setElementFrozen(hitElement, true) setTimer(triggerClientEvent, 1100, 1, hitElement, "progressService", root, 6, "") setPedAnimation(hitElement, "uzi", "uzi_reload", 6500, true, false, false, false) setTimer(function() exports['infobox']:showInfobox(hitElement, "Você recolheu oque estava nessa lata de lixo", "success") setElementFrozen(hitElement, false) end, 6500, 1) end end Para adicionar novas lixeiras é só colocar novas posições no posLixeiras, conforme os exemplos. Obs: Mudei muita coisa no seu script e não testei, teste aí e traga possíveis erros que possam dar no console (digite "/debugscript 3" e fique de olho enquanto testa).
  25. Use as funções createObject e moveObject para criar / mover o objeto e a função addCommandHandler para usar o comando para fazer tudo funcionar. Veja os exemplos da wiki e nos traga dúvidas / erros para que possamos ajudar Obs: Você pode fazer isso client-side mas no seu caso talvez seja melhor fazer server-side, pois coisas no client-side só funcionaria para o player que deu o comando, já server-side a porta moveria para todos do servidor, não somente do cliente.
×
×
  • Create New...