Ir para conteúdo

Sistema De Elevador


Posts Recomendados

..::Elevador ::..

 

Descrição: É um elevador, onde o player pode subir/descer em uma área determinada. Igual ao do Twd do quilante!




Como Instalar



-- 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 <= 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]) > 0 and playerPos.z - tonumber(param[2]) >= 0 and playerPos.x >= areaElev.ini.x and playerPos.x <= areaElev.fim.x and playerPos.y >= areaElev.ini.y and playerPos.y <= 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]) > andares.maxCima and playerPos.z + tonumber(param[2]) <= andares.maxBaixo and playerPos.x >= areaElev.ini.x and playerPos.x <= areaElev.fim.x and playerPos.y >= areaElev.ini.y and playerPos.y <= areaElev.fim.y then
local i = 1
doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, msg.desce)
while i <= 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 < areaElev.ini.x or playerPos.x > areaElev.fim.x or playerPos.y < areaElev.ini.y or playerPos.y > 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]) < andares.maxCima) or (param[1] == cmd.desce and playerPos.z + tonumber(param[2]) > 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

TAG:
<talkaction words="!elevador" access="0" event="script" value="elevador.lua"/>



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

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

Depois abra o arquivo elevador.lua e configure a área do elevador.
Editado por chateadoagr
Link para o comentário
Compartilhar em outros sites

×
×
  • Criar Novo...