Ir para conteúdo

Lordfire

Lenda
  • Total de itens

    2605
  • Registro em

  • Última visita

  • Dias Ganhos

    13

Posts postados por Lordfire

  1. 2000000000 coloca 4000000000

    function onAdvance(cid, skill, oldLevel, newLevel)
            if skill == SKILL__LEVEL then
                if (getCreatureMaxHealth(cid) > 2000000000) then
            setCreatureMaxHealth(cid, 2000000000)
            end
            if (getCreatureMaxMana(cid) > 2000000000) then
            setCreatureMaxMana(cid, 2000000000)
         end
         end
    return true
    end
    
    function onLogin(cid)
        if (getCreatureMaxHealth(cid) > 2000000000) then
        setCreatureMaxHealth(cid, 2000000000)
        end
        if (getCreatureMaxMana(cid) > 2000000000) then
        setCreatureMaxMana(cid, 2000000000)
        end
    return true
    end
    todos os creditos são do Incur .

    so to te explicando

     

    Não vai funcionar. Health é um int32 https://github.com/otland/forgottenserver/blob/master/src/creature.h

  2. Errado, muito muito errado. MySQL é um tipo de banco de dados que fica armazenado em um servidor, esse servidor recebe suas consultas/queries, executa e tal, independentemente do código do programa. SQLite é outro tipo de banco de dados, só que ao invés de usar servidor, ele usa um arquivo que o código do programa sabe lidar com. Pelo servidor, não faz diferença alguma, ambos podem sim ser colocados online sem problema algum. Inclusive os sites devem funcionar normalmente com SQLite.

  3. Iteradores são funções especiais criadas para iterar, ou seja, percorrer, listas, vetores (arrays), matrizes, tabelas ou o que quisermos. Nós criamos iteradores para usar na função for. Um exemplo de iterador que você já deve conhecer é o pairs. Vamos supor que eu tenha a seguinte tabela:

     

    k = {1, 2, 3, 4, 5}
    E eu queira iterar por todos eles imprimindo o seu quadrado. Como faríamos isso? Casualmente, o código seria este:

     

    for i = 1, 5 do
    	print(i ^ 2)
    end
    Mas e se eu quiser fazer isso várias vezes? Com uma lista que não segue um padrão? Então criamos um iterador, mas primeiro, vamos entender a estrutura de um em pseudocódigo Lua:

     

    function iterator(values)
    	local pos = 0 --posição do iterador na lista
    	return function()
    		pos = pos + 1
    		if values[pos] ~= nil then
    			return values[pos]
    		end
    		return nil
    	end
    end
    Perceba que eu não retorno um valor especifico ao chamar a função iterator(), eu retorno uma nova função. Essa função será chamada pelo for até que seu retorno seja nil, onde Lua assume que o iterador acabou. E como eu sei quando acaba? Simples, há uma variável (chamei, neste caso, de pos) que armazena a posição dentro do array values do próximo valor a ser retornado. A cada iteração, o valor aumenta em 1 dentro da função. Quando eu acessar um índice dentro do array que não existe, seu valor (values[pos]) será nil, portanto eu testo essa condição.

     

    Parece bastante complexo, mas vamos voltar ao exemplo do quadrado. Chamarei minha função iteradora de square:

     

    function square(numbers)
    	local pos = 0
    	return function()
    		pos = pos + 1
    		if values[pos] ~= nil then
    			return values[pos] ^ 2
    		end
    		return nil
    	end
    end
    A cada chamada da função de retorno, eu aumento a posição e retorno este elemento elevado ao quadrado. Então, usarei a função assim:

     

    for i in square(k) do
    	print(i)
    end
    Que funciona como o esperado:

     

    O que mais podemos fazer com iteradores? Podemos, por exemplo, bloquear uma palavra usando a função onTalk do xotservx:

     

    local palavra = "jujuba"
    
    function splitWords(phrase)
    	local pos = 0, words = phrase:gmatch("%w+")
    	return function()
    		pos = pos + 1
    		if words[pos] ~= nil then
    			return words[pos]
    		end
    		return nil
    	end
    end
    
    function onTalk(cid, type, text, position)
    	for w in splitWords(text) do
    		if w = palavra then
    			return false
    		end
    	end
    	return true
    end
    Claro que esse exemplo é bastante simplório, mas demonstra a utilidade dos iteradores. Neste caso, eu testo todas as palavras que o player falou para encontrar uma palavra especifica que eu defini. Podemos transformar isso tudo em um loop while, para você entender um pouco melhor:

     

    local words = splitWords(text)
    	while w = words() do
    		if w == nil then
    			break
    		end
    		if w = palavra then
    			return false
    		end
    	end
    end
    return true
    Usando o iterador, ganhamos organização no código e o controle do for. Espero que façam bom uso de iteradores para organizar seus códigos :)
  4. Usar while no lugar de for não é problema, mas o for foi criado justamente pra isso (iterar de x até y), aí faz a mesma coisa sem você precisar se preocupar com o iterador. Do mais foi só mania minha de DRY.

     

    Uma sugestão, faça seu script receber várias waves com delays diferentes, tipo assim:

    {
      name = "Dragons",
      waves = {
        {
          monsters = {"Dragon Hatchling", "Dragon Lord Hatchling"},
          maxMonsters = 15
        },
        {
          delay = 120,
          monsters = {"Dragon Hatchling", "Dragon Lord Hatchling", "Dragon"},
          maxMonsters = 18
        },
        {
          delay = 300,
          monsters = {"Dragon Hatchling", "Dragon Lord Hatchling", "Dragon", "Dragon Lord"},
          maxMonsters = 21
        },
        {
          delay = 600,
          monsters = {"Dragon Hatchling", "Dragon Lord Hatchling"},
          maxMonsters = 24
        },
      },
      boss = "Orshabaal",
      fromPos = {x=150, y=37, z=7},
      toPos = {x=157, y=42, z=7},
      dates = {"Thursday-15:00", "Saturday-22:12"},
      bossDelay = 900
    }
  5. Por que vocês usam table.insert quando não tem índice/é pra adicionar na última posição?

     

    Esse código

    playersInArea[#playersInArea + 1] = playerz.uid
    Tem uma performance ~20% superior pelos meus testes. É costume ou organização?

     

    Aliás, cara, crie uma variável chamada _player, mas não crie uma chamada playerz.

  • Quem Está Navegando   0 membros estão online

    • Nenhum usuário registrado visualizando esta página.
×
×
  • Criar Novo...