antiblock
https://arwen2.global/
  • Chatbox

    Did you check out our Discord? https://discord.gg/FFdvMjk9xA
    You don't have permission to chat.
    Load More
Sign in to follow this  
เ√ลη کคи†σร .

[Bases] Variáveis E Ciclos Em Lua (Quests)

18 posts in this topic

antiblock
diamwall

Não precisas de declarar uma variável com os loops for, ao fazeres for var já estás a declarar uma variável.Não sei se me fiz entender.

local i -- Isto é useless, é a isso que me refiro.for i=2,75,1 do	pc.give_exp2(pc.get_next_exp())	syschat("Subiste para nível "..i.."!")end
local t = {19,1,29,2,39,3,49,4}for i = 1, #t, 2 do	pc.give_item2(t[i], t[i+1])endlocal t = {19,29,39,49}for i = 1, #t do	pc.give_item2(t[i], 1)end

Share this post


Link to post
Share on other sites

Não precisas de declarar uma variável com os loops for, ao fazeres for var já estás a declarar uma variável.Não sei se me fiz entender.

local i -- Isto é useless, é a isso que me refiro.for i=2,75,1 do	pc.give_exp2(pc.get_next_exp())	syschat("Subiste para nível "..i.."!")end
local t = {19,1,29,2,39,3,49,4}for i = 1, #t, 2 do	pc.give_item2(t[i], t[i+1])endlocal t = {19,29,39,49}for i = 1, #t do	pc.give_item2(t[i], 1)end
Precisas sim, eu também pensava isso. Até o i começar a confundir todo quando usado por 300 pessoas ao mesmo tempo.Tens de definir a varíavel i como local para a variável ficar definida somente para ti.EDIT: Tens uma má metodologia de programação. Deverias de usar assim:local ifor i=19,49,10 dopc.give_item2(i, 1)end Edited by เ√ลη کคи†σร . (see edit history)

Share this post


Link to post
Share on other sites

Não precisas, eu pelo menos nunca usei. E se reparares até nas quests da ymir não têm a variável usada no loop for como local. :PEDIT:#t = table.getn

Share this post


Link to post
Share on other sites

Não precisas, eu pelo menos nunca usei. E se reparares até nas quests da ymir não têm a variável usada no loop for como local. :P

Eu aconselho-te a usares, eu próprio fiz o teste. Quando o resultado do 'i' for apresentado num jogador a sorte noutro jogador do mesmo core, tu vais perceber o que digo :)Eu não estou a dizer que estás errado, atenção! Assim também funciona xD Mas gera conflito, e esse conflito evita-se com o 'local i'PS: Nunca vi quests da ymir com isso, até nunca vi quest quase nenhuma da ymir, apaguei-as todas mal ganhei juízo. Edited by เ√ลη کคи†σร . (see edit history)

Share this post


Link to post
Share on other sites

Precisas sim, eu também pensava isso. Até o i começar a confundir todo quando usado por 300 pessoas ao mesmo tempo.

Tens de definir a varíavel i como local para a variável ficar definida somente para ti.

EDIT: Tens uma má metodologia de programação. Deverias de usar assim:

local i

for i=19,49,10 do

pc.give_item2(i, 1)

end

A ironia... Má metodologia de programação é criar variáveis não inicializadas.

"Até o i começar a confundir todo quando usado por 300 pessoas ao mesmo tempo." 

WTF? O "i" não se vai começar a confundir todo porque o valor vai ser guardado num CPU register e não onde lhe apetecer ao CPU... Podes criar a variável antes do loop, mas não há necessidade.

Share this post


Link to post
Share on other sites

A ironia... Má metodologia de programação é criar variáveis não inicializadas.

"Até o i começar a confundir todo quando usado por 300 pessoas ao mesmo tempo." 

WTF? O "i" não se vai começar a confundir todo porque o valor vai ser guardado num CPU register e não onde lhe apetecer ao CPU... Podes criar a variável antes do loop, mas não há necessidade.

