-
Posts
4,008 -
Joined
-
Last visited
-
Days Won
184
Everything posted by Lord Henry
-
Como dar dinheiro para todos os membros de uma equipe?
Lord Henry replied to Maaster's topic in Programação em Lua
Se não tem equipe, as zonas dela deveriam ser liberadas para evitar o Warning. -
O source é uma variável cujo valor depende diretamente do evento ativador da função. Por exemplo: Se sua função estiver sendo ativada por onPlayerLogin, então o source será o jogador que logou. Mas se a função for ativada por um onVehicleEnter, o source será o veículo que o jogador entrou e não o jogador em si. Ao usar a função setTimer, o source que antes tinha o valor do evento ativador da função passa a ter valor nulo. Por isso que não dá pra usar source dentro do setTimer, pois o valor dele será nulo dentro do setTimer. Para resolver isso, passamos o source por parâmetro do setTimer, colocando ele depois da quantidade de repetições do setTimer. setTimer (function (parametro) -- Parametro vai receber o valor que estiver após o 1 lá em baixo, que no caso é o valor de source. -- CODE end, 1000, 1, source) -- Source será o parâmetro 1 da função que será executada pelo timer, se quiser adicionar outros parâmetros, só ir declarando após o source e assim por diante.
-
Utilize o botão <> do fórum para postar códigos. Não cole direto no texto. Além disso, deixe o código indentado para ficar legível.
-
Sobre os parâmetros faltando no setTimer. Ele quis dizer que o Warning acontece pois dentro do setTimer o source deixa de existir, então vc precisa passar o source por parâmetro. Ou seja, para resolver os warnings, faça isso: addEventHandler ("onPlayerLogin", root, function (prevAcc, currAcc) -- Parâmetro estava errado, veja na wiki do onPlayerLogin. outputChatBox ("[#FF0000 GFB #000000]#FFFFFF Você logou com sucesso!", source, 0, 0, 0, true) -- Fora do setTimer, source ainda existe. setTimer (function (thePlayer) -- O valor de thePlayer foi definido lá em baixo, após a quantidade de repetições do timer. Ou seja, thePlayer = source. print ("ElementData 'gangue' = "..tostring (getElementData (thePlayer, "gangue"))) -- Mostra no chat o valor do elementData "gangue" do jogador. if getElementData (thePlayer, "gangue") then outputChatBox ("ativo!", thePlayer, 255, 51, 36, true) else -- Não é necessário usar "if not getElementData" pois ele só vai entrar aqui se a condição de cima não for atendida. outputChatBox ("desativado!", thePlayer, 255, 51, 36, true) local theTeam = getPlayerTeam (thePlayer) if theTeam then setPlayerTeam (thePlayer, nil) end end end, 1000, 1, source) -- source será o primeiro parâmetro da função. end)
-
Como dar dinheiro para todos os membros de uma equipe?
Lord Henry replied to Maaster's topic in Programação em Lua
A equipe não deveria sumir e sim apenas ficar vazia. Talvez exista algum outro script limpando as equipes do servidor quando elas ficam vazias. -
Então vc não está com o debugscript ativado. Ative-o com /debugscript 3
-
Cadê a parte da mensagem que deixei pra aparecer? Mande print do seu debug console.
-
Vou te mostrar o porquê de não estar funcionando. addEventHandler ("onPlayerLogin", root, function (prevAcc, currAcc) -- Parâmetro estava errado, veja na wiki do onPlayerLogin. outputChatBox ("[#FF0000 GFB #000000]#FFFFFF Você logou com sucesso!", source, 0, 0, 0, true) setTimer (function () print ("ElementData 'gangue' = "..tostring(getElementData(source,"gangue"))) -- Mostra no chat o valor do elementData "gangue" do jogador. if getElementData (source, "gangue") then outputChatBox ("ativo!", source, 255, 51, 36, true) else -- Não é necessário usar "if not getElementData" pois ele só vai entrar aqui se a condição de cima não for atendida. outputChatBox ("desativado!", source, 255, 51, 36, true) local theTeam = getPlayerTeam (source) if theTeam then setPlayerTeam (source, nil) end end end, 1000, 1) end)
-
Não estou vendo nenhuma data obtida pela conta do jogador no seu código.
-
Tópico fechado, visto que o problema já foi resolvido pelo próprio autor.
-
ElementDatas são temporárias e se perdem ao desconectar do servidor. Você deve salvar na conta do jogador se quiser que os dados sejam recuperados após o jogador se conectar novamente. setAccountData getAccountData
-
Como dar dinheiro para todos os membros de uma equipe?
Lord Henry replied to Maaster's topic in Programação em Lua
Utilize isso somente na hora que o jogador domina a zona. Depois no timer, vc usa a variável em vez de ficar atribuindo valor a ela. local Team = getPlayerTeam(element) -
Como dar dinheiro para todos os membros de uma equipe?
Lord Henry replied to Maaster's topic in Programação em Lua
Coloque a equipe numa variável pra não ficar usando getPlayerTeam toda hora. Dai quando outra equipe dominar a zona, muda a equipe que fica nessa variável para a nova equipe. -
Sim usa. Ainda mais por usar setTimer.
-
Sim, seria mais leve do que ElementDatas. Mas saiba que torna o sistema burlável e jogadores que não estão realmente na arena podem ser considerados apenas por estarem na dimensão 10. Você também pode adicionar o getElementInterior para considerar apenas jogadores que estão no interior 0 (exterior).
-
Depende do seu script. O valor que ele está setando nas elementDatas.
-
Se a elementData for verificada pelos outros jogadores (como policiais por exemplo), se não for sincronizado eles não vão saber a data do jogador que eles estão verificando a ficha. Então nem sempre é uma boa ideia desativar a sincronização. Mas em casos onde é usado somente pelo próprio jogador, basta você inserir um parâmetro false depois do valor do setElementData, desativando a sincronização. setElementData (thePlayer, "NomeData", valor, false) Utilizando tabelas, se for feita em um script server-side, já vai estar sincronizado com todos os jogadores pois todos tem acesso a mesma tabela. Além de poupar processamento.
-
ElementDatas consomem processamento para manter sincronizado com os outros jogadores. A não ser que você deixe configurado para não sincronizar.
-
Exemplo maroto de como seria construída a tabela: local tableMarota = {} -- Tabela vazia que será preenchida pelos jogadores e suas respectivas datas. Você pode fazer uma tabela separada por cada tipo ou então utilizar sub-tabelas dentro de uma tabela geral como esta. addCommandHandler ("preso", function (thePlayer, cmd) if (tableMarota[thePlayer]) then -- Se já existe este item na tabela, então: tableMarota[thePlayer] = nil -- Apaga este item da tabela. outputChatBox ("Você não está mais sendo considerado preso.", thePlayer) else -- Se não existe o item tableMarota[thePlayer] na tabela, então: tableMarota[thePlayer] = true -- Adiciona o item na tabela com valor true (poderia ser qualquer um exceto false e nil) outputChatBox ("Você agora está sendo considerado preso.", thePlayer) end end) Obs: Isso deve ser feito dentro do resource que usa essa data.
-
Daria pra fazer com tabelas usando o jogador como índice. Seria bem mais leve. A única coisa é que se reiniciar o resource, perde a data. E tem que ter certeza de remover a data se o jogador sair do servidor.
-
Essas elementDatas são temporárias? Ou vc salva elas quando os jogadores deslogam?
-
Jogadores tomam dano por fogo nativamente. Se não estiverem, é por algum resource blindando eles.
-
setPedAimTarget
-
Sim, pesa. Evite-o. Prefira tabelas.
-
SOCRRO NO BGO
Lord Henry replied to r4ndoom_'s topic in Ajudas relacionadas ao MTA:SA (Cliente/Servidor)
Solicite suporte a Staff do BGO. Não nos responsabilizamos pelos servidores.
