-
Posts
95 -
Joined
-
Last visited
Everything posted by Gw8
-
Você está tentando mesclar 2 sistemas ou tentando apenas fazer está função ser executada a cada 10 minutos? function timecount ( ) for i, player in ipairs(getElementsByType("player")) do local acc = getPlayerAccount(player) if acc then if not isGuestAccount(acc) then --if getElementData ( player, "AirNewSCR_LiberarXP" ) == "Sim" then -- setElementData ( player, "AirNewSCR_LiberarXP", "Não" ) local level = tonumber(getElementData(player,"Level")) or 0 --if tonumber(level) == nil then level = 0 end local exp = tonumber(getElementData(player,"LSys:EXP")) or 0 --if tonumber(exp) == nil then exp = 0 end --local onlinetime = getElementData(player,"LSys:Online") or 0 if tonumber(onlinetime) == nil then onlinetime = 0 end --local mins = getElementData(player,"LSys:Mins") or 0 if tonumber(mins) == nil then mins = 0 end --if tonumber(mins) >= 600 then --outputConsole("resetou minuto") --outputChatBox ( "#ffffff[ #82FA58UP #ffffff] - Você Ganhou +1 de Experiência. (".. tonumber(exp)+1 .."/20)", player, 255, 255, 255, true ) setElementData(player,"LSys:EXP",tonumber(exp)+1) --playSoundFrontEnd ( player, 44 ) --setElementData(player,"LSys:Mins",1) --end if tonumber(exp) >= 19 then setElementData(player,"LSys:EXP",0) setElementData(player,"Level",tonumber(level)+1) --outputChatBox ( "#ffffff[ #82FA58UP #ffffff] - Você Ganhou +1 de Experiência. (".. tonumber(exp)+1 .."/6)", player, 255, 255, 255, true ) outputChatBox ( "#ffffff[ #82FA58UP #ffffff] - Você Juntou 20 de Experiência e Ganhou +1 Level ("..tonumber(level)+1 ..")", player, 255, 255, 255, true ) playSoundFrontEnd ( player, 45 ) --DarSalario (player) -- Efetua os Pagamentos dos Jogadores else outputChatBox ( "#ffffff[ #82FA58UP #ffffff] - Você Ganhou +1 de Experiência. (".. tonumber(exp)+1 .."/20)", player, 255, 255, 255, true ) --setElementData(player,"LSys:EXP",tonumber(exp)+1) playSoundFrontEnd ( player, 44 ) end --if tonumber(mins) < 600 then --setElementData(player,"LSys:Mins",tonumber(mins)+1) --setElementData(player,"LSys:Online",tonumber(onlinetime)+1) --end end --end end end end setTimer ( timecount, 1000*60*10, 0 )
-
function OnExit() if getOccupants(source) then destroyElement(source) end end addEventHandler("onVehicleExit",root,OnExit) function getOccupants(vehicle) return #getVehicleOccupants(vehicle) == 0 end for _,vehicle in ipairs (getElementsByType("vehicle") do if getOccupants(vehicle) then destroyElement(vehicle) end end esse modelo so deve ser usado se o resource de evento é iniciado e parado após o evento. Não testei.
-
function asd() local bb = {"A", "B", "C", "F", "G"} local z = bb[math.random(1,#bb)] outputChatBox(z) end addCommandHandler ( "ss", asd )
-
function asd() local bb = {"A", "B", "C", "F", "G"} local z = "" for _, i in ipairs( bb ) do z = i end outputChatBox(z) end addCommandHandler ( "ss", asd )
-
mano tudo depende do quando voce usa por exemplo, se voce usa element data pra fazer um sistema no serverside tente emplementar ele usando tabelas, é uma alternativa, agora se voce usa elementdata que intergram client-server nao tem outra opção. por exemplo uma data com nome 'cash' onde voce atualiza ela no serverside e mostra ela com um dx no client, é muito melhor usar o element mesmo do que uma função que fica atualizando.
-
Cara a solução para o seu problema é simples, você deve criar um setElementData no player salvando o nome do seu trabalho, como a função de verificação é feita atraves da acl isso so funciona no serverside e nao clientside como estava ali. No client voce so verifica se ele existe, se sim mostra o nome. local myJob = localPlayer:getData("myJob") or false if myJob then dxDrawText(myJob) end
-
local inRender = false function render() dxDrawRectangle(0,0,300,200,tocolor(0,220,0,150)) end function setRender(cmd) removeEventHandler("onClientRender",root,render) inRender = not inRender if inRender then addEventHandler("onClientRender",root,render) end end addCommandHandler("show",setRender)
-
resource controller Qual destes métodos é mais otimizado?
Gw8 replied to Lord Henry's topic in Programação em Lua
não faz sentido isso que voce escreveu, ninguem usa exports em um resource aleatorio, voce precisa do nome dele previamente. call ( getResourceFromName ( "resource" ), "exportedFunction", 1, "2", "three" ) exports.resource:exportedFunction ( 1, "2", "three" ) exports["resource"]:exportedFunction ( 1, "2", "three" ) e tambem voce consegue utilizar o getResourceFromName e getResourceState para uma pre checagem antes de executar o exports via client.- 13 replies
-
- executecommandhandler
- export
-
(and 2 more)
Tagged with:
-
resource controller Qual destes métodos é mais otimizado?
Gw8 replied to Lord Henry's topic in Programação em Lua
eu colocaria exports só porque o sistema ficaria melhor encapsulado, e também eliminaria o serverside.- 13 replies
-
- executecommandhandler
- export
-
(and 2 more)
Tagged with:
-
impossivel, quando foi criada a função da senha por exemplo function acesso(player,cmd,pass) end addCommandHandler("senha",acesso) foi atribuido o cmd "senha" a função acesso, se voce tentar remover ele, as senhas reais vao virar comandos primarios, por exemplo /1, ele vai procurar uma função que foi atribuido o cmd "1".
-
button = {} button.__index = button function button.create(x,y,w,h,string,font,cr,cg,cb,exeCode) local self = setmetatable({},button) self.x = x self.y = y self.w = w self.h = h self.text = string or "" self.font = font self.cr = cr or 255 self.cg = cg or 255 self.cb = cb or 255 self.state = true self.exeCode = loadstring(exeCode) self.funcClick = function(but,state) self:clickHere(but,state) end addEventHandler("onClientClick",root,self.funcClick) return self end function button:setState(bool) self.state = bool end function button:render() local posX,posY,alpha = self.x,self.y,1 dxDrawRectangle(posX,posY,self.w,self.h,tocolor(0,0,0,35*alpha)) if isMousePosition(posX,posY,self.w,self.h) then dxDrawRectangle(posX,posY,self.w,self.h,tocolor(self.cr,self.cg,self.cb,220*alpha)) dxDrawText(self.text,posX+1,posY+1,posX+self.w+1,posY+self.h+1,tocolor(0,0,0,240*alpha),1,self.font,"center","center",true) dxDrawText(self.text,posX,posY,posX+self.w,posY+self.h,tocolor(255,255,255,240*alpha),1,self.font,"center","center",true) else dxDrawRectangle(posX,posY,self.w,self.h,tocolor(self.cr,self.cg,self.cb,190*alpha)) dxDrawText(self.text,posX+1,posY+1,posX+self.w+1,posY+self.h+1,tocolor(0,0,0,210*alpha),1,self.font,"center","center",true) dxDrawText(self.text,posX,posY,posX+self.w,posY+self.h,tocolor(255,255,255,210*alpha),1,self.font,"center","center",true) end end function button:clickHere(but,_state) local posX,posY = self.x,self.y if isMousePosition(posX,posY,self.w,self.h) and self.state then if but == "left" and _state == "down" then return end self.exeCode() end end function button:destroy() removeEventHandler("onClientClick",root,self.funcClick) if self.parent then self.parent:rem(self) end setmetatable(self,nil) end function isMousePosition(x,y,w,h) if (not isCursorShowing()) then return false end local cX,cY = getCursorPosition() local cX,cY = sX*cX,sY*cY if ( cX >= x and cX <= x+w and cY >= y and cY <= y+h ) then return true else return false end end novoBut = button.create(0,100,100,30,"click aqui","default",0,255,0,[[triggerServerEvent("Farda1PM",localPlayer)]]) novoBut2 = button.create(0,100,140,30,"click aqui2","default",0,255,0,[[triggerServerEvent("Farda2PM",localPlayer)]]) -- para mostrar o botao no dx, exemplo function show() novoBut:render() novoBut2:render() end addEventHandler("onClientRender",root,show) -- para habilitar e desabilitar a função de click. novoBut:setState(false) novoBut:setState(true) um exemplo de codigo que eu fiz um botao em dx um pouco mais avançado, mas voce ja entende eu creio. continue fazendo o painel em gui é um bom começo para aprender, apesar de nunca ter usado.
-
tMensagems = 1 -- TEMPO cont = 1 MensagensInfo = { "Falta 10 Minutos para acabar o Roud.", "Falta 9 Minutos para acabar o Roud.", "Falta 8 Minutos para acabar o Roud.", "Falta 7 Minutos para acabar o Roud.", "Falta 6 Minutos para acabar o Roud.", "Falta 5 Minutos para acabar o Roud.", "Falta 4 Minutos para acabar o Roud.", "Falta 3 Minutos para acabar o Roud.", "Falta 2 Minutos para acabar o Roud.", "Falta 1 Minutos para acabar o Roud.", "Roud Finalizado. X1 de Costas Será iniciado!", } setTimer(function ( ) cont = cont +1 outputChatBox ('#FF0000[INFO]: #FFFFFF'..MensagensInfo[cont] ,getRootElement(),255,255,255,true) end, tMensagems * 60000 , 0)
-
function checkVehicle(vehicleEntered) local isForcedFalse = forcedEvents[eventName] ~= true if localPlayer.inVehicle == inVehicle and isForcedFalse then return end local tempVehicle = vehicleEntered or getPedOccupiedVehicle(localPlayer) local seat = getPedOccupiedVehicleSeat(localPlayer) inVehicle = ((seat == 0 and allowedType[tempVehicle.vehicleType]) and (isForcedFalse and localPlayer.inVehicle or false) or false) if inVehicle and seat==0 then vehicle = tempVehicle removeEventHandler("onClientPlayerWasted",localPlayer,checkVehicle) removeEventHandler("onClientRender",root,drawMeter) removeEventHandler("onClientPreRender", root, updateFPS) addEventHandler("onClientVehicleDamage",vehicle,onCollide) addEventHandler("onClientElementDestroy",vehicle,checkVehicle) addEventHandler("onClientPlayerWasted",localPlayer,checkVehicle) addEventHandler("onClientRender",root,drawMeter) addEventHandler("onClientPreRender", root, updateFPS) elseif not inVehicle and vehicle then removeEventHandler("onClientVehicleDamage",vehicle,onCollide) removeEventHandler("onClientElementDestroy",vehicle,checkVehicle) removeEventHandler("onClientPlayerWasted",localPlayer,checkVehicle) removeEventHandler("onClientRender",root,drawMeter) removeEventHandler("onClientPreRender", root, updateFPS) vehicle=nil end end
-
https://wiki.multitheftauto.com/wiki/GetTimestamp
-
local vis_sound_stream = nil
-
mesma coisa de uma nametag, porém você vai usar o marker invez do player.
-
function revistar_jogador(player,cmd,nick) local accName = getAccountName(getPlayerAccount(player)) if not isObjectInACLGroup ("user."..accName,aclGetGroup("ComandosPolicia")) then return outputChatBox("#000000[#ff0000POLICIA#000000] #c1c1c1Você nao tem permissao a este comando!",player,255,255,255,true) end local toPlayer = getPlayerFromPartialName(nick) if not toPlayer then return outputChatBox("#000000[#ff0000POLICIA#000000] #c1c1c1nick invalido!",player,255,255,255,true) end local toPlayerName = getPlayerName(toPlayer) local playerName = getPlayerName(player) local toPlayerWantedLv = getPlayerWantedLevel(toPlayer) local px,py,pz = getElementPosition(player) local tpx,tpy,tpz = getElementPosition(toPlayer) local dist = getDistanceBetweenPoints3D(px,py,pz,tpx,tpy,tpz) if dist >= 5 then outputChatBox("#000000[#ff0000POLICIA#000000] #c1c1c1Chegue Mais Perto Do Jogador Pra Executar Este Comando!",player,255,255,255,true) else setPedAnimation(player,"POLICE","plc_drgbst_01",3100,true,false,false,false) checar_armas(player,toPlayer) outputChatBox("#000000[#ff0000POLICIA#000000] #c1c1c1O #ff0000Policial #ffffff"..playerName.." #c1c1c1esta #ff0000Revistando #c1c1c1o #ff0000Suspeito "..toPlayerName,root,255,255,255,true) setTimer(outputChatBox,3390,1,"#000000[#ff0000POLICIA#000000] #c1c1c1Nivel de #ff0000Procurado #c1c1c1do #ff0000Suspeito#c1c1c1:"..toPlayerWantedLv,player,255,255,255,true) triggerClientEvent(player,"doShowDXProgressBar",root) end end addCommandHandler("revistar",revistar_jogador) function checar_armas(player,toPlayer) for i=1,12 do local weaponID = getPedWeapon(toPlayer,i) if weaponID~=0 then outputChatBox("#000000[#ff0000POLICIA#000000] #c1c1c1Arma encontrada:"..getWeaponNameFromID(weaponID),player,255,255,255,true) end end end 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 é tipo isso?
-
Boa noite galera estou a procura de uma solução no uso de memoria de alguns algoritmos feitos por mim vou tentar explicar como o sistema funciona, ele é uma framework que tem como base um onClientPreRender e onClientRender, tem varios sistemas nele, por exemplo de prioridades de janelas, arraste, entre outros. Tudo é comandado por 4 funções principais (updatePositions,render,click e doubleClick) . a hierarquia do sistema é assim: onde você partindo de um render consegue criar uma dessas coisas o maior problema que esta havendo, é quando iniciamos o resource ele simplesmente da network no server, se o player tiver pouca memoria entao ... mais facil ele reconectar. Todos os elementos foram criados em oop e programados para serem compatíveis agora um exemplo para voces entenderem melhor.. aqui temos o mapShop onde seu codigo fonte é este callServerFunction("getServerMaps",localPlayer) mapshop = window.create("MAP SHOP",sX/2-resX(350),sY/2-resY(250),700,500,255,0,0,1,"apps/mapshop/icon/mapshop.png",12,"default",false,true) mapshop_grid = gridlist.create({},1,1,698,400,16,12,"default","Search Map Name..",mapshop) function updateMaplist(newlist) mapshop_grid:updateData(newlist) end button.create(195,433,150,30,"Buy Map $"..config.priceMap,12,"default",0,220,0,[[callServerFunction("buyMap",localPlayer,mapshop_grid:getSelect())]],mapshop) button.create(355,433,150,30,"Buy Redo $"..config.priceRedo,12,"default",0,220,0,[[callServerFunction("buyRedo",localPlayer)]],mapshop) o sistema foi muito otimizado, porem agora preciso fazer ele ser econômico '-' Conto com a ajuda de todos, todas as ideias serão bem vindas, não fique com vergonha, fique a vontade para comentar.
-
Agora que eu cai na real, é mais fácil ensinar o cara dar playVideo em um link do que ensinar ele usar setCameraMatrix Object Ped ... porque playVideo já resolve o problema dele, ai ele não precisa quebrar cabeça pra tentar aprender programar.. é mais fácil deixa ele vim aqui pedir ajuda pra comunidade porque sempre vai ter uma pessoa que vai passar o código que resolve todo o problema dele não é? O meu código não resolve nem 10% do problema, mas mostra o caminho por onde ele deve começar e outra 90% das pessoas que eu conheço e programam a nível TOP no mta não aprendeu nada lendo aquela introdução da wiki, aprenderam interpretando códigos e refazendo scripts, obviamente com uma pequena ajuda de quem já programa, e só acho que você deveria rever os seu conceitos pois quando a pessoa perde a vontade de aprender algo é culpa de quem tentou ensinar, e você está ensinando errado.
-
local camera = { [1] = {1785.5252685547,-1670.3322753906,197.42810058594,1824.4713134766,-1419.6008300781,206.25146484375,1709.2348632813,-1475.1075439453,199.77049255371}, -- los santos [2] = {-1877.8803710938,448.31448364258,66.276161193848,-1545.9180908203,500.68551635742,61.879508972168,-1579.8115234375,606.18676757813,61.850708007813}, -- ponte san fierro [3] = {-2408.4401855469,1735.3631591797,38.366367340088,-2302.2407226563,1558.1441650391,37.568012237549,-2433.8842773438,1561.0505371094,37.802646636963}, -- navio [4] = {1281.0335693359,-884.94543457031,86.771049499512,1415.4288330078,-907.2900390625,85.035575866699,1415.4951171875,-808.62286376953,87.2880859375} -- vinewood } local i = 1 local dx = 0.0 function Loading() if dx < 1 then dx = dx+0.001 local x,y,z = interpolateBetween(camera[i][1],camera[i][2],camera[i][3],camera[i][4],camera[i][5],camera[i][6],dx,"SineCurve") setCameraMatrix(x,y,z,camera[i][7],camera[i][8],camera[i][9]) elseif dx > 0 then dx = 0.0 i = i + 1 if ( i >= 5) then i = 1 end end end addEventHandler("onClientRender",root,Loading) isso?
-
change marker to a global variable.
-
isso é meio obvio, voce só consegue escalonar um texto se a fonte for custumizada. tipo https://wiki.multitheftauto.com/wiki/GuiCreateFont myFont = guiCreateFont( "segoeui.ttf", 20*(sy/1080) ) -- Create GUI custom font guiSetFont( myLabel, myFont )
-
fiz esse codigo como exemplo de base, nao quer dizer que ele deve ser seguido: local sX,sY = guiGetScreenSize() local min_Y = math.floor(sY/480) local min_X = math.floor(sX/640) if min_Y <= min_X then g_Scale = min_Y else g_Scale = min_X end local g_Scale = 1 + 0.2*g_Scale function resX(value) return (value*g_Scale) end function resY(value) return (value*g_Scale) end local _dxDrawRectangle = dxDrawRectangle function dxDrawRectangle(x,y,w,h,tocolor,postGui) return _dxDrawRectangle(x,y,resX(w),resY(h),tocolor,postGui) end addEventHandler("onClientRender",root, function() dxDrawRectangle(sX/2-resX(350),sY/2-resY(250),700,500,tocolor(255,255,255,200),false) end ) pense o seguinte o normal do mta é manter a os tamanho para todos os monitores exemplo : dxDrawRectangle(100,100,200,200,tocolor(255,255,255,255),false) sempre manter tudo a x=100,y=100 e assim vai sempre ter os mesmos valores de pixels, mas chegamos ao ponto que agora no inicio voce esta usando uma resolução de 640 px no eixo X, usar 200 px é um bom tamanho, mas se voce usar 200px em um monitor de 1080 px é um retangulo minusculo, e assim chegamos onde eu quero chegar que é a ideia da ESCALA. onde eu PARTICULARMENTE só vejo duas maneira de se fazer com eficacia, um metodo que é por porcentagem exemplo:( que eu nao gosto muito, porque tira a proporção entre as coisas, vc tambem perde qualidade em imagens, etc..) local sX,sY = guiGetScreenSize() dxDrawRectangle(sX*0.2,sY*0.2,sX*0.4,sY*0.6,tocolor(255,255,255,255)) e outro eo primeiro exemplo, que voce trava como resolução minima 640x480 e faz tudo crescer a partir desta resolução. voce tambem consegue usar essa escala para GUI(para escala de textos tenha como referencia apenas o g_Scale). Vlw ai espero ter ajudado.
-
Da pra fazer tudo isso que você fez usando menos de 180 linhas, muito menos. Tente.
-
Adicionar resource na ACL - SERVERSIDE: function onCountryStart() for i,thePlayer in pairs(getElementsByType("player")) do getPlayerCountry(thePlayer) end end addEventHandler("onResourceStart",resourceRoot,onCountryStart) function getPlayerCountry(thePlayer) if thePlayer then local playerIP = getPlayerIP(thePlayer) if playerIP then fetchRemote("http://www.geoplugin.net/json.gp?ip="..playerIP, setPlayerCountry, "", false, thePlayer ) end end end function setPlayerCountry(countryTable,errorCode,thePlayer) if thePlayer and countryTable and errorCode == 0 then local countryTable = fromJSON("["..countryTable.."]") if countryTable then setElementData(thePlayer,"country",countryTable.geoplugin_countryCode) setElementData(thePlayer,"countryName",countryTable.geoplugin_countryName) end end end function listarJogadores(thePlayer,cmd) local br = 0 local players = getElementsByType("player") for _,p in ipairs(players) do if getElementData(p,"country") == "br" then br = br + 1 end end outputChatBox("Jogadores Brasileiros: #889123"..br,thePlayer,255,255,255,true) outputChatBox("Jogadores Gringos: #889123"..(#players-br),thePlayer,255,255,255,true) outputChatBox("Total: #889123"..#players,thePlayer,255,255,255,true) end addCommandHandler("players",listarJogadores)