Jump to content

Boechat

Members
  • Posts

    205
  • Joined

  • Last visited

  • Days Won

    6

Everything posted by Boechat

  1. 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.
  2. 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...
  3. 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.
  4. 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:
  5. 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...
  6. 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...
  7. 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)
  8. 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):
  9. 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.
  10. 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 ()
  11. É 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!
  12. 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.
  13. 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...
  14. 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
  15. 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).
  16. 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.
  17. Olha, alguns pontos que eu pude observar são: 1 - A função JogadorQuit nessa linha provavelmente está dando erro no console pois não existe o the player na função >> local acc = getAccountName (getPlayerAccount (thePlayer)) 2 - Uso de setElementData >> prefira usar tabelas que são mais leves. 3 - Uso de ACL >> ACL pesa um pouco o servidor, eu prefiro optar por outros meios de verificação como setAccountData ou banco de dados SQLite + tabelas. 4 - Nomes de variáveis >> Isso não diminui o desempenho mas é uma boa prática de programação criar variáveis com nomes que definam o que elas representam. Por exemplo, você criou uma variável com o nome de nomeConta que tem o valor do nome do player, não da conta. Melhor seria se o nome dessa variável fosse algo como "nomePlayer", "playerName" etc...
  18. Deu erro em um arquivo compilado, mais fácil você baixar outra concessionária descompilada da internet...
  19. Talvez você esteja chamando 2x o evento / função loginAccount
  20. Você já testou o sevidor limpo, sem mod nenhum, do jeito que o host te entrega?
  21. Não era pra ter esse v[7], v[8] e v[9] no setElementRotation, sua tabela só tem 6 posições... Eu adicionei mais 3 posições aleatórias e mudei algumas coisinhas, veja se assim funciona. Qualquer coisa posta aí no fórum, eu não cheguei a testar o código. settings = { table = { -- Marker X | Marker Y | Marker Z | Ped X | Ped Y | Ped Z | Rotação Ped X | Rotação Ped Y | Rotação Ped Z {-3, 3.5, 4.5, 10, 10, 10, 0, 0, 180}, --Aqui eu adicionei 3 posições aleatórias pro Ped X, Ped Y e Ped Z que estavam faltando... {-5, 3.5, 4.5, 10, 10, 10, 0, 0, 180} }, } local Table = {} addEventHandler('onResourceStart', root, function() for i, v in ipairs(settings.table) do Table[i] = createMarker(v[1], v[2], v[3], "cylinder", 1.2, 0, 0, 0, 0) addEventHandler("onMarkerHit", Table[i], teleportOnHit) end end) function teleportOnHit(hitElement) if not isElement(hitElement) or getElementType(hitElement) ~= "player" then return end local pos = getMarkerTeleport(source) if not pos then return end setElementPosition(localPlayer, pos[4], pos[5], pos[6]) setElementRotation(localPlayer, pos[7], pos[8], pos[9]) end function getMarkerTeleport(marker) for i, m in ipairs(Table) do if marker == m then return settings.table[i] end end return false end
  22. Existe sim essa possibilidade, segue esse tutorial aqui
  23. Acabei moscando nisso kkk Usa o botãozinho < > code para inserir código aqui no fórum, fica horrível a visualização assim
  24. Eu escrevi esse código direto no fórum e não testei, da uma olhada pra ver se funciona aí. Lembrando que você deve colocar esse código em um arquivo server-side! function setPlayerADM (player) --Função para verificar se o player é adm e atribuir o "conta:admin" a ele. if not isElement(player) or not getElementType(player) == 'player' then return end local staff = getAccountName (getPlayerAccount ( player )) if isObjectInACLGroup ("user."..staff, aclGetGroup ( "Staff" )) then setElementData(player, "conta:admin") end end addEventHandler('onResourceStart', root, function() --Função para setar adm em todos os players online assim que o mod ligar for i, player in ipairs(getElementsByType('player')) do setPlayerADM (player) end end) addEventHandler('onPlayerLogin', root, function() --Função para setar adm no player quando ele logar setPlayerADM(source) end)
  25. Talvez se você colocar uma verificação do lado do servidor para checar se o player tem as 20 moedas para transferir e, assim que transferir, retirar as moedas do player também no lado do servidor isso pare de acontecer. Talvez essa verificação ou exclusão de moedas esteja sendo feita do lado do client e como o client está offline, não "desconta" as 20 moedas para uma próxima verificação. Isso é só uma possibilidade que eu imaginei aqui...
×
×
  • Create New...