-
Posts
4,010 -
Joined
-
Last visited
-
Days Won
184
Everything posted by Lord Henry
-
alguem pode me ajudar com o banco de dados?
Lord Henry replied to MRXBBC's topic in Programação em Lua
Faça a conexão ser global em vez de local e coloque ela junto do onResourceStart. Dessa forma: addEventHandler("onResourceStart", resourceRoot, function() sql = dbConnect( "sqlite", "MrxSQL.db" ) dbExec(sql, "CREATE TABLE IF NOT EXISTS dinheiroatm ( conta TEXT, quantidade INT )") for k, v in ipairs(getElementsByType("player")) do local accounts = getPlayerAccount ( v ) if not isGuestAccount(accounts) then local conta = getAccountName(accounts) local target = getPlayerFromAccountName(conta) local qh = dbQuery(sql, "SELECT quantidade FROM dinheiroatm WHERE conta=?", conta) local result = dbPoll(qh, -1) if #result ~= 0 then setElementData(target,"Mrx:moneyatm",result[1]["quantidade"]) else dbFree(dbQuery(sql, "INSERT INTO dinheiroatm ( conta, quantidade ) VALUES ( '"..conta.."', '0' )")) setElementData(target,"Mrx:moneyatm",0) end end end end ) addEventHandler("onPlayerLogin", root, function(_, theCurrentAccount) local conta = getAccountName(theCurrentAccount) local target = getPlayerFromAccountName(conta) if isElement(target) then local qh = dbQuery(sql, "SELECT * FROM dinheiroatm WHERE conta=?", conta) local result = dbPoll(qh, -1) if #result ~= 0 then setElementData(target,"Mrx:moneyatm",result[1]["quantidade"]) else dbFree(dbQuery(sql, "INSERT INTO dinheiroatm ( conta, quantidade ) VALUES ( '"..conta.."', '0' )")) setElementData(target,"Mrx:moneyatm",0) end end end ) addEventHandler("onPlayerQuit", root, function() local conta = getPlayerAccount(source) if not isGuestAccount(conta) then local qh = dbQuery(sql, "SELECT quantidade FROM dinheiroatm WHERE conta=?", getAccountName(conta)) local result = dbPoll(qh, -1) if #result ~= 0 then local money = getElementData(source,"Mrx:moneyatm") dbExec(sql, "UPDATE dinheiroatm SET quantidade=? WHERE conta=?", money, getAccountName(conta)) else dbFree(dbQuery(sql, "INSERT INTO dinheiroatm ( conta, quantidade ) VALUES ( '"..getAccountName(conta).."', 0 )")) end end end ) addEvent("Mrx:depositoatm", true) addEventHandler("Mrx:depositoatm", root, function (valor) local valor = tonumber(valor) if (not valor or valor == " " or valor == "" or (valor and (tostring(valor):sub(1,1) == "-"))) then return end if not isGuestAccount(getPlayerAccount(source)) then if tonumber(getPlayerMoney(source)) >= valor then local money = getElementData(source,"Mrx:moneyatm") or 0 setElementData(source, "Mrx:moneyatm", money + valor) takePlayerMoney ( source, valor ) else outputChatBox("#7cc576[BANCO]#FFFFFF Você não possui essa quantidade para depositar.", source, 255, 0, 0,true) end end end ) addEvent("Mrx:saqueoatm", true) addEventHandler("Mrx:saqueoatm", root, function (valor) local valor = tonumber(valor) if (not valor or valor == " " or valor == "" or (valor and (tostring(valor):sub(1,1) == "-"))) then return end if not isGuestAccount(getPlayerAccount(source)) then if tonumber(getElementData(source,"Mrx:moneyatm")) >= tonumber(valor) then local money = getElementData(source,"Mrx:moneyatm") or 0 setElementData(source, "Mrx:moneyatm", money - valor) givePlayerMoney(source, valor) else outputChatBox("#7cc576[BANCO]#FFFFFF Você não possui essa quantidade para sacar.", source, 255, 0, 0,true) end end end ) addEvent("Mrx:transfere", true) addEventHandler("Mrx:transfere", root, function (valor, name) local valor = tonumber(valor) if (not valor or valor == " " or valor == "" or (valor and (tostring(valor):sub(1,1) == "-"))) then return end if name then target = getPlayerFromPartialName(name) if target == false or target == nil then outputChatBox("#7cc576[BANCO]#FFFFFF Jogador não localizado.", source, 255, 255, 255, true) return end if not isGuestAccount(getPlayerAccount(source)) then if (source) ~= (target) then if tonumber(getElementData(source,"Mrx:moneyatm")) >= (valor) then local money = getElementData(source,"Mrx:moneyatm") or 0 local quant = getElementData(target,"Mrx:moneyatm") or 0 setElementData(source, "Mrx:moneyatm", money - valor) setElementData(target, "Mrx:moneyatm", quant + valor) outputChatBox("#7cc576[BANCO]#FFFFFF O jogador "..getPlayerName(source).."#FFFFFF transferiu para sua conta $"..convertNumber(valor)..".", target, 255, 255, 255, true) outputChatBox("#7cc576[BANCO]#FFFFFF Você transferiu $"..convertNumber(valor).."#FFFFFF para a conta do jogador "..getPlayerName(target).."#FFFFFF.", source, 255, 255, 255, true) else outputChatBox("#7cc576[BANCO]#FFFFFF Você não possui essa quantidade para transferir.", source, 255, 0, 0,true) end end end end end ) function convertNumber ( number ) local formatted = number while true do formatted, k = string.gsub(formatted, "^(-?%d+)(%d%d%d)", '%1,%2') if ( k==0 ) then break end end return formatted end addEventHandler("onPlayerLogout", root, function() setElementData(source,"Mrx:moneyatm",0) 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 function getPlayerFromAccountName(name) local acc = getAccount (name) if name and acc and not isGuestAccount (acc) then return getAccountPlayer (acc) else return false end end -
Já depurou o código pra ver se ele está lendo tudo?
-
Troque todos os sources por thePlayer. Não se usa source como parâmetro de função. E remova aqueles else
-
Aparece algo no /debugscript 3?
-
Atualize essa aba com F5. Eu coloquei o código depois.
-
Eu deixaria do jeito que está, utilizando todos os parâmetros.
-
Vídeo: Script:
-
Não use variáveis nesse caso. addEventHandler ("onClientRender", root, function() dxDrawImage (screenW * 0.6332, screenH * 0.0729, screenW * 0.1881, screenH * 0.1068, "images/vida2.png", 0, 0, 0, tocolor(255, 255, 255, 255), false) dxDrawImage (screenW * 0.6523, screenH * 0.1146, screenW * 0.0220, screenH * 0.0313, "images/comida.png", 0, 0, 0, tocolor(255, 255, 255, 255), false) dxDrawImage (screenW * 0.7035, screenH * 0.1159, screenW * 0.0220, screenH * 0.0299, "images/sede.png", 0, 0, 0, tocolor(255, 255, 255, 255), false) dxDrawImage (screenW * 0.7577, screenH * 0.1159, screenW * 0.0220, screenH * 0.0299, "images/sono.png", 0, 0, 0, tocolor(255, 255, 255, 255), false) dxDrawText (getElementData (localPlayer, "Fome").."", screenW * 0.6772, screenH * 0.1172, screenW * 0.6991, screenH * 0.1458, tocolor(255, 255, 255, 255), 1.30, "default-bold", "left", "top", false, false, false, false, false) dxDrawText (getElementData (localPlayer, "Sede").."", screenW * 0.7255, screenH * 0.1172, screenW * 0.7474, screenH * 0.1458, tocolor(255, 255, 255, 255), 1.30, "default-bold", "left", "top", false, false, false, false, false) dxDrawText (getElementData (localPlayer, "Sono").."", screenW * 0.7826, screenH * 0.1172, screenW * 0.8045, screenH * 0.1458, tocolor(255, 255, 255, 255), 1.30, "default-bold", "left", "top", false, false, false, false, false) end)
- 1 reply
-
- 1
-
-
detran = { -- x, y, z, ocupado, colShape [1] = {746.4, -1334.81, 13.54, false}, -- Esta coordenada está no seu script. [2] = {756.4, -1334.81, 13.54, false}, -- Esta coordenada eu inventei. } for i, vaga in ipairs (detran) do -- Para cada vaga, faça: vaga[5] = createColSphere (vaga[1], vaga[2], vaga[3], 5) -- Adiciona um quinto elemento na vaga, depois do false. Que é uma colShape esférica de 5 metros de raio. end Obs: Para poder ver colShapes precisa usar /showcol (comando só funciona em Modo Desenvolvedor).
-
Claro que dá. Você tem uma table com todas as coordenadas das vagas, certo? Passa um loop nas vagas criando um colShape em cada uma das coordenadas. Recomendo o createColSphere, pois não precisa determinar coordenadas e tamanhos dos lados, apenas seu raio (que vc pode usar um valor fixo para todas)
-
Sim, caso o jogador for lá e buscar o veículo manualmente, o problema da vaga vai continuar. Dai que entra o esquema do colShape. Que detecta quando um elemento sai de dentro dele.
-
Cara, já falei. Esse negócio de comando é só no MEU CASO pois eu não tenho o painel. Esqueça o uso de comandos.
-
Pois é, mas em todos os casos ocorre o teleporte. Quando o carro vai pro DETRAN. Quando o carro vai pro jogador. Quando o jogador vai pro DETRAN.
-
Ou você poderia tornar os locais de DETRAN inacessíveis pelos jogadores. De forma que não tem como entrar nos veículos que estão lá. Ou então você simplesmente freeza e tranca todos os veículos quando eles são mandados ao DETRAN. Destrancando-os e descongelando-os somente quando o jogador pegar ele pelo painel. Dai o jogador é obrigado a puxar o carro pelo painel. (dai vc muda o sistema que em vez de teleportar o jogador pra lá, teleporta o carro pro jogador)
-
Sim. No seu caso seria o painel que iria liberar a vaga. Mas se o cara for lá manualmente buscar o carro (como eu fiz) sem usar comando nenhum. Dai a vaga vai continuar sendo considerada ocupada pelo script. É por isso que depois de ocupar as vagas, quando você tenta enviar outro veículo, não acontece nada. Pois ele não encontrou vaga livre. Lembra o que eu perguntei pra você lá no começo do tópico?
-
Como eu disse no vídeo, eu fiz por comando pois eu não tenho o painel. A questão do comando é apenas para simular mais ou menos os dados que o painel iria enviar pro servidor. O objetivo final não é pra ser com comando mesmo.
-
Não respondeu minha primeira pergunta.
-
[AJUDA]Não consigo setar a rotação do player
Lord Henry replied to joao2235's topic in Programação em Lua
SetElementRotation não é como o moveObject. Ele não vai rotacionar 90º, ele vai ficar no ângulo de 90º em relação ao mundo. Isto é, ele vai ficar apontado para Oeste. Você está setando interior, dimensão, posição e rotação ao mesmo tempo. Experimente colocar a rotação em um pequeno timer. setTimer (setElementRotation, 100, 1, liberado, 0, 0, 90) -
Pq sua linha 10 é igual a linha 24? Cadê a parte do painel?
-
Na linha 120, faça isso: local formatted = number or 0
-
Como funciona essa função getVehicleByID? Ela usa elementData?
-
Provavelmente este outro servidor tem algum resource entrando em conflito com este.
-
Ah, vc n sabe depurar... Vc coloca ANTES de cada condição. E não no final delas. function teste () outputChatBox ("01") if (condition) then outputChatBox ("02") if (other) then outputChatBox ("03") -- Código end end end Se no chat sair: 01 02 Você descobre que há problema na condição do (other). Pois não passou por ele.