Desculpa, eu inicializei uma variável local, enquanto vocês iniciam uma variável global que enquanto no jogador X o i é =1, e no jogador y vai no i=77, o X pode seguir logo para i=77 porque deteta o i do outro porque é uma variável global.

Em qualquer programação tens sempre de inicializar a variável. Mais em C, mas em Lua também é importante.

Não sejas rude, não penses que sabes mais do que alguém com experiencia desse erro.

EDIT: Que dissesses isso à minha eng. professora de programação C, que ela dava-te dois berros e punha-te expulso 4 horas O.o

Share this post


Link to post
Share on other sites

Bem, antes de mais peço desculpa se pareci rude, não era a minha intenção. Segundo, neste exemplo que tu deste:

local ilocal limite=100local intervalo=1for i=1,limite,intervalo do...end

"local i" é redundante... E esse caso que tu referes só aconteceria se houvesse uma variável global com o mesmo nome da usada no loop (diz-me qual é a lógica de usar uma variável desse género no namespace global...). Terceiro, ISTO -> "local i" é uma variável não inicializada, apesar de não afectar em runtime porque o compilador trata disso por ti :)Em último lugar:

... não penses que sabes mais do que alguém com experiencia desse erro.

Nunca em caso algum eu disse saber mais do que alguém, nem sei de onde vem essa agressividade toda, se não és capaz de aceitar uma crítica não descarregues em mim que eu não sou pai de ninguém.

Share this post


Link to post
Share on other sites

Bem, antes de mais peço desculpa se pareci rude, não era a minha intenção. Segundo, neste exemplo que tu deste:"local i" é redundante... E esse caso que tu referes só aconteceria se houvesse uma variável global com o mesmo nome da usada no loop (diz-me qual é a lógica de usar uma variável desse género no namespace global...). Terceiro, ISTO -> "local i" é uma variável não inicializada, apesar de não afectar em runtime porque o compilador trata disso por ti :)Em último lugar:Nunca em caso algum eu disse saber mais do que alguém, nem sei de onde vem essa agressividade toda, se não és capaz de aceitar uma crítica não descarregues em mim que eu não sou pai de ninguém.

Só te disse isso porque tu foste arrogante, queres dar críticas faz como o PACIFICADOR, usa a educação. Na verdade devias de inicializar sempre variáveis. Ao não inicializares, o for irá criar o i=1 como i sendo global, porque o local não foi definido. O compilador compila o que mandas, se mandas o for criar um i=1 não local, vai tornar-se global a seguir à primeira utilização.De qualquer maneira tenho teste de programação amanhã, pergunto à minha prof e ela esclarece-me. Se eu tiver errado peço desculpa de joelhos! Até lá, comprova que estou errado até conseguires que eu fique sem resposta.

Share this post


Link to post
Share on other sites

Já usei bastantes loops for, mais propriamente para quests de inicio.Já as testei com várias personagens ao mesmo tempo, inclusive.E nunca gerou conflito nenhum.Como diz o Gunner, podes, ou não, fazê-lo, embora eu não o faça. :b

Share this post


Link to post
Share on other sites

Já usei bastantes loops for, mais propriamente para quests de inicio.Já as testei com várias personagens ao mesmo tempo, inclusive.E nunca gerou conflito nenhum.Como diz o Gunner, podes, ou não, fazê-lo, embora eu não o faça. :b

Eu prefiro fazer, embora esteja correto das duas maneiras. Eu zelo pela segurança, e sendo eu a explicar em cima eu não vou mudar a minha metodologia :)Podes usar ou não o 'local i' , mas tens sempre aquela segurança extra.

Share this post


Link to post
Share on other sites

