-
Posts
545 -
Joined
-
Last visited
-
Days Won
38
Everything posted by androksi
-
Apenas destruir o elemento não deixa sem valor na variável. Anule a variável também. destroyElement(markerVerifcador) markerVerifcador = nil
-
Tudo depende de como você realiza as tarefas de sincronização dentro do código. Concordo que "tem hora pra tudo", mas tabelas são mais eficientes. E também, pra falar a verdade, a diferença é mínima. Prefiro ter o código mais organizado com tabelas e criar a sincronização manual, através dos triggers, do que utilizar elementData. Sim, você precisa ter a tabela no client-side e server-side, é aí que entra a parte de sincronizar tudo, basta usar a lógica de como as coisas devem ser feitas.
-
O recomendado não é utilizar elementData para isso, uma tabela seria suficiente. Mas vamos lá. Para editar uma tabela que está dentro de uma elementData, você terá de obter essa tabela, editá-la e adicionar de novo ao jogador. (pior performance possível hauauhauhau) addCommandHandler("add", function(player) setElementData(player, "player.items", {name = "Vibrador Neutro", amount = 3}) end) addCommandHandler("edit", function(player) -- Digamos que eu queira editar o item Vibrador Neutro local handleItem = "Vibrador Neutro" local playerItems = getElementData(player, "player.items") if playerItems then -- Encontrar a index do item local index for i = 1, #playerItems do if playerItems[i].name == handleItem then index = {i, tonumber(playerItems[i].amount)} break end end -- Agora que encontramos o índice, vamos editar o valor. O nome continuará igual, e o valor terá aumentado mais 1. local editItem = {name = "Vibrador Neutro", amount = index[2] + 1} -- Editamos dentro da tabela table.remove(playerItems, index[1]) table.insert(playerItems, index[1], editItem) -- Salvamos novamente a elementData no jogador setElementData(player, "player.items", playerItems) end end)
-
Envio de dados de um arquivo/linguem para outra.
androksi replied to Rested's topic in Programação em Lua
Parabéns por conseguir. Irei apenas explicar duas coisas, quer dizer, duas formas de fazer isso. Usar webhooks (método mais fácil); Criar uma aplicação (BOT) e também uma API REST. Dessa forma, você poderia, por exemplo, usar um link externo. Sendo assim, quando jogador criasse uma conta, você enviaria os dados utilizando o método POST, juntamente à função fetchRemote. Exemplo de chamada: URL: https://localhost:5500/api/discord/create Parâmetros do método POST: nickname, account_name, created_at Uma vez que a API fosse chamada, você pegaria os dados enviados e mandaria no canal do Discord. -
Envio de dados de um arquivo/linguem para outra.
androksi replied to Rested's topic in Programação em Lua
O que você quer de fato fazer? Há alguns fatores envolvendo o envio de dados, isso inclui back-end ou front-end. Diga-nos mais detalhes o que pretende fazer. -
Você pode definir isso dentro do arquivo mtaserver.conf. Procure por isto: <resource src="admin" startup="1" protected="0" /> <resource src="defaultstats" startup="1" protected="0" /> <resource src="helpmanager" startup="1" protected="0" /> <resource src="joinquit" startup="1" protected="0" /> <resource src="mapcycler" startup="1" protected="0" /> <resource src="mapmanager" startup="1" protected="0" /> <resource src="parachute" startup="1" protected="0" /> <resource src="performancebrowser" startup="1" protected="0" /> <resource src="ipb" startup="1" protected="0" /> <resource src="reload" startup="1" protected="0" /> <resource src="resourcebrowser" startup="1" protected="1" default="true" /> <resource src="resourcemanager" startup="1" protected="1" /> <resource src="scoreboard" startup="1" protected="0" /> <resource src="spawnmanager" startup="1" protected="0" /> <resource src="voice" startup="1" protected="0" /> <resource src="votemanager" startup="1" protected="0" /> <resource src="webadmin" startup="1" protected="0" /> <!-- play is the default freeroam gamemode. Remove the following line to prevent it from starting. --> <resource src="play" startup="1" protected="0" /> Basta copiar uma linha, colar abaixo de alguma e inserir o nome do resource que você deseja. Lembre-se de manter o atributo startup com o valor 1.
- 1 reply
-
- 1
-
ATIVAÇÃO AUTOMATICA DE VIPS PARA SEU SERVIDOR
androksi replied to 4NTz's topic in Serviços de hospedagem
Boa sorte. ♥- 6 replies
-
- site
- ativar vip sozinho
- (and 8 more)
-
Usar Export ou triggerEvent root para ativar função de outro script?
androksi replied to ber's topic in Programação em Lua
Fiz um exemplo abaixo de como eu costumo estruturar minhas funções exportadas. É bem bobo o exemplo. --- Client-side local playerIp function updateClientIP(ip) playerIp = ip end addEvent("ip:update", true) addEventHandler("ip:update", resourceRoot, function(ip) playerIp = ip end) addCommandHandler("verip", function() if playerIp then print(playerIp) end end) -- Server-side function updateClientIP(player, ip) triggerClientEvent(player, "ip:update", resourceRoot, ip or "?") end No meta.xml, eu defino dessa forma: <exports function="updateClientIP" type="shared" /> Sendo assim, nesse exemplo, o sistema pode alterar a variável playerIp em ambos lados, tanto client-side quanto server-side. Sem contar que, como o DNL291 disse, caso você for documentar tudo, ficará muito mais legível. -
Usar Export ou triggerEvent root para ativar função de outro script?
androksi replied to ber's topic in Programação em Lua
Também prefiro exports. -
Há diversos erros no seu código. attacker não está definido em lugar nenhum; algumas funções utilizam player e outras source (???); a função setTimer, que está dentro da função SetarCaidoComHS, não possui funcionamento nenhum, uma vez que não é passado argumentos; a função setTimer, que está fora da função, também não há função referente à ela; evento na última linha adicionado de forma incorreta. Sugiro aprender a desenvolver seus próprios códigos, com base em códigos que são bem feitos. O código que você está tentando editar é totalmente mal otimizado e possui vários erros. Consertá-los é irrelevante. Não perca tempo. Você também pode aprender mais sobre a linguagem Lua neste link.
-
Olá. Primeiro: sua lógica possui alguns erros, especificamente na linha 11. Deveria ser assim: if texture and model == "player_face" or model == "head" then Segundo: a função getPlayerSkin está obsoleta. Use getElementModel ao invés disso.
- 1 reply
-
- 1
-
O "host" é o IP do seu servidor onde está o banco de dados. Lembrando que o host pode ser uma DNS, com letras, ou uma sequência numérica, o IP.
-
script Carregando muita memória da máquina
androksi replied to Big Smoker's topic in Programação em Lua
Verifique se você não está abrindo a conexão MySQL toda vez que a chama. Considere também checar se você está fechando os arquivos XML após usá-los. -
Inventário usando elementData irá pesar o servidor?
androksi replied to ber's topic in Programação em Lua
Preste mais atenção em seu código. -
Inventário usando elementData irá pesar o servidor?
androksi replied to ber's topic in Programação em Lua
Você precisa sim indexar o jogador à tabela. Ficaria mais ou menos assim: -
Dúvida sobre qual a melhor opção setElementData ou Table
androksi replied to Gaimo's topic in Programação em Lua
Não, o source do evento não será o parâmetro veh. Use desta forma, passando todos os parâmetros para o client-side. triggerClientEvent("show_tag", resourceRoot, veh, name, id, price, amount) E lá no client-side, use assim: addEvent( "show_tag", true ) addEventHandler( "show_tag", resourceRoot, function(veh, name, id, price, amount) if amount then all_veh = {veh, name, id, price, amount} end all_veh = {veh, name, id, price, amount="ilimitada"} end) Agora uma correção: a variável all_veh SEMPRE irá ser substituída por outra, pois ela não está recebendo indexação nenhuma para cada novo carro. Faça dessa maneira: addEvent( "show_tag", true ) addEventHandler( "show_tag", resourceRoot, function(veh, name, id, price, amount) local index = #all_veh + 1 if not all_veh[index] then all_veh[index] = {} end if amount then return all_veh[index] = {veh, name, id, price, amount} end all_veh[index] = {veh, name, id, price, amount="ilimitada"} end) -
Inventário usando elementData irá pesar o servidor?
androksi replied to ber's topic in Programação em Lua
Fará diferença. Além do mais, se eu entendi bem, isso daria ainda mais trabalho e aumentaria a carga do servidor kkk. Na minha concepção, você teria dois trabalhos. Melhor tabelas. -
Inventário usando elementData irá pesar o servidor?
androksi replied to ber's topic in Programação em Lua
Use tabelas. O inventário não precisa renderizar toda hora o valor de um certo item, basta atualizá-lo quando o jogador pegar/remover o item. Dará um pouco mais de trabalho, mas no final, o servidor sai ganhando. -
Dúvida sobre qual a melhor opção setElementData ou Table
androksi replied to Gaimo's topic in Programação em Lua
Cara, é o que eu disse, depende muito de seus objetivos. Particularmente, eu faria usando tabelas. -
Dúvida sobre qual a melhor opção setElementData ou Table
androksi replied to Gaimo's topic in Programação em Lua
Depende de como você quer fazer, há possibilidades de fazer usando as duas formas: setElementData ou tabelas. Outra coisa que você deve levar em conta é a organização, pois se usar tabelas para aprimorar o desempenho, mas fizer de qualquer jeito, não adianta de nada, vamos combinar, né? O que você deve pensar é: Coisas que irão atualizar e devem ser atualizadas em tempo real; O que seria mais viável: usar triggerClientEvent para atualizar o client-side ou ir pelo caminho mais fácil, usando setElementData Por que usar for? Basta verificar se o veículo está indexado à tabela, assim como se usa para verificar o jogador. -- SERVER-SIDE local vehicles = {} -- Criar veículo local veh = createVehicle(411, 0, 0, 3) -- Indexar à tabela vehicles[veh] = {owner = "Andrei", plateText = "JFA-8842", vehId = 3} -- Como buscaria? addEventHandler("onVehicleEnter", root, function(thePlayer) if vehicles[source] and vehicles[source].owner == getPlayerName(thePlayer) then print("Você é o dono!") triggerClientEvent(thePlayer, "updateInfo", resourceRoot, vehicles[source]) else print("Você não é o dono ou algo deu errado :/") end end) -- CLIENT-SIDE local myVehicle = {} addEventHandler("onClientRender", root, function() if isPedInVehicle(localPlayer) then dxDrawText("A placa do seu veículo é: " .. myVehicle.plateText or "?", 400, 320, 80, 20) end end) addEvent("updateInfo", true) addEventHandler("updateInfo", resourceRoot, function(t) -- O nome dos atributos dentro de myVehicle poderia ser qualquer um, estou copiando apenas para ser mais rápido hehe myVehicle.owner = t.owner myVehicle.plateText = t.plateText end) -
O math.random que está dentro da função, sim, sempre irá ser gerado um novo (de 1 a 20). Já o math.random que executa a função setTimer, irá ser definido apenas uma vez (de 10 a 30 minutos), ou seja, se o número gerado for, por exemplo, 900000, o seu alerta irá SEMPRE executar a cada 15 minutos. Solução: function changeWeather() local weatherId = math.random(20) setWeather(weatherId) -- Quando essa função (changeWeather) ser executada, então chamaremos novamente a função (setTimerForChangeWeather) para setar o timer setTimerForChangeWeather() end function setTimerForChangeWeather() local ms = math.random(60 * 1000 * 10, 60 * 1000 * 30) setTimer(changeWeather, ms, 1) -- Irá executar apenas uma vez, mas a função setTimerForChangeWeather() sempre será chamada, então SEMPRE terá o que fazer end -- Script inicia setTimerForChangeWeather()
- 1 reply
-
- 1
-
Sim, você pode fazer isso, sem problema algum. Editei a minha outra resposta, leia por favor, apenas um conselho sobre o seu código.
-
Isso ocorre pois você precisa criar uma tabela para a tabela que indexa o jogador também. Dessa forma: local players = {} function startWork (source) print(getPlayerName(source)) -- Retorna o nick ou seja o source existe if not players[source] then players[source] = {} players[source]["rubble"] = 0 players[source]["rubbleRemoved"] = false players[source]["atWork"] = false end end Offtopic: percebo que você costuma não utilizar variáveis locais, o que deixa a desejar em questão de otimização (não é tanta diferença, mas boas práticas de programação devem estar em todos os códigos ?). No topo do seu código, defina todas as tabelas e variáveis como local. Ao decorrer do código, você poderá usar sem o local, pois uma vez definida dessa forma, sempre será local. Isso vale também para funções, laços de repetições e afins, sempre considere usar local para definir uma variável ou tabela dentro do escopo seja de função ou laço de repetição.