Ir para conteúdo
Entre para seguir isso  
Conde2

Area Lib

Recommended Posts

Conde2    0
Conde2

Nome: Area LIB

Autor: Conde2 & Skyen Hasus

Servidor testado: TFS 0.3.1++++

Versão: 0.1

 

Já vi infinidades de seplls (Lixos) com areas sempre iguais, nada de randomicidade e totalmente sem graça !!!

Vendo isso eu decidi criar essas funções para que esses (Lixos) scripts ganhem um novo "ar".

Além de que esses scripts podem ser usado em outros casos e não só em spells xD

 

Antes de mais nada queria agradecer ao Skyen que me deu as dicas e me aguento no MSN.

Tomei a liberdade de por as Palavras de Skyen Hasus (Em rosa !!):

Quero manifestar que ele demorou um tempão pra fazer essa função enquanto eu fiz em miseros 40 segundos e eu ainda tive que ajudar rsrs.

E no final eu aprimorei a minha função baseando-se na dele !!!!!!!!!!!!!!!!!!! O CONDE2 É FODA !!!

Agora vamos ao script...

Em data/lib/data.lua adicione o seguinte código no final:

Ou em data/global.lua.

 

 

function getRandomArea(horizontal, vertical, incidence) -- By Conde2
  area = {}

        for posv = 1, vertical do
        table.insert(area,{})
        for posh = 1, horizontal do
            if incidence >= math.random(1, 100) then
             table.insert(area[posv], 1)
               else
              table.insert(area[posv], 0)
               end 
        end
    end


area[math.ceil(vertical/2)][math.ceil(horizontal/2)] = 3
return area
end

function getSquareArea(horizontal, vertical, bounds) -- By Skyen Hasus
 local area = {}
 local bounds = bounds or 1
   for posy = 1, vertical do
     table.insert(area,{})
       for posx = 1, horizontal do
           if posy > vertical-bounds or posy <= bounds or posx > horizontal-bounds or posx <= bounds then
             table.insert(area[posy], 1)
           else
             table.insert(area[posy], 0)
           end
       end
   end
 area[math.ceil(vertical/2)][math.ceil(horizontal/2)] = 3
 return area
end

[spoiler=Conde2 getSquareArea(size)]

function getSquareArea(size)
local size = size or 0

  local area = {}

        local vertical = 3+size
        local horizontal = 3+size

        for posv = 1, vertical do
        table.insert(area,{})
        for posh = 1, horizontal do
            if size == 0 then
             table.insert(area[posv], 1)

             elseif size == 1 then
              area = {
              {1, 1, 1, 1},
              {1, 0, 0, 1},
              {1, 0, 0, 1},
              {1, 1, 1, 1}
              }

              elseif posv == vertical then
             table.insert(area[posv], 1)

             elseif #area[1] < horizontal then
              table.insert(area[1], 1)

              elseif #area[posv] < 1 then
              table.insert(area[posv],1,1)
              table.insert(area[posv],horizontal,1)

              elseif #area[posv] < horizontal then
              table.insert(area[posv],0)

             end
         end
    end

 

 

 

Agora explicando:

A função getRandomArea(horizontal, vertical, incidence) ela cria uma area de spells randomicamente !!

E a posição do player vai ser sempre o centro da area.

 

Por exemplo:

 

getRandomArea(5, 5, 10) vai retornar isso:

{

{1, 0, 0, 0, 0},

{0, 0, 0, 0, 0},

{0, 0, 3, 0, 0},

{1, 1, 0, 0, 0},

{0, 0, 0, 1, 1}

}

 

# O tamanho da area na horizontal

# O tamanho da area na vertical

# Quantos % de chance tem de a area ficar mais "cheia"

 

 

getSquareArea(5, 5, 1) vai retornar isso:

{

{1, 1, 1, 1, 1},

{1, 0, 0, 0, 1},

{1, 0, 3, 0, 1},

{1, 0, 0, 0, 1},

{1, 1, 0, 1, 1}

}

 

 

# O tamanho da area na horizontal

# O tamanho da area na vertical

# Em vermelho é o tamanho da borda do Square !!

Para melhorar a compreensão ai vai uma Spell com area randomizada pela função !!

 

 

local combat = createCombatObject()
setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_ENERGYDAMAGE)
setCombatParam(combat, COMBAT_PARAM_EFFECT, 47)
setCombatFormula(combat, COMBAT_FORMULA_LEVELMAGIC, -1.8, 0, -1.4, 0)

-- Você pode usar tambem: 
-- getSquareArea(horizontal, vertical, bounds)

arr = getRandomArea(5, 5, 50)

local area = createCombatArea(arr)
setCombatArea(combat, area)

function onCastSpell(cid, var)
return doCombat(cid, combat, var)
end 

 

 

NÃO AUTORIZO A POSTAGEM DESSE SCRIPT EM QUALQUER OUTRO FORUM SEM MINHA AUTORIZAÇÃO !!!!!!!

Editado por Conde2

Compartilhar este post


Link para o post
Gpwjhlkdcf    21
Gpwjhlkdcf

Tópico Aprovado e Movido para Scripting > Scripts Prontos > Sistemas e Bibliotecas.

 

Padrão de Qualidade: OK

 

Parabéns, finalmente você conseguiu! :)

Quero manifestar que ele demorou um tempão pra fazer essa função enquanto eu fiz em miseros 40 segundos e eu ainda tive que ajudar rsrs.

Compartilhar este post


Link para o post
Mock    32
Mock

@conde

podia ter uma opção pra definir uma numero de areas :D

em fim cara ta otimo³

Compartilhar este post


Link para o post
morvy    0
morvy

Mto massa, da pra fazer uma magia de meteoros caindo do ceu, sem ficar nakela mesma area

Compartilhar este post


Link para o post
esau    0
esau

Otima função, da pra fazer agora essas magia foda sem prescisar repetir as areas

 

como chuva de meteoros²

 

boa conde2, tu e foda mesmo =P

Compartilhar este post


Link para o post
Dark Billie    0
Dark Billie

Pra fazer a chuva de meteoros pode também usar de base a spell apocalypse, que vem em vários OTServers.

 

Mas esse aí pode usar em tudo e é mais compacto.

Bem desenvolvido.

Compartilhar este post


Link para o post
Visitante
Este tópico está impedido de receber novos posts.
Entre para seguir isso  
  • Quem Está Navegando   0 membros estão online

    Nenhum usuário registrado visualizando esta página.

×