Jump to content

Developer.

Members
  • Posts

    92
  • Joined

  • Last visited

  • Days Won

    1

Developer. last won the day on February 4 2020

Developer. had the most liked content!

4 Followers

About Developer.

  • Birthday 19/12/1999

Recent Profile Visitors

1,598 profile views

Developer.'s Achievements

Punk-@ss B*tch

Punk-@ss B*tch (12/54)

26

Reputation

  1. Bom vamos lá, na sua primeira linha de código há um argumento a mais... Você esta passando DUAS vezes a posição Z pickup2 = createPickup (1608.1341552734,-1685.9331054688,6.21875,6.21875, 3, 1275, 1000 ) isso esta impedindo do pickup ser gerado no mundo, ocasionando o erro na chamada do evento. Fora isso, acredito eu que tem maneiras melhores de você fazer esse código, métodos bem mais efetivos... tipo: implementação de um array, um loop, funções de retorno, etc... e dependendo do objetivo do mod, se caso não houver intenção de incluir um painel alterar esse eventHandler para um commandHandler, ou até juntar esse eventHandler com um sistema de bindkey para o player selecionar a skin, enfim e afins... varias maneiras bem bacanas de alteração
  2. Bom, da para você mudar a TXD (textura) do veiculo com shaders, agora referente a DFF do veículo, até onde eu saiba a resposta é não. algumas palavras chaves sobre o assunto: texture replace shader texture paintJob Um resource lançado pelo dutchman em 2017:
  3. Olá a todos, iniciei um projeto recentemente de uma screen loading, a minha ideia é que nesta screen irá conter uma barra de progresso com uma porcentagem dos resources baixados, porém eu não sou muito familiarizado com essa parte de download do MTA. para eu estar fazendo esta conta eu preciso de dois valores, o valor total que eu já consegui obter, e o valor atual. É ai que me encontro sem saída, qual seria o melhor método de eu descobrir quantos resources faltam para serem baixados? Acredito eu que tem como, caso contrário não existiria a progress bar do MTA correto? De alguma forma o MTA deve saber quantos faltam para ser iniciado. Observações: 1 - Eu já pensei em algumas ideias tipo um exports em cada resource que será ligado. Porém o meu intuito é uma automatização sem q eu precise mexer em cada resource do meu servidor. 2 - Teria como eu "simular" essa progress bar com isTransferBoxActive, mas não estou atrás disto. 3 - Sim eu sei que é possível um downloader próprio com a função downloadFile. Porém para o momento atual que eu me encontro, estou realmente sem tempo para estar fazendo um downloader. Já revirei a wiki, mas não consegui nada que me trouxeste o resultado q eu procuro, alguém teria como me ajudar nessa? Desde já agradeço a todos.
  4. Olá, bom acredito eu que não tenha uma função específica de 'dar' objetos, o que eu conheço é você anexar um elemento a outro, isto é feito com a função: attachElements Exemplo de código abaixo: -- código de exemlo: código server-side. function anexarObjetoAoPlayer(jogador) local x,y,z = getElementPosition(jogador) -- pega a posição do jogador. local objeto = createObject(1337,x,y,z) -- cria o objeto de id 1337. attachElements(objeto, jogador, 0, 0, 2 ) -- anexa o objeto ao jogador. end addCommandHandler("anexar",anexarObjetoAoPlayer)
  5. Bom questionamento, porém acredito eu que não. Pois no if eu estou comparando a "data" da marker hitada, com a "data" salva na tabela. Quando o gaimo salva a marker na tabela acredito eu que seja algo mais ou menos assim: markers = { -- a tabela nomeada userdata = { -- uma segunda tabela(sub-tabela), que seria a userdata ([thePlayer]) ["StartData"] = markerData -- e por fim ele salva a "data" do marker. }, }; Seguindo a lógica acima, o que me importa é a markerData, então quando eu faço assim: if marker == markers[source]["StartMarker"] then Eu to querendo dizer: SE a data da marker hitada é equivalente a data que esta dentro da sub-tabela(source, que no caso é a userdata) com index de ["StartMarker"] então faça: Abaixo o código, testado: veh = {}; markers = {}; for i=1,6 do veh[createVehicle(459, 1700.75781 + 3*i, -1806.09680, 13.54688, 0,0,0)] = true; createBlip(1700.75781, -1806.09680, 13.54688); end addEventHandler ( "onVehicleEnter", getRootElement(), function(thePlayer, seat) if not markers[thePlayer] then markers[thePlayer] = {}; end if veh[getPedOccupiedVehicle(thePlayer)] then markers[thePlayer]["StartMarker"] = createMarker(1683.57776, -1811.70239, 13.54688 - 0.8, "cylinder", 3, 255, 0, 0, 255, thePlayer); createMarker(1683.57776, -1811.70239 + 5, 13.54688 - 0.8, "cylinder", 3, 0, 255, 0, 255, thePlayer); createBlipAttachedTo(markers[thePlayer]["StartMarker"]); outputChatBox("marker table: "..tostring(markers[thePlayer]), thePlayer, 255, 255, 0); -- debug outputChatBox("marker data: "..tostring(markers[thePlayer]["StartMarker"]), thePlayer, 255, 255, 0); -- debug end end) addEventHandler("onPlayerMarkerHit", getRootElement(), function(marker, dim) if dim then outputChatBox("onHit: "..tostring(marker), source, 0, 255, 0); -- debug if marker ~= markers[source]["StartMarker"] then -- se for diferente outputChatBox("o marker é diferente", source, 255, 0, 0); else -- se for igual outputChatBox("o marker é igual", source, 0, 255, 0); end end end) addCommandHandler("teste", function(player) for index, value in pairs(markers) do -- se fizer com ipairs não irá funcionar, por causa do "StartMarker" outputChatBox(" #ff0000indexado: #ffffff"..tostring(index).." #ff0000tabela: #ffffff"..tostring(value).." #ff0000valorReal: #ffffff"..tostring(value["StartMarker"]),player, 255, 0, 255, true); end end ) Abaixo mais uma "prova" dessa explicação, agora com tudo declarado: test = { -- tabela nomeada test2 = { -- "sub-tabela" ["value"] = 10, -- index contendo o valor desejado. }, }; for i, v in pairs(test) do outputChatBox(tostring(v["value"])); end OBS (muito importante): Eu tenho absoluta certeza do que estou falando? R: Nem um pouco, provavelmente posso estar falando groselha, e se estiver quem souber melhor por favor comente xD. Porém os códigos acima foram testados e funcionou! @Angelo Pereira
  6. troque o ponto ( . ) por colchetes ( [ ) markers[thePlayer]["StartMarker"] = createMarker(...) if marker == markers[source]["StartMarker"] then Três perguntas: Qual a finalidade do mod? Por que a necessidade de nomear "StartMarker"? Vai existir mais de uma marker para ser hitada?
  7. De acordo com a descrição da wiki sobre este evento, o mesmo funciona em qualquer elemento-gui. wiki: "This event happens when any gui-element clicked."
  8. @Gaimo bom isto acontece porque a sua variável valorAtual não reseta. Onde esta status == false após o then coloque "valorAtual = 1", que assim sempre que o painel for fechado ira atribuir-se o valor 1 a esta variável.
  9. local player = getLocalPlayer(); local build function building(key, state) if (key == "b") then -- check Key pressed if (state == "down") then -- check state destroy(build) -- useful local x, y, z = getElementPosition(player); build = createObject(3374, x, y, z, 0, 0, 0); setElementAlpha(build, 150); attachElements(build, player , 0, 3, -1, 0, 0, 0); elseif (state =="up") then -- check state if isElementAttached(build) then setElementAlpha(build, 255); detachElements(build, player); setTimer(function() destroy(build) end, 1500, 1); end end end end bindKey("b", "both", building) function destroy(element) -- useful function if isElement(element) then -- if exists destroyElement(element) -- destroy end end
  10. Funções, eventos e resource's que você vai necessitar para fazer esse script: Server-Side ( lado servidor) addCommandHandler getPlayerByID ou getPlayerFromPartialNick (as duas são funções úteis, mandarei logo abaixo.) givePlayerMoney addEvent addEventHandler Client-Side (lado cliente) guiEditor (resource útil, só clicar para ser redirecionado a community.) cursorPosition (função útil, mandarei logo abaixo.) triggerServerEvent onClientClick getPlayerByID: function getPlayerByID(id) v = false for i, player in ipairs (getElementsByType("player")) do if getElementData(player, "ID") == id then v = player break end end return v end getPlayerFromPartialName: 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 cursorPosition: function cursorPosition(x, y, w, h) if (not isCursorShowing()) then return false end local mx, my = getCursorPosition() local fullx, fully = guiGetScreenSize() cursorx, cursory = mx*fullx, my*fully if cursorx > x and cursorx < x + w and cursory > y and cursory < y + h then return true else return false end end
  11. @MesaDowN O state é um parâmetro do evento onClientClick (no caso o segundo parâmetro). o state ele verifica se o player Pressionou o botão ("down") ou se ele solto o botão ("up").
  12. @+snts Bom a não ser que você queira mostrar alguma imagem/texto na tela do player é totalmente desnecessário a conexão entre server e client. Esse script em especifico pode ser somente server-side sem problemas, inclusive é o que eu recomendo. No caso o certo a se fazer seria você declarar o parâmetro e passar ele, só isto acho que já resolveria os erros function SpawnMoto (jogador) local x,y,z = getElementPosition(jogador) No caso do script do #Roots seria algo assim: local veh = {} function SpawnMoto (jogador) if veh[jogador] and isElement( veh[jogador] ) then destroyElement( veh[jogador] ) veh[jogador] = nil end local x,y,z = getElementPosition(jogador) veh[jogador] = createVehicle(522, x,y,z) warpPedIntoVehicle (jogador, veh[jogador]) end addCommandHandler("moto", SpawnMoto) Seria legal você já pensar em usar os outros parâmetros tipo: local veh = {} function SpawnMoto (jogador, comando, id) if veh[jogador] and isElement( veh[jogador] ) then destroyElement( veh[jogador] ) veh[jogador] = nil end local x,y,z = getElementPosition(jogador) veh[jogador] = createVehicle(tonumber(id),x,y,z) warpPedIntoVehicle (jogador, veh[jogador]) end addCommandHandler("moto", SpawnMoto) 3 parâmetros o ultimo(id) seria o id do veiculo! Então vc iria digitar tipo /moto 522 ai apareceria a NRG, ou se vc digitasse /moto 462 aparecia outro veiculo e assim por diante... Teste e nos de um retorno se esta funcionando ou não.
  13. @Gaimo Bom tem duas formas, para dx em especifico tem a função util IsCursorOnElement ou você pode criar um botão com gui GuiCreateButton Exemplo Dx: local posX, posY, posW, posH = 500, 500, 200, 200 local painel = true function teste(button,state) if painel == true then if state == "down" then if isCursorOnElement(posX, posY, posW, posH ) then outPutChatBox("Teste Dx bem-sucedido") end end end end addEventHandler ("onClientClick", root, teste) -- função util function isCursorOnElement(x,y,w,h) local mx,my = getCursorPosition () local fullx,fully = guiGetScreenSize() cursorx,cursory = mx*fullx,my*fully if cursorx > x and cursorx < x + w and cursory > y and cursory < y + h then return true else return false end end Exemplo Gui: function testeGui() botao = guiCreateButton(500, 500, 50, 32, "testeGui", false) -- guiSetAlpha(botao, 0) -- deixa o botão invisivel addEventHandler("onClientGUIClick", botao, testeGui2) end addEventHandler("onClientResourceStart", resourceRoot, testeGui) function testeGui2() outputChatBox("Teste gui bem-sucedido") end No exemplo do gui, vc criaria os botão embaixo das imagens. Então tipo a imagem é só algo realmente visual, o que importa é o botão onde o player clicou que estará invisível.
  14. Bom é assim, se formos traduzir o erro seria algo neste sentido: Esperado ped/player no argumento 1, recebeu valor nil (nil é um valor inexistente) Isto ocorreu porque você não declarou o parâmetro da sua função. Se você observar na wiki o evento (addCommandHandler), vai ver que em um trecho ele fala sobre playerSource e argumentos. Mais precisamente isto aqui que estou me referindo: http://prntscr.com/r7neut Para todas as funções no MTA, existe um SOURCE. Source é o nativo daquela função, é o objeto/player/marker em que a função tem como base. Podemos acionar este source simplesmente digitando source, Exemplo Prático: local px, py, pz = getElementPosition(source) -- pegamos a posição do parâmetro nativo da função(source) warpPedIntoVehicle(source, VehCar) -- forçamos o player no veículo usando um parâmetro nativo da função(source) e uma variavel (VehCar) Obs: o SOURCE do addCommandHandler é o player que digitou o comando. -- Olhando para o seu script nós temos na linha 1 function -- function Indicamos que estamos iniciando uma função que ira executar algo SpawnMoto -- o nome desta função () -- e os parâmetros, ou seja a quem ela seja direcionada. Podemos perceber aqui que não existe nenhum parâmetro! Se não existe nenhum parâmetro DECLARADO, se formos olhar para a linha 4 player não existe, pois ele não foi declarado em nenhum momento. Obs: Não necessariamente você precisa escrever "player", eu posso colocar "ciranda_cirandinha" no lugar de "player" que irá funcionar normalmente. -- Na linha dois tem um outro erro: local px, py, pz = -- 3 váriaveis getElementPosition -- a função (getLocalPlayer()) -- o argumento Nós temos dois lados, o lado cliente e o lado servidor. Lado servidor é o que será executado na host, e o lado cliente é o executado no pc do player. Se você pesquisar por getLocalPlayer() na wiki você vai ver isto: http://prntscr.com/r7npad. Client-Side Only, ou seja somente lado cliente isto você pode identificar no meta.xml temos <script src="nomeDoArquivo" type="client"/> ou <script src="nomeDoArquivo" type="server"/> o type diz quais funções você pode usar naquele arquivo... Obs: temos também funções do tipo shared que funcionam tanto nos arquivos de lado client, quanto nos arquivos de lado server. Ex: http://prntscr.com/r7nr9j -- Basicamente é isso maninho esses foram os erros em seu script, use o código que o #Roots mandou e pesquise sobre "tabelas", é algo que vai ser muito essencial para você desenvolver seus próximos códigos :).
  15. Bom eu faria desta forma, ao meu ver é mais fácil: enterMarker = { -- index valor [1] = {createMarker(1170.88306, -1489.64990, 22.75516 - 1, "cylinder", 2, 0, 20, 255, 160)}, -- marker 1 [2] = {createMarker(1147.24207, -1487.55115, 22.76903 - 1, "cylinder", 2, 0, 20, 255, 160)}, -- marker 2 [3] = {createMarker(1159.714, -1511.431, 22.748 - 1, "cylinder", 2, 0, 20, 255, 160)}, -- marker 3 }; for i=1, #enterMarker do createBlipAttachedTo(enterMarker[i][1], 45) -- mesma coisa do seu createMarker porém com blip e com um for diferente. end -- abaixo a funcaoExemplo, vc pode criar funções proprias e automatizar seu script. -- em vez de eu colocar setElementModel em cada if/elseif, eu chamo a função que já faz isso por mim. function funcaoExemplo(playerSource, number) -- abaixo o setElementModel. -- se vc for na wiki essa função requer um player ou um ped (playerSource), e tambem o modelo no caso o (number) setElementModel(playerSource, number) end function hitarMarker(marker, dim) if dim then -- abaixo ele verifica se o marker hitado é equivalente ao index [1] valor [1] da tabela enterMarker, ou seja a marker criada 1. if marker == enterMarker[1][1] then outputChatBox("loja 1", source, 0, 255, 0) funcaoExemplo(source, 1) -- chamando a função criada por mim, setando ao source (player) a skin (1) elseif marker == enterMarker[2][1] then -- verificação no index [2] valor [1] outputChatBox("loja 2", source, 0, 255, 0) funcaoExemplo(source, 2) -- chamando a função criada por mim, setando ao source (player) a skin (2) elseif marker == enterMarker[3][1] then -- verificação no index [3] valor [1] outputChatBox("loja 3", source, 0, 255, 0) funcaoExemplo(source, 7) -- chamando a função criada por mim, setando ao source (player) a skin (7) end end end addEventHandler("onPlayerMarkerHit", getRootElement(), hitarMarker)
×
×
  • Create New...