-
Posts
95 -
Joined
-
Last visited
Everything posted by Gw8
-
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 '-'
-
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 )
-
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.
-
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.
-
Tenho um server pronto para vender ... se voce se interessar manda msg no privado.
-
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.
-
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.
-
timer every 1 second Micro-dúvida em relação ao desempenho
Gw8 replied to Lord Henry's topic in Programação em Lua
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 )- 8 replies
-
- trigger
- accountdata
-
(and 2 more)
Tagged with:
-
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?
-
local name = client.name:gsub('#%x%x%x%x%x%x','')
-
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)
-
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
-
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.
-
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...
-
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".
-
-- * 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!
-
como eu faço pra deixar o /prender por id ex: /prender 1
Gw8 replied to DARKFIRE's topic in Programação em Lua
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! -
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.
-
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')
-
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
- 17 replies
-
- race
- clientside
-
(and 1 more)
Tagged with:
-
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.
- 17 replies
-
- race
- clientside
-
(and 1 more)
Tagged with:
-
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.
- 17 replies
-
- race
- clientside
-
(and 1 more)
Tagged with:
-
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?