Jump to content

DNL291

Retired Staff
  • Posts

    3,875
  • Joined

  • Days Won

    67

Everything posted by DNL291

  1. Não conheço como que isso funciona no gamemode então não sei responder. Acho que na tabela lootItems estão os valores da arma e munição.
  2. Sobre o código, @hawkbr mostrou em privado e o problema era a tabela BlipsMEC não definida no script. Fiz também algumas correções e agora está funcionando.
  3. Quais itens? Eles estão na tabela lootItems? Nela só vejo 1. Se eu entendi corretamente, é só dar um loop na tabela de itens e mudar a quantidade usando math.random. EDIT: Da próxima vez faça o post na área correta.
  4. Você alterou alguma coisa do freeroam? Se for só uma mensagem de erro irrelevante, você pode evitar ela assim (linha 21): if type(fn) == "function" then fn(...) end
  5. Descomentae as linhas do outputDebugString 72,66,59 e veja o que mostra. A chamada da função depende do valor da variável 'triggered'.
  6. dxDrawLine3D Resource laser: https://community.multitheftauto.com/index.php?p=resources&s=details&id=652
  7. Se for aquele erro no download de resources, abra a pasta C:\Program Files (x86)\MTA San Andreas 1.5\mods\deathmatch\resources e exclua os resources que estão mostrando erro ao baixar.
  8. Me responde uma coisa, esses erros que você posta aqui são mensagens aleatórias que você recebe no server? Sobre o erro, faça uma checagem (assim como na linha 7) assim: elseif vehicle and getElementType(vehicle) == "vehicle" then -- linha 48 if v and getElementType(v) == "vehicle" then -- linha 213 Se esse valor booleano não for true, não vai reportar erros, caso contrário, use um isElement na condição.
  9. Pelo que eu entendi do código, o element-data "cl_enginestate" pertence ao veículo, então seria theVehicle.
  10. addEvent ( string eventName [, bool allowRemoteTrigger = false ] ) O segundo argumento do evento está definido como false. Significa que o evento só vai poder ser chamado no próprio lado.
  11. Sobre o dinheiro isso já foi explicado pra você em outro tópico: https://forum.multitheftauto.com/topic/105037-ajuda-especificar/ Preste mais atenção por favor. Fora isso, foi até feito um código pra você mas você ainda tá com esse código de sempre. O ped está sendo criado em qual lado?
  12. function cl_RemoveVehicleOwner ( theVehicle ) if not (theVehicle) or getElementType(theVehicle) ~= "vehicle" then return end local theOwner = getElementData ( theVehicle, "cl_vehicleowner" ) if ( theOwner ~= false ) then removeElementData ( theOwner, "cl_ownedvehicle" ) removeElementData ( theVehicle, "cl_vehicleowner" ) removeElementData ( theVehicle, "cl_vehiclelocked" ) removeElementData ( owned, "cl_enginestate" ) end setVehicleLocked ( theVehicle, false ) end Se esses erros não tiverem afetando o funcionamento do script, não é obrigatório corrigir, menos que esteja te incomodando no debug.
  13. @hawkbr Realmente não era pra ter mostrado só essas mensagens no chat sem ter algum erro no script. Pode ter um erro no trecho da tabela BlipsMEC, essa tabela tá definida no script? Seria mais fácil postar o código inteiro, poderíamos ter resolvido faz tempo sem ter que ficar olhando pra pequenas partes do código. Fica a seu critério mandar o código pra alguém em privado ou não. Acho que faltou uma explicação do que vocês de fato querem fazer com essa marcação, mecânico, etc. O destroyElement(BlipsMEC[theUser]) vai remover o blip do jogador sem erros, o problema como eu já disse pode estar em outra coisa.
  14. 1º Veja se o debug mostra algum erro quando você iniciar o resource/digitar o comando. Se não mostrar nada, faça o que o Lord disse acima, depure o código, veja este tópico https://forum.multitheftauto.com/topic/95654-tut-debugging/. Pode ser difícil no começo? Sim. Mas vai ser útil pra você não precisar mais de ajuda com depuração simples. Use este código, veja quais mensagens mostram no chat e cole aqui, por favor: function solicitaPay (thePlayer, cmd, user) local accName = getAccountName(getPlayerAccount(thePlayer)) outputChatBox("comando /reparar executado!") if isObjectInACLGroup ("user."..accName, aclGetGroup ("Mec") ) then if not user then outputChatBox ("Erro de sintaxe, use /consertar <nick>", thePlayer, 255, 255, 0) elseif not getPlayerFromPartialName (user) then outputChatBox ("Jogador não encontrado.", thePlayer, 255, 255, 0) else local veh = getPedOccupiedVehicle(thePlayer) if not (veh) then return outputChatBox( "Você precisa estar dentro de um veículo", thePlayer, 255, 255, 0 ) end local theUser = getPlayerFromPartialName (user) outputChatBox("@theUser: "..tostring(theUser)) outputChatBox("@mecanico.solicitation 1#: "..tostring(getElementData (theUser, "mecanico.solicitation"))) if getElementData (theUser, "mecanico.solicitation") then outputChatBox ("Alguém já está solicitando pagamento mecânico a este jogador.", thePlayer, 255, 255, 0) else if isElement(BlipsMEC[theUser]) then outputChatBox("BlipsMEC[theUser] existe") destroyElement(BlipsMEC[theUser]) end damagedVehs[theUser] = veh outputChatBox("@damagedVehs[theUser]: "..tostring(damagedVehs[theUser])) setElementData (theUser, "mecanico.solicitation", thePlayer) outputChatBox("@mecanico.solicitation 2#: "..tostring(getElementData (theUser, "mecanico.solicitation"))) outputChatBox ("Você solicitou pagamento para consertar o veículo de "..user, thePlayer, 0, 255, 0, true) outputChatBox (getPlayerName (thePlayer).."#FFFF00 está pedindo $800 para consertar seu veículo. Use /aceitar ou /recusar", theUser, 255, 255, 255, true) mechTimer[thePlayer] = setTimer (function () if getElementData (theUser, "mecanico.solicitation") then setElementData (theUser, "mecanico.solicitation", false) outputChatBox ("O pedido de pagamento de "..getPlayerName (thePlayer).."#FFFF00 expirou.", theUser, 255, 255, 0, true) end end, 10000, 1) end end else outputChatBox("#FF0000Você não tem permissão para executar este comando!", thePlayer, 255, 255, 255, true ) end end addCommandHandler ("reparar", solicitaPay)
  15. Do jeito que tá no código o blip vai sumir só depois que o timer ser executado. Se quiser que destrua assim que digitar o comando, só colocar o : if isElement(BlipsMEC[theUser]) then destroyElement(BlipsMEC[theUser]) end Fora do setTimer. Antes do damagedVehs[theUser] = veh por exemplo.
  16. Não, deve ser apenas a linha como eu postei. Como você pode ver, já tem o 'end' fechando. if isElement(BlipsMEC[theUser]) then destroyElement(BlipsMEC[theUser]) end Assim: function solicitaPay (thePlayer, cmd, user) local accName = getAccountName(getPlayerAccount(thePlayer)) if isObjectInACLGroup ("user."..accName, aclGetGroup ("Mec") ) then if not user then outputChatBox ("Erro de sintaxe, use /consertar <nick>", thePlayer, 255, 255, 0) elseif not getPlayerFromPartialName (user) then outputChatBox ("Jogador não encontrado.", thePlayer, 255, 255, 0) else local veh = getPedOccupiedVehicle(thePlayer) if not (veh) then return outputChatBox( "Você precisa estar dentro de um veículo", thePlayer, 255, 255, 0 ) end local theUser = getPlayerFromPartialName (user) if getElementData (theUser, "mecanico.solicitation") then outputChatBox ("Alguém já está solicitando pagamento mecânico a este jogador.", thePlayer, 255, 255, 0) else damagedVehs[theUser] = veh setElementData (theUser, "mecanico.solicitation", thePlayer) outputChatBox ("Você solicitou pagamento para consertar o veículo de "..user, thePlayer, 0, 255, 0, true) outputChatBox (getPlayerName (thePlayer).."#FFFF00 está pedindo $800 para consertar seu veículo. Use /aceitar ou /recusar", theUser, 255, 255, 255, true) mechTimer[thePlayer] = setTimer (function () if isElement(BlipsMEC[theUser]) then destroyElement(BlipsMEC[theUser]) end if getElementData (theUser, "mecanico.solicitation") then setElementData (theUser, "mecanico.solicitation", false) outputChatBox ("O pedido de pagamento de "..getPlayerName (thePlayer).."#FFFF00 expirou.", theUser, 255, 255, 0, true) end end, 10000, 1) end end else outputChatBox("#FF0000Você não tem permissão para executar este comando!", thePlayer, 255, 255, 255, true ) end end addCommandHandler ("reparar", solicitaPay)
  17. Tem um 'end' a mais na linha 42. Tem duas funções getPlayerFromPartialName no código, tire uma delas. Por favor, da próxima vez use o comando /debugscript 3 e mostre aqui o erro. Desse jeito você faz a gente vasculhar o código inteiro pra achar um erro simples.
  18. Chamando o triggerClientEvent só para o jogador específico e fazendo essa verificação : if ( thePlayer and thePlayer == localPlayer and getElementType(source) == "ped" ) then zombiesKilled = zombiesKilled+1 end Com certeza não vai funcionar pra todos. Se continuar, o problema é outro.
  19. if isElement(BlipsMEC[theUser]) then destroyElement(BlipsMEC[theUser]) end Acho que meu comentário acima por algum motivo ficou oculto , então tente isso. EDIT: Então o comando /marcar ficaria assim: function marcarplayer(thePlayer, cmd, user) if isObjectInACLGroup ("user."..getAccountName(getPlayerAccount(thePlayer)), aclGetGroup ("Mec") ) ~= true then return outputChatBox ("Você não tem permissão para executar este comando!", thePlayer, 255, 0, 0) end if not user then outputChatBox ("Erro: use /marcar <nick>", thePlayer, 255, 255, 0) elseif user and not isElement(getPlayerFromPartialName (user)) then outputChatBox ("Jogador não encontrado.", thePlayer, 255, 255, 0) elseif isElement(getPlayerFromPartialName (user)) then local player = getPlayerFromPartialName (user) BlipsMEC[player] = createBlipAttachedTo (player, 0, 2, 0, 0, 250, 210) outputChatBox ("O cliente "..getPlayerName(player).."#FFFF00 foi marcado no mapa!", thePlayer, 255, 255, 0, true) end end addCommandHandler ("marcar", marcarplayer) Limpando a tabela quando saírem do server: addEventHandler ( "onPlayerQuit", root, function ( ) if BlipsMEC[source] then if isElement(BlipsMEC[source]) then destroyElement(BlipsMEC[source]) end BlipsMEC[source] = nil end end )
  20. Você precisa definir o jogador que foi adicionado na chave. Ou theUser ou passa thePlayer para o setTimer não entendi a lógica então não sei.
  21. Tenta isto: function marcarplayer(thePlayer, cmd, user) if isObjectInACLGroup ("user."..getAccountName(getPlayerAccount(thePlayer)), aclGetGroup ("Mec") ) ~= true then return outputChatBox ("Você não tem permissão para executar este comando!", thePlayer, 255, 0, 0) end if not user then outputChatBox ("Erro: use /marcar <nick>", thePlayer, 255, 255, 0) elseif user and not isElement(getPlayerFromPartialName (user)) then outputChatBox ("Jogador não encontrado.", thePlayer, 255, 255, 0) elseif isElement(getPlayerFromPartialName (user)) then local player = getPlayerFromPartialName (user) BlipsMEC[thePlayer] = createBlipAttachedTo (player, 0, 2, 0, 0, 250, 210) outputChatBox ("O cliente "..getPlayerName(player).."#FFFF00 foi marcado no mapa!", thePlayer, 255, 255, 0, true) end end addCommandHandler ("marcar", marcarplayer) function getPlayerFromPartialName(name) local name = name and name:gsub("#%x%x%x%x%x%x", ""):lower() or nil if name then for _, player in ipairs(getElementsByType("player")) do local name_ = getPlayerName(player):gsub("#%x%x%x%x%x%x", ""):lower() if name_:find(name, 1, true) then return player end end end end
  22. Você vai precisar desta função: findRotation E também de uma atualização contínua, ou seja o evento "onClientRender".
  23. Deixou o debug ativado? Digite /debugscript 3 quando for testar script. Você está usando a função getPlayerFromPartialName? (https://wiki.multitheftauto.com/wiki/GetPlayerFromPartialName) Fora isso, o que percebi é que o valor 'user' do comando passa a ser uma variável do elemento-jogador, mas continua sendo passado na função getPlayerFromPartialName.
  24. Tenta substituir essa linha com isto: setTimer ( kickPlayer, 100, 1, player, (getElementType(source) = "player") and source or "Console", reason )
  25. Pelo argumento visibleTo. Exemplo: outputChatBox ( "ola", root, 255, 255, 255 ) root : representa todos jogadores. Enviando pra um jogador específico: outputChatBox ( "Ola", getPlayerFromName( "OverKill" ), 255, 255, 255 ) No lado cliente não existe esse argumento pois será visível apenas ao jogador local. root é a variável predefinida de getRootElement(), significa que se você usar tanto um quanto o outro é a mesma coisa, root é mais fácil por ser mais breve.
×
×
  • Create New...