Elevador
Autor: NetoMalucao | Publicado: 2012-02-09T04:26:00-08:00


Elevador..::&nbsp;Elevador&nbsp;::..
Autor:&nbsp;Flatronez
Servidor&nbsp;Testado:&nbsp;TFS 0.3.6 Crying Damson
Descrição:&nbsp;É um elevador, onde o&nbsp;player&nbsp;pode subir/descer em uma área determinada.


Como Instalar

Arquivos:
Código:-- ELEVADOR by FLATRONEZ
-- SE POSTAR EM OUTROS LUGARES, COLOQUE OS CRÉDITOS



-- NÃO ALTERE O CÓDIGO ABAIXO --
function elevador(cid, msg, newPos, i, playerPos, pisoElev, param)
 local proxAnd = getTileThingByPos(newPos)
    if isInArray(pisoElev, proxAnd.itemid) and i &lt;= tonumber(param[2]) then
      doTeleportThing(cid, newPos, true)
        elseif proxAnd.itemid ~= pisoElev then
          doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, msg.fimLinha)
    end
    if i == tonumber(param[2]) then
      doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, msg.chegada)
    end
end
-- NÃO ALTERE O CÓDIGO ACIMA --
   
   
function onSay(cid, words, param)
 -- CONFIGURAÇÃO, ALTERE SOMENTE AQUI --
 local param = string.explode(param, " ") -- Não altere
 local pisoElev = { 406, 407 } -- IDs do piso do elevador
 local cmd = {
   sobe = "subir",
   desce = "descer"
 }
 local stId = 700
 local playerPos = getCreaturePosition(cid)
 local areaElev = { -- Área do elevador, deve ser uma área quadrada
   ini = {x= 38, y= 66},  -- Primeiro tile do elevador (acima e à direita)
   fim = {x= 39, y= 67} -- Último tile do elevador (abaixo e à esquerda)
 }
 local tempo = 600 -- Delay para subir/descer um andar
 local andares = {
   maxCima = 0, -- Valor da coordenada Z do andar máximo que se pode subir a partir do ground.
   maxBaixo = 7 -- Valor da coordenada Z do andar máximo que se pode descer a partir do ground.
 }
 local msg = { -- Mensagens que são exibidas para o player
   sobe = "Você irá subir em alguns instantes.",
   desce = "Você irá descer em alguns instantes.",
   fimLinha = "Fim da linha. O elevador não pode subir/descer mais.",
   chegada = "Pronto! Você chegou ao seu destino.",
   erro = { -- Mensagens de erro
     andInv = "O elevador não pode subir/descer a esse andar.",
     posErr = "Você não está em um elevador.",
     somNum = "Use somente números.",
     zero = "É impossível subir/descer 0 andares.",
     comInv = "Comando inválido. Para subir, use !elevador " .. cmd.sobe .. " N°. Para descer, use !elevador " .. cmd.desce .. " N°."
   } 
 }
 
 -- NÃO ALTERE O CÓDIGO ABAIXO SE NÃO SOUBER O QUE ESTÁ FAZENDO --
-- Subida
    if param ~= nil and param[1] == cmd.sobe and tonumber(param[2]) ~= nil and tonumber(param[2]) &gt; 0 and playerPos.z - tonumber(param[2]) &gt;= 0 and playerPos.x &gt;= areaElev.ini.x and playerPos.x &lt;= areaElev.fim.x and playerPos.y &gt;= areaElev.ini.y and playerPos.y &lt;= areaElev.fim.y then
      doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, msg.sobe)    
        for i = 1, tonumber(param[2]) do
          local playerPos = getCreaturePosition(cid)
          local newPos = {x= playerPos.x, y= playerPos.y, z= playerPos.z-i}
          addEvent(elevador, i * tempo, cid, msg, newPos, i, playerPos, pisoElev, param)
        end
-- Descida
    elseif param ~= nil and param[1] == cmd.desce and tonumber(param[2]) ~= nil and tonumber(param[2]) &gt; andares.maxCima and playerPos.z + tonumber(param[2]) &lt;= andares.maxBaixo and playerPos.x &gt;= areaElev.ini.x and playerPos.x &lt;= areaElev.fim.x and playerPos.y &gt;= areaElev.ini.y and playerPos.y &lt;= areaElev.fim.y then
      local i = 1
      doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, msg.desce)
      while i &lt;= tonumber(param[2]) do
        local newPos = {x= playerPos.x, y= playerPos.y, z= playerPos.z+i}
        addEvent(elevador, i * tempo, cid, msg, newPos, i, playerPos, pisoElev, param)
        i = i + 1
      end    
-- Tratamento de Erros
    elseif param == nil or table.find(cmd, param[1]) == nil then
      doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, msg.erro.comInv)
    elseif param ~= nil and tonumber(param[2]) == nil then
      doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, msg.erro.somNum)
    elseif playerPos.x &lt; areaElev.ini.x or playerPos.x &gt; areaElev.fim.x or playerPos.y &lt; areaElev.ini.y or playerPos.y &gt; areaElev.fim.y then
      doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, msg.erro.posErr)
    elseif param ~= nil and ((param[1] == cmd.sobe and playerPos.z - tonumber(param[2]) &lt; andares.maxCima) or (param[1] == cmd.desce and playerPos.z + tonumber(param[2]) &gt; andares.maxBaixo)) then
      doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, msg.erro.andInv)
    elseif param ~= nil and tonumber(param[2]) == 0 then
      doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, msg.erro.zero)
  end
  return true
end
Código:&lt;talkaction words="!elevador" access="0"  event="script" value="elevador.lua"/&gt;


Pegue o&nbsp;arquivo&nbsp;elevador.lua&nbsp;e o coloque na pasta talkActions/scripts.

Depois abra o arquivo talkActions.xml e adicione a tag.

Depois abra o arquivo&nbsp;elevador.lua&nbsp;e configure a área do elevador.