_Ace

Members
  • Content Count

    64
  • Joined

  • Last visited

  • Days Won

    1

_Ace last won the day on March 2

_Ace had the most liked content!

Community Reputation

38 Good

1 Follower

About _Ace

  • Rank
    Snitch

Recent Profile Visitors

164 profile views
  1. _Ace

    Button

    Button = guiCreateButton(0.45, 0.54, 0.10, 0.06, "Get Value", true) guiSetProperty(Button, "NormalTextColour", "FFAAAAAA") guiSetVisible(Button, false) EditBox= guiCreateEdit(0.41, 0.45, 0.18, 0.04, " chcesz tego kupić sztuk?", true) guiSetProperty(EditBox, "NormalTextColour", "FFFF0000") guiSetVisible(EditBox, false) addEventHandler("onClientGUIClick", Button, function() local inputBox = tonumber(guiGetText(EditBox))--I think the idea was to set max 3 (count) to the edit? if tonumber(guiGetText(EditBox)) and tonumber(guiGetText(EditBox))<=3 then outputChatBox("U set value input "..inputBox, 255, 255, 0)--if input text was 3 or less else return outputChatBox("input > 3 or not number", 255, 255, 0) end end) -- Another Client Side addCommandHandler("TurnOnButton", function() guiSetVisible(Button, true) guiSetVisible(EditBox, true) showCursor(true)--showCursor(false) to disable mouse end)
  2. --clientside: addEventHandler("onClientVehicleEnter", getRootElement(), function() for i=2,5 do setVehicleDoorState(source,i,0) end end )
  3. @Arantes estranho pq eu testei com 2 players, e funcionou perfeito, unica coisa diferente foi que inseri o nome por comando e nao por painel, mas seria o mesmo ja que passa como texto tbm, pra testar vc pode inserir no chat como outputChatBox os dados e ver onde ta o problema: function haveOtherNick (myName) outputChatBox("funcao haveothernick recebeu: "..myName.." de player: "..getPlayerName(client)) for i, player in ipairs (getElementsByType("player")) do outputChatBox("for leu o checknick: "..getElementData (player, "checknick").." de "..getPlayerName(player)) if player~=client and (getElementData (player, "checknick") and getElementData (player, "checknick") == myName) then return true--se todos os players exceto eu não tem elementdata checknick igual a myName end end return false end function checkNick() local nome = getElementData (client, "checknick") outputChatBox("funcao checknick: leu elementdata: "..nome.." de "..getPlayerName(client)) if (nome) then if (haveOtherNick(nome)) then outputChatBox ("Já tem alguém com esse nome online.") removeElementData(client,"checknick")--opcional: remover o elementdata de quem nao foi aprovado pra nao ocupar o checknick em 2+ players else triggerClientEvent("successNick", getRootElement()) setElementData(client, "playername", nome) end end end addEvent("checkNick", true) addEventHandler("checkNick", getRootElement(), checkNick) e nessas funções de account data deu algum erro ou warning? e no caso esse sistema de nick que vc ta fazendo seria um nome secundario? pq vc poderia usar direto o getPlayerName pra checar nick/nome
  4. haveOtherNick sempre retorna true pq ele ta passando o for em todos os players, inclusive o proprio que acabou de setar o nick em si mesmo, pra comparar vc precisa excluir o player que deu trigger, antes faz essa alteração de source pra client, na wiki diz o seguinte: Atenção: vc deve usar a variavel global client no serverside ao invés de passar localPlayer ou por parametro ou source, Senão falsificação de evento (passar outro player invés de localPlayer) poderia ser possível (triggerServerEvent) ps: essa alteração source pra client é só no server, o script client fica igual tava o script server ficaria assim: function haveOtherNick (myName) for i, player in ipairs (getElementsByType("player")) do if player~=client and (getElementData (player, "checknick") and getElementData (player, "checknick") == myName) then return true--se todos os players exceto eu não tem elementdata checknick igual a myName end end return false end function checkNick() local nome = getElementData (client, "checknick") if (nome) then if (haveOtherNick(nome)) then outputChatBox ("Já tem alguém com esse nome online.") removeElementData(client,"checknick")--opcional: remover o elementdata de quem nao foi aprovado pra nao ocupar o checknick em 2+ players else triggerClientEvent("successNick", getRootElement()) setElementData(client, "playername", nome) end end end addEvent("checkNick", true) addEventHandler("checkNick", getRootElement(), checkNick)
  5. I answered a similar question before: I edited one line from the original code (from the wiki) dxDrawMaterialLine3D(x, y, z+1+height-(distanceBetweenPoints/distance*width)-1+width, x, y, z+height, Image, width-(distanceBetweenPoints/distance*width), tocolor(R or 255, G or 255, B or 255, alpha or 255)) so the width parameter works as scale, this code is tested and works fine to change the size of the image, if you need non uniform height change you can use the same line with some edits
  6. source é usado pra eventos dai não tenho certeza se pode gerar algum problema outra coisa são os triggerServerEvent com elemento localPlayer, geralmente se usa resourceRoot, verifique isso tbm pra ver se tem algum warning/erro no debugscript 3 quanto a solução vc pode usar o setElementData com flag no proprio player/assaltante, quando inicia o assalto deixa como true e qnd termina poe false, quando o cara quiser acionar a animação verifica se ele tem a elementdata e se tiver cancela con return, deixei um codigo que nao testei mas deve estar td ok, comentei pra ficar mais facil ver onde editei --CLIENT function animcruzabraco () if getElementData(localPlayer,"assaltando") then--checagem se o player tem elementdata assaltando, se tiver é cancelado outputChatBox("teste= animação impedida por elementdata") return end if getElementData ( localPlayer, "cruzabracodt" ) == false then setElementData(localPlayer, "cruzabracodt", true) setElementFrozen ( localPlayer, true ) triggerServerEvent("animcruzabraco",localPlayer)--verifique else setElementFrozen ( localPlayer, false ) setElementData(localPlayer, "cruzabracodt", false) triggerServerEvent("paraanim",localPlayer)--verifique end end bindKey("b", "both", animcruzabraco) --- --SERVER function sistema1(player)--coloquei player pq nao tenho certezz sobre usar source if player then if isElementWithinMarker(player, loja1) then local weaponType = getPedWeapon ( player ) if weaponType == 0 then outputChatBox ( "#727272Você está desarmado. #464646Tenha uma arma para assaltar.", player, 255, 255, 255, true ) else outputChatBox(" ", player, 255, 255, 255, true) outputChatBox("#cf3f3fINDFO: #e2e2e2Você está começando a roubar o banco Caixa #727272(Aguarde 4 minutos ou será punido). #e41c1cAs autoridades estão vindo.", player, 255, 255, 255, true) outputChatBox(" ", player, 255, 255, 255, true) setElementVisibleTo( loja1ass, root, true) setElementFrozen( player, true ) setElementData(player,"assaltando",true)-- aqui dou elementdata assaltando para o player, proibido de usar animacao b setPedAnimation( player, "bomber", "bom_plant_loop", 240000, true, false, false, false ) setMarkerSize(loja1, 0) outputChatBox(" ", player, 255, 255, 255, true) outputChatBox("#cf3f3fINFO: #e41c1cAtenção todas as autoridades. #e2e2e2O banco Caixa está sendo assaltado, compareçam ao local urgentemente!", root, 255, 255, 255, true) outputChatBox(" ", player, 255, 255, 255, true) setTimer(function(player) givePlayerMoney(player, GranaBanco)--GranaBanco nao ta definida na codigo do post verifique se esta no seu codigo inteiro setElementFrozen( player, false ) setPlayerWantedLevel( player, 6 ) outputChatBox("#cf3f3fINFO: #e41c1cVocê assaltou o banco Caixa e ganhou R$ "..GranaBanco, player, 255, 255, 255, true) setElementData(player,"assaltando",false)-- aqui tiro elementdata assaltando do player, liberado pra usar animação b end,240000,1,player) setTimer(function(player) setMarkerSize(loja1, 2.5) setElementVisibleTo( loja1ass, root, false) end,1800000,1,player) end end end end addCommandHandler("roubar", sistema1)
  7. no mesmo momento que tira o dinheiro, ja pode fazer o pagamento: function setMoneyOnWasted (_, killer ) local money = getPlayerMoney(source) local perde = money/10 if getElementType( killer ) ~= "player" or ( killer == source ) then cancelEvent() else if (money <=0) then cancelEvent() else takePlayerMoney ( source, perde ) if killer~=source then givePlayerMoney ( killer, perde ) end end end end addEventHandler ( "onPlayerWasted", getRootElement(), setMoneyOnWasted )
  8. use onPlayerWasted (serverside) ja que ta alterando o dinheiro, pro evento onplayerwasted o killer é o segundo parametro: --server function setMoneyOnWasted (_, killer ) local money = getPlayerMoney(source) local perde = money/10 if getElementType( killer ) ~= "player" then cancelEvent() else if (money <=0) then cancelEvent() else takePlayerMoney ( source, perde ) end end end addEventHandler ( "onPlayerWasted", getRootElement(), setMoneyOnWasted ) testado e funcionando
  9. dei uma ajeitada no código e comentei pra ficar melhor de entender, testei e agora ta funcionando e spawneando o vehiculo e o outro marker destroi normal, verifique se o resource infobox ta funcionando quando testar, aqui nao usei infobox. *a função getplayerfrompartialname nao vi uso Spawn = createMarker(197.93676757813, 1875.7465820313, 17.648057937622 -1,"cylinder", 1.9, 255, 140, 0, 99) Destroy = createMarker(174.04705810547, 2021.0935058594, 21.667898178101 -2,"cylinder", 5.0, 128, 0, 0, 99) veh = {} function spawnhl (elemento)--os parametros que vc usou sao pra comando, aqui vamos usar elemento = o elemento que encostou no marker if getElementType(elemento)=="player" then--verifica se é player e nao veiculo etc que chegou no marker, pra evitar msg de erro if veh[elemento] and isElement( veh[elemento] ) then destroyElement ( veh[elemento] ) veh[elemento] = nil end local accName = getAccountName ( getPlayerAccount ( elemento ) ) if isObjectInACLGroup ("user."..accName, aclGetGroup ("EB") ) then--verifique na acl se existe grupo EB e se tem algum user.conta veh[elemento] = createVehicle(479, 162.86917114258, 2007.6252441406, 21.667898178101, -0, 0, 0.93193572759628)--ta saindo carro inves de helicoptero, verifica id warpPedIntoVehicle (elemento, veh[elemento] ) exports._infobox:addNotification(elemento, "#FFFF00Você pegou o Helicóptero da EB!!!", "success") --outputChatBox("Você pegou o Helicóptero da EB!!!",elemento)--outputchatbox pra teste = testado ok else exports._infobox:addNotification(elemento, "#FF0000Você não é da EB para pegar esse VEÍCULO!", "error") --outputChatBox("Você não é da EB para pegar esse VEÍCULO!",elemento) end end end addEventHandler("onMarkerHit", Spawn, spawnhl) function destroyvtr (elemento) if getElementType(elemento)=="player" then if veh[elemento] and isElement(veh[elemento]) then destroyElement (veh[elemento]) exports._infobox:addNotification(elemento, "#FFFF00Você destruiu o Helicóptero da EB!!!", "success") --outputChatBox("Você destruiu o Helicóptero da EB!!!") end end end addEventHandler("onMarkerHit", Destroy, destroyvtr)
  10. _Ace

    Ajuda

    tem alguns erros no codigo, eu coloquei os comentarios dentro do codigo pra vc ver onde foi alterado: --server markerotas = createMarker(784.80267, -1345.52063, 12.54122, "cylinder", 1.5, 255,58,45, 50) --por ser um comando não vamos usar source e sim uma variavel function openpnl (jogador)--vc precisa por o primeiro parametro aqui para o player que usou o comando, no caso to usando jogador pra vc entender if isElementWithinMarker (jogador, markerotas) then if getElementData (jogador, "Jornal") ==true then--esse ==true é desnecessario, mas se quiser pode deixar como ta triggerClientEvent(jogador,"abrirotas", getRootElement(), jogador)--jogador ali no começo, senao vai abrir o painel ou o que tenha no evento pra todos no sv else outputChatBox("Você não trabalha aqui ainda, vá para uma agência de empregos", jogador) end end end addCommandHandler("rotas", openpnl) -- --CLIENT function rotaspnl() --COMANDOS DO PAINEL DX end function openrotas () rotasbtn() addEventHandler("onClientRender", root, rotaspnl) showCursor(true) end addEvent("abrirotas", true) addEventHandler("abrirotas", root, openrotas)--faltou isso, é pra ativar a função openrotas não tem a função do painel dx no seu codigo, mas no teste que fiz a função rotaspnl é chamada então deve funcionar *ps ali na linha 9 no triggerclientevent, deixei o ultimo 'jogador', esta sendo passado como parametro pro evento do client, deixe pq não sei se vc vai usar depois
  11. first try setOcclusionsEnabled if doesnt work use: engineSetModelLODDistance(object id, distance visible) this is client side. if the object you are using dont have a lod (some objects dont have lod), you will need to create one and place in the same position/ attach it to the original, use the same object, same scale, and the last argument true, (to set as the lod) set it to setLowLODElement and then use engineSetModelLODDistance too
  12. yes it is possible but the player needs to be kinda close to the area, like 600mts/units, for the collision data to load and processLineofSight or getGroundPosition to work, you can do a loop and wait for some player to be near and then trigger the function, I made a test code clientside, you can use it from far away and close to the area to see how it works: --clientside createColCuboid(-2846.07104, -1545.08484, 137.68427, 64.902099609375, 53.124267578125, 4.56259765625) function cub() math.randomseed(getTickCount()) setTimer(function() local x=-2846.07104+math.random(64)--position random from x local y=-1545.08484+math.random(53)--position random from y local h, hx, hy, hz,_,_,_,_,_,_,_,model=processLineOfSight(x,y,150,x,y,130,_,_,_,_,_,_,_,_,_,true)--check for ground position and world model if not h then return outputChatBox("player too far")--if player is too far stop execution elseif model~=18306 then cub()--if randomizer hit the house or trees try again until hit the ground return end createObject(1238,hx,hy,hz+0.4) outputChatBox("obj created in: "..hx.." "..hy.." "..hz) end,100,1)--litle delay to randomizer end addCommandHandler("cuboid",cub) you can adapt this concept to work serverside using triggers / elementdata / tables if needed
  13. sim vc precisa usar um arquivo html, dai adicione esse arquivo no meta.xml do seu resource, depois depende do que vc quer adicionar na hud, por exemplo pra mostrar a vida com um numero de 0 a 100 ou uma barra, vc precisa enviar pro arquivo html essa informação pra dai mostrar na tela: https://wiki.multitheftauto.com/wiki/ExecuteBrowserJavascript veja o exemplo desse link ta praticamente pronto, só substitua ali por https://wiki.multitheftauto.com/wiki/GetElementHealth pra mostrar a vida, depois disso é só seguir o mesmo padrão do exemplo pra outras coisas como colete, arma etc. e pra montar o arquivo html se não tiver experiência, use um editor online de html ou ja baixe um pronto pra pegar pratica
  14. tem algumas opções pra fazer isso, primeiro escolher qual vai ser o tipo de programação do visual: cegui: é o padrão de menus do mta, vc encontra os métodos em "gui" na parte client da wiki. Cef (https://wiki.multitheftauto.com/wiki/CEF_Tutorial) é feito em html juntamente com css e dependendo javascript tbm, cef da oportunidade pra um visual mais interessante. Dx é feito com os métodos do próprio mta, exemplo: dxDrawImage e dxDrawText e os outros métodos drawing da wiki client depois de feito o visual, use https://wiki.multitheftauto.com/wiki/AddAccount e https://wiki.multitheftauto.com/wiki/LogIn veja os exemplos da wiki e adapte pra receber o texto do seu painel de login, os dados ficam salvos no arquivo do mta internal.db, se tiver dificuldade baixe algum painel de login em resources do mta pra ter uma ideia de como fazer tbm tem login/criação de conta por mysql, mas esse é bem complicado de fazer pra quem ta começando, requer programas externos etc, mesmo assim se quiser tentar, procure por xampp (exemplo) e https://wiki.multitheftauto.com/wiki/DbConnect e os outros métodos Db do mta.
  15. a dica principal é primeiro ver se o evento ou método é clientside ou serverside/shared, resumindo os 3 tipos: client/shared/server: client: os scripts clientside são baixados no pc do player, e executados na grande maioria das vezes sem sincronia com os outros, exemplo: setVehicleComponentVisible para esconder componentes do carro, só é visível para o player que solicitou, para ser visto por todos, precisaria de triggers e funções server para sincronizar/ser visível para outros shared: são funções que funcionam tanto em serverside quanto clientside, createObject é um exemplo, a versão client cria um objeto visível só para o player que requisitou, a server é visivel pra todos (em uso normal), as vezes a versão client tem parâmetros diferentes da server, exemplo o setPlayerMoney server: aqui o resultado do método/evento fica visível/disponível pra todos no server, a não ser que vc especifique que seja pra um player ou mais específicos, exemplo: outputChatBox veja no artigo da wiki nos 2 eventos, um tem como primeiro parametro o player, e o outro o veiculo, vc deve ter se confundido com a palavra player que na verdade poderia ser qualquer coisa, os parâmetros vc pode usar qualquer palavra, exemplo server: function vei() outputChatBox("O nome do veículo atual é: "..getVehicleName(source))--o source desse evento é o veiculo que o player entrou (wiki) end addEventHandler("onVehicleEnter", getRootElement(), vei) --outro exemplo: function vei(carroqueentrou) outputChatBox("O nome do veículo atual é: "..getVehicleName(carroqueentrou))--primeiro parametro = o carro que entraram, pode ser qualquer nome end addEventHandler("onPlayerVehicleEnter", getRootElement(), vei) a dica tbm é lembrar que quando é evento, cada um tem seus parâmetros, e vc tbm pode usar o source de cada evento, e quanto usar comandos, tbm muda de server pra client (addCommandHandler)