Jump to content

n3wage

Members
  • Posts

    290
  • Joined

Everything posted by n3wage

  1. Complicado resolver sem saber o código inteiro.. local atm = ( banksInfo[ playerBankID ].ATM and true or false ) -- playerBankID esta retornando um valor que nao existe na tabela banksInfo, o problema provavelmente esta aqui: getBankID( getPlayerBank( player ) ) -- numa dessas funções.. -- deve resolver usando: atm = false if playerBankID and banksInfo[ playerBankID ] and banksInfo[ playerBankID ].ATM then atm = true end playersAccount[ receiver ]:deposit( money ) --Parecido com o erro anterior, receiver não esta definido na tabela playersAccount O Erro provavelmente vem de outras funções, você vai ter que checar o código inteiro, uma dica: sempre vá fazendo debug das variaveis, por exemplo, colocando outputChatBox ( tostring(receiver) ) pra saber oque receiver é.
  2. Apenas cheque o nível do jogador na função de comprar a arma, Não posso te dar códigos que se encaixem perfeitamente nos seus sistemas porque não sei quais são eles exatamente, mais enfim: ArmasLevel = { [1] = { 22 }, [2] = { 22, 23, 24 } -- [Nivel] = { armas (IDS) }, } --[[ checkWeapon ( int ID, int Level ) ID = ID Da arma Level = level do jogador Retorna: true se o jogador pode comprar a arma com o level fornecido, false caso contrario --]] function checkWeapon ( id, level ) for _, v in ipairs ( ArmasLevel[level] ) do -- Fazemos um loop na tabela do level definido na variavel 'level' if v == id -- se o item da tabela for igual ao id fornecido a função return true -- retornar true end end return false -- retornar false se a arma não esta listada na tabela do 'level' end --[[ Assumindo que sua função de comprar a arma é a mesma que meu exemplo: --]] function comprarArma ( id, player ) local level = ... -- aqui você devera pegar o level do jogador; if checkWeapon ( id, level ) then --... dar a arma ao jogador etc else outputChatBox ( "Você não pode comprar esta arma !", ........... ) end end -- a função 'comprarArma' NÃO É FUNCIONAL, apenas um exemplo
  3. Fica salvo no computador do jogador se usar no lado do client, Porem usando @ antes do nome do arquivo o jogador não consegue ver. Se quiser testar: XML é lento e difícil de usar, Para salvamento no lado do servidor é melhor usar MySQL/SQLite ou até mesmo account data
  4. Se quiser que o script funcione apenas com as duas teclas pressionadas use as funções bindKey e getKeyState (olhe o exemplo de getKeyState na wiki) ou o evento onClientKey + getKeyState, se for só com uma bindKeyjá resolve.
  5. thePlayer não é necessariamente o jogador local, por isso a checagem, imagine dois jogadores, a e b, se o jogador b (thePlayer) entrar na marker, ele não sera o jogador a (localPlayer para ele), por isso a checagem, sem ela a janela iria ser aberta para todos, a e b
  6. Não vi nada no script que possa bloquear o uso do botão direito, o único evento que poderia fazer isso é o onClientKey junto com um cancelEvent, Tem certeza que o problema é nesse resource?
  7. Porque não usar a função givePedWeapon ?
  8. Poste o codigo completo, o problema deve estar no triggerServerEvent que você usa (se usa...).
  9. Você pode usar o "nome" que quiser, É igual criar variaveis, o MTA Apenas manda os parâmetros, quem define o nome da variavel é você, por exemplo: --Todas as funções abaixo vão produzir o mesmo resultado: function funcao1 ( variavel_que_guarda_o_jogador_que_digitou_o_comando ) outputChatBox ( getPlayerName ( variavel_que_guarda_o_jogador_que_digitou_o_comando ) .. " Digitou !", root, 0, 255, 0 ) end addCommandHandler ( "a", funcao1 ) function funcao2 ( p ) outputChatBox ( getPlayerName ( p ) .. " Digitou !", root, 0, 255, 0 ) end addCommandHandler ( "b", funcao2 ) function funcao3 ( ... ) local params = { ... } local jogador = params[1] outputChatBox ( getPlayerName ( jogador ) .. " Digitou !", root, 0, 255, 0 ) end addCommandHandler ( "c", funcao3 )
  10. n3wage

    help

    onWeaponFire:
  11. um exemplo seria isto? : WeaponID = { [31] = true, [36] = true, [38] = true, } --add an event handler for onPlayerWeaponSwitch addEventHandler ( 'onPlayerWeaponSwitch', getRootElement ( ), function ( previousWeaponID, currentWeaponID ) if ( WeaponID[currentWeaponID] ) then toggleControl ( source, 'fire', false ) --disable the fire button else toggleControl ( source, 'fire', true ) --enable it end end ) Sim, teste o codigo..
  12. No evento onPedWeaponSwitch use toggleControl apenas quando o jogador trocar para a arma que você queira bloquear, se for outra use toggleControl com o ultimo parametro false. Lembrando que o evento que citei é serverside, Então não dá pra misturar com o codigo que você mandou
  13. Acredito que não já que as armas não são elementos.
  14. Ele estava explicando a diferença entre usar addEventHandler antes ou depois da função, assim: addEventHandler ( "nome", root, function() end ) e function oi () end addEventHandler ( "nome", root, oi ) Só complementei falando sobre a função addEvent
  15. Use a função setPlayerHudComponentVisible no evento onResourceStart.
  16. Basicamente a função addEvent permite você criar eventos personalizados, que podem ser 'chamados' com a função triggerEvent ou triggerServer/ClientEvent. A diferença entre os codigos que você postou é que o segundo vai funcionar e o primeiro não, pois o evento "nome" não existe nativamente nem foi adicionado, Você pode testar dessa maneira, se quiser: addEventHandler( "nome", getRootElement(), function( ) print ( "executado" ) end ) triggerEvent ( "nome", resourceRoot ) e function teste1() print ( "executado" ) end addEvent("nome", true) addEventHandler("nome", getRootElement(), teste1 ) triggerEvent ( "nome", resourceRoot ) O Evento também será chamado em todos os resources que tiverem um addEventHandler ( "nome" ... ).
  17. Porque o evento foi adicionado apenas para a primeira marker criada, na linha 15, e não para a outra criada na linha 35, Assim deve funcionar: function whenVanIsDelivered(hitElement,matchDim) if ( source == deliveryMarker ) then outputChatBox("Marcador atingido.") end end addEventHandler("onMarkerHit", root, whenVanIsDelivered)
  18. Dá pra fazer com: Loop usando getElementsByType IsVehicleEmpty destroyElement addCommandHandler
  19. Você não pode usar guiCreateStaticImage em um evento render, isso ira criar varias imagens (umas 5+ por segundo ?) infinitamente, use dxDrawImage. Tambem não é necessario (e n funciona) usar destroyElement em dxDrawText's, Já que a função retorna apenas true or false, e não um elemento. E dá pra otimizar seu código:
  20. guiSetVisible Evento: onClientPlayerWeaponSwitch
  21. o parâmetro keyState indica se o botão foi pressionado ou 'soltado', sendo: up = quando o botão é solto down = quando o botão é pressionado both = quando o botão é solto OU pressionado esse parâmetro é passado para a função definida no terceiro argumento (ou quarto, no lado do servidor) , ficando assim: bindKey ( "p", "both", function ( botao, status ) -- essa função vai receber os argumentos, sendo eles: -- botão: a key pressionada (nesse caro será P) -- status: se o botão foi pressionado ou solto (como usamos both na primeira linha, isso vai ser up ou down) if status == "down" then -- Botão foi pressionado elseif status == "up" then -- Botão foi solto end end )
  22. Você tem que usar algum sistema de spawn, procure na comunidade, tem vários lá.
  23. bindKey ( "mouse2", "both", function ( _, state ) guiSetVisible ( mirasd, ( state == "down" ) ) end )
  24. Fora que é mais facil usar tabelas (e também ajuda a aprender mais sobre a linguagem), eu por exemplo, só uso element data's quando preciso sincronizar coisas entre vários resources (mesmo assim evito ao maximo usando exports) Antes que fale, eu sei do quarto argumento da função setElementData, porem nunca vi ninguem usando ele (alguns nem sabem que ele existe...) ainda tem o fato de elas poderem ser modificas no lado do client, Enfim, cada um usa o método que prefere
  25. Dá pra fazer com Tabelas local Objeto = {} -- Criamos a tabela que ira listar o objeto de cada jogador. function createBarrier(thePlayer) if isVip(thePlayer) then if not Objeto[thePlayer] then -- se o jogador não tiver listado na tabela.. local x, y, z = getElementPosition(thePlayer) Objeto[thePlayer] = createObject(1225, x-1, y, z-0.6) -- listamos ele, definindo Objeto[thePlayer] como o objeto criado if (isPedInVehicle(thePlayer)) then end else outputChatBox("Voce ja criou um explosivo, use /re (remover explosivo) para poder criar novamente.", thePlayer, 250, 0, 0) end end end addCommandHandler("explosivo", createBarrier) function deleteBarrier(thePlayer) if isVip(thePlayer) then if Objeto[thePlayer] then -- se ele tiver listado ... destroyElement( Objeto[thePlayer] ) -- destruimos o objeto Objeto[thePlayer] = nil -- removemos ele da tabela else outputChatBox("Nao existe nenhum explosivo criado por você!", thePlayer, 250, 0, 0) end end end addCommandHandler("re", deleteBarrier) Não tem nenhum erro no seu script, o problema é que a variavel é setada como true para todos os jogadores quando alguem cria um explosivo, Sendo assim temos que usar tabelas ou element datas (não recomendavel para esse tipo de script simples).
×
×
  • Create New...