Jump to content

DNL291

Retired Staff
  • Posts

    3,875
  • Joined

  • Days Won

    67

Everything posted by DNL291

  1. Script descompilado sem permissão do autor. Código removido.
  2. "onClientRender" getElementPosition getDistanceBetweenPoints3D getScreenFromWorldPosition dxDrawText
  3. Para otimizar, é só setar esse element-data fora desse evento e quando for realmente necessário atualizar, ou seja quando trocar de emprego. Você precisa mesmo desses 2 elements-data? ("Profissão" e "Emprego") se você abrir mão de um já é uma otimização. Setando os dados, eu faria assim: local jobNames = { ["Motorista de Onibus"] = "Motorista de Ônibus", ["Piloto de Aviao"] = "Piloto de Avião" } local emprego = getElementData (localPlayer, "Emprego" ) or "Desempregado" if jobNames[emprego] then emprego = jobNames[emprego] end setElementData (localPlayer, "Profissão", emprego) Se você continuar com o element-data "Emprego", então você pode setar isso dentro do evento onElementDataChange > "Emprego". Se não, basta usar o setElementData em "Profissão"; Quando o jogador sair de um trabalho seta "Desempregado", quando entrar em um novo seta a profissão correspondente. Vai depender de como o seu sistema de empregos está programado.
  4. setElementData consome processamento e banda - para sincronizar entre os lados. E colocar dentro do "onClientRender" além de desnecessário vai ser péssimo ao servidor. Imagine 200 jogadores no seu server, executando isso ao mesmo tempo. Evite usar esse setElementData na renderização, você nem vai precisar fazer dessa forma pra manter a data do jogador atualizada, basta setar quando entrar/sair de um emprego, e no "onClientRender" você só vai usar o getElementData.
  5. Tem certeza que você quer renderizar setElementData? Depois que o servidor sofrer queda de performance tá aí a resposta - programação mal feita.
  6. -- Segunda parte do trabalho. function job( hitElement, dim ) if getElementType(hitElement) == "vehicle" and dim then local player = getVehicleOccupant( hitElement, 0 ) if table[player] and table[player]["car"] and hitElement == table[player]["car"] then destroyElement(table[player]["marker"]) -- Como eu posso recriar a marker para o jogador voltar para o ammu-nation?? --[[ Isso não funcionou :/ table[hitElement]["marker"] = createMarker(1364.7564697266, -1285.5583496094, 13, "cylinder", 2, 255, 0, 0, 255, source) outputChatBox("Volte para o ammu-nation") addEventHandler("onMarkerHit", table[source]["marker"], endJob) ]] else outputChatBox("Este não é o veículo que você recebeu!!") end end end hitElement -> veículo Erro: table[hitElement]["marker"] = createMarker(1364.7564697266, -1285.5583496094, 13, "cylinder", 2, 255, 0, 0, 255, source) Aonde está hitElement deveria ser player. E em source também. addEventHandler("onMarkerHit", table[source]["marker"], endJob) Aqui também, source vai retornar a fonte do evento que é a marker.
  7. 1 - Isto dentro da função pegartrab4: addEventHandler( "onVehicleStartEnter", veh[source], function ( player ) if veh[player] ~= source then cancelEvent() end end ) local player = source addEventHandler( "onVehicleExplode", function() if veh[player] and source == veh[player] then destroyElement (veh[player]) veh[player] = nil end if carga[player] and source == carga[player] then destroyElement (carga[player]) carga[player] = nil end end ) 2 - : addEventHandler( "onPlayerQuit", function() if veh[source] then destroyPlayerVehicles( source ) end end ) function sair4 (vehicle) if eventName == "onPlayerVehicleExit" and veh[source] and vehicle == veh[source] then destroyPlayerVehicles( source ) end if (veh[source]) and isElement(veh[source]) then destroyPlayerVehicles( source ) setElementVisibleTo ( blipfim4, source, false ) setElementVisibleTo ( entregartrab4, source, false ) outputChatBox ('#ffffffVocê saiu do veículo e perdeu o trabalho.', source, 255, 255, 255, true) end end addEventHandler ("onPlayerVehicleExit", root, sair4) addEventHandler ("onPlayerWasted", root, sair4) function destroyPlayerVehicles( p ) if p then if (veh[p]) and isElement(veh[p]) then destroyElement (veh[p]) veh[p] = nil end if (carga[p]) and isElement(carga[p]) then destroyElement (carga[p]) carga[p] = nil end end end
  8. 'oldVehicle' não está retornando um elemento, que deveria ser o veículo. Isto irá corrigir a mensagem de erro: -- set vehicle owner function cl_SetVehicleOwner ( theVehicle, thePlayer ) local oldVehicle = getElementData ( thePlayer, "cl_ownedvehicle" ) or false if isElement(oldVehicle) then -- unlock old car removeElementData ( oldVehicle, "cl_vehicleowner" ) removeElementData ( oldVehicle, "cl_vehiclelocked" ) removeElementData ( oldVehicle, "cl_enginestate" ) setVehicleLocked ( oldVehicle, false ) -- set vars for new car end setElementData ( theVehicle, "cl_vehicleowner", thePlayer ) setElementData ( theVehicle, "cl_vehiclelocked", false ) setElementData ( thePlayer, "cl_ownedvehicle", theVehicle ) setElementData( theVehicle, "cl_enginestate", true )
  9. Como você não definiu local nas tabelas do script data.lua então você pode acessar essas tabelas em qualquer script dentro do mesmo resource, exceto scripts que forem de lados diferentes - data.lua é do lado server, logo não é acessível por um script lado cliente. Mas é possível deixá-lo para ambos os lados no meta.xml desta forma: <script src="data.lua" type="shared"/>
  10. Então nesse caso deixarei este tópico trancado para evitar mensagens desnecessárias.
  11. Seu código tem alguns erros, lembre-se sempre de usar o comando debugscript 3 para encontrar os possíveis erros no código. Também, da próxima vez poste na seção correta que é a Portuguese / Português
  12. Vi que você já fez o mesmo post aqui: Se você tem um servidor na toplist e quer resolver algo relacionado a isso, sugiro que poste na linguagem inglesa, na seção Support for MTA:SA 1.x > Server ou contate o ccw
  13. @JohwXD Próxima vez lembre-se de postar na seção correta que é a Portuguese / Português (no seu caso em Servidores para jogar) A área internacional serve apenas para posts em inglês.
  14. Posts em não-inglês devem ser no subfórum Other languages. Próxima vez poste na seção Portuguese / Português por favor. Sobre o seu problema, se o seu servidor está na toplist, sugiro que crie um post em inglês nessa seção (Support for MTA:SA 1.x > Server) : https://forum.multitheftauto.com/forum/84-server/ Ou entre em contato com o ccw
  15. Eu testei com um trecho pequeno do seu código e o object aparece, mas grudar ele na marker acho que não funciona com markers; se você fizer ao contrário (marker no object) vai funcionar o attachment. Se ainda tiver alguma dificuldade pra corrigir, será melhor você explicar o que quer fazer pra tentarmos outras formas.
  16. Tente isto: -- o que acontece quando aperta cada botão addEventHandler ("onClientGUIClick",guiRoot, function () if (source == bAccept) then triggerServerEvent ( "start", localPlayer) guiSetVisible ( mainWindow, false ) showCursor ( false ) elseif (source == bCancel) then guiSetVisible ( mainWindow, false ) showCursor ( false ) end end)
  17. Tem alguns erros no código. Use o comando debugscript 3 para ativar o debugmode e ver os possíveis erros. Você está usando triggerClientEvent em root, isso vai chamar a função para todos, use isto no lugar: addEventHandler( "onPlayerMarkerHit", root, function ( m ) if m == marker then triggerClientEvent(source, "showPanel", source) end end ) Função startJob, tente isto: function startJob() if client ~= source then return end -- if not table[source] then table[source] = {} elseif table[source] then return outputChatBox("Você já está trabalhando !", source, 255, 255, 255) end local rndR = routes[ math.random( #routes ) ] table[source]["car"] = createVehicle(482, 1361.106, -1277.579, 13.383) table[source]["marker"] = createMarker(rndR[1], rndR[2], rndR[3]-0.5, "cylinder", 1.5, 255, 0, 0, 255, source) setElementParent( createBlip(rndR[1], rndR[2], rndR[3], 53, 2, 255, 255, 255, 255, 0, 350, source), table[source]["marker"] ) addEventHandler("onMarkerHit", table[source]["marker"], job) end addEvent("start", true) addEventHandler("start", root, startJob) Na função job você não definiu o parâmetro dim, então o escopo da verificação não será executado. Tente o seguinte: function job( hitElement, dim ) if getElementType(hitElement) == "vehicle" and dim then local player = getVehicleOccupant( hitElement, 0 ) if table[player] and table[player]["car"] and hitElement == table[player]["car"] then outputChatBox("sucess") else outputChatBox("error") end else outputChatBox("error1") end end
  18. Evite abrir outros tópicos, esse código já faz parte de um script que pediu ajuda em outro tópico, nesse caso você poderia ter postado lá. Quanto à sua dúvida, para indexar a tabela: routes = { {1345.973, -1243.223, 13.488}, -- index 1 {1371.559, -1234.667, 13.547}, -- index 2 {1389.106, -1246.985, 13.547}, -- index 3 } -- pegando as posições do index 2: local x, y, z = routes[2][1], routes[2][2], routes[2][3] -- também pode usar a função unpack: local x, y, z = unpack( routes[2] ) Digamos que você queira obter um índice aleatório, então você vai usar a função math.random na faixa dos índices da tabela (que é de 1 a 3): local randomIndex = math.random(1, 3) Mas e se você for modificar essa tabela a adicionar mais sub-tabelas? Você pode obter o último índice da tabela usando o símbolo #: local comprimento_da_tabela = #routes math.random com o valor do comprimento da tabela: math.random(1, #routes) --[[ Você também pode fazer desta forma: math.random(#routes) o valor 1 já será utilizado por padrão nesse caso então vai dar no mesmo ]] Sobre esse erro, parece ser com a tabela 'routes', outro erro no seu código é o valor 'RR' sendo indexado: table.player.marker = createMarker(RR[1], RR[2], RR[3], "cylinder", 2.5, 255, 0, 0, 255, player) table.player.car = createBlip(RR[1], RR[2], RR[3], 43, 2, 0, 0, 0, 255, 0, 400, player) Sendo que não é uma tabela. O correto seria: local rndLoc = routes[ math.random( #routes ) ] table.player.marker = createMarker(rndLoc[1], rndLoc[2], rndLoc[3], "cylinder", 2.5, 255, 0, 0, 255, player) table.player.car = createBlip(rndLoc[1], rndLoc[2], rndLoc[3], 43, 2, 0, 0, 0, 255, 0, 400, player)
  19. local id = exports["ids"]:getPlayerID(thePlayer) That's how you'll get the player id.
  20. Acho que pra esse caso o math.ceil vai ser melhor. A diferença entre os dois é que math.floor arredonda pra baixo e math.ceil pra cima. Então digamos que o jogador tem 0.9 de vida, e você usa math.floor, o valor será 0 - que não faz sentido, 0 é quando está morto. Nesse caso você pode usar o math.ceil que vai deixar 1%. Tem também a função math.round (https://wiki.multitheftauto.com/wiki/Math.round) que abaixo de 0.5 arredonda pra baixo e se maior ou igual a 0.5 arredonda pra cima. Ela também pode ser mais útil pois você pode determinar quantas casas decimais você quer mostrar.
  21. Tente com apenas um object sendo anexado. Faça um teste anexando só 1 elemento pra ver se funciona, comente a linha 30 e deixe só 1 object. Certifique-se também que os elementos (objets e a marker foram criados sem erros).
  22. Você vai precisar interligar o spawn ao registro da conta e primeiro login.
  23. Parece estar certo o código, só que a função startJob seria mais correta desta forma: function startJob() local player = client if not player then return end -- if not table.player then table.player = {} end table.player["car"] = createVehicle(482, 1360.201, -1274.34, 13.383) table.player["marker"] = createMarker(1360.126, -1256.776, 13.383, "cylinder", 2.5, 255, 0, 0, 255, player) table.player["blip"] = createBlip(1360.126, -1256.776, 13.383, 43, player) addEventHandler("onMarkerHit", table.player["marker"], job) end addEvent("start", true) addEventHandler("start", root, startJob) E o trigger o no lado client: triggerServerEvent( "start", localPlayer ) E a parte da otimização para remover os elementos vinculados ao jogador: addEventHandler( "onPlayerQuit", root, function() if table[source] then for k,v in pairs(table[source]) do if isElement(v) then destroyElement(v) end end table[source] = nil end end )
  24. Se funcionou só pode ter sido por outro motivo que você arrumou. Sobre o código, não vai funcionar pelos motivos que a gente já falou aqui e se você usar o comando /debugscript 3 certamente vai encontrar algum erro nessa linha.
×
×
  • Create New...