Jump to content

Gw8

Members
  • Posts

    95
  • Joined

  • Last visited

Everything posted by Gw8

  1. A pergunta que voce tem que se fazer é .. eu preciso disso em mais algum lugar? se sim : não se usa local se não : usa local exemplo : voce tem um arquivo chamado "config.lua" e tem nele este codigo: config = { priceweapons = 5000, priceColete = 2000 } como voce vai usar isso em outros arquivos, entao esta tabela nao pode ser local, quando voce torna uma variavel local ela só é acessivel dentro daquele arquivo. cuidado tambem ao usar local dentro de funçoes exemplo: local info = {50,200,10} function execute() local info = {} end neste caso a funcao execute esta criando uma nova tabela dentro de seu escopo. local info = {50,200,10} function execute() info = {} end neste caso a funcao execute esta resetando a tabela info. Espero ter ajudado vlw '-'
  2. function skinv1 () if getElementModel(source)==73 then return outputChatBox( "voce já esta com essa skin", source, 243, 219, 4, true ) end setPedSkin ( source, 73 ) outputChatBox( "Teste skin1", source, 243, 219, 4, true ) end addEvent("Skin1",true) addEventHandler ( "Skin1", getRootElement(), skinv1 )
  3. Apos a venda os scripts terao um novo dono certo? A partir disso ele faz oque quiser ...eu nao preciso ter o controle dele ...além disso quem comprar será mesmo que compraria só para postar na net? Meus scripts sao exclusivos para apenas um comprador.
  4. Olá Boa tarde galera, estou vendendo meus novos scripts que eu criei a uns tempos atraz, nele contem diversas coisas como Youtube, Musicas, MapShop,CustomShop,Stats, options enfim um painel de usuario NOVO e EXCLUSIVO para aquele que comprar, já esta integrado o sistema para conectar ao forum da sua equipe e um sistema de Avatar onde baixa as fotos do forum e as salva no server. Tudo construído usando OOP e Class, não existe nenhum componente que usa GUI no painel, sistema de salvamento eu uso SQL podendo se conectar a qualquer DB independente da localização dela. Foi feito o mais simples possivel para que independente de quem comprar consiga edita-lo. Voce pode testar os scripts tambem. crie conta no forum http://brasilracing.tk e depois logue no servidor mtasa://192.140.91.215:22003 vo deixar quatro imagem para ver basicamente como é o scripts.image 1 image 2 image 3 image_4 existem varios efeitos tambem bem legais, bom isso foi o basico que eu consegui mostrar se voce se interessou pode entrar no server para conferir o restante... estou pedindo em tudo que esta no servidor R$200. me desculpem se eu postei no lugar errado .. é que eu nao sei onde eo lugar certo.
  5. Tenho um server pronto para vender ... se voce se interessar manda msg no privado.
  6. Eu que fiz esse ai, ele tem a base igual a do cpicker do mta só que é todo feito em DX, sem os componentes GUI.
  7. function onPlayerCommand(command) if command == "msg" then cancelEvent() outputChatBox("Use o comando /pm em vez deste comando",source,255,0,0) playSoundFrontEnd(source,40) end end addEventHandler("onPlayerCommand",root,onPlayerCommand) privateMessage = { players = {}, getPlayer = function(playerPart) local pl = getPlayerFromName(playerPart) if isElement(pl) then return pl else for i,v in ipairs(getElementsByType("player")) do if (string.find(getPlayerName(v):lower(),playerPart:lower())) then return v elseif (string.find(string.gsub(getPlayerName(v),"#%x%x%x%x%x%x",""):lower(),playerPart:lower())) then return v end end end end, start = function(player) privateMessage.players[player] = { delay = false, replyPlayer = false, blockPlayer = {} } end, stop = function(player) privateMessage.players[player] = nil end, send = function(player,cmd,toPlayer,...) local pmMessage = nil for k,v in pairs({...}) do if pmMessage == nil then pmMessage = v else pmMessage = pmMessage.." "..v end end local toPlayer = privateMessage.getPlayer(toPlayer) if not toPlayer or pmMessage == nil or pmMessage=="" then return outputChatBox("#0080FF[PM] #FF1717ERROR: #FFFFFFSYNTAX: /pm <jogador> <mensagem>",player,255,255,255,true) end if toPlayer == player then playSoundFrontEnd(player,40) return outputChatBox("#0080FF[PM] #FF1717ERROR: #FFFFFFVocê não pode enviar mensagem para si mesmo",player,255,255,255,true) end if privateMessage.players[player].delay then local tempo = math.floor(getTimerDetails(privateMessage.players[player].delay)/1000) playSoundFrontEnd(player,40) return outputChatBox("#0080FF[PM] #FF1717ERROR: #FFFFFFEspere "..tempo.." segundos para enviar outra mensagem",player,255,255,255,true) end if privateMessage.players[toPlayer].blockPlayer[player] then playSoundFrontEnd(player,40) return outputChatBox("#0080FF[PM] #FF1717ERROR: #FFFFFFEste jogador bloqueou o recebimento de mensagens",player,255,255,255,true) end outputChatBox("#0080FF[PM] recebida de #FFFFFF"..getPlayerName(player).."#FFFFFF: "..pmMessage,toPlayer,255,255,255,true) outputChatBox("#0080FF[PM] para #FFFFFF"..getPlayerName(toPlayer).."#FFFFFF: "..pmMessage,player,255,255,255,true) privateMessage.players[toPlayer].replyPlayer = player privateMessage.players[player].replyPlayer = toPlayer triggerClientEvent(toPlayer,"playNotifyPM",resourceRoot) privateMessage.players[player].delay = setTimer( function(player) privateMessage.players[player].delay = false end ,3000,1,player) end, reply = function(player,cmd,...) local pmMessage = nil for k,v in pairs({...}) do if pmMessage == nil then pmMessage = v else pmMessage = pmMessage.." "..v end end local toPlayer = privateMessage.players[player].replyPlayer if not isElement(toPlayer) then return outputChatBox("#0080FF[PM] #FF1717ERROR: player nao encontrado",player,255,255,255,true) end if pmMessage == nil or pmMessage=="" then return outputChatBox("#0080FF[PM] #FF1717ERROR: #FFFFFFSYNTAX: /re <mensagem>",player,255,255,255,true) end if privateMessage.players[player].delay then local tempo = math.floor(getTimerDetails(privateMessage.players[player].delay)/1000) playSoundFrontEnd(player,40) return outputChatBox("#0080FF[PM] #FF1717ERROR: #FFFFFFEspere "..tempo.." segundos para enviar outra mensagem",player,255,255,255,true) end if privateMessage.players[toPlayer].blockPlayer[player] then playSoundFrontEnd(player,40) return outputChatBox("#0080FF[PM] #FF1717ERROR: #FFFFFFEste jogador bloqueou o recebimento de mensagens",player,255,255,255,true) end outputChatBox("#0080FF[PM] recebida de #FFFFFF"..getPlayerName(player).."#FFFFFF: "..pmMessage,toPlayer,255,255,255,true) outputChatBox("#0080FF[PM] para #FFFFFF"..getPlayerName(toPlayer).."#FFFFFF: "..pmMessage,player,255,255,255,true) privateMessage.players[toPlayer].replyPlayer = player privateMessage.players[player].replyPlayer = toPlayer triggerClientEvent(toPlayer,"playNotifyPM",resourceRoot) privateMessage.players[player].delay = setTimer( function(player) privateMessage.players[player].delay = false end ,3000,1,player) end, block = function(player,cmd,toPlayer) local toPlayer = privateMessage.getPlayer(toPlayer) if not toPlayer then return outputChatBox("#0080FF[PM] #FF1717ERROR: player nao encontrado",player,255,255,255,true) end if not privateMessage.players[player].blockPlayer[toPlayer] then privateMessage.players[player].blockPlayer[toPlayer] = true return outputChatBox("#0080FF[PM] #FFFFFFVoce deu pmblock no jogador "..getPlayerName(toPlayer),player,255,255,255,true) end end, unblock = function(player,cmd,toPlayer) local toPlayer = privateMessage.getPlayer(toPlayer) if not toPlayer then return outputChatBox("#0080FF[PM] #FF1717ERROR: player nao encontrado",player,255,255,255,true) end if privateMessage.players[player].blockPlayer[toPlayer] then privateMessage.players[player].blockPlayer[toPlayer] = nil return outputChatBox("#0080FF[PM] #FFFFFFVoce deu unblock no jogador "..getPlayerName(toPlayer),player,255,255,255,true) end end, } addCommandHandler("pmunblock",privateMessage.unblock) addCommandHandler("pmblock",privateMessage.block) addCommandHandler("pm",privateMessage.send) addCommandHandler("re",privateMessage.reply) for _,player in ipairs(getElementsByType("player")) do privateMessage.start(player) end addEventHandler("onPlayerJoin",root,function() privateMessage.start(source) end) addEventHandler("onPlayerQuit",root,function() privateMessage.stop(source) end) Se eu tivesse feito, meu código ficaria assim ;D tenta tirar algo de util pra voce, ver se acha algo novo pra voce sei la fica avonts.
  8. fiz essa parte do client, só nao testei, nao tive tempo. -- afk por ficar parado local x,y = guiGetScreenSize() local afk = { x = 0, y = 0, z = 0, tick = getTickCount(), state = false } function drawAfkMsg() dxDrawText("You Are AFK!",0,0,x,y,tocolor(255,255,255,255),1,"default","center","center",true) end function startAfk() local x,y,z = getElementPosition(localPlayer) if afk.x == x and afk.y == y and afk.z == z then local now = getTickCount() - afk.tick if now >= 10000 then if not afk.state then afk.state = true setElementData(localPlayer,"posAFK",true) removeEventHandler("onClientRender",root,drawAfkMsg) addEventHandler("onClientRender",root,drawAfkMsg) end end else clearAfk() end end function clearAfk() removeEventHandler("onClientRender",root,drawAfkMsg) local x,y,z = getElementPosition(localPlayer) setElementData(localPlayer,"posAFK",false) afk.x = x afk.y = y afk.z = z afk.tick = getTickCount() afk.state = false end setTimer(startAfk,1000,0) -- afk por sair do jogo addEventHandler("onClientMinimize",root, function() setElementData(localPlayer,"tabAFK",true) end ) addEventHandler("onClientRestore",root, function() setElementData(localPlayer,"tabAFK",false) end )
  9. getRanking = function() local rankCash = conn:query('SELECT TOP 3 * FROM teamSystem ORDER BY cash DESC') local resultCash = rankCash:poll(-1) or {} local rankReputation = conn:query('SELECT TOP 3 * FROM teamSystem ORDER BY reputation DESC') local resultReputation = rankReputation:poll(-1) or {} return resultCash,resultReputation end, [2018-01-18 11:39:10] WARNING: new\storage\sql_team.lua:148: poll failed; near "3": syntax error WTF ERROR dahsdjksaj alguem sabe outra sql que vá me da o mesmo resultado ou como acerta isso?
  10. local name = client.name:gsub('#%x%x%x%x%x%x','')
  11. vou tentar ser o mais simples possível pra ensinar usar o InterpolateBetween.. interpolateBetween(a,b,c,d,e,f,progresso,efeito) ela cria 3 intervalos, o segredo dessa ferramenta do mta está no progresso é ele que comanda... A -> D B -> E C -> F ocorre o seguinte quando se usa isso o valor estabelecido em A ele é transformado em D conforme o progresso. exemplo A = 0 e D = 300, quando o progresso estiver em 0.5 o valor será 150 valor = interpolateBetween(0,0,0,300,0,0,0.5,"Linear") como eu citei encima voce pode criar 3 intervalos de uma unica vez.. valor1,valor2,valor3 = interpolateBetween(0,0,0,300,150,50,0.5,"Linear") entao seria os seguintes valores; valor1 = 150 valor2 = 75 valor3 = 25 quando o progresso estiver em 0.5... agora creio que essa parte voce ja entendeu vou falar um pouco mais sobre o progresso.. normalmente se usa getTickCount() na maioria das vezes. local start = getTickCount() function render() local progresso = math.min((getTickCount()-start)/5000,1) -- no caso esse efeito sera executado em 5 segundos end addEventHandler("onClientRender",root,render) local pg = 0 function render() pg = pg +0.1 -- tambem daria certo, sendo que para deixa mais rapido vc ia almentar a soma ou mais lento voce vai diminuir -- pg = pg + 0.2 mais rapido -- pg = pg +0.05 mais lento end addEventHandler("onClientRender",root,render) o valor do progresso é sempre entre 0.0 e 1.0, acima disso ou abaixo ele nao considera ou seja menor que 0 fica travado no valor A acima de 1 fica travado no D, espero que tenha entendido foi o mais simples que consegui. ultimo exemplo : local pg = 0 function render() pg = pg + 0.05 valor = interpolateBetween(10,0,0,320,0,0,pg,"Linear") print(valor) end addEventHandler("onClientRender",root,render)
  12. olha LUA não é difícil, primeiro faça o seguinte baixe alguns resources e leia eles tentando entender de verdade como funciona o codigo, eu aprendi inicialmente, oque é uma variavel, quando usar o local, os operadores logicos And,or,not , dps as condiçoes if,then,else,elseif depois que voce entende isso voce parte para as construçoes de funçoes basicas so para se familiarizar, dps aprenda loop(for,while,repeat,do), e dps manipular tabelas {}, matriz e vector. posso tirar suas duvidas caso queira realmente aprender, fica a dica também estudar um pouco sobra tabela verdade, nela vc aprende tudo isso de uma forma simples. meu skype:lucas.pmachado
  13. VLW MAN!! Entre 26 scripters que eu conheço, apenas 2 me deram a solução mais eficaz e simples, Banex e Anony Vlw!! é Nois. Precisar de mim é só chama.
  14. creio que vc entendeu o codigo, entao vo tenta explicar melhor, exemplo eu crio 1oo usuarios e nao salvei eles for i =1,100 do registro.new(tostring(i),1234) end como eu recupero o usuario "10" sendo que nao salvei ele? trazer ele dnv pra fica salvo numa variavel pra dps recuperar a senha...
  15. registro = {} registro.__index = registro function registro.new(nome,senha) local dados = {} setmetatable(dados,registro) dados.nome = nome dados.senha = senha return dados end function registro:name() outputDebugString(tostring(self.nome)) end function registro:pw() outputDebugString(tostring(self.senha)) end user1 = registro.new("gw8","1234") user2 = registro.new("gw9","789654") user1:name() user2:name() por exemplo neste código que eu criei aqui rapidinho, como eu devo fazer o inverso, tipo neste eu crio o objeto e pego as informações através dele, como eu faria para localizar o objeto através de uma determinada propriedade, tipo localizar o objeto user1 pelo nome dele que no caso eo "gw8".
  16. -- * Modo porcentagem * ... -- simples metodo que usa um valor real para ser multiplicado por um valor entre 0 e 1, base para entender o calculo: -- temos uma variavel x cujo valor é 500 -- x = 500, multiplicar x*0 = 0, ou x*1 = 500 e por fim x*0.5 = 250. -- continuando .. calculos para escala sX,sY = guiGetScreenSize() -- valor real em pixels x e y do monitor function resX(value) -- (aspectRatio) return (value/1920)*sX -- calculo baseado na resolucao full hd end function resY(value) -- (aspectRatio) return (value/1080)*sY -- calculo baseado na resolucao full hd end -- calculo de escala do texto fonts = {} function dxFont(i) if not fonts[i] then fonts[i] = dxCreateFont("files/font/font.ttf",resX(index),false,"draft") or "default-bold" -- configure com a sua font end return fonts[i] end -- exemplos de como ser usado dxDrawRectangle(sX*0.2,sY*0.2,resX(200),resY(200),tocolor(255,255,255,255)) dxDrawText("test text",sX*0.2,sY*0.2,sX*0.2+resX(200),sY*0.2+resY(200),tocolor(0,0,0,255),1,dxFont(16),"center","center",true) -- * Calculo normal... + - / -- maioria dos scripts que eu vejo sao assim para -- calcular centro do monitor -- sX/2 ou sY/2, ai acabam tipo fazendo o script naquele tamanho em todas as resolucoes.. -- eu tambem fiz um metodo para calcular isso e fazer ele crescer comforme os tamanhos do sY function fixRes(value) local min_ = math.floor(sY/500) local count = 1 if min_ > 1 then count = count + 0.2*min_ end return value*count end -- calculo de escala do texto fonts = {} function dxFont(i) if not fonts[i] then fonts[i] = dxCreateFont("files/font/font.ttf",fixRes(index),false,"draft") or "default-bold" -- configure com a sua font end return fonts[i] end -- exemplos dxDrawRectangle(sX/2-fixRes(100),sY/2-fixRes(100),fixRes(200),fixRes(200),tocolor(255,255,255,255)) dxDrawText("test text",sX/2-fixRes(100),sY/2-fixRes(100),sX/2+fixRes(100),sY/2+fixRes(100),tocolor(0,0,0,255),1,dxFont(16),"center","center",true) -- espero q tenham entendido como eu uso, fiquem avontade para melhorar o sistema e tambem dar dicas onde devo melhorar Vlw Galera!
  17. local ids = {} function assignID() for i=1,getMaxPlayers() do if not ids[i] then ids[i] = source setElementData(source,"id",i) break end end end addEventHandler("onPlayerJoin",root,assignID) function startup() ids = {} for k, v in ipairs(getElementsByType("player")) do local id = setElementData(v,"id",k) ids[k] = v end end addEventHandler("onResourceStart",resourceRoot,startup) function freeID() local id = getElementData(source,"id") if not id then return end ids[id] = nil end addEventHandler("onPlayerQuit",root,freeID) function getPlayerID ( player ) return getElementData( player, "id") end function getPlayerFromId ( theID ) if theID then local theID = tonumber(theID) local theplayer for index,player in ipairs(getElementsByType("player")) do if getElementData(player ,"id") == theID then theplayer = player end end return theplayer else return false end end sistema de id,mais top que já vi kk sempre uso esse. Não sei quem fez mas Vlw ae!
  18. olha essas settings são valores pre definidos no P, entao vc tem q mecher nelas com resource desligado pra dps ligar ele, ai ele vai fazer as alteração fora isso vc tem q usar este evento para atualizar com resource ligado https://wiki.multitheftauto.com/wiki/OnSettingChange.
  19. eu fiz uma parada dessa uma vez so na minha vida, vo deixar aqui como eu usei. -- meta <settings> <setting name="*EnemyColor" value="#FF00EE" friendlyname="Enemy Color" accept="*" examples="#FF00EE" group="Enemy" desc="The color of the enemy's clan" /> </settings> -- server side enemyColor = get('EnemyColor')
  20. na verdade tem alguma coisa errada no remove, ou no nome da função algo desse tipo, pois removeEvent funciona normalmente, independente se a função esta ativa ou nao, exemplo: function showRadar() end function startRadar() removeEventHandler("onClientRender",root,showRadar) addEventHandler("onClientRender",root,showRadar) end function stopRadar() removeEventHandler("onClientRender",root,showRadar) end
  21. primeiro passo é salvar essas configurações numa tabela depois disso vai ficar fácil, faz o sistema conforme o index da tabela.[lua] checkPoint = { {posX="-2375.774414",posY="-2196.347656",posZ="32.376450",color="#007fff",id="checkpoint0",nextid="checkpoint1"}, {posX="-2375.774414",posY="-2196.347656",posZ="32.376450",color="#007fff",id="checkpoint1",nextid="checkpoint2"}, {posX="-2375.774414",posY="-2196.347656",posZ="32.376450",color="#007fff",id="checkpoint2",nextid="checkpoint3"}, {posX="-2375.774414",posY="-2196.347656",posZ="32.376450",color="#007fff",id="checkpoint3"} } --começo do mapa: currentMarker = 1 function createCheckPointByIndex(index) local marker = createMarker(checkPoint[index]) -- só um exemplo, mas você vai ter que preencher os dados local circle = createColCircle(checkPoint[index]) -- só um exemplo, mas você vai ter que preencher os dados setElementData(circle,"marker",marker) -- element do marker setElementData(circle,"index",index) -- numero do checkpoint end function destroyCheckPointByIndex(element) local marker = getElementData(element,"marker") if isElement(marker) then destroyElement(marker) -- destruir o marker end if isElement(element) then destroyElement(element) -- destruir o circle end end function onClientCircleHit(theElement,dimension) -- o circle e chamado pelo source, sendo assim local index = getElementData(source,"index") if index == currentMarker then local current = index + 2 -- se voce esta no 1 eo 2 ja esta criado, so somar mais 2 no index atual if checkPoint[current] then -- verifica se existe este index na tabela createCheckPointByIndex(current) end currentMarker = currentMarker + 1 destroyCheckPointByIndex(source) end end addEventHandler("onClientColShapeHit",getRootElement(),onClientCircleHit) createCheckPointByIndex(1) createCheckPointByIndex(2) [/lua] pelo menos é mais ou menos isso, não testei o código.
  22. Tipo você quer por um mapa race no gamemode play? Se for isso é simples, se eu tivesse fazendo faria assim, faria um cache do mapa, depois os sistemas para criar os objetos, depois o spawn eo countdown depois o sistema de morte, depois o winner. Seria mais simples e pratico e pra selecionar os jogadores e só mudar a dimensão pra ficar mais facil. Isso em script novo, sem usar o gm race.
  23. por exemplo neste código: if pm == "!pm" then text = string.gsub(text,'!pm ','') text = string.gsub(text,'!pm','') local savedID = {} local savedTextPM = {} for pmText in string.gmatch(text,"(%a+)") do outputChatBox(pmText) if #savedID == 0 then table.insert(savedID,pmText) else table.insert(savedTextPM,savedTextPM) end end return privateMessage(source,savedID[1],table.concat(savedTextPM,"")) end nesta parte só obtêm letras, for pmText in string.gmatch(text,"(%a+)") do eu preciso que obtenha tudo e o texto ser separado por palavras tipo está assim no momento quando está sendo executado, !pm 1 oi tudo bom? salva assim oi tudo bom mas o correto que eu preciso é assim: 1 oi tudo bom?
×
×
  • Create New...