Bem, não sei até que ponto fui arrogante, mas parece-me que estás a confundir alguns conceitos e definições, certamente que a tua professora te dirá o mesmo.Ora bem, inicializar != declarar, inicializar uma variável é por exemplo, local varTest = 0, declarar é: local varTest, portanto "local i" não é uma inicialização! Inicializar significa atribuir-lhes um valor, isto não tem importância em .quest ou .lua porque para o compilador é indiferente, desde que não acedas a esse espaço de memória não inicializado.Segundo, e usando de novo o teu exemplo: 

local limite=100local intervalo=1for i=1,limite,intervalo do	...end
O facto de não dizeres explicitamente ao compilador que vais usar uma variável local com o nome "i", não implica que o for a vá criar no espaço global, isto não acontece até porque não faz sentido... Se tentares aceder a essa variável enquanto o loop está a ser executado sem a criar no scope actual, vais ter uma excepção levantada (algo como: tentativa de aceder a memória corrompida), isto se sequer passares pelo lexer, que não vai reconhecer o identifier (no scope actual!).Peço desculpa de novo se pareci arrogante, não era de todo a intenção, foi só uma forma descontraída de falar.

Share this post


Link to post
Share on other sites

Like if everyone knows lua.

v1 = 20 -> globallocal v2 = 1 -- local ao blocowhile condition dolocal v3 =v2*2 --> local to the while bodyprint(v1) --> mostra 20, 40 , 60i = i + 1 --> incrementa iend
Basicamente isto nada tem a ver com outros jogadores, um jogador tem a variável guardada em 4 bytes de memória e outro noutros 4 (Suponho que seja um Int32) Acho que esta ideia da tua parte é completamente ridícula. Se me fosses dizer que tu usas um lugar em memória onde declaras as coisas e acedes pelo offset seria uma coisa mas isto não pode gerar conflito de forma alguma, em runtime o pc sabe como lidar com as variáveis diferentes.
Ninguem quer saber de bits nem que variável seja. As pessoas querem eficiência, funcionalidade e segurança. Não querem saber se tem x bits e se seja um int32 ou um tinyint

Share this post


Link to post
Share on other sites

Bem, não sei até que ponto fui arrogante, mas parece-me que estás a confundir alguns conceitos e definições, certamente que a tua professora te dirá o mesmo.Ora bem, inicializar != declarar, inicializar uma variável é por exemplo, local varTest = 0, declarar é: local varTest, portanto "local i" não é uma inicialização! Inicializar significa atribuir-lhes um valor, isto não tem importância em .quest ou .lua porque para o compilador é indiferente, desde que não acedas a esse espaço de memória não inicializado.Segundo, e usando de novo o teu exemplo:

local limite=100local intervalo=1for i=1,limite,intervalo do	...end
O facto de não dizeres explicitamente ao compilador que vais usar uma variável local com o nome "i", não implica que o for a vá criar no espaço global, isto não acontece até porque não faz sentido... Se tentares aceder a essa variável enquanto o loop está a ser executado sem a criar no scope actual, vais ter uma excepção levantada (algo como: tentativa de aceder a memória corrompida), isto se sequer passares pelo lexer, que não vai reconhecer o identifier (no scope actual!).Peço desculpa de novo se pareci arrogante, não era de todo a intenção, foi só uma forma descontraída de falar.
Estás desculpado, também fui um bocado porque há sempre alguém no meio com a mania e pensei que irias ser mais um. Eu simplesmente declarei o i como local para o compilador ter a certeza que é uma variável local, devido a comigo não definir como local se nao definir antes de inicializar.Errei sim , troquei as palavras. Aí estavas certo. Espero que percebas o meu motivo de declarar antes.

Share this post


Link to post
Share on other sites

Spamm / Off topic apagado.

 

Cumprimentos.

 

 

Btw, em todas as quest que fiz com ciclos for (por exemplo) nunca declarei a variavel "i" ou o nome que tenha e nunca tive algum tipo de problema, logo concluo que não seja obrigado a declarar a variavel antes, mas cada um usa a sua maneira, desde que seja funcional claro.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